工程实例
1、重新规划FLASH分区如下:
2、重新修改内核
根据“nand flash的布局图”,修改内核nandflash分区请修改内核源代码的vi arch/arm/ plat-s3c24xx/common-smdk.c
重新编译内核,后续用新的内核做实验
$ cp arch/arm/boot/uImage /tftpboot/uImage -f
3、烧录内核
OpenJTAG> tftp 30800000 uImage (通过tftp协议将/tftpboot中的uImage下载到内存的3080000处)
OpenJTAG> nand erase 60000 200000 (在Nand Flash的0x60000处开始擦出一块大小为200000(2MB)的空间准备放kernel)
OpenJTAG> nand write 30800000 60000 200000 (将uImage烧录到Nand Flash的0x60000处)
OpenJTAG> setenv bootcmd nand read 30800000 60000 200000 \;bootm 30800000 (设置u_boot环境参数)
OpenJTAG> save
4、重新整理根文件系统:
$ cd /opt/rootfs
$ cp -a etc etc_defaults (etc_defaults做为以后恢复出厂设置的缺省配置信息)
$ mkdir ../prepare
$ cp -a data etc ../prepare (拷贝data、etc目录以备做成 .jffs2 的文件系统)
在../prepare/data 目录里面放一些文件文件或者其他数据文件(模拟实际产品中生成的用户数据,但rootfs/data目录我们只是用来挂载的目录,里面不要放数据)
$ cd ../prepare
$ mkfs.jffs2 -r ./data -o mydata.jffs2 -e 0x20000 -n (注意: -e 0x20000: 表示擦除FLASH的扇区大小为128KB[这个参数一定要参考NAND FLASH芯片手册],我们这里参考的是K9F2G08U0B手册)
$ mkfs.jffs2 -r ./etc -o myetc.jffs2 -e 0x20000 -n
$ cp mydata.jffs2 myetc.jffs2 /tftpboot
在/opt/rootfs/etc/rc.d/rc.local中添加data,etc的挂载命令如下:
重新进到rootfs的上一级目录,重新制作根文件系统(CRAMFS格式)
$ cd /opt
$ mkfs.cramfs rootfs myrootfs.cramfs
$ cp myrootfs.cramfs /tftpboot
重新在UBOOT中烧录根文件系统并烧录data,etc分区
烧录根文件系统(myrootfs.cramfs)
OpenJTAG> tftp 30100000 myrootfs.cramfs
OpenJTAG> nand erase 260000 800000
OpenJTAG> nand write.cramfs 30100000 260000 400000
烧录ETC分区:
OpenJTAG> tftp 30500000 myetc.jffs2
OpenJTAG> nand erase a60000 100000
OpenJTAG> nand write 30500000 b60000 20000
烧录data分区:
OpenJTAG> tftp 30600000 mydata.jffs2
OpenJTAG> nand erase b60000 4a0000
OpenJTAG> nand write.jffs2 30600000 b60000 20000
再次确认一下uboot的参数:
重新启动开发板,正常情况下,系统就登录进去了,通过df命令可看到,系统按照我们的分区进行挂载了
很遗憾,一直没有得到预期的结果
就是我们自己构建的两个文件系统myetc.jffs2、mydata.jffs2没有挂载上...