DriverModule_01
最小驱动模块:
最简单的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文件有简单的了解,回访写
掌握加载、查看、卸载模块的命令
最新文章
- [LeetCode] Find Right Interval 找右区间
- 探秘Tomcat——启动篇
- UML类图详解
- error MSB4019: 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets”
- js获取IP地址方法总结_转
- HALCON基础知识
- Asp.Net 之 下载文件的常用方式
- VM11里安装ubuntukylin-16.04-desktop-amd64遇到问题
- Cocos2d-x教程(30)-3.x版本号物理引擎的使用
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](七)
- 开机小脚本自动打开sublime text 和git-bash
- PHP 验证身份证
- ajax 删除数据无刷新
- BZOJ1468Tree——点分治
- Hdu 5072 Coprime(容斥+同色三角形)
- 实现接口时@Override注解问题
- 两个有用Oracle运算:intersect和minus运算
- BZOJ 2462 矩阵模板(二维hash)
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- 《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇
热门文章
- 路径+DataRow+SqlPara防止sql注入
- Java:网络传输
- R学习:《R语言数据分析与挖掘实战》PDF代码
- java中锁的理解
- 休假结束,Linus重回内核开发岗位
- 关于“ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (2)”的解决。
- 搭建专属于自己的Leanote云笔记本
- Flask--Python中常用的Web框架之一
- 參考mudo logging写的win下logging
- Android上玩玩Hook?