[Linux学习笔记]dd指令烧录镜像到SD卡失败的解决办法及原因

137 阅读2分钟

前言

最近笔者在学习Linux驱动开发,通过dd指令烧录u-boot镜像到sd卡时,发现无法将镜像成功烧录至SD卡,在解决问题后在此记录。

烧录失败现象

首先通过ls指令查看/dev目录下的设备 QQ截图20230109184047.png

执行dd指令烧录u-boot到SD卡时终端打印的信息 QQ截图20230109184135.png 可以看到烧录速度达到了388MB/s,且烧录完毕后将SD卡插至开发板运行,发现开发板串口并无输出信息,说明SD卡烧录失败。以下就来分析失败的原因:

正常挂载SD卡的情况

正常情况下,我们将SD卡通过虚拟机接入Ubuntu系统并用ls命令查看/dev下的设备,需要指明的是,sda为虚拟硬盘,为虚拟机安装系统时所默认创建的;sdb为我从外部通过虚拟机接入Ubuntu的SD卡设备。从图中我可以看到,它们的文件类型均为'b',这个'b'代表了块设备,而linux中块设备包括但不限于:硬盘/软盘/CD-ROM驱动器/闪存等一系列的存储设备,故SD卡自然而然的也属于块设备的一种。故当SD卡接入Ubuntu后,此处显示为‘b’说明SD卡被正常挂载,且其下有一个分区叫做sdb1。 QQ截图20230109181300.png

不正常挂载SD卡的情况

而在不正常情况下,(注意:我此时并未将SD卡通过虚拟机挂载到Ubuntu中),通过ls命令查看/dev下的设备,可以看到/dev下多出了一个名为/dev/sdb的设备,且其文件类型为‘-’,代表其为普通文件,且Ubuntu已经很醒目地将其去掉了高亮颜色。说明此文件并非一个块文件。 QQ截图20230109182022.png

原因

那么为什么会产生这样一个奇怪的/dev/sdb的文件呢?原因在于先前在SD卡没有接入Ubuntu的时,就执行了dd指令,从而生成了假的设备盘符遗留在系统中。

解决办法

通过rm指令删除该虚假设备盘符,并重新插入SD卡至Ubuntu

$ sudo rm /dev/sdb

QQ截图20230109185341.png

之后就可以重新通过dd指令烧录镜像到sd卡了