如何将U-boot烧录到Nand中?如何用tftp,nfs加载内核和文件系统

如何将U-boot烧录到Nand中?如何用tftp,nfs加载内核和文件系统,第1张

【系统启动过程简介】初始化代码读取uboot到内存里面,然后跳转到uboot那里去执行uboot,uboot初始化必要的硬件,加载一些驱动,其中包括nandflash的驱动,然后根据uboot里面设置的一个启动命令:nandread0x30007FC00x1000000x200000bootm0x30007FC0意思就是,先去读取nandflash,从0x100000开始,长度为0x200000的数据到memory的0x30007FC0处,然后bootm表示从memory的0x30007FC0开始运行。也就是去运行内核镜像了。然后正罩,内核会自己解压缩,然后执行,初始化硬件,加载驱动模块,最后去挂载rootfs,#defineCONFIG_BOOTARGS"root=/dev/mtdblock2rwinit=/linuxrcconsole=ttyS0,115200mem=16Mrootfstype=yafffs2"此文件系统,也是你实现自己用相应的文件系统制作工具,制作的,然后烧写到对应的位置的。上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是mtd的第3个分区,去加载。而这里的mtd的第3个分区具体对应的nandflash中的的地址,是你在内核中,一般是在core.c自己定义的的nandflash的分区。一般是uboot是第桐滑一个分区,内核kernel是第二个,然后就是rootfs是第三个分区,也就是/dev/mtdblock2。例如分区:staticstructmtd_partitionrm9200_partitions[3]={{/*uboot256K*/.name="uboot",.size=0x40000,.offset=0},{/*kernel1.768M*/.name="kernel",.size=0x1C0000,.offset=0x40000},{/*rootfs2M*/.name="rootfs",.size=0x200000,.offset=0x200000},}如果按照上面分区,定义的/dev/mtdblock2的起始地址是0x200000,还算成大小是2M的位置,然后,局清腊内核启动挂载rootfs的时候,就是,以上面从uboot传过来的参数中yaffs2格式,到nandflash的2M的地址读取并加载rootfs,加载完成后,这样,里面对应的根目录,以及所有的文件,文件夹就都可以识别了。然后才会去读取并运行初始化脚本相关的东西,最后初始化console控制台,然后才能看到那个常见的#,才可以输入命令,比如ls,才可以和系统交互。所以,实际就是这个rootfs,对应着mtdblock2,对应的某个nandflash上的地址,比如此处的2M的地方。而不是内核kernel这个文件映射的。

直接文件系统列举吧烧写uboot、内核及文件系统 :1、uboot烧写

载Uboot两步骤第步uboot载系统扩展RAM并运行第二步通内存运行uboot整uboot载内存再烧写nandflash

第步 载uboot扩展RAM

首先使用短路块选择系统内部启复位或者电串口软件(115200 8 n 1)看打印和薯信息LPC31xx READY FOR PLAIN IMAGE>使用串液岁口软件发送文件选择发送u-boot-init.bin再发送u-boot.binRAM启uboot打印输启信息并进行倒计发送任意字符给系统停止计关闭串口软件使用超级终端连接系统

第二步 烧写ubootnandflash

超级终端输入loady命令再使用传送/发送文件选择Ymodem协议发送u-boot.bin接收完先擦除nand erase全擦掉(用给参数)使用使用参数指定区域般第要全擦使用nand_paramsflash信息写入其使用nand write 0x30001000 0x4000 0x100000

其0x30001000 uboot内存址;

0x4000 ubootflash存放起始址需要根据实际区情况定;

0x100000 uboot于实际;

至uboot写入nandflash短路跳线掉使其nandflash启

2、内核烧写

uboot启倒计击任意键停止输入loady与uboot烧写相似使用命令主要:nand erase 0x200000(址) 0x200000()

nand write 0x30001000 0x200000 0x200000

3、文件系统烧写

文件系统烧写通与内核相似使用串口烧写通挂载nfs使用mtd_debug 工具烧写由于文件系统较使用第种式慢些

串口烧写使用命令

loady

nand erase 0x600000 0x3a00000(目前区情况)

nand write 0x30001000 0x600000 0x800000(实际)

使用nfs烧写用命令

mtd_debug erase /dev/mtd2 0 0x3a00000

mtd_debug write /dev/mtd2 0 0x800000 ubi.img

各项含义参考mtd_debug 帮助直接mtd_debug 即获取说明其len使用十进制数uboot加0x认十六进制

4、启挂载文件系统选项

uboot通环境变量设置启选项般需要配置挂载文件系统nfsubi及内核启选项

挂载nanflashubifs:

setenv bootargs console=ttyS0,115200n8 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs

挂载129.1.4.199/rfs/rootfs并且本机ip设129.1.31.33等:

setenv bootargs noinitrd root=/dev/闹棚睁nfs console=ttyS0,115200n8 nfsroot=129.1.4.199:/rfs/rootfs,proto=tcp,nfsvers=3,nolock ip=129.1.31.33:129.1.4.199:129.1.88.1:255.255.0.0::eth0:off

启内核选项:

setenv bootcmd nand read 0x30001000 0x200000 0x200000\bootm 0x30001000\

修改uboot环境变量都需要saveenv命令保存修改

这个好像没有这么做的吧。因为它们烧的地址都不一样啊。但是如果你带侍是用UBOOT的话可以自己编辑一些命令,比如我把每次烧内核和烧文件系统做成两个命令,每次只山搜需run一蠢唯吵下自己的命令就可以自动完成上传,擦除,烧录了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8202937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存