Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)

 

Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)

http://blog.csdn.net/u011467781/article/details/43532141
Linux体系结构:


由上图知:Linux架构分为用户空间和内核空间

划分成用户空间与内核空间的原因?
保护操作系统,使应用程序和内核拥有不同的权限。为不同的代码制造不同的等级。。。

内核空间与用户空间是 程序执行的两种不同的状态,通过 系统调用硬件中断能够完成从用户空间到内核空间的转换

内核的构成:

Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第1张图片
a-->系统调用接口(SCI)、
b-->进程管理(PM)、
c-->内存管理(MM) 、
d-->关于处理器代码(arch) 、
e-->虚拟文件系统(VFS)、
f-->网络协议栈、  
g-->设备驱动(DD)


关于Linux内核源代码

1、下载源代码
www.kernel.org
2、目录结构
Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第2张图片
3、工程中主要使用sourceinsight对内核源码进行管理

—————————————————————————————————————————————————————————————

1、配置内核


1.1 配置内核的原因:
--->1.1.1、硬件的需求
--->1.1.2、软件的需求;选择需要的,去掉不要的

1.2配置内核的方法(两种命令)
--->1.2.1、基于文本模式的交互式设置  make config  (需逐项选择,较为麻烦)
Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第3张图片
--->1.2.2、基于菜单模式的交互式设置  make menuconfig(更为直观,此命令默认为X86平台,配置ARM平台时需指定ARCH = arm)

Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第4张图片

菜单模式下的内核配置更直观,所以选择菜单模式下配置
关于菜单选项说明:
<*>;把选中的C文件编译生成对应的中间文件(*.o),由这些(*.o)文件编译组成内核映像(zImage),启动时是将内核映像放到内存中 的
<M>:代表模块,对应的各个模块都有对应的C文件,编译时生成对应的中间文件(*.o)。并将这些中间文件放在硬盘中,等到需要用到时,就将其放置到内存中使用
<>:表示编译时不选择该功能

配置完成之后保存设置。可以看到内核根目录下多出.config文件,该文件中的每一行对应着配置的一个选项
如下图所示
Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第5张图片
注:同样可以通过修改.config文件来修改内核选项。如下
CONFIG_X86_32 is not set
 
由于从零开始配置内核选项较多,比较复杂。
主要配置内核的方法通常有以下两种:
第一种方法: 一般选择已有的一个内核配置文件为基础进行配置。。
譬如选择虚拟机中Linux下的配置文件进行配置。

进入内核选项配置菜单,,选择load.....如下(注:此时需将Linux的配置文件(config-2.6.32-279.el6.i686)放置内核文件夹顶层目录)
之后就可进行修改。。
Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第6张图片

第二种方法:参考内核文件目录中  /arch/arm/configs/里的不同平台的配置文件


2、 编译内核

2.1编译内核映像(同样涉及两种命令)----对应<*>选项的文件最终生成的映像文件
--->2.1.1命令 make zImage---在x86平台,zImage只能用于小于512K的内核

--->2.1.2命令 make bzImage:

若想获取详细编译信息,可使用
make zImage V=1
make bzImage V=1  ---可以列出较为完整的编译选项

根据提示;编译好的文件放在本目录下,路径:arch/x86/boot/bzImage
Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)_第7张图片

2.2.编译内核模块文件(以下两个命令)----对应<M>选项生成 的(.ko)文件

--->2.2.1命令 make modules---编译内核模块,时间较长

--->2.2.2命令 make modules_install---把散落在linux文件夹中的模块集中在一起--- /lib/modules目录下

2.3打包内核模块;制作init ramdisk
命令:mkinitrd initrd-$version(可任意命名) $version(此为刚编译生成的文件目录,打包此目录)
例:mkinitrd initrd-2.3-32    linux-2.3-32


3、安装内核(x86平台下才有的操作)

3.1拷贝内核:复制编译出的bzImage到启动目录下。
    cp arch/$cpu/boot/bzImage /boot/vmlinuz-$version
3.2复制第二部分制作的initrd-$version到/boot/的目录下
    执行cp initrd-$version /boot/
3.3修改启动配置文件,即/etc/grub.conf文件

4、清理内核

4.1命令 make clean---清除编译生成的.o文件
4.2命令 make distclean---清除编译生成的.o文件和配置文件.config

你可能感兴趣的:(linux内核)