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文件有简单的了解,回访写
掌握加载、查看、卸载模块的命令
DriverModule_01的更多相关文章
随机推荐
- 创建一个基于ViSP的图片显示程序
创建一个图片读取,并在windows下窗口显示的程序. #include <visp/vpDisplayD3D.h> #include <visp/vpDisplayGDI.h> ...
- 《一》安装 TP5
tp5 官方参考手册:http://www.kancloud.cn/manual/thinkphp5/118008 我这里采用的是 composer 安装,如果您没有安装 composer 的话 tp ...
- 通用查询实现方案(可用于DDD)[附源码] -- 简介
原文:通用查询实现方案(可用于DDD)[附源码] -- 简介 [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [ ...
- 一招制胜---详解分布式系统里session同步
一招制胜---详解分布式系统里session同步 几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同 ...
- CSUOJ 1635 Restaurant Ratings
1635: Restaurant Ratings Time Limit: 1 Sec Memory Limit: 128 MB Description A famous travel web sit ...
- DataGirdView 常用操作
1.将数据源的某列添加到已有DataGirdView的列 例如:将文件夹下所有文件名添加到DataGirdView 的文件名一列,图片如下: 首先在datagridview把文件名列的DATAPROP ...
- 华为OJ平台试题 ——数组:整形数组合并
代码: /* * 将两个整型数组依照升序合并,而且过滤掉反复数组元素 */ #include <stdio.h> #define N 256 #define M 512 /* * 合并数组 ...
- SQL两表之间:依据一个表的字段更新还有一个表的字段
1. 写法轻松.更新效率高: update table1 set field1=table2.field1, field2=table2.field2 from table2 where table1 ...
- SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?
測试策略:静态測试还是动态測试? [对话场景] 成功公布某个软件版本号之后,项目团队召开了项目的经验教训总结大会.在会议期间,项目经理小项和測试经理小測进行了例如以下的对话: 小项:"小測, ...
- QVBoxLayout移除控件之后没有消失
想在QWidget里面动态的添加和删除控件,给QWidget设置了一个布局管理器QVBoxLayout,要删除控件可以 使用QVBoxLayout::removeWidget(QWidget *w)方 ...