最小驱动模块:

最简单的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的更多相关文章

随机推荐

  1. JAVA学习书籍

    1 java编程思想(第四版) 2 head first servlet &jsp

  2. 玲珑杯 Round #18 A -- 计算几何你瞎暴力

    因为坐标都在1-10之间,因此可暴力求解 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  3. python 协程学习

    协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来 ...

  4. node.js 中 events emitter 的实现(发布、订阅模式)

    const EventEmitter = require('events'); const myEmitter = new EventEmitter(); myEmitter.on('event', ...

  5. Vuejs2.0构建一个彩票查询WebAPP(3)

    整个工程的目录及截图如下,源码下载    使用心得: 1.了解Vue的生命周期很有必要,详情参见博文Vue2.0 探索之路——生命周期和钩子函数的一些理解 2.Vuex全局状态管理真是美味不可言 st ...

  6. 学习《人人都是产品经理2.0:写给泛产品经理》高清中文PDF+苏杰(作者)

    <人人都是产品经理2.0--写给泛产品经理>将从人开始,以人结束,中间说事,以一个产品从无到有的过程为框架--想清楚.做出来.推出去,外加一章综合案例.其中,最重要的想清楚.做出来.推出去 ...

  7. wordcontent小结

    gitee地址: https://gitee.com/yzpdegit/test 问题描述: 计算一个文件中所包含的单词数,字符个数,行数 需求分析: WordCount的需求可以概括为:对程序设计语 ...

  8. nginx 实现跨域

    nginx 添加头部跨域. location / { add_header 'Access-Control-Allow-Origin' '*'; //允许的域 add_header 'Access-C ...

  9. 脚本实现自动化安装lamp&lnmp

    #备注:前提是将lnmp和lnmp自动化脚本写好放在相应的路径, 脚本已写好,请查看我博客中的 shell脚本 专栏! #!/bin/bash #安装lamp或者lnmp path=/server/s ...

  10. ecshop微信通中微信自动登录的设置方法

    ecshop微信通中微信自动登录的设置方法 来 源:共享世纪 作 者:网络 时间:2015-12-03 点击: 4017 注意:微信自动登录,必须同时满足两个条件: 第一.微信公众号必须是服务号经过认 ...