码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-02-06 09:42:23      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:linux内核   源码   配置   编译   

Linux体系结构:

技术分享

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

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

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

内核的构成:

技术分享
a-->系统调用接口(SCI)、
b-->进程管理(PM)、
c-->内存管理(MM) 、
d-->关于处理器代码(arch) 、
e-->虚拟文件系统(VFS)、
f-->网络协议栈、  
g-->设备驱动(DD)


关于Linux内核源代码

1、下载源代码
www.kernel.org
2、目录结构
技术分享
技术分享
3、工程中主要使用sourceinsight对内核源码进行管理

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

1、配置内核


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

1.2配置内核的方法(两种命令)
--->1.2.1、基于文本模式的交互式设置  make config  (需逐项选择,较为麻烦)
技术分享
技术分享
--->1.2.2、基于菜单模式的交互式设置  make menuconfig(更为直观,此命令默认为X86平台,配置ARM平台时需指定ARCH = arm)

技术分享

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

配置完成之后保存设置。可以看到内核根目录下多出.config文件,该文件中的每一行对应着配置的一个选项
如下图所示
技术分享
技术分享
注:同样可以通过修改.config文件来修改内核选项。如下
CONFIG_X86_32 is not set
 
由于从零开始配置内核选项较多,比较复杂。
主要配置内核的方法通常有以下两种:
第一种方法: 一般选择已有的一个内核配置文件为基础进行配置。。
譬如选择虚拟机中Linux下的配置文件进行配置。
技术分享
技术分享
进入内核选项配置菜单,,选择load.....如下(注:此时需将Linux的配置文件(config-2.6.32-279.el6.i686)放置内核文件夹顶层目录)
技术分享
之后就可进行修改。。
技术分享

第二种方法:参考内核文件目录中  /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
技术分享
技术分享

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内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)

标签:linux内核   源码   配置   编译   

原文地址:http://blog.csdn.net/u011467781/article/details/43532141

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!