自己的学习笔记,还没又写完,以后博客中会有更新
第一章 Linux设备驱动程序之--基础知识
学Linux一年多了,对驱动的知识一点都不了解,上周买了本《Linux设备驱动》,O'REILLY出版,打算学习学习。在学习的过程中顺便做点笔记,以免遗忘。欢迎正在学习的菜鸟同胞们来交流学习心得。学过的大侠,希望可以指导指导。
声明:本学习笔记系列的知识多来自《Linux设备驱动》,好多东西基本上是照抄,此为本人记忆之用
首先有两个网站需要知道:
关于《Linux设备驱动》出版以来的内核API变化:https://http://doc.xuehai.net/Articles/2.6-kernel-api/
Linux-kernel列表:http://doc.xuehai.net/lkml/
一:内核功能划分:
Unix系统支持多个进程的并发运行,每个进程都请求系统资源:比如运算、内存、网络连接或其他一些资源等。内核负责处理所有这些请求,根据内核完成任务的不同可敬内核功能划分成:
进程管理
负责创建和销毁进程,并处理他们和外部世界之间的连接,以及进程间通信和进程间对CPU调度器的共享
内存管理
内核在有限的可用资源之上为每个进程都创建了一个虚拟地址空间
文件系统
Linux支持多种文件系统类型
设备控制
所有设备控制操作都由与被操做的设备相关的代码来完成,这段代码就是驱动程序
网络功能
网络功能也必须由操作系统来管理,因为大部分网络操作和具体的进程无关
二:设备和模块的分类
字符设备
块设备
网络接口
第二章 第一节 Linux设备驱动程序之--构建内核树
首先下载Linux内核,按作者的说法,只要是linux-2.6.xxx的内核都可以,我的是linux-2.6.33.2。有位网友说下载后最好解压到/usr/src/目录下,解压
在构建内核树时参考了原书第四章“调试技术”,配置了几条调试时可能会用到的选项,这些选项大多在“kernel hacking“菜单中:
CONFIG_DEBUG_KERNEL:使其他调试选项可用
CONFIG_DEBUG_SLAB:打开内核内存分配函数中的多个类型检查
CONFIG_DEBUG_PAGEALLOC:在释放时,全部内存页从内核地址空间中移出。该选项将大大降低运行速度,但可以快速定位特定的内存损坏错误的所在位置
CONFIG_DEBUG_SPINLOCK
CONFIG_DEBUG_SPINLOCK_SLEEP
CONFIG_INIT_DEBUG
CONFIG_DEBUG_INFO
构建内核树步骤:
(1) 下载内核源码包,至/usr/src/,并解压:[root@hh linux-2.6.30] # tar -zxvf linux-2.6.30.tar.gz
(2) [root@hh linux-2.6.30] # make mrproper
(3) [root@hh linux-2.6.30] # make menuconfig ;并配置上面的选项(可以只配置需要的几项,也可以在.config文件中配置)
(4) 编译: [root@hh linux-2.6.30] # make
(5) 编译模块: [root@hh linux-2.6.30] # make mod
ules
(6) 安装模块: [root@hh linux-2.6.30] # make modules_install
(7) 安装:[root@hh linux-2.6.30] # make install
现在,看看你的 /lib/modules/ 目录吧,