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的更多相关文章
随机推荐
- 携手互联网企业10巨头设VC基金
包括小米科技.盛大集团.人人网.掌趣科技.游族网络.龙图游戏.蓝港互动.37游戏.星辉互动娱乐.博雅互动等10家知名互联网企业作为出资人(LP)的优格创投基金近日正式成立. 众所周知,伴随着移动互联网 ...
- MyEclipse的代码自动提示功能
一般默认情况下,Eclipse ,MyEclipse的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...
- 文件/文件夹权限设置命令chmod的具体使用方法
chmod是文件/文件夹权限设置的命令,在Linux中常常遇到.本博文下面总结chmod的具体使用方法. Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其它othe ...
- 杭电5137How Many Maos Does the Guanxi Worth
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...
- POJ 3613 Cow Relays 恰好n步的最短路径
http://poj.org/problem?id=3613 题目大意: 有T条路.从s到e走n步,求最短路径. 思路: 看了别人的... 先看一下Floyd的核心思想: edge[i][j]=min ...
- leetCode 85.Maximal Rectangle (最大矩阵) 解题思路和方法
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- 为root账户更名
为root账户更名 处于安全考虑许多管理员想把root更名,具体方法如下: 1.先以root登陆系统 2.用vi 编辑/etc/passwd文件,将第一行的第一个root修改为你想要的账户名,然后保存 ...
- C/C++(文件操作二)
二进制读写才是本质 二进制的读写对文件标记不敏感. eg: 对图片进行加密与解密: 用命令的形式去执行: //xx.exe -c src dest 加密 //xx.exe -d src dest 解密 ...
- POJ 1474 Video Surveillance 半平面交/多边形核是否存在
http://poj.org/problem?id=1474 解法同POJ 1279 A一送一 缺点是还是O(n^2) ...nlogn的过几天补上... /********************* ...
- django框架初探
django框架初探 1.web框架介绍 web框架本质是一个socket服务端.每一个端口只能被一个程序监听. web程序分为两个部分: 服务器程序:对socket服务器封装,解析http请求,发送 ...