Linux字符设备驱动
+ -

Linux驱动 简介

2023-06-07 41 0

Linux对驱动有两种处理方式

一、将驱动直接编译进内核,即将驱动做为内核文件一部分,其由do_initcalls()实现驱动函数的实始化,一般在使用make menuconfig进行裁剪时,配置驱动模块为y
二、将驱动以模块的方式进行动态加载:
加载驱动模块命令为:insmode : insmod xx.ko
卸载驱动模块命令为:rmmod : rmmod:xx(模块的名称)

使用menu config配置linux内核时(包括驱动),其主要有三种方式
配置为obj-y=xx.o 表示编译进内核
配置为obj-m=xx.o 表示编译成模块,使用modinstall加载
不配置表示不进行编译

linux驱动模块配置
在这个图中,(M)表示以模块的方式编译,即最终生成此驱动的.ko文件,如本图中的I2C驱动;*表示选中编译,即将此驱动编译进内核;驱动前为空表示不进行此驱动编译

驱动的出入口函数

在加载每一个驱动时,都应告诉这个驱动模块的出入口函数,Linux驱动使用2个宏来进行注册声名出入口函数,这两个宏在头文件include/linux/init.h中,在驱动中可以直接使用#include<init.h>来引用

  • 模块的入口宏函数:mode_init(驱动入口函数)
  • 模块的出口宏函数:mode_eixt(驱动卸载函数)

驱动的相关声名

Linux驱动在编写时应告诉内核一些自身的信息,这些信息包括开发者、遵循的协议等,在头文件include/linux/module.h中,在驱动开发时可以直接引用,如#include<module.h>

遵循的协议

MODULE_LICENSE(_LICENSE) 用来声名此模块的许可证,根据实际情况进行配置,这里以配置为’GPL’协议为例,可使用如下方式进行配置:

MODULE_LICENSE("GPL");

如里没有对驱动模块进行许可声明,当然驱动也可以用,不过在加载的时候,内核会提示被污染的警告

作者的声名

MODULE_AUTHOR(作者名),如

module_author("www.bytekits.com");

驱动描述的声名

驱动描述用一段文字来介绍这个驱动,使用
MODULE_DESCRIPTOR(“hello www.bytekits.com”);(描述)来进行声名,如

MODULE_DESCRIPTOR("hello www.bytekits.com");

0 篇笔记 写笔记

Linux驱动 简介
Linux对驱动有两种处理方式一、将驱动直接编译进内核,即将驱动做为内核文件一部分,其由do_initcalls()实现驱动函数的实始化,一般在使用make menuconfig进行裁剪时,配置驱动模块为y二、将驱动以模块的方式进行动态加载: 加载驱动模块命令为:insmode : insmod ......
Linux驱动 字符设备
Linux驱动按类型分类字符设备,块设备,网络设备和其它设备。字符设备字符设备驱动编写时按如下步骤:1.申请设备号2.设备初始化3.设备注册设备号 Linux字符设备驱动需要一个设备号,这个设备号为一个32位的无符号整数,其中高12位代表主设备号,低20位表示次设备号。 主设备号在形式上标识这......
LINUX驱动模块MakeFile详解
MakeFile的写法一般如下:CURRENT_PATH:=$(shell pwd) #模块所在的当前路径Linux_Kernel:=$(shell uname -r) #linux内核代码的当前版本Linux_Kernel_PATH:=/home/book/100ask_imx6ull......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!