前置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
查看设备节点
驱动注册成功生成设备节点
ls /dev/ 查看加载的设备
查看设备号
主设备号
cat /proc/devices
包括字符设备和块设备
MISC设备驱动次设备号
cat /proc/misc
主次设备号等信息
ls /dev/dev_name -al
查看类
class_create函数创建成功后,使用命令ls /sys/class查看

查看设备
device_create函数创建成功后,使用命令ls /dev/查看

查看已加载的模块
lsmod

设备树
查看设备树节点
ls /proc/device-tree
查看设备树属性
在设备树相应目录下,cat [Properties]
查看内核打印信息
dmesg

查看设备树节点
ls /proc/device-tree

https://zhuanlan.zhihu.com/p/425420889 文章记录

1、字符设备

1-1、加载驱动模块

1
2
比如
insmod drv.ko

如果drv.ko设备存在了依赖关系,那么就必须先加载所依赖的模块,再加载drv.ko。
如果不想去关注依赖关系,可以采用modprobe进行驱动的加载。
驱动加载路径/lib/modules/目录中查找模块默认下的情况

1-2、卸载驱动

可以采用

1
rmmod drv.ko

或者

1
modprobe -r drv.ko

1-3、工程创建

打开 VSCode,按下“Crtl+Shift+P”打开 VSCode 的控制台,然后输入
“C/C++: Edit configurations(JSON) ”,打开 C/C++编辑配置文件

需要添加3个头文件的路径、Linux源码下的include、
arch/arm/include 和 arch/arm/include/generated 这三个目录的路径

2 、第一个驱动编写chardevbase

  • 第一步:写驱动的入口
    1
    2
    module_init(); //入口
    module_exit(); //出口
  • 第二步:注册入口函数
    注册函数怎么写?去kernel源码搜索module_init,看别人是怎么写的。