由于项目需要,在系统启动后需要插入一些驱动程序以及运行一些应用程序。这就需要将所要执行的文件打包到根文件系统中,以便系统启动后可以运行。
一般我们在目录Hi3559AV100_SDK_V2.0.3.0/package/osdrv/中完整的编译了整个osdrv的情况下,yaffs2文件系统的编译工具mkyaffs2image100以及使用busybox制作的跟文件系统都应该是编译好了的,存放在目录:
Hi3559AV100_SDK_V2.0.3.0/package/osdrv/tools/pc/mkyaffs2image/mkyaffs2image
Hi3559AV100_SDK_V2.0.3.0/package/osdrv/pub
如果没有现有编译好的rootfs的镜像打包程序以及做好的rootfs,就必须先编译rootfs的镜像打包程序,以及完成rootfs的制作。
第一步在我们的开发环境中安装相对应的rootfs的打包命令,好在海思SDK中提供了它所支持的常用文件系统的镜像打包工具,在路径
Hi3559AV100_SDK_V2.0.3.0/package/osdrv/tools/pc/
我所使用的是nand flash,所以使用的是yaffs2跟文件系统。过程如下:
$cd Hi3559AV100_SDK_V2.0.3.0/package/osdrv/tools/pc/mkyaffs2image/mkyaffs2image
$sudo cp mkyaffs2image100 /usr/bin/
$sudo chmod 777 /usr/bin/mkyaffs2image100
可以直接在终端敲命令mkyaffs2image100得到如下的帮助信息:
自此yaffs2的编译工具就安装好了。
第二部到我们制作好的文件系统的目录下Hi3559AV100_SDK_V2.0.3.0/package/osdrv/pub,将所需要的文件放置于对应的目录,然后执行下面的命令
$ mkyaffs2image100 ./rootfs_glibc_multi-core_arm64 rootfs_hi3559av100_2k_24bit.yaffs2 1 4
后面就是根据新打包好的rootfs的大小,下载rootfs到单板上,并且设置相对应的env。
由于我这里的rootfs的大小:
-rw------- 1 root root 74229888 10月 8 14:47 rootfs_hi3559av100_2k_24bit.yaffs2
所以rootfs分配了80M的大小:0x5000000
烧写文件系统:
mw.b 0x44000000 0xff 0x5000000
tftp 0x44000000 rootfs_hi3559av100_2k_24bit.yaffs2
nand erase 0xA00000 0x5000000
nand write.yaffs 0x44000000 0xA00000 0x46ca880//0x46ca880实际的文件大小74229888
设置启动参数:
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=yaffs2 mtdparts=hinand:1M(boot),9M(kernel),80M(rootfs)'//注意rootfs分配的是80M
setenv bootcmd 'nand read 0x44000000 0x100000 0x900000;bootm 0x44000000'
saveenv
重启系统:
reset