02_DriverModule

itop4412学习记录​​​​​​​

 

2.1 最简Linux驱动

 

(1)最简Linux驱动——必备的头文件

• Linux头文件位置

– 类似#include <linux/module.h>的头文件,它们是在Linux源码目录下的include/linux/module.h

• #include <linux/module.h>头文件

– 所有的Linux 代码必须遵循GPL 协议,如果不知道Linux 的GPL 协议,去查一下资料

– 如果你不声明GPL 协议,你的模块将无法在Linux 中使用的

– MODULE_LICENSE(_license)添加遵循GPL协议,必须的!

– MODULE_AUTHOR(_author)代码作者

• #include <linux/init.h>

– 包含初始化宏定义的头文件,代码中的函数module_init和module_exit在此文件中

– 入口函数module_init(x)

– 出口函数module_exit(x)

• 新建.c文件

– mini_linux_module.c

(2)最简Linux驱动——模块的入口和出口

• module_init(hello_init);

– /*初始化函数*/

• module_exit(hello_exit);

– /*卸载函数*/

(3)最简Linux驱动——声明区

• 声明区

– MODULE_LICENSE("Dual BSD/GPL");

– /*声明是开源的,没有内核版本限制*/

– 必须有

– MODULE_AUTHOR("TOPEET");

– /*声明作者*/

– 可有可无

(4)最简Linux驱动——功能区

• static int hello_init(void){

• printk(KERN_EMERG "Hello World enter!\n");

• /*打印信息,KERN_EMERG表示紧急信息*/

• return 0;

• }

• static void hello_exit(void)

• {

• printk(KERN_EMERG "Hello world exit!\n");

• }

(5)最简Linux驱动

代码如下:

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("TOPEET");
static int hello_init(void)
{
        printk(KERN_EMERG "Hello World enter!\n");
        return 0;
}

static void hello_exit(void)
{
        printk(KERN_EMERG "Hello World exit!\n");
        return 0;
}
module_init(hello_init);
module_exit(hello_exit);

2.2 驱动模块的编译

• Linux的驱动可以和Linux源码放在一起编译,也可以单独拿出来编译。

– 为了理解整个Linux内核编译过程,可以从学习Linux模块的编译入手

• Makefile文件

– 单独编译驱动需要写一个Makefile文件

• 编写Makefile文件的最好方式是“依葫芦画瓢”

– 以后可能会碰到各种脚本,脚本的语法是学不完的

(1)Makefile文件

代码如下:

#!/bin/bash
obj-m += mini_linux_module.o
KDIR := /home/topeet/iTop4412_Kernel_3.0
PWD ?= $(shell pwd)
all:
        make -C $(KDIR) M=$(PWD) modules
clean:
        rm -rf *.o

(2)编译流程分析

2.3 实验操作

(1)编译文件

• 拷贝两个文件到虚拟机,执行Make命令,编译生成KO文件

– 在window下写的Makefile文件拷贝到Linux中可能会有点小问题需要修改

– 主要是Tab问题

– all和clean参数后面的必须添加Tab键,否则会报错“*** missing separator.Stop”

• 编译会生成KO文件,KO就是驱动模块

(2)加载模块和卸载模块

• 开发板运行最小Linux系统

• 使用U盘(或者TF卡),将KO文件拷贝到Linux最小系统

– 最小系统给大家提供,直接烧写即可

• 加载U盘

– 参考使用手册

• 加载模块、查看模块、卸载模块

– insmod加载模块命令

[root@iTOP-4412]# insmod mini_linux_module.ko

[ 2608.143312] Hello World enter!

 

– lsmod查看模块命令

[root@iTOP-4412]# lsmod

mini_linux_module 700 0 - Live 0xbf000000

 

– rmmod卸载模块命令,主要不带ko后缀。

[root@iTOP-4412]# rmmod mini_linux_module

[ 2702.380147] Hello World exit!

2.4 小结

• linux代码中记得添加GPL协议

• 掌握驱动入口和出口函数的调用(也可以说是宏的调用)

• 对Makefile文件有简单的了解,会仿写

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snaking616

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值