http://ansondeng.blog.163.com/blog/static/182682482201212092338857/
1. 配置编译一个符合要求的内核
首先,IDE驱动和flash驱动有冲突必须disable,路径为:
Device drivers --> ATA/ATAPI/MFM/RLL support à ATA/ATAPI/MFM/RLL support
然后,使能flash驱动,nor路径:
Device drivers --> memory technology devices à RAM/ROM/Flash chip drivers àsupport for AMD
Nand路径:
Device drivers --> memory technology devices à NAND Flash device driver àNAND device support
最后,使能支持jffs2,路径:
File system à miscellaneous filesysytems à Journalling flash file system v2(JFSS2) support
具体配置信息:
#CONFIG_IDE is not set
CONFIG_MTD=y
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_CFI=y
CONFIG_MTD_GEN_PROBE=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_UTIL=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_START=0x8000000
CONFIG_MTD_PHYSMAP_LEN=0
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
CONFIG_MTD=y
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_DAVINCI=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
另外,程序固化后出现错误 Sending DHCP and RARP requests,解决办法:
把下面几个选项去掉就OK了
networking -》networking options -》IP:Kernel level autoconfiguration不能选下面三个子项
2.制作一个文件系统镜像
第一种方法,源码包中给出了一个ramdisk.gz,可以直接做成镜像。其位置为/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/images/ramdisk.gz,具体操作:
host$ mkdir -p /home/user/workdir
host$ cd /home/user/workdir
host$ cp <ramdisk location>/ramdisk.gz .
host$ mkdir ram
host$ gunzip ramdisk.gz
host$ mount ramdisk ram -o loop
host$ mkfs.jffs2 -r ram -e 64 -o rootfs.jffs2
生成的rootfs.jffs2就是所要的镜像文件
第二种方法,通过裁剪target文件自己制作一个镜像,此方法比较复杂,具体见TI Davinci DM6446 开发攻略.doc
3.将内核与文件系统镜像固化到flash中,以nor flash烧写rootfs.jffs2为例
第一种方法,使用uboot:
先通过网络下载到ram中,
dvevm# tftp 0x80700000 rootfs.jffs2
擦除nor中用于存储的区域,具体地址根据partition_mtd分区表确定
dvevm# erase 0x02440000 +
从ram中拷贝到nor中
dvevm# cp.b 0x80700000 0x2440000 0x27eeec
更改启动参数 bootargs,此处示例表示mtd中的第四个分区存储文件系统
"... root=/dev/mtdblock3 rw rootfstype=jffs2 ..."
另外,烧写kernel可用同样方法,只需改变nor中存储的地址即可。最后需要更改启动方式:setenv bootcmd bootm 0x02040000,此地址即为kernel存储的地址。
第二种方法,使用linux:
先擦除nor的分区
target$ flash_eraseall -j /dev/mtd3
烧写fs进nor的分区
target$ flashcp <image dir>/rootfs.jffs2 /dev/mtd3
重启,改bootargs,偶了