韦东山Linux嵌入式课程社区
直播中

周炳胤

7年用户 189经验值
私信 关注

为什么对nandflash的分区有两个

        学linux到目前为止,总是不得问题的原委,大多数是别人说哪里出了错就去修改,然而编译通过,下到板子里面还是一样的错误,不能说别人的建议没用,应该是每个人的情况(虽说错误是完全一样的)是不一样的缘故。个人觉得还是理解程序的运行流程和阅读源码是比较重要的。
      在此,我这菜鸟就遇到很多概念不太理解,分区就是其中的一个。
     1:为什么对nandflash的分区有两个:u-boot中有一个,linux内核中还有一个?两者到底有什么关系?
        u-boot对nandflash的分区情况是怎么传入内核的?如果不传入内核,那是完全没有意义的。

     2:#define MTDPARTS_DEFAULT                "mtdparts=nandflash0:512k@0(bios),"
                                            "128k(params),"
                                            "128k(toc),"
                                            "512k(eboot),"
                                            "1024k(logo),"
                                            "4m(kernel),"
                                            "-(root)"
        为什么还会有一个params,它的作用猜也知道:肯定是存放启动参数的。但是为什么有些u-boot 却 :没有设置这个分区呢?

    3:根文件系统的映像是烧写到了nandflash中,不同的u-boot当然会把它烧写到不同的nandflash位置,
那么,怎么保证linux系统知道文件系统的存放位置,然后再去挂接它呢?

    恳请各位大哥不吝赐教!在此感激不尽!

回帖(4)

梁艳

2019-5-14 13:49:26
看这个贴子:http://www.100ask.net/forum/showtopic-15.aspx
举报

周睫蒙

2019-5-14 13:55:23
持续跟踪此贴,看看后续答复如何;
举报

谢芳芳

2019-5-14 14:02:43
1、uboot中的分区只不过是一个“环境变量”,用来方便烧写文件,比如我们烧写uboot
nand write 0x30000000 0x0 filesize
可以变为 nand write bootloader ,用分区名来替代起始地址和长度
2、内核的分区是真正意义上的分区,比如内核启动会挂载mtdblock3作为文件系统
内核分区的划分在内核的启动过程中可以通过打印信息看到,当然分区的划分在代码中是可以更改的
3、要保证uboot和内核的分区划分一致,如果出现不一致的情况,我们在使用uboot烧写文件系统的时候烧写到了uboot的block3,而内核去挂载block3的时候缺找不到文件系统,因此就出现挂载失败的问题。
4、uboot的分区信息可以通过Bootargs传递给内核,这个可以百度一下,我也没有搞过。
举报

陈芳

2019-5-14 14:11:07
params分区是用来存放环境变量的,就是print出来的那些打印信息
比如可以使用nand erase params擦出环境变量
重启开发板,环境变量恢复默认
举报

更多回帖

发帖
×
20
完善资料,
赚取积分