当前位置: 首页 > 嵌入式Linux > 正文

嵌入式之行(3):内核与根文件系统

说明: 

1、本文没有详细介绍移植过程的点点滴滴,这些东西网络上一找一大把。我最近学习所参考的博客地址是:http://hbhuanggang.cublog.cn,博主很有才,讲得也很详细。

2BusyBox是用来生成一些必要的专门用于嵌入式环境的命令,BusyBox ≠根文件系统。

1、内核

移植内核无非以下几个步骤:

(1)、需要内核源码,或者到内核官网上下载(http://www.kernel.org/),或者直接使用开发商提供的经过修改过的内核源码。

(2)、配置内核,可以依赖开发板手册进行,也可以根据自己的经验进行。可以将开发板芯片所用默认的配置文件复制到内核树目录下,也可以在make menuconfig后手动加载。原则是“适用即可”,这样可以不使内核体积过大(我的内核分区只有区区2MB)

(3)、交叉编译,需要安装有交叉编译器,修改内核顶层的Makefile

(4)、生成zImage,或者是U-boot支持的格式uImage

具体可以参考以下文章:

http://blog.chinaunix.net/u3/101649/showart_2073912.html

2、文件系统

制作自己的文件系统无非以下几步骤:

(1)、手动创建必要的目录。如/lib/dev等等。

(2)、使用BusyBox生成必要的命令。

(3)、创建必要的文件,如设备文件/dev/null等,创建必要的初始化文件,如/etc/目录下的一些文件。

文件系统在第二篇文章中有所涉及。关于闪存的文件系统的介绍,可以参考IBM网站上一篇文章:

http://www.ibm.com/developerworks/cn/linux/l-flash-filesystems/

里面有很多详细的介绍。

制作根文件系统可以在下面的文章中找到:

http://blog.chinaunix.net/u3/101649/showart_2075312.html

3、驱动

编写开发板上各种外围电路的驱动程序有两种方式,一是将驱动加入到内核树中,在内核配置中,或者编译入内核,或者配置成模块;另一种是自己编写程序,自己写Makefile,编译生成.ko文件。

前一种方式是将写好的驱动程序放到相应的内核树目录中,如/driver/char等,再在其目录下的Makefile文件中添加该驱动的目标文件(.o文件),还要在该目录下的配置文件添加配置信息,这个信息就是在内核配置菜单中看到的。一切完成后,就可以在配置内核时选择了该驱动了。

后一种方法没有这么麻烦,它仅需要驱动程序源代码,以及对应的Makefile。由于我们最终只需要内核模块.ko文件,所以两种方法,都可以取其中生成的模块文件。

注意,驱动程序只是驱动程序,如果要看到驱动的结果,还需要编写用户空间程序,——最简单的LED驱动程序,需要我们编写测试程序,来测试驱动程序的成功与否。

大家可以参考http://blog.chinaunix.net/u3/101649/showart_2088024.html这篇文章,并总结驱动的步骤。

驱动编写有一个重要原则,即“拿来”。在人家现有的模块基础上修改,这种方法很快捷、方便。

4、其它

别以为上述移植内核和制作根文件系统很容易做到,移植过程是简单,就是按照人家说的来做。但真正要我们自己解决的是自己遇到的问题,如:

Unable to mount root fs on unknown-block(8,2)

Failed to execute /linuxrc.  Attempting defaults…

Kernel panic – not syncing: No init found.  Try passing init= option to kernel.

等等。这些才是真正要人老命(出现panic就相当于Windows的蓝屏,不同之处是,重启后仍然解决不了问题的)

解决这些问题的过程,才真正锻炼你的能力。

本文固定链接: http://www.latelee.org/embedded-linux/learning-elinux-3-kernel-and-rootfs.html

如无特别说明,迟思堂工作室文章均为原创,转载请注明: 嵌入式之行(3):内核与根文件系统 | 迟思堂工作室

目前暂无评论

发表评论

*

快捷键:Ctrl+Enter