最近需要将板载 rootfs 镜像中的某个可执行文件提取到电脑上。利用 SD 卡可以做到。
下面的命令对 EMMC 也适用
主要思路是在 rootfs 起来之后通过 mount 命令去挂载 SD 卡的某分区到指定位置,然后复制需要的文件到这个指定位置。再使用 umount 命令解挂 SD 卡。这样,需要的东西就在 SD 卡里面了。
在挂载过程中,遇到很多问题,总结步骤如下:
1:确保 SD 卡插上后能识别,也就是终端有打印,否则,可能是硬件原因,也有可能是 kernel 中没使能 SOC 的 SDIO 控制器相关的设备驱动代码
2:用 fdisk -l 命令去查看设备,看有无 SD 卡分区,因为后面需要用 mount 命令去挂载指定 SD 卡的指定分区
3:若无 SD 卡分区,则使用 fdisk /dev/sd卡节点名 去创建 SD 卡分区,相关使用命令可以按 m 查看说明。一般使用命令及顺序如下:
- fdisk /dev/sd卡节点名
- d :删除指定分区
- o:覆盖并新建 MBR 分区表
- n:新建分区
- p:新建主分区,后续根据提示指定扇区号。p命令也可用来查询分区信息
- 设置开始及结束分区的扇区号。(使用 u 命令可以切换显示单位)
- w:执行分区写入动作。完成后会自动退出。
4:格式化分区,我在实验中不格式化会出现 mount 挂不上的问题。并不表示一定要有这一步
使用 mkfs 命令 ,常用格式化为两种格式
1:FAT 格式,这样我们插在windows 的电脑上也可识别
2:EXT 格式,一般 rootfs 存放在 MMC 设备的镜像为此格式,如果要使用 SD 卡去存放 rootfs, 就将分区格式成 EXT 格式就好。
mkfs 命令使用格式如下:
mkfs.vfat /dev/xxx 或 mkfs.ext2/3/4 /dev/xxx
注意,xxx 为 SD 卡指定分区
5:分区挂载
使用如下命令即可将 SD 卡指定分区挂载到 linux 特定目录:
mkdir -p /mnt/filename
mount /dev/设备分区节点名 /mnt/filename
由于 FAT 和 EXT 都是传统的文件系统,所以执行 mount 命令是不需要使用 “-t” 选项来指定文件系统类型的。
6:分区解挂
使用 umount /mnt/filename 即可,如果不解挂,那么放入分区中的内容会丢失。