分类: LINUX
2010-08-04 22:45:10
linux内核起码有标准内核(来源 )及针对各种处理器或平台的linux内核。在做嵌入式开发时需要明确:什么平台/处理器?什么版本的linux内核?这关联到需要什么内核补丁,作怎样的交叉编译,需要什么交叉编译环境。
1、什么是标准内核?
按照资料上的习惯说法,标准内核(或称基础内核)就是指主要在维护和获取的内核,实际上它也有平台属性的!这些linux内核并不总是适用于所有linux支持的体系结构。这些内核版本很多时候并不是为一些流行的嵌入式linux系统开发的,也很少运行于这些嵌入式linux系统上,这个站点上的内核首先确保的是在Intel X86体系结构上可以正常运行,它是基于X86处理器的内核,如:
对 linux-2.4.18.tar.bz2的配置make menuconfig时就可以看到,Processor type and features --->中只有386、486、586/K5/5x86/6x86/6x86MX、Pentium-Classic、Pentium-MMX、Pentium-Pro/Celeron/Pentium-II、Pentium-III/Celeron(Coppermine)、Pentium-4、K6/K6-II/K6-III 、Athlon/Duron/K7 、Elan 、Crusoe、Winchip-C6 、Winchip-2 、Winchip-2A/Winchip-3 、CyrixIII/C3 选项,而没有类似samsun 2410等其他芯片的选择。
如果需要用在其他特定的处理器平台上就需要对内核进行打补丁,形成不同的嵌入式内核。实际上,不同处理器系统的内核下载站点中提供的也往往是补丁patch而已,故原x86平台上的内核变成了基础内核,也被称为标准内核了。
2、linxu操作系统的分类
第一层次分类:以主要功能差异和发行组织区分(基础linux系统/内核)
1)标准linux
2)uClinux
无MMU支持的linux系统,运行在无MMU的CPU上;
3)Linux-RT
是最早在linux上实现硬实时支持的linux发行版本;
4)Linux/RTAI
支持硬实时的linux,于RT-linux最大的不同之处在于RTAI定义了RTHAL,它将RTAI需要在linux中修改的部分定义成一组API接口,RTAI只使用API接口与linux交互;
5)Embedix
由Lineo公司开发,基于PowerPC和x86平台开发的。
6)Blue Cat Linux
7)Hard Hat Linux
8)其他
第二层分类:以应用的嵌入式平台区分(嵌入式linux系统/内核,使上面第一类中的各种linux系统扩展为对特定目标硬件的支持,成为一种具体的嵌入式linux系统)
由于嵌入式系统的发展与linux内核的发展是不同步的,所以为了要找一个能够运行于目标系统上的内核,需要对内核进行选择、配置和定制。因为每一种系统都是国际上不同的内核开发小组维护的,因此选择linux内核源码的站点也不尽相同。
第二层分类中的linux系统/内核相对于第一层分类的标准内核来说,也可以称为嵌入式linxu系统/内核。如应用在ARM平台上的嵌入式Linux系统通常有arm-linux(常运行在arm9平台上),uclinux(常用在arm7平台上),在标准linux基础上扩展对其他的平台的支持往往通过安装patch实现,如armlinux就是对linux安装rmk补丁(如patch-2.4.18-rmk7.bz2)形成的,只有安装了这些补丁,内核才能顺利地移植到arm Linux上。也有些是已经安装好补丁的内核源码包,如linux-2.4.18-rmk7.tar.bz2。
不同处理器系统的内核/内核补丁下载站点:
处理器系统
适合的内核站点
x86
arm
developer/
PowerPC
MIPS
SuperH
M68K
non-MMU (arm7TDMI/ColdFire)
这些站点不仅仅是linux内核站点,它们可能直接提供了针对你的目标硬件系统的linux内核版本。
3、标准linux与uclinux有什么关系和区别?armlinux与uclinux有什么分别?
标准内核可以直接自己配置编译,用到你的PC机去取代原先安装系统时的内核,它首先基于x86体系。uclinux是省略MMC的linux内核,是标准内核的一个简化版本。而armlinux是基于平台的一个嵌入式系统内核,也就是一个具体的嵌入式系统。uclinux的获取是一个类似于标准linux的内核目录,而armlinux的获取一般是通过对标准linux内核打补丁。
二、linux内核的选择
Linux核心源程序通常都安装在 /usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心(例如2.0.30)都是一个稳定地发行的核心,而任何奇数的核心(例如2.1.42)都是一个开发中的核心。
Linux-2.4.10~Linux-2.4.15版本的内核应该避免使用,因为它们出现在对内核大量改动时期,不稳定。
选择内核版本是很困难的,应该与负责维护该内核的小组保持联系,方法是通过订阅一些合适的邮件列表(maillist)并查看邮件中相关的重要新闻,以及浏览一些主要站点,可以得到该内核的最新发展动态。如针对arm的Linux内核,可以访问 并订阅该网站上提供的maillist就可以了。如果觉得查阅邮箱中的邮件列表耗费太多时间,那么至少每周访问所关心的内核网站,并阅读Kernel Traffic提供的过去一周中在内核邮件清单中发生的重要的摘要,网址为 这样就可以得到相关Linux内核的最新信息。
并不是Linux的每个版本都适合arm Linux的移植,可以加入其邮件列表(maillist)以获得内核版本所支持硬件的相关信息。
上表列出的资源可以帮助你找到哪些没有列出的功能可以被你的系统支持!
arm Linux的移植,建议使用2.4.x或2.6.x版本
Linux内核补丁可以到arm Linux的ftp(ftp://ftp.arm.linux.org.uk )下载。
三、内核补丁与补丁的安装
内核补丁不是一定需要的,这要看你选择的是怎样的linux内核,比如下载下来标准的linux内核,想要编译linux系统在x86的PC机上运行,就根本不用什么板间支持的补丁了,因为标准linux内核本身基于x86平台测试。而如果使用Embedix内核,开发板是PPC体系的,内核可能本身已经支持PPC,也不需要安装补丁了。但嵌入式系统往往工作在不同的特定目标板上,如arm,这就需要使linux内核扩展对目标体系的支持了。
常见的如arm板,下载了标准linux内核是不够的,还要从arm linux的相关站点下载相应版本的补丁,标准内核安装了补丁后才能正确配置,对目标体系支持。如linux-2.4.18.tar.bz2内核,打补丁patch-2.4.18-rmk7.bz2就跟整合了的源码包linux-2.4.18-rmk7.tar.bz2一样了,是一个armlinux系统内核了。而如果需要扩展对m68k芯片的支持,就需要m68k的补丁了。
补丁的安装方法可以参考man patch的说明,我总结自己常用的方法如下:
1、 patch应用的方法是进入内核目录后#patch -p1 文件的位置,如:
1)# bunzip2 patch-2.4.18-rmk7.bz2
把patch-2.4.18-rmk7.bz2解压成patch-2.4.18-rmk7(覆盖了原压缩文件)
2)# mv patch-2.4.18-rmk7 linux/
把patch-2.4.18-rmk7移动到内核解压目录linux中。
3)cd linux
进入linux目录
4)# patch -p1 2.4.18-rmk7
注意 前后都有一个空格
得到
……
patching file net/irda/iriap.c
patching file net/irda/irlan/irlan_common.c
patching file net/irda/irlap_event.c
patching file net/irda/irlap_frame.c
patching file net/irda/irttp.c
patching file net/sched/Config.in
成功应用补丁。
2、把解压的补丁(不用解压)移动到解压的内核目录中,执行# bzip2 -dc patch-2.4.18-rmk7.bz2 | patch -p1