因为emmc挂载的时候出现以下错误,由于官方ramdisk.image是没有安装e2fsck工具的,所以需要在官方的工具上安装e2fsck工具,用于修复emmc
一:从xilinx下载arm_ramdisk.image.gz,并下载 e2fsck-static_1.47.2-3+b1_armhf.deb
Build and Modify a Rootfs - Xilinx Wiki - Confluence
Debian -- 软件包下载地址选择 -- e2fsck-static_1.47.2-3+b1_armhf.debDebian -- 软件包下载地址选择 -- e2fsck-static_1.47.2-3+b1_armhf.deb
e2fsck-static_1.47.2-3+b1_armhf.deb 文件是e2fsck的静态工具(e2fsck-static),可以免安装即可以使用
将下载的两个文件放到ramdisk目录。
二:我们首先先把e2fsck-static_1.47.2-3+b1_armhf.deb解压出来提取e2fsck-static,如下操作
ar -x e2fsck-static_1.47.2-3+b1_armhf.deb
解压后,目录下会存在以下三个文件,e2fsck-static就在data.tar.xz里面
debian.banary
data.tar.xz
control.tar.xz
执行tar解压,解压后出现usr,e2fsck.static 存在usr/sbin下
三:由于官方ramdisk默认空间只有16M,为安装工具需要做扩容
扩容ramdisk
#首先将arm_ramdisk.image.gz备份并解压:
cp arm_ramdisk.image.gz ramdisk.image.gz
gunzip ramdisk.image.gz #解压后就会出现ramdisk.image
# 计算新增容量:假设目标大小为40MB,原大小为16MB,需新增24MB
# bs=1M:块大小1MB;seek=16:跳过前16MB(原大小);count=24:新增24MB空白数据
dd if=/dev/zero of=ramdisk_image bs=1M seek=16 count=24 conv=notrunc
#if=/dev/zero:输入源为空白数据(填充 0)。
#conv=notrunc:确保不截断原有数据(关键参数,否则会清空镜像)
e2fsck -f ramdisk_image # -f:强制检查(即使文件系统看似正常)
resize2fs ramdisk_image
# 示例输出:Resizing the filesystem on ramdisk_image to 8192 (4k) blocks.
# 说明:将文件系统扩展到整个ramdisk分配的空间
#将ramdisk 挂载到目录tmp_mnt
mkdir tmp_mnt
sudo mount -o loop ramdisk.image tmp_mnt/
执行上述的命令后,ramdisk已经挂载到tmp_mnt下,可以进入tmp_mnt直接操作ramdisk内容
四:拷贝e2fsck.static到ramdisk的usr/sbin
#再将e2fsck.static拷贝到挂载的目录的usr/sbin下
sudo cp usr/sbin/e2fsck.static tmp_mnt/usr/sbin
五:解除挂载并重新打包,使用mkimage加上uboot头信息,既可以用于zynq ramdisk使用
sudo umount tmp_mnt/
chmod u+rwx ramdisk.image
#然后重新打包
gzip ramdisk.image
mkimage -A arm -O linux ramdisk -C gzip -d ramdisk_image.gz uramdisk.image.gz
六:烧录制作好的uramdisk.image.gz到开发板,由于kernel 分配的ramdisk空间是16M的,因此需要修改一下环境参数,如下:
#烧录到系统中,需要将uboot中的ramdisk_size增大。如下
setenv bootargs "console=ttyPS0,115200 root=/dev/ram0 rw ramdisk_size=262144" #扩大ram支持容量大小
启动ramdisk后,确保根文件系统未挂载,执行修复以下指令修复emmc
e2fsck.static -fy /dev/mmcblk0p1
成功修复后,再次挂载和使用emmc就不会出现上述的报错了,对于安装其他软件一样这个套路,下载xx_static即可以。