root文件系统的一点经验
时间:2006-10-01 来源:afei_xyd
日期:2005-5-3 21:22:50 来源:Embedded 查看:[大 中 小] 作者:conch (随心所欲) 热度: 802 |
这几天折腾一个ARM9(s3c2410)的开发板,从bootloader到kernel,共花了一个多星期的时间,在root文件系统上折腾得最郁闷,不过总算是跑起来了,把自己的一点理解贴出来,希望有点用处,理解有误的地方请大侠们指正。 基本情况是这样:买了一个公司的开发板,但是软件和技术支持非常差,没办法,就试着用turbolinux大侠强力推荐的mizi_SDK for s3c2410ttp://www.mizi.com/en/developer/s3c2410x ),果然是比较好用,bootloader(vivi)稍微改改就可以跑了。但是启动linux的时候,vivi默认的是从NAND flash上启动,在这个上面需要建立一个bon的文件系统,用其中一个分区存放root文件系统,而我的开发板用的是4M的NOR flash,不能直接用vivi在上面建立bon分区,所以启动的时候无法mount root文件系统。后来采用ramdisk 做root文件系统,成功解决问题。下面是一些理解: 1。linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做准备,mount 根文件系统有这么几种方式:
1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount。这里有一个问题,在root文件系统本身还不存在的情况下,kernel如何根据/dev/xxx来找到对应的设备呢?原来kernel通过直接解析设备的名称来获得设备的主、从设备号,然后就可以访问对应的设备驱动了。所以在init/main.c中有很长一串的root_dev_names,通过这个表就可以根据设备名称得到设备号。
2。嵌入式系统根文件系统的一种实现方法。对于kernel和根文件系统都存储在flash中的系统,一般可以利用linux启动的initrd的机制。具体的过程前面已经比较清楚了,还有一点就是在启动参数中传递
相关的内容可以参考linux文档:bootdisk-howto, ramdisk.txt initrd.txt |