您的位置:首页 > 运维架构 > Linux

u-boot环境变量的设置与使用

2012-08-10 14:48 323 查看
如何内核分区是直接写在内核文件里面的,u-boot的分区信息就不重要。

如何内核的分区信息没有指定,而是通过下面的命令行来指定的,那么分区信息就很重要。因为它完全依赖于命令行(当然极力推荐这种做法,因为用户修改分区信息,不需要去重新编译内核,也没必要重新编译u-boot,仅仅是修改命令行,一举两得)

/×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)

要想这个参数起作用,内核中的mtd驱动必须要支持,即内核配置时需要选上Device Drivers  ---> Memory Technology Device (MTD) support  ---> Command line partition table parsing

/×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

 

 

参考:http://blog.csdn.net/lhembed/archive/2010/05/10/5575689.aspx

1.如何对nand 分区。修改mtdparts环境变量就可以了么?

对于目前的U-boot而言,是的.而且, 设置了mtdparts变量之后,你可以在nand read/write/erase命令中直接使用分区的名字而不必指定分区的偏移位置.

set bootargs noinitrd console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2  mtdparts=nand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs)

引用:

2 内核通过bootargs找到文件系统,bootargs中的mtdblockx即代表分区吧,block1,2,3代表哪个分区是如何确定的。

事实上,bootargs中的"root=/dev/mtdblockx"只是告诉内核,root fs从第x个(x=0,1,2...)MTD分区挂载,mtdblock0对应第一个分区,mtdblock1对应第二个分区,以此类推.至于这个分区对应MTD device(NAND Flash)的哪一段范围,取决于内核读到的MTD分区信息,这个分区信息可以通过:

1) 写死在MTD层的NAND Controller驱动或者内核其他部分代码里

2) 通过U-boot传递给内核的命令行中的mtdparts=...部分解析得出,解析的规则同u-boot中mtdparts变量的赋值规则

3) 其他可以让内核知道分区信息的任何办法

引用:

3 在u-boot中给nand分区后是否要对应修改kernel的代码?

如果你用的是通过内核命令行给MTD层传递u-boot中的MTD分区信息,那是不需要的,在这种情况下,内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法)

如果你用的是把分区信息写死在内核源代码里的方法,那最好保证它和u-boot中的保持一致,即同步修改内核的相关部分代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息