Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
来源:互联网 发布:淘宝正品lolita店铺 编辑:程序博客网 时间:2024/06/07 02:29
Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
http://blog.csdn.net/u011467781/article/details/43532141
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
0 0
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- linux内核配置编译安装(X86)
- 【学习笔记】编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译
- 【Linux学习】Ubuntu下内核编译(一)
- 内核驱动学习(一)
- 编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译
- Linux内核的配置与编译(x86平台)
- 【学习笔记】编译Linux内核(上)--编译基于x86平台的Linux内核的过程
- Linux 2.6.19.x 内核编译配置选项简介(一)
- Linux 内核编译配置选项简介(转)
- Linux内核:配置内核(一)
- x86平台Linux内核配置编译和安装
- Linux内核配置、编译和内核安装
- Linux内核学习-字符设备驱动学习(一)
- Linux内核学习-字符设备驱动学习(一)
- 虚拟机Ubuntu8.04平台下编译安装linux内核
- Linux内核配置、编译、安装
- hdu 1712 分组背包问题
- 黑马程序员—String类与基本数据类型对象包装类
- Java Socket 多线程编程,处理百万级的数据并发。
- 2015-03-08---策略模式,代理模式
- C语言之数组浅谈
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- c#循环结构(三)----for循环
- hdu 3911Black And White
- Android之隐式意图(Intent)如何查找匹配的组件
- JAVA类的加载顺序
- oc笔记<5>构造方法
- 不见,我的租房
- COCOS2DX学习之Box2D物理引擎-物体和相互作用
- cocos2d中分步实现飞机大战----自己飞机的实现