返回信息流在U-Boot怎么实现对NAND的分区呢?只需要设置bootargs环境变量中的mtdparts吗?
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #9343同步于 2010/9/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
请教个NAND分区的问题
HPending
2010/9/4镜像同步22 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Platform: mini2440 with 128M NAND
Kernel: 2.6.35
U-Boot: 2008.10
分区信息被固定在内核了,我想从U-Boot修改NAND分区,以便内核正确的mount root. 但似乎没找到在U-Boot中给NAND分区的方法
【 在 ssailing 的大作中提到: 】
: 硬件平台是什
: 内核版本是什
: 不同的平台和内核稍有差异
: ...................
flash分区信息uboot有必要知道吗?
我一直以为是:uboot中只记录内核镜像和ramdisk的存储位置(在flash当中的存储位置,记录形式就是一个long类型的地址);root文件系统的位置由uboot传参进行控制。
例子:(我们实验室之前做的是nor flash,使用jffs2文件系统,但是以下内容应该大同小异吧,有错请拍砖~~~)
1、明确自己使用的flash型号和芯片相关信息(扇区大小、扇区数目、基地址等);
2、内核代码中加入flash驱动代码(如果没有的话),大概位置在/driver/mtd/maps目录,加入的源文件中包含flash的分区信息;
3、为了支持新的芯片类型,修改内核代码的Kconfig文件,以便make menuconfig可以选择;
4、重新编译内核,挂载nfs文件系统后,能够看到mtd device的相关信息(device编号是后面要用的);
5、创建设备文件节点,将更新后的jffs2镜像传输并烧录到flash的指定位置;
6、kernel启动参数中加入:root=/dev/mtdblockX (X代表root所在的分区),rootfstype=jffs2 rw;
这中间的步骤可能有记错的吧,lz可以参考一下 :)
【 在 HPending (icool之青椒超人|奔跑的豆豆) 的大作中提到: 】
: Platform: mini2440 with 128M NAND
: Kernel: 2.6.35
: U-Boot: 2008.10
: ...................
谢谢版主详细回复!
我的问题出在第5和第6点
6、kernel启动参数中加入:root=/dev/mtdblockX (X代表root所在的分区),rootfstype=jffs2 rw;
若是将Kernel启动参数设为第2分区(X=2),那么U-Boot应该将jffs镜像烧写到指定位置(向你5点所描述的那样),但U-Boot怎么知道这个地址就是Flash上的第2分区呢?这也是我试图在U-Boot上实现NAND的分区的原因。
【 在 hobby 的大作中提到: 】
: flash分区信息uboot有必要知道吗?
: 我一直以为是:uboot中只记录内核镜像和ramdisk的存储位置(在flash当中的存储位置,记录形式就是一个long类型的地址);root文件系统的位置由uboot传参进行控制。
: 例子:(我们实验室之前做的是nor flash,使用jffs2文件系统,但是以下内容应该大同小异吧,有错请拍砖~~~)
: ...................
我理解的是
uboot完全不需要关心nand分区啊,nand分区的事情是内核做的,
uboot的烧写nand,都是用地址的啊
比如烧写kernel:nand write 0x22000000 0x100000 0x200000
这里面没有任何分区相关的信息,假设内核中kernel的/dev/mtdblock1,那么他的offset应该是0x100000,size应该是0x200000,你只要把这些对应起来就行了
至于这句话:root=/dev/mtdblockX (X代表root所在的分区),rootfstype=jffs2 rw,是boot给内核的启动参数,内核知道什么意思就行,uboot不用管
如果我记得没错的话,你做kernel中的mtd驱动的时候,就会把分区和地址的映射关系写进去了(也就是说这个映射关系是需要在kernel中保存的);同时,建立设备节点的时候,创建的某个node提供了root参数与实际设备之间的联系。
另一方面,uboot并非完全不知道分区的信息,因为你需要把kernel和文件系统镜像放到指定的分区/地址(对uboot而言,你告诉他对应的地址就行了)。
不知道说明白了没?
uboot指定文件系统位置/地址=>内核启动,挂载文件系统=>通过root参数中指定的位置,内核去文件系统相应位置找需要的文件。
大概是这样,年头久了,不保证正确,欢迎讨论哈~
【 在 HPending (icool之青椒超人|奔跑的豆豆) 的大作中提到: 】
: 谢谢版主详细回复!
: 我的问题出在第5和第6点
: 6、kernel启动参数中加入:root=/dev/mtdblockX (X代表root所在的分区),rootfstype=jffs2 rw;
: ...................
RE!
就是这个意思,握爪~
PS:刚才回复的时候没看到你的回帖,要是看见了我就不用码字了,呵呵
【 在 eelb (熊猫酒仙) 的大作中提到: 】
: 我理解的是
: uboot完全不需要关心nand分区啊,nand分区的事情是内核做的,
: uboot的烧写nand,都是用地址的啊
: ...................
补充一下,uboot当中的bootargs参数,虽然是在uboot中设定的,但其内容是由内核来定义的(我们可以理解为这是一个interface,但是其owner是内核)。
各个参数的大体说明在kernel文档 kernel-parameter.txt
【 在 eelb (熊猫酒仙) 的大作中提到: 】
: 我理解的是
: uboot完全不需要关心nand分区啊,nand分区的事情是内核做的,
: uboot的烧写nand,都是用地址的啊
: ...................
Thanks and sorry for the late reply.
是不是可以这样理解:
U-Boot只需要关心根文件系统所在的分区,通过nand write把相应的镜像写内核定义的位置处。
至于内核定义的其他分区,U-Boot可以不用去管,Linux启动后,会自动去分区?
【 在 eelb 的大作中提到: 】
: 我理解的是
: uboot完全不需要关心nand分区啊,nand分区的事情是内核做的,
: uboot的烧写nand,都是用地址的啊
: ...................