最小驱动模块:

最简单的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. 创建一个基于ViSP的图片显示程序

    创建一个图片读取,并在windows下窗口显示的程序. #include <visp/vpDisplayD3D.h> #include <visp/vpDisplayGDI.h> ...

  2. 《一》安装 TP5

    tp5 官方参考手册:http://www.kancloud.cn/manual/thinkphp5/118008 我这里采用的是 composer 安装,如果您没有安装 composer 的话 tp ...

  3. 通用查询实现方案(可用于DDD)[附源码] -- 简介

    原文:通用查询实现方案(可用于DDD)[附源码] -- 简介 [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html).   [ ...

  4. 一招制胜---详解分布式系统里session同步

    一招制胜---详解分布式系统里session同步 几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同 ...

  5. CSUOJ 1635 Restaurant Ratings

    1635: Restaurant Ratings Time Limit: 1 Sec  Memory Limit: 128 MB Description A famous travel web sit ...

  6. DataGirdView 常用操作

    1.将数据源的某列添加到已有DataGirdView的列 例如:将文件夹下所有文件名添加到DataGirdView 的文件名一列,图片如下: 首先在datagridview把文件名列的DATAPROP ...

  7. 华为OJ平台试题 ——数组:整形数组合并

    代码: /* * 将两个整型数组依照升序合并,而且过滤掉反复数组元素 */ #include <stdio.h> #define N 256 #define M 512 /* * 合并数组 ...

  8. SQL两表之间:依据一个表的字段更新还有一个表的字段

    1. 写法轻松.更新效率高: update table1 set field1=table2.field1, field2=table2.field2 from table2 where table1 ...

  9. SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?

    測试策略:静态測试还是动态測试? [对话场景] 成功公布某个软件版本号之后,项目团队召开了项目的经验教训总结大会.在会议期间,项目经理小项和測试经理小測进行了例如以下的对话: 小项:"小測, ...

  10. QVBoxLayout移除控件之后没有消失

    想在QWidget里面动态的添加和删除控件,给QWidget设置了一个布局管理器QVBoxLayout,要删除控件可以 使用QVBoxLayout::removeWidget(QWidget *w)方 ...