最小驱动模块:

最简单的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. ORA-01659: 无法分配超出 7 的 MINEXTENTS

    plsql连接出错:ORA-01659: 无法分配超出 7 的 MINEXTENTS (在表空间 PERFSTAT 中) 从 Oracle Database 10g Enterprise Editio ...

  2. mysql安装遇到的坑

    安装mysql的三步: mysqld --initialize-insecure mysqld -install net start mysql 中间遇到了坑, 看这篇文章完美的解决了,记录一下 .以 ...

  3. oracle查询字段大于指定长度的数据

    select * from MES_MACHINE_RECORD t where length(t.bar_code2)<10 ;

  4. ThinkPHP数据分页Page.class.php

    获取分页类 ThinkPHP提供了数据分页的扩展类库Page,能够在http://www.thinkphp.cn/extend/241.html下载,或者下载官方的完整扩展包(http://www.t ...

  5. SelectSort

    /**简单选择排序*/ #include<cstdio> #include<algorithm> using namespace std; int a[]={5,2,1,3,4 ...

  6. Python标准库:内置函数ascii(object)

    这个函数跟repr()函数一样,返回一个可打印的对象字符串方式表示.当遇到非ASCII码时,就会输出\x,\u或\U等字符来表示. 与Python 2版本号里的repr()是等效的函数. 样例: #a ...

  7. TXT小说朗读正式版

    作者:www.gudianxiaoshuo.com 干净清洁的小说朗读软件,支持 TXT阅读.语音朗诵.点评标注.数据挖掘

  8. 设计模式实例(Lua)笔记之六(Adapter模式)

    1.描写叙述 "我"在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共同拥有 700 多号人,包含子公司,这个项目还是比較简单的,分为三 ...

  9. 聊聊高并发(十九)理解并发编程的几种&quot;性&quot; -- 可见性,有序性,原子性

    这篇的主题本应该放在最初的几篇.讨论的是并发编程最基础的几个核心概念.可是这几个概念又牵扯到非常多的实际技术.比方Java内存模型.各种锁的实现,volatile的实现.原子变量等等,每个都可以展开写 ...

  10. js插件---jqGrid插件如何使用

    js插件---jqGrid插件如何使用 一.总结 一句话总结:jqdrid还是依赖加js初始化的方式,很多时候插件的问题一般都是引入的css和js的问题,jqgrid里面遇到的问题就是下载包有一些js ...