1

我已经在我的 Zynq 板上安装了 Petalinux 2014.4,但是当我启动板子时没有安装 NAND 闪存。我想知道是否可以通过提取包来更改 rootfs.cpio,然后对 fstab 进行更改,从而使 cpio arhcive 恢复。如果是,那之后只运行 petalinux-build 就足够了吗?

谢谢 :)

4

3 回答 3

2

如果您有权访问 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 不熟悉,所以我不知道这个通用答案是否适合您的需求和期望。

于 2015-03-03T12:46:10.127 回答
2

使用 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

于 2015-11-06T07:31:53.560 回答
0

开发使用任何标准发行版时更方便。Petalinux 可用于创建内核、u-boot 文件。然后在 sd 卡上安装你喜欢的 Linux 并启动它。例如,您可以使用标准工具 apt 来安装软件包。

于 2018-08-21T15:04:46.737 回答