用到的命令
命令 | 作用 |
---|---|
insmod | install module |
rmmod | remove module |
dmesg | debug print message |
lsmod | list module |
od | dump files in octal,默认十进制读目标,-x 16进制 |
用上节编写的LKM-刘姥姥进行试验
加载编译LKM:
sudo insmod llaolao.ko
该命令需要superuser权限。
32bit系统大于e000000;属于内核地址。
lsmod一下我们的刘姥姥已经临时驻扎在系统内核了:
sudo rmmod llaolao
虚拟文件系统:
/sys/module/llaolao/section/
设备驱动模型
LKM方式
bus and core layers
Linux Device Model(LDM)
即插即用
内核态
用户态支持即插即用:udevd
规则匹配:用户态和内核态之间位于:
/etc/udev/rules.d
注册设备属性
显示某设备的详细信息:
bash>udevinfo -a -p /sys/block/sr0
Kobjects-内核对象
在 include/linux/kobject.h
虚拟文件系统:
/dev文件系统
bash>ls -l/dev
延迟任务执行
windows上叫dpc,Linux叫Tasklets
可以让中断快速结束。
常用头文件:慢慢熟悉吧
常用函数:慢慢熟悉吧
按传输类型分为:
- 字符设备(键盘……)
- -块设备(硬盘……)
例如字符设备需要:
- init()注册
- open,read,ioctl,llseek.
- 中断处理函数
需要处理的数据结构:
- cdev
- file_operations:很多回调函数
- 文件
举例:
System CMOS
通过端口(dig)
70索引
71读写
分类 | 组成 |
---|---|
经典PC结构 | 南桥和北桥 |
典型SOC架构(手机上) | 串行总线 |
cd ~到达工作目录
内核模块相关函数:
- copy_to_user()
- copy_from_user()
访问用户态内存,防崩溃。