最简Linux驱动

原创 2016年08月13日 21:28:34

一、实验目的:编写Linux最简驱动


二、实验平台

迅为itop4412开发板(开发板运行Linux最小系统)


三、实验流程:

(1)了解最简驱动:包含头文件;模块信息声明;模块驱动的入口、出口;功能实现四个部分。

Linux头文件:它们是在Linux源码目录下的:include/linux/
信息声明:所有的Linux 代码必须遵循GPL 协议,如果不声明GPL 协议,模块将无法在Linux 中使用。
– MODULE_LICENSE(_license)添加遵循GPL协议,必选!
– MODULE_AUTHOR(_author)代码作者,可选!

– 入口函数module_init(x)
– 出口函数module_exit(x)


(2)实现代码:
    /*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/
    #include <linux/init.h>
    /*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/
    #include <linux/module.h>

    /*初始化*/
    static int __init hello_init(void)
    {
        printk(KERN_EMERG "HELLO WORLD enter!\n");
        return 0;
    }

    /*退出*/
    static void __exit hello_exit(void)
    {
        printk(KERN_EMERG "HELLO WORLD exit!\n");

    }
    /*入口*/
    module_init(hello_init);
    /*出口*/
    module_exit(hello_exit);

    /*声明*/
    MODULE_LICENSE("Dual BSD/GPL");/*遵循的协议;必须的*/
    MODULE_AUTHOR("star sky");
    MODULE_DESCRIPTION("Linux the simplest driver");
    MODULE_VERSION("V1.0");

(3)Makefile

单独编译模块的话,需要我们写一个Makefile文件,正如迅为的教程说的一样,我们学会仿写即可。

    #!/bin/bash
    #通知编译器我们要编译模块的哪些源码
    #这里是编译itop4412_hello.c这个文件编译成中间文件itop4412_hello.o
    obj-m += mini_linux_module.o 

    #源码目录变量,这里用户需要根据实际情况选择路径
    #作者是将Linux的源码拷贝到目录/home/topeet/android4.0下并解压的
    KDIR := /home/topeet/android4.0/iTop4412_Kernel_3.0

    #当前目录变量
    PWD ?= $(shell pwd)

    #make命名默认寻找第一个目标
    #make -C就是指调用执行的路径
    #$(KDIR)Linux源码目录,作者这里指的是/home/topeet/android4.0/iTop4412_Kernel_3.0
    #$(PWD)当前目录变量
    #modules要执行的操作
    all:
        make -C $(KDIR) M=$(PWD) modules

    #make clean执行的操作是删除后缀为o的文件
    clean:
        rm -rf *.o

(4)编译

流程分析:
这里写图片描述

    我们将最简驱动和Makefile文件拷贝到ubuntu下,注意放到一个文件夹,然后make,成功编译后,文件夹下就有驱动模块:.ko文件。这样最简驱动就完成了。

(5)测试

    使用U盘或者TF卡,当然也可以使用更方便的tftp下载或者NFS系统方式,将.ko文件拷贝到开发板上.加载命令为:insmod ;查看命令:lsnod ;卸载命令:rmmod.
    加载:insmod XXX.ko
可在终端看到:HELLO WORLD enter!
    卸载:
可在终端看到:HELLO WORLD exit!
这样最简驱动编写就完成了!!

四、感谢:

此次实验参照迅为驱动教程进行操作。
版权声明:原创文章转载请注明出处。

5-1. 约分最简分式(15)

分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达...
  • rabbit8848
  • rabbit8848
  • 2014年06月16日 20:15
  • 1303

PTA 5-24 约分最简分式

分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整...
  • weixin_37571609
  • weixin_37571609
  • 2017年04月01日 21:08
  • 136

C++ 最简真分数(九度OJ 1465)

题目描述: 给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。 输入: 输入有多组,每组包含n(n 当n=0时,程序结束,不需要处理这组数据。 ...
  • cr496352127
  • cr496352127
  • 2016年09月07日 11:19
  • 535

matlab将矩阵化成行最简形

matlab将矩阵化成行最简形的命令是rref或rrefmovie。 函数 rref或rrefmovie 格式  R = rref(A)         %用高斯—约当消元法和行主元法求...
  • astandoffish
  • astandoffish
  • 2017年09月02日 20:28
  • 1158

5-24 约分最简分式

分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整...
  • sunhero2010
  • sunhero2010
  • 2015年10月20日 22:14
  • 784

1123: 【C语言训练】列出最简真分数序列*

题目描述 按递增顺序依次列出所有分母为40,分子小于40的最简分数。 输入 输出 分数之间用逗号分开(含最末逗号) 样例输入 样例输出 1/40,3/40,7/40,9/40,1...
  • qq_26570353
  • qq_26570353
  • 2016年04月03日 12:02
  • 1239

c语言练习 5-1. 约分最简分式(15)

分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达...
  • huozhiwu0424
  • huozhiwu0424
  • 2014年07月10日 14:11
  • 2762

1062. 最简分数(20) python篇

1062. 最简分数(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standa...
  • zjw_python
  • zjw_python
  • 2017年03月27日 16:26
  • 333

5-24 约分最简分式 (15分)

#include #include #include #include #include using namespace std; int main() { int m,n; ...
  • acmmiao
  • acmmiao
  • 2016年05月24日 23:25
  • 456

最大公约数的简单算法

最大公约数
  • xiakejiang
  • xiakejiang
  • 2016年06月03日 16:25
  • 321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最简Linux驱动
举报原因:
原因补充:

(最多只允许输入30个字)