修改 rootfs (petalinux on zynq)
Do modification to rootfs (petalinux on zynq)
我已经在我的 Zynq 开发板上安装了 Petalinux 2014.4,但是当我启动开发板时,NAND 闪存没有安装。我想知道是否可以通过提取包来更改 rootfs.cpio,然后对 fstab 进行更改,从而恢复 cpio arhcive。如果是,那么仅 运行 petalinux-build 就足够了吗?
谢谢:)
如果您有权访问 ramdisk 映像文件,那么是的,您可以修改其内容。我假设您的图像文件是使用 gzip 压缩的。此外,我假设您使用 U-Boot 并且您的压缩 ramdisk 映像具有 U-Boot 序言。
首先你需要剥离 U-Boot header:
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.
您可以进入PetaLinux安装目录和运行 components/rootfs/targetroot-inst.sh
阅读$(TARGETINST)
命令的帮助
开发使用任何标准发行版时更方便。
Petalinux 可用于创建内核、u-boot 文件。
然后在sd卡上安装一个你喜欢的Linux然后开机。
例如,您可以使用标准工具 apt 来安装软件包。
我已经在我的 Zynq 开发板上安装了 Petalinux 2014.4,但是当我启动开发板时,NAND 闪存没有安装。我想知道是否可以通过提取包来更改 rootfs.cpio,然后对 fstab 进行更改,从而恢复 cpio arhcive。如果是,那么仅 运行 petalinux-build 就足够了吗?
谢谢:)
如果您有权访问 ramdisk 映像文件,那么是的,您可以修改其内容。我假设您的图像文件是使用 gzip 压缩的。此外,我假设您使用 U-Boot 并且您的压缩 ramdisk 映像具有 U-Boot 序言。
首先你需要剥离 U-Boot header:
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.
您可以进入PetaLinux安装目录和运行 components/rootfs/targetroot-inst.sh
$(TARGETINST)
命令的帮助
开发使用任何标准发行版时更方便。 Petalinux 可用于创建内核、u-boot 文件。 然后在sd卡上安装一个你喜欢的Linux然后开机。 例如,您可以使用标准工具 apt 来安装软件包。