我已经在我的 Zynq 板上安装了 Petalinux 2014.4,但是当我启动板子时没有安装 NAND 闪存。我想知道是否可以通过提取包来更改 rootfs.cpio,然后对 fstab 进行更改,从而使 cpio arhcive 恢复。如果是,那之后只运行 petalinux-build 就足够了吗?
谢谢 :)
如果您有权访问 ramdisk 映像文件,那么可以,您可以修改其内容。我假设您的图像文件是使用 gzip 压缩的。此外,我假设您使用 U-Boot 并且您的压缩 ramdisk 映像具有 U-Boot 前导码。
首先,您需要剥离 U-Boot 标头:
dd bs=64 skip=1 if=uramdisk.cpio.gz of=ramdisk.cpio.gz
接下来,我们解压:
gunzip ramdisk.cpio.gz
最后我们提取 CPIO 存档:
mkdir ramdisk && cd ramdisk
cpio -i -F ../ramdisk.cpio
要么以 root 身份执行后一个命令,要么在再次归档之前将文件所有权更改回 root。这是您的 init 程序启动所必需的。修改后,您可以再次创建图像文件:
find . | cpio -o -H newc | gzip -9 > ../ramdisk_new.cpio.gz
mkimage -A arm -T ramdisk -C gzip -d ramdisk_new.cpio.gz uramdisk.image.gz
请注意,mkimage 工具是 U-Boot 的一部分,位于工具目录中的相应源中。
我对 PetaLinux 不熟悉,所以我不知道这个通用答案是否适合您的需求和期望。
使用 cpio 包工具是可以的。但每次更新 rootfs 时都需要这样做。
您也可以使用 PetaLinux 内置工具来完成此操作。设置后不需要额外的步骤。
创建应用程序:
petalinux-create -t apps -n fstab_mount_sd --template install --enable
在创建的components/apps/fstab_mount_sd
目录中,修改Makefile
以将内容附加到当前 fstab 文件或将原始 fstab 替换为您的 fstab 文件版本。
以下是 fstab_mount_sd Makefile 的示例:
install:
$(TARGETINST) -a "/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0" /etc/fstab
$(TARGETINST) -a
表示将以下文本附加到目标文件。
注意:makefile 中的命令应该以 Tab 开头。$(TARGETINST)
用Tab 替换前面代码块中的空格。
您可以$(TARGETINST)
通过转到 PetaLinux 安装目录并运行来阅读命令的帮助components/rootfs/targetroot-inst.sh
开发使用任何标准发行版时更方便。Petalinux 可用于创建内核、u-boot 文件。然后在 sd 卡上安装你喜欢的 Linux 并启动它。例如,您可以使用标准工具 apt 来安装软件包。