从0学Linux驱动 模块化编程4


从0学Linux驱动 模块化编程-4

作者网站:https://blog.csdn.net/daocaokafei/article/details/108513929


内核驱动代码示例

内核代码是运行在内核空间的。内核空间是一个非常大的一个应用程序。所有的代码都运行在一起。为了让如此大量的内核可以有效组织在一起。代码开发要遵守内核的开发协议。

  1. 需要加载头文件
#include
#include
  1. 遵守GPL协议
  2. 模块加载,模块卸载程序
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则无法编译通过。

c语言中static关键字用法详解

其中参数的void是不允许省略的。因为在C语音编译的时候参数也是参与编译。
printk 与printf功能相同,printf是在用户态代码执行的。printk是在内核态使用的。为啥会有这个区别,我现在也说不清楚。先记住就好了。

命令

代码编译使用make命令。

lsmod 显示模块


lsmod
dmesg

使用printk打印的Log,可以通过dmesg查看

心得:make过程非常糟心。编译不过。注意事项,文件夹中不要用空格,中文等字符。后面把作者的代码全Copy后才编译过。编译这块远远没有Android Studio编译兼容性好。


图片.png

insmod/rmmod
使用dmesg查看

图片.png

代码地址:https://github.com/jiahengcen/LinuxCode/tree/master/code1

你可能感兴趣的:(从0学Linux驱动 模块化编程4)