烧写内核uImage和根文件系统rootfs到NAND FLASH

    技术2022-07-01  83

    /*2011.1.8*/ /*uboot1.1.4*/ /*内核:linux-2.6.22.6*/ /*NAND FLASH为:k9f2g08u0a*/

     

    因为之前没连续写过一块以上的数据,今天写uImage才发现之前修改的uboot1.1.4里的NAND驱动有问题. 继续修改如下:

    1.vi uboot1.1.4/include/configs/fl2440.h 添加: #define CONFIG_FL2440           1

     

    2.vi uboot1.1.4/common/cmd_nand.c 修改nand_rw函数: 将start  += n; 这句改为: #if defined(CONFIG_FL2440)                 start  += 2*n; #else                 start  += n; #endif

     

    3.vi uboot1.1.4/include/linux/mtd/nand.h #define CFG_ENV_OFFSET  0x60000  -> define  CFG_ENV_OFFSET 0xC0000 /*0xC0000=2*0x60000*/ /*这样uboot的环境变量在NAND中存储的的实际地址才是0x60000*/

     

    4.vi uboot1.1.4/common/cmd_nand.c 先注释了这行: /*#define CONFIG_MTD_NAND_ECC */ 要么使用nand write写过数据的块会被内核认为是坏块.

     

    5.tftp 0x32000000 uImage nand erase 0x100000 0x200000 nand write 0x32000000 0x100000 0x200000 这样内就写入NAND了.

     

    接着写根文件系统到NAND: 设置uboot环境变量,从NAND启动内核,先用NFS挂载根文件系统: 6.setenv bootcmd nand read 0x32000000 0x100000 0x200000/;bootm 0x32000000

     

    setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.22:/home/arm/rootfs

    ip=192.168.0.11:192.168.0.22:192.168.0.33:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200

     

    saveenv

     

    7.在主机上将根文件系统打包: cd rootfs tar cvf rootfs.tar ./

     

    8.启动开发板,先用mount命令挂载要作为根文件系统的分区: mount -t yaffs /dev/mtdblock2 /mnt

    然后在开发板上执行以下命令将根文件系统解压到NAND里: tar xvf rootfs.tar -C /mnt/

     

    9.重设uboot环境变量,加载NAND中根文件系统: setenv bootargs noinitrd root=/dev/mtdblock2 rootfstype=yaffs console=ttySAC0 init=/linuxrc

     

    saveenv

     

    OK!


    最新回复(0)