内核驱动学习(一)

来源:互联网 发布:c语言自学要多久 编辑:程序博客网 时间:2024/06/08 04:37

一、内核简介

1、linux系统分为用户空间与内核空间,用户空间包括应用程序和C库,内核空间包括系统调用接口(sci)、狭义内核、体系结构相关内核代码( Architecture-Dependent Kernel Code

2、划分为用户空间和内核空间的原因是:CPU有不同的工作模式,linux利用这个特性,使操作系统本身得到保护;;应用程序运行在用户模式。

3、通过系统调用和硬件中断可以完成从用户空间到内核空间的转换

3、内核的构成:系统调用接口(SCI)、进程管理(PM)、内存管理(MM)、虚拟文件系统(VFS)、网络协议栈(Network Stark)、设备驱动(DD)、体系结构相关代码(Arch)


二、内核源代码结构

1、目录结构

arch   内核所支持的CPU体系在该目录下都有对应的子目录

documentation 内核文档  :主要是阅读,功能介绍等

drivers 设备驱动程序

include  头文件;与平台无关的头文件放在include/linux子目录下,与平台相关的代码则放在相应的子目录

fs  文件系统的实现代码

net   网络协议的实现代码


三、linux内核的配置与编译

1、安装到开发板的三个文件bootloader、内核映像文件(2M左右)、文件系统的映像

2、内核映像文件的产生:配置、编译、安装、清理

3、配置: make menuconfig(菜单)

常用配置菜单项:处理器类型;网络协议支持;设备驱动;文件系统;

4、配置结果文件放在内核文件下的隐藏文件.config文件。。。。内核配置结果的参考文件可以去arch/arm/configs目录下获取


5、内核的编译   :分为编译内核;编译内核模块;打包,制作ramdisk

6、编译内核:make  bzImage(注意大小写),编译好的内核位于arch/<CPU>/boot/目录下

7、①编译内核模块: make  modules   ②把散落的内核模块集中移动到/lib/modules:  make modules_install

8、打包,制作init  ramdisk:  mkinitrd  打包的名字-版本   打包的目录

9、安装内核:把编译好的内核与ramdisk复制到/boot/目录下面

10、清理:配置中产生/config文件    编译中产生了.o中间文件  :make  clean //make distclean


四、内核模块的开发

1、内核模块特点:不编译进bzImage        内核运行期间动态安装和卸载

0 0
原创粉丝点击