[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@:~/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/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值