linux内核配置

来源:互联网 发布:网络稳定性测试软件app 编辑:程序博客网 时间:2024/05/20 04:27

 

操作系统的核心功能

1、内存管理

2、进程调度

3、硬件设备管理

4、文件系统

操作系统的一些拓展功能

协议栈

应用程序包

 

内核根目录下的主要文件介绍

1、Kbuild  (kernel build)  即是内核编译,是linux内核编译体现需要的。

2、Makefile  用来管理整个工程,内核的总Makefile 。

 

目录介绍

1、arch  不同架构CPU的目录。

2、block  在linux中block表示块设备。

3、crypto 加密。这个目录下放了一些各种常见的加密算法的C语言代码实现。 譬如crc32、md5、sha1等。

4、Documentation。里面放了一些芯片介绍等。

5、drivers   驱动目录,里面分别列出了linux内核支持的所有硬件设备的驱 动源代码。

6、firmware 固件,什么是固件?固件其实是软件,不过这个软件是固化到IC 里面运行的叫固件。就像S5PV210里的iROM代码。

7、fs。fs就是file system,文件系统,里面列出了linux支持的各种文件系 统的实现。

8、include  头文件目录,公共的(各种CPU架构共用的)头文件都在这里。每 CPU架构特有的一些头文件在arch/arm/include目录及其子目录下。

9、init  这个目录下的代码就是linux内核启动时初始化内核的代码。

10、ipc (inter process commuication)进程间通信。

11、kernel 内核

12、lib 库,这里面都是一些公用有用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如在内核中要把字符串转成数字用atoi,但是内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。

13、mm (memory management)内存管里。

14、net  网络相关协议

15、scripts 脚本,这些脚本文件不是linux内核工作时使用的,而是用来辅助 linux内核进行配置编译生产的

 

16、security。安全相关的代码。

17、sound。音频处理相关的。

18、tools   linux中一些有用工具。

19、usr 目录下是initramfs相关的,和linux内核的启动有关。

20、virt  内核虚拟机相关的,暂时不用管。

 

主要目录:arch和drivers目录。还有include、block、mm、net、lib等目录。

 

 

内核配置

1、先确认根目录下的总Makefile

(1)主要是检查交叉编译工具链是否设置正确。CROSS_COMPILE    ?= /usr/local/mushan_arm/arm-2009q3/bin/arm-none-linux-gnueabi-

(2)确认ARCH = arm。主要目的是为了编译时能找到arch/arm目录。

 

2、make x210ii_qt_defconfig

   最后只要出现:configuration written to .config说明配置正确,否则错 误。

3、make menuconfig

   在执行该命令之前,事先正确安装ucurses库,安装方法:apt-get install libncurses5-dev  屏幕要调大。

4、make

   编译完成后得到的内核镜像不在源码树的根目录下,在arch/arm/boot

   目录下。得到的镜像名是zImage。

 

内核的配置原理

配置关键:.config文件

.config文件是在执行make x210ii_qt_defconfig命令后产生的,其作用类似与uboot中的include/configs/x210_sd.h,内核在编译过程中会读取.config中的配置项,并且用这些配置项去指导整个编译链接过程。由于配置项很多,不易配置,所以make menuconfig相配合配置(图形化的配置工具menuconfig)。

 

make manuconfig

linux内核中一个功能模块有三种编译方法:一种是编入、一种去去除、一种是模块化。所谓编入就是将这个模块的代码直接编译连接到zImage中去,去除就是将这个模块不编译链接到zImage中,模块化是将这个模块仍然编译,但是不会将其链接到zImage中,会将这个模块单独链接成一个内核模块.ko文件,将来linux系统内核启动起来后可以动态的加载或卸载这个模块。

menuconfig中选项前面的括号里,*表示编入,空白表示去除,M表示模块化。

 

menuconfig的工作原理

ncurses库是linux中用来实现文字式的图形界面,linux内核中使用了ncurses库来提供menuconfig。scripts\kconfig\lxdialog目录下的一些c文件就是用来提供menuconfig的那些程序源代码。

 

menuconfig在我们make menuconfig打开时,会读取.config文件,并且用.config文件中的配置选择结果来初始化menuconfig中各个菜单项的选择值。

菜单项的项目内容从Kconfig文件来,菜单项的选择值从.config文件来。

 

config SND_AT73C213_TARGET_BITRATE

int "Target bitrate for AT73C213"

depends on SND_AT73C213

menuconfig或者config后面空格隔开的大写字母表示的类似于SND_AT73C213_TARGET_BITRATE 的就是这个配置项的配置项名字,这个字符串前面添加CONFIG_后就构成了.config中的配置项名字。内核源码目录树中每一个Kconfig都会source引入其所有子目录下的Kconfig,从而保证了所有的Kconfig项目都被包含进menuconfig中。

 

tristate和bool的含义

tristate意思是三态(3种状态,对应Y、N、M三种选择方式),bool是要么真要么假(对应Y和N)。所以tristate的意思就是这个配置项可以被三种选择,bool的意思是这个配置项只能被2种选择。

Depends依赖:本配置项依赖于另一个配置项。如果那个依赖的配置项为Y或者M,则本配置项才有意义;如果依赖的哪个配置项本身被设置为N,则本配置项根本没有意义。

 

Kconfig和.config文件和Makefile三者的关联

(1)配置项被配置成Y、N、M会影响.config文件中的CONFIG_XXX变量的配置值。

(2)这个.config中的配置值(=y、=m、没有)会影响最终的编译链接过程。