最小驱动模块:

最简单的Makefile

无配置文件

最小驱动的四部分

  头文件

  声明模块信息

  模块驱动的入口、出口

  功能区

关于这个头文件的分析:

linux头文件的位置,例如#include<linux/module.h>的头文件,

它是在linux源码目录下的 include/linux/module.h文件。

头文件的内容主要有,GPL协议,如果你不声明GPL协议,

你的模块将无法在linux中使用。

#include<linux/init.h>

包含初始化宏定义的头文件,代码中的函数module_init和module_exit

在此文件中

入口函数module_init(x)

出口函数module_exit(x)

写一个整体的例子:

新建文件 mini_linux_module.c

#include<linux/init.h>

#include<linux/module.h>

MODULE_LICENSE(" Dual BSD/GPL");  //一个协议

MODULE_AUTHOR("TOPEET")           //作者

//下面这里是功能区

static init hello_init(void)

{

printk(KERN_EMERG "HELLO WORLD enter ! \n");  //进入的时候打印文字  ,红字部分是权限

return 0;

}

static init hello_exit(void)

{

}

module_init(hello_init);

module_init(hello_exit);

上面代码已经写完了。

下面是驱动模块的编译,

一般和linux源码放在一起编译,

这样可以省掉makefile文件。

编译流程分析:

make命令

会调用makefile

系统会进行linux模块的编译

查找用的哪个linux源码

搜集信息

返回到linux模块编译

找到要编译的.c文件

生成.ko文件

实验操作部分:

拷贝两个文件到虚拟机,执行Make命令,编译生成KO文件

在window下写的Makefile文件拷贝到Linux中可能会有点小问题

主要是Tab问题

all和clean参数后面的必须添加Tab键,

否则会报错“*** missing separator Stop”

编译会生成KO文件,KO就是驱动模块。模块就需要加载模块和卸载模块。

开发板运行最小linux系统

使用U盘(或者tf卡),将KO文件拷贝到linux最小系统

加载U盘 mount /dev/sda1   /mnt/udisk/ (查看使用手册)

加载模块、查看模块、卸载模块

insmod加载模块命令

lsmod查看模块命令

rmmod卸载模块命令

小结:

linux代码中记得添加GPL协议

掌握驱动入口和出口函数的调用(也可以说是宏的调用)

对Makefile文件有简单的了解,回访写

掌握加载、查看、卸载模块的命令

最新文章

  1. [LeetCode] Find Right Interval 找右区间
  2. 探秘Tomcat——启动篇
  3. UML类图详解
  4. error MSB4019: 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets”
  5. js获取IP地址方法总结_转
  6. HALCON基础知识
  7. Asp.Net 之 下载文件的常用方式
  8. VM11里安装ubuntukylin-16.04-desktop-amd64遇到问题
  9. Cocos2d-x教程(30)-3.x版本号物理引擎的使用
  10. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](七)
  11. 开机小脚本自动打开sublime text 和git-bash
  12. PHP 验证身份证
  13. ajax 删除数据无刷新
  14. BZOJ1468Tree——点分治
  15. Hdu 5072 Coprime(容斥+同色三角形)
  16. 实现接口时@Override注解问题
  17. 两个有用Oracle运算:intersect和minus运算
  18. BZOJ 2462 矩阵模板(二维hash)
  19. C++的一大误区——深入解释直接初始化与复制初始化的区别
  20. 《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇

热门文章

  1. 路径+DataRow+SqlPara防止sql注入
  2. Java:网络传输
  3. R学习:《R语言数据分析与挖掘实战》PDF代码
  4. java中锁的理解
  5. 休假结束,Linus重回内核开发岗位
  6. 关于“ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (2)”的解决。
  7. 搭建专属于自己的Leanote云笔记本
  8. Flask--Python中常用的Web框架之一
  9. 參考mudo logging写的win下logging
  10. Android上玩玩Hook?