您的位置:首页 > 运维架构 > Linux

Linux内核及文件系统配置编译 - 关于内核配置

2012-06-19 14:49 363 查看
Linux内核及文件系统配置编译 - 关于内核配置

[提要] 在前面设计的一系列“Linux内核及文件系统配置编译”实验中,碰到的问题也足够多的。我计划后补一批具体的笔记,针对一些难点和认识上容易偏差的问题好好总结一下。

[内容]

零、写在前面:

在前面设计的一系列“Linux内核及文件系统配置编译”实验中,碰到的问题也足够多的。写下来的笔记似乎也只对我自己有用而已,因为太多犯错、修正,犯 错、修正,之前的不到位的理解和后来恍然大悟的理解混杂在一起,可读性和可借鉴性大打折扣了。呵呵,不过没关系,进步感还是挺大的。

前面的实验有几个话题设计得过大了,包含了太多的复杂步骤,所以导致了两方面结果:一是看起来学习进展不大,很久才写出一份学习笔记;二是这样过于复杂的 实验难以一次完成,而且中途出现的问题多,使实验难以计划,难了一大阵之后虽然知道很多东西要解决,但无从下手去解决,这是最糟糕的学习状态,无法清晰梳 理理。面对前面许多未解的、模糊的问题,现在暂时采取的对策是:对做了的工作,遇到的问题详细记录,记录疑点难点,写后补笔记,把基本问题研究清楚,迟些
再回头整理。

一、为什么进行linux内核配置?一定要做吗?

一定要的!进行linux内核的编译需要明确下面几个问题:

1、选用了哪种linux内核?标准linux?还是uclinux?还是linux-RT?

2、选用了linux内核的哪个版本?2.4.x?还是2.6.x?

3、编译环境和运行目标环境是什么体系的?x86?arm?还是m68k?

4、根据上面的条件准备相关的内核文件、补丁,以及编译工具链

上面的计划就是在linux内核编译前配置的时候体现,简单说我们就是要依赖配置的阶段来完成:你要编译什么版本的linux?(有些内核源码包集成了多个版本的内核,可供在配置时指定一种版本);你的目标CPU体系是什么?你的目标板是怎样的?接下来的就是对系统功能的其他配置,生成什么样的内核映像等。然后还有关键的一点,就是需要指定一种交叉编译工具(这个工作需要修改makefiel来实现)

所以,不经过配置,是无法进行后续的编译工作的。一般,未编译过的内核目录中,不存在 .config 配置文件,make menuconfig(或其他配置命令)后才产生。

往往,在make menuconfig 或 make xconfig时,选择了目标体系,确定了arch,退出并保存配置时,就会在arch目录中寻找相应的目录,如果相应的目录中存在默认配置文件,就会自动读出来,形成内核根目录下的 .config 文件。

二、配置的命令

一般有以下几个命令:

make config

make oldconfig

make menuconfig

make xconfig

其中后两个才是最常用的。任何一种都可以对内核进行配置,它们都会最内核源文件的根目录下产生一个 .config 文件,这个文件包含了所有所选择的信息。

配置命令可以带参数,如ARCH=arm CROSS_COMPILE=arm-linux-

三、配置文件 .config

配置完成后,将在内核根目录下生成配置文件 .config 以及大量的符号链接和头文件,这些在其余的创建过程中会用到。一个典型的.config配置文件如下:

#

# Automatically generated by make menuconfig: don't edit

#

CONFIG_X86=y

CONFIG_ISA=y

# CONFIG_SBUS is not set

CONFIG_UID16=y

#

# Code maturity level options

#

# CONFIG_EXPERIMENTAL is not set

#

# Loadable module support

#

CONFIG_MODULES=y

CONFIG_MODVERSIONS=y

CONFIG_KMOD=y

……

四、配置选项

配置的主要目的就是保证创建一个能运行于目标系统上的内核。针对目标系统,选项菜单会有所不同,然而有些选项不管是什么嵌入式系统都应该选上。下面是需要选择的主要选项:

Code maturity level options

Loadable module support

General setup

Memory technology devices

Block devices

Networking options

ATA/IDE/MFM/RLL support

SCSI support

Network device support

Input core support

Character devices

Filesystems

Console drivers

Sound

Kernel hacking

这里不给出每一个选项的详细信息,因为内核配置菜单在配置内核时会有帮助。一个合适的配置菜单,是这个菜单的选项很好地符合了目标体系的配置。然而,这个菜单的名字根据不同的系统是不同的。下面列出目标硬件系统和linux内核的处理器选择菜单的对应列表,连同系统内核的名称。当执行make指令时需要设置ARCH变量为系统内核名,让内核配置文件能够识别。

处理机系统 系统和处理器选项 系统的内核名

x86 Processor type and features i386

ARM System type arm

PPC Platform support ppc

MIPS Machine selection/CPU selection mips or mips64

SH Processor type and features sh

M68K Platform-dependent support m68k

一些选项只能用于一些特定的系统。实际上,如果一个选项在配置菜单中是可选的,并不意味着目标系统就支持这个功能,在一些情况下,配置菜单没有显示某个选项,但不一定意味着这个功能在目标系统上不支持。

[遗留问题]

……

[参考资料]

1、《源码开放的嵌入式系统软件分析与实践——基于skyeye和arm开发平台》陈渝 李明 杨晔 等编著 北京航空航天大学出版社

Linux内核及文件系统配置编译 - 关于内核版本及补丁安装

2006-11-28 15:07

[提要] 在前面设计的一系列“Linux内核及文件系统配置编译”实验中,碰到的问题也足够多的。我计划后补一批具体的笔记,针对一些难点和认识上容易偏差的问题好好总结一下。

[内容]

零、写在前面:

在前面设计的一系列“Linux内核及文件系统配置编译”实验中,碰到的问题也足够多的。写下来的笔记似乎也只对我自己有用而已,因为太多犯错、修正,犯 错、修正,之前的不到位的理解和后来恍然大悟的理解混杂在一起,可读性和可借鉴性大打折扣了。呵呵,不过没关系,进步感还是挺大的。

前面的实验有几个话题设计得过大了,包含了太多的复杂步骤,所以导致了两方面结果:一是看起来学习进展不大,很久才写出一份学习笔记;二是这样过于复杂的 实验难以一次完成,而且中途出现的问题多,使实验难以计划,难了一大阵之后虽然知道很多东西要解决,但无从下手去解决,这是最糟糕的学习状态,无法清晰梳 理理。面对前面许多未解的、模糊的问题,现在暂时采取的对策是:对做了的工作,遇到的问题详细记录,记录疑点难点,写后补笔记,把基本问题研究清楚,迟些
再回头整理。

一、linux内核的分类与版本问题

linux内核起码有标准内核(来源

http://www.kernel.org/

)及针对各种处理器或平台的linux内核。在做嵌入式开发时需要明确:什么平台/处理器?什么版本的linux内核?这关联到需要什么内核补丁,作怎样的交叉编译,需要什么交叉编译环境。

问题:什么是标准内核?

按照资料上的习惯说法,标准内核(或称基础内核)就是指主要在

http://www.kernel.org/

维护和获取的内核,实际上它也有平台属性的!这些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平台上的内核变成了基础内核,也被称为标准内核了。

问题: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

http://www.kernel.org/

ftp, http, rsync

ARM

http://www.arm.linux.org.uk/developer/

ftp, rsync

PowerPC

http://penguinppc.org/

ftp, http, rsync, BitKeeper

MIPS

http://www.linux-mips.org/

ftp, cvs

SuperH

http://linuxsh.sourceforge.net/

cvs, BitKeeper

M68K

http://linux-m68k.org/

ftp, http

non-MMU的CPUs

http://www.uclinux.org/

ftp, http

(ARM7TDMI/ColdFire)

这些站点不仅仅是linux内核站点,它们可能直接提供了针对你的目标硬件系统的linux内核版本。

问题:标准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内核,可以访问

http://www.arm.linux.org.uk/

并订阅该网站上提供的maillist就可以了。如果觉得查阅邮箱中的邮件列表耗费太多时间,那么至少每周访问所关心的内核网站,并阅读Kernel Traffic提供的过去一周中在内核邮件清单中发生的重要的摘要,网址为

http://kt.zork.net/kernel-traffic

这样就可以得到相关Linux内核的最新信息。

并不是Linxu的每个版本都适合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

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/59328/showart_516360.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: