嵌入式文件系统镜像制作及烧写

2019-07-13 07:34发布

将rootfs和userdata两个目录分别制作为镜像文件进行烧写: 镜像文件对应文件系统类型的选择,采用: rootfs制作为rootfs.img镜像,采用的文件系统类型为cramfs,只读,用于保护根文件系统; userdata制作为userdata.img镜像,采用的文件系统类型为yaffs2,可读写; 配置linux内核,支持两种文件系统: cd  /opt/kernel make menuconfig  File Systems->   [*] Miscellaneous filesystems  ---> <*>Compressed ROM file system support (cramfs) //支持cramfs文件系统   File Systems->          [*] Miscellaneous filesystems  ---> <*>   YAFFS2 file system support //已经支持 保存退出 make zImage cp arch/arm/boot/zImage /tftpboot/ 重启开发板 cat /proc/filesystems //查看是否支持cramfsyaffs2 rootfsuserdata分别制作为cramfsyaffs2文件系统镜像: 目录            镜像文件              文件系统类型 rootfs        rootfs.img          cramfs userdata    userdata.img     yaffs2 rootfs.img镜像制作步骤: cd /opt/ mkfs.cramfs rootfs   rootfs.img cp rootfs.img /tftpboot userdata.img镜像制作步骤:ftp下载mkyaffs2image工具到虚拟机中: sudo cp  mkyaffs2image  /usr/sbin sudo chmod 777 /usr/sbin/mkyaffs2image cd /opt/project mkyaffs2image userdata userdata.img chmod 666 userdata.img cp userdata.img /tftpboot 至此四个软件包都准备就绪: u-boot.bin,zImage,rootfs.img,userdata.img 存放目录:/tftpboot nandflash分区规划,用于部署镜像文件: 0----------2M----------7M----------17M------------剩余   uboot     zImage   rootfs.img  userdata.img
注意:镜像文件大小要小于各个分区的大小!请确认!
修改nandflash的分区表
cd /opt/kernel vim drivers/mtd/nand/s3c_nand.c 找到分区表,修改如下分区表信息: struct mtd_partition s3c_partition_info[ ] = { //第一分区信息  {        .name           = "uboot", //分区的名称        .offset         = (0), //分区的起始地址        .size           = (SZ_1M*2), //分区的大小 }, //第二分区信息  {      .name           = "kernel",       .offset         = MTDPART_OFS_APPEND, //追加      .size           = (SZ_1M*5),  }, //第三分区信息  {          .name           = "rootfs",     //第一次写成大写了下面图片不对          .offset         = MTDPART_OFS_APPEND,           .size           = (SZ_1M*10),  }, //第四分区信息  {          .name           = "userdata",          .offset         =MTDPART_OFS_APPEND,           .size           = MTDPART_SIZ_FULL //剩余 } }; 保存退出 make zImage cp arch/arm/boot/zImage /tftpboot 重启开发板 cat /proc/mtd //查看分区表 ls /dev/mtd* -lh //查看字符设备文件和块设备文件 /dev/mtd0:第一个分区的字符设备文件 /dev/mtdblock0:第一个分区的块设备文件 将zImage,rootfs.img,userdata.img烧写到nand上: 烧写方法有两种,一种通过uboot,另一种通过mtd工具 利用uboot来进行烧写的步骤: 烧写zImage: tftp 50008000 zImage nand erase 200000 500000 nand write 50008000 200000 500000   烧写rootfs.img tftp 50008000 rootfs.img nand erase 700000 a00000 nand write 50008000 700000 a00000
烧写userdata.img tftp 50008000 userdata.img nand erase 1100000    nand write.yaffs 50008000 1100000 $filesize 或者 nand write.yaffs 50008000 1100000 $(filesize)
设置本地启动的参数信息:
setenv bootcmd nand read 50008000 200000 500000 ; bootm 50008000 setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs saveenv 重启开发板,看rootfs是否能挂接,所在第三块分区
验证根文件系统是否为只读: cd  / mkdir helloworld //看是否能创建目录  可以创建 手动挂接存放userdata数据的第四块分区到根文件系统home目录: 在开发板上执行: mount -t yaffs2 /dev/mtdblock3 /home  mount //看是否挂接成功 cd /home //进入第四块分区  ls //查看第四块分区的内容,是否有之前userdata目录的内容 .  /home/scripts/run.sh  //手动运行软件启动脚本,"."后跟一个空格 此时   led灯QT启动成功 自动挂接存放userdata数据的第四块分区到根文件系统home目录: vim /opt/rootfs/etc/init.d/rcS,在文件最后添加: mount -t yaffs2 /dev/mtdblock3 /home ifconfig eth0 192.168.1.110 ifcofig lo 127.0.0.1 保存退出
镜像包下载地址:http://linux.linuxidc.com/pub/2011/10/09/制作根文件系统镜像工具mkfs编译/
操作参考:http://www.linuxidc.com/Linux/2011-10/44887.htm http://www.embedu.org/Column/Column508.htm
启动信息显示: UBIFS: mounted UBI device 0, volume 0, name "rootfs" UBIFS: file system size:   126341120 bytes (123380 KiB, 120 MiB, 995 LEBs) UBIFS: journal size:       6348800 bytes (6200 KiB, 6 MiB, 50 LEBs) UBIFS: media format:       w4/r0 (latest is w4/r0) UBIFS: default compressor: lzo UBIFS: reserved for root:  4952683 bytes (4836 KiB) VFS: Mounted root (ubifs filesystem) on device 0:14. Freeing init memory: 148K