Linux内核初探
花里胡哨:
ls -a 显示隐藏文件,即.***
Y 编译内核 N 不编译内核 M 模块编译
make -j4 zImage
CC 一个.o ;LD 一个目标下的.o
Linux内核的基本概念
Linux驱动程序开发基础
-
内核模块编程
-
驱动模块化编程的好处
- 驱动编译进内核,导致内核非常大
- 很多驱动都只是在特定机器上使用
- 实现热插拔提供基础
-
模块编程的代码实例
- 实例验证hello.ko模块
-
Makefile的写法
- 其他
- 模块位置可以随意放置
- 内核代码更新,模块代码也要更新
-
驱动程序访问硬件的特殊性
-
Linux设备模型:最初目的是实现只能电源管理
-
kobject
-
一个设备驱动会建立一个kobject,偶尔也有因为功能复杂的原因而建立多个kobject。
-
koject会有一个一个kobj_type属性。
- entry :本人所在目录
- parent:父节点
- kset:一组类似性质的kobject集合
- ktype:类型
- kref:这个对象的引用计数
-
kobject一般都是sysfs中的一个目录,从而形成对用户空间的交互。
-
引用计数kref。
-
kset:一组类似性质的kobject集合;一个kset也就是一个子系统,它是sysfs的一个顶层目录的表征。比如block子系统,各种总线子系统。
-
sysfs:虚拟文件系统(管理内核的设备而非磁盘,它是kobject对象的完整视图)
-
主要api(sysfs_create_file; sysfs_create_link; sysfs_remove_file; sysfs_remove_link)
-
提供丰富的内核和用户空间交互的手段
-
sysfs主要目录结构
- block:块设备,独立于所链接的总线。
- devices:被所有内核识别的硬件设备,依照链接他们的总线对其进行组织。
- bus:系统中用于连接设备的总线
- drivers:在内核中注册的设备驱动程序
- class:系统中设备的类型(声卡,网卡,显卡等);同一类可能包含由不同总线连接的设备,于是由不同的驱动程序驱动。
- power:处理一些硬件设备电源状态的文件。
- firmware:处理一些硬件设备固件的文件。
-
udev:处理热插拔机制,通过设备驱动加载时,注册kobject后,向用户空间发送uevent实现的。
-
Linux驱动的分类
-
Linux内核的基本调试方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)