我的第一个Linux驱动实验
字符驱动重要
file_operations 的结构体 对应函数的实现
驱动模块的加载和卸载
module_init(xxx_init); module_exit(xxx_exit); | //注册模块加载函数 //注册模块卸载函数 |
linux驱动存在的两种方式,一种直接将驱动编译进内核,编译生成
步骤:
mkdir /linux/Linux_Drivers
cd Linux_Drivers
mkdir 01_chrdevbase
通过VSCODE打开文件夹
添加中文输入法
https://blog.csdn.net/2201_75902080/article/details/131648821
编译需要内核路径
/home/zuozhongkai/linux/atk-mp1/linux/my_linux/linux-5.4.31
加载驱动模块
cp chrdevbase.ko /home/tcl/linux/nfs/rootfs/lib/modules/5.4.31/
depmod //一个驱动模块 第一次加载时候执行
modprobe chrdevbase.ko //加载
rmmod chrdevbase //卸载
chrdevbase: loading out-of-tree module taints kernel.
chrdevbase: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint
字符设备注册与注销
查看设备号
cat /proc/device
-sh: cat : not found
查函数包含到那个头文件
man 2 read read函数包含在那个头文件
arm-none-linux-gnueabihf-gcc chrdevbaseApp.c -o chrdevbaseApp
cp chrdevbase.ko chrdevbaseApp /home/tcl/linux/nfs/rootfs/lib/modules/5.4.31/
copy之后重新加载
modprobe chrdevbase.ko //加载
rmmod chrdevbase //卸载
添加节点
mknod /dev/chrdevbase c 200 0
查看节点
ls /dev/