欢迎光临
我们一直在努力

[IMX6DL]dd命令刷u-boot.bin到sd卡失败解决方法

Platform: IMX6DL
OS:
Android
4.4

Kernel branch: 3.0.35

现象:
使用飞思卡尔自带烧写fsl-sdcard-partition.sh以及
ubuntu自带dd命令烧写u-boot.bin到sd卡,放到板子上会无法开机。

之前使用1GB内存的时候偶尔会出现此问题,但是换成2GB就成了100%。

调试过程:
具体原因没找到,但是dd之后,有去抓sd的从1k开始的1M数据(u-boot.bin从1k开始
的位置存放,大小大概500k),发现boot.img会覆盖掉u-boot.bin存放区域:

烧写脚本的流程是先格式化,然后顺序执行如下命令:
sudo dd if=u-boot.bin of=/dev/sdb bs=1024 skip=1 seek=1; sync
sudo dd if=boot.img of=/dev/sdb1; sync

也就是说boot.img被写到/dev/sdb开始的位置,不知道是ubuntu的分区,还是文件系统或者是
dd命令的bug,没这么多时间去追,所以只能通过其他方法来解决。

本来想通过dd整张卡来实现,也就是:
 dd正常sd的image到PC上,然后再用dd将整个文件dd到新的sd卡上,但是项目使用的
sd卡大小不一致,由于分区表信息不一致,导致此方法不可行。

另外,在调试的时候有发现,在分区之后,重新将sd卡热插拔一下之后再dd就不会有问题。
也许是ubuntu重新读取分区之后就正确了吧,谁知道呢!那么就想办法模拟u盘热插拔,
中间人工插拔一次多尴尬。。。

事实上我在/sys/bus/usb下没找到热插拔u盘的实现方法,只有有remove和reset,
有谁找到麻烦请告知下。

解决方法:
可喜的是上一级的hub可以控制电源的开关,关了hub,那么其下面对应的u盘也将无效!
因此我们只要找到u盘对应的hub就可以了!可以通过lsusb -t完成。
[kris@ecovacs:~/Downloads/v1.0.10-20160715]$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 480M
    |__ Port 3: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8188eu, 480M
    |__ Port 4: Dev 3, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
    |__ Port 5: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 6: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 9: Dev 48, If 0, Class=Mass Storage, Driver=usb-storage, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M

Port 9: Dev 48, If 0, Class=Mass Storage, Driver=usb-storage, 480M
这个是我们的u盘,很明显,它挂在hub 3上。

然后就是我们要的热插拔方法了:
unplug:
echo "${hub_num}-0:1.0" > /sys/bus/usb/drivers/hub/unbind
plug:
echo "${hub_num}-0:1.0" > /sys/bus/usb/drivers/hub/bind

注意: 此命令需要root用户才可执行。

参考:
http://lwn.net/Articles/143397/
http://loginroot.com/power-off-and-on-usb-device-in-linux-ubuntu/
https://www.barneyparker.com/linux-usb-device-power-cycling-form-the-command-line/

该文章由WP-AutoPost插件自动采集发布

原文地址:http://blog.csdn.net/kris_fei/article/details/51985061

未经允许不得转载:SRE空间 » [IMX6DL]dd命令刷u-boot.bin到sd卡失败解决方法

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

oracle

联系我们联系我们