zoukankan      html  css  js  c++  java
  • 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 ! ");  //进入的时候打印文字  ,红字部分是权限

    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文件有简单的了解,回访写

    掌握加载、查看、卸载模块的命令

  • 相关阅读:
    pandas DataFrame.shift()函数
    pandas DataFrame applymap()函数
    pandas的qcut()方法
    pandas DataFrame(3)-轴
    pandas DataFrame(4)-向量化运算
    pandas通过皮尔逊积矩线性相关系数(Pearson's r)计算数据相关性
    pandas DataFrame(2)-行列索引及值的获取
    pandas DataFrame(1)
    numpy数组(5)-二维数组的轴
    numpy数组(4)-二维数组
  • 原文地址:https://www.cnblogs.com/chulin/p/10354090.html
Copyright © 2011-2022 走看看