分类: 嵌入式
2010-06-19 17:38:13
说明:
1、本文没有详细介绍移植过程的点点滴滴,这些东西网络上一找一大把。我最近学习所参考的博客地址是:http://hbhuanggang.cublog.cn,博主很有才,讲得也很详细。
2、BusyBox是用来生成一些必要的专门用于嵌入式环境的命令,BusyBox≠根文件系统。
移植内核无非以下几个步骤:
(1)、需要内核源码,或者到内核官网上下载(),或者直接使用开发商提供的经过修改过的内核源码。
(2)、配置内核,可以依赖开发板手册进行,也可以根据自己的经验进行。可以将开发板芯片所用默认的配置文件复制到内核树目录下,也可以在make menuconfig后手动加载。原则是“适用即可”,这样可以不使内核体积过大(我的内核分区只有区区2MB)。
(3)、交叉编译,需要安装有交叉编译器,修改内核顶层的Makefile。
(4)、生成zImage,或者是U-boot支持的格式uImage。
具体可以参考以下文章:
http://blog.chinaunix.net/u3/101649/showart_2073912.html
制作自己的文件系统无非以下几步骤:
(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
编写开发板上各种外围电路的驱动程序有两种方式,一是将驱动加入到内核树中,在内核配置中,或者编译入内核,或者配置成模块;另一种是自己编写程序,自己写Makefile,编译生成.ko文件。
前一种方式是将写好的驱动程序放到相应的内核树目录中,如/driver/char等,再在其目录下的Makefile文件中添加该驱动的目标文件(.o文件),还要在该目录下的配置文件添加配置信息,这个信息就是在内核配置菜单中看到的。一切完成后,就可以在配置内核时选择了该驱动了。
后一种方法没有这么麻烦,它仅需要驱动程序源代码,以及对应的Makefile。由于我们最终只需要内核模块.ko文件,所以两种方法,都可以取其中生成的模块文件。
注意,驱动程序只是驱动程序,如果要看到驱动的结果,还需要编写用户空间程序,——最简单的LED驱动程序,需要我们编写测试程序,来测试驱动程序的成功与否。
大家可以参考http://blog.chinaunix.net/u3/101649/showart_2088024.html这篇文章,并总结驱动的步骤。
驱动编写有一个重要原则,即“拿来”。在人家现有的模块基础上修改,这种方法很快捷、方便。
别以为上述移植内核和制作根文件系统很容易做到,移植过程是简单,就是按照人家说的来做。但真正要我们自己解决的是自己遇到的问题,如:
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的蓝屏,不同之处是,重启后仍然解决不了问题的)。
在解决这些问题过程,才真正锻炼你的能力。