从0学Linux驱动 模块化编程-4
作者网站:https://blog.csdn.net/daocaokafei/article/details/108513929
内核驱动代码示例
内核代码是运行在内核空间的。内核空间是一个非常大的一个应用程序。所有的代码都运行在一起。为了让如此大量的内核可以有效组织在一起。代码开发要遵守内核的开发协议。
- 需要加载头文件
#include<linux/init.h>
#include<linux/moudle.h>
- 遵守GPL协议
- 模块加载,模块卸载程序
module_init(functionName);
module_exit(functionName);
注意事项:
对于C语音中static和Java中static中作用不一致
staic function 表示该函数仅该文件可见例如该文件为helloModule.c 中定义了static void hello_init(void)可以在wordModuld.c中同样定义static void hello_init(void)。如果不使用static则无法编译通过。
其中参数的void是不允许省略的。因为在C语音编译的时候参数也是参与编译。
printk 与printf功能相同,printf是在用户态代码执行的。printk是在内核态使用的。为啥会有这个区别,我现在也说不清楚。先记住就好了。
代码编译使用make命令。
lsmod 显示模块
lsmod dmesg
使用printk打印的Log,可以通过dmesg查看
心得:make过程非常糟心。编译不过。注意事项,文件夹中不要用空格,中文等字符。后面把作者的代码全Copy后才编译过。编译这块远远没有Android Studio编译兼容性好。
图片.png
insmod/rmmod
使用dmesg查看
代码地址:https://github.com/jiahengcen/LinuxCode/tree/master/code1
网友评论