ZYNQ配置时默认为将内核镜像image,设备树dtb,rootfs打包到image.ub文件中,启动时先读取BOOT.BIN启动uboot,再读取image.ub到0x2000000地址,并bootm 0x2000000启动内核挂载根文件系统。
fatload mmc 0:1 0x2000000 image.ub
bootm 0x2000000
重新配置编译
这些指令可以通过bootcmd设置。
此时挂载的根文件系统无法直接修改,只能重新配置修改源程序重新生成rootfs并打包到image.ub中。
如果想要设置程序自启动,就需要在rootfs系统中修改启动文件,而不是打包在一起。
对工程重新配置 petalinux-config
Subsystem AUTO Hardware Settings —>
Advanced bootable images storage Settings —>
dtb image settings —>
image storage media (primary sd) —> //选择sd或者ext4
Image Packaging Configuration —>
Root filesystem type (SD card) //选择sd
(/dev/mmcblk0p2) Device node of SD device //device node mmcblk0p2
DTG Settings —>
[·]generate boot args automatically //使能
[·] enable kernel earlyprintk //使能
console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait //bootargs
重新编译 petalinux-build
生成的image.ub 不包括rootfs,
可以将rootfs单独解压到SD卡的EXT4 分区
sudo tar -xzf /opt/pkg/petalinux/2018.2/plnx/images/linux/rootfs.tar.gz -C /media/xxx/ROOTFS/
配置u-boot指令
将BOOT.BIN和zimage 、system.dtb 或 将BOOT.BIN 和 image.ub拷贝到SD卡fat32分区,
此时bootargs默认从mmcblk0p2挂载rootfs,
启动:
fatload mmc 0:1 2000000 zImage
fatload mmc 0:1 4000000 system.dtb
bootz 2000000 - 4000000
或者
fatload mmc 0:1 2000000 image.ub
bootm 2000000
也可以设置bootcmd和default_bootcmd
setenv default_bootcmd 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM...&& fatload mmc 0:1 2000000 zImage && fatload mmc 0:1 4000000 system.dtb && bootz 2000000 - 4000000; fi'
setenv default_bootcmd 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM...&& fatload mmc 0:1 2000000 image.ub && bootm 2000000; fi'
修改rootfs
成功启动后,编写自己的可执行文件,可以自己选定位置。
cd /home
touch mytest
vi mytest
#!/bin/sh
echo "Hello petalinux"
给可执行权限,chmod 777 mytest
cd /etc/rc5.d
ln -s /home/mytest S90mytest 创立软链接,S90是启动顺序,重新上电后将自动执行mytest。
ZYNQ MPSOC
当选用ZYNQ MPSOC时,配置过程一样,只是内核镜像为Image,启动用booti
fatload mmc 0:1 2000000 Image
fatload mmc 0:1 4000000 system.dtb
booti 2000000 - 4000000
如果挂载rootfs时报错,SD卡为(ro)只读
mmcblk0: mmc0:0001 SD 58.2 GiB (ro)
…
VFS: Cannot open root device “mmcblk0p2” or unknown-block(179,2): error -30
…
VFS: Unable to mount root fs on unknown-block(179,2)
此时可能是硬件问题,可以修改bootargs,去掉 rw ,修改根文件系统可以在虚拟机上进行。
setenv bootargs ‘earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 rootwait’