前言
最近笔者在学习Linux驱动开发,通过dd指令烧录u-boot镜像到sd卡时,发现无法将镜像成功烧录至SD卡,在解决问题后在此记录。
烧录失败现象
首先通过ls指令查看/dev目录下的设备
执行dd指令烧录u-boot到SD卡时终端打印的信息
可以看到烧录速度达到了388MB/s,且烧录完毕后将SD卡插至开发板运行,发现开发板串口并无输出信息,说明SD卡烧录失败。以下就来分析失败的原因:
正常挂载SD卡的情况
正常情况下,我们将SD卡通过虚拟机接入Ubuntu系统并用ls命令查看/dev下的设备,需要指明的是,sda为虚拟硬盘,为虚拟机安装系统时所默认创建的;sdb为我从外部通过虚拟机接入Ubuntu的SD卡设备。从图中我可以看到,它们的文件类型均为'b',这个'b'代表了块设备,而linux中块设备包括但不限于:硬盘/软盘/CD-ROM驱动器/闪存等一系列的存储设备,故SD卡自然而然的也属于块设备的一种。故当SD卡接入Ubuntu后,此处显示为‘b’说明SD卡被正常挂载,且其下有一个分区叫做sdb1。
不正常挂载SD卡的情况
而在不正常情况下,(注意:我此时并未将SD卡通过虚拟机挂载到Ubuntu中),通过ls命令查看/dev下的设备,可以看到/dev下多出了一个名为/dev/sdb的设备,且其文件类型为‘-’,代表其为普通文件,且Ubuntu已经很醒目地将其去掉了高亮颜色。说明此文件并非一个块文件。
原因
那么为什么会产生这样一个奇怪的/dev/sdb的文件呢?原因在于先前在SD卡没有接入Ubuntu的时,就执行了dd指令,从而生成了假的设备盘符遗留在系统中。
解决办法
通过rm指令删除该虚假设备盘符,并重新插入SD卡至Ubuntu
$ sudo rm /dev/sdb
之后就可以重新通过dd指令烧录镜像到sd卡了