Linux设备驱动开发

 内核模块:

 

内核模块功能介绍

    Linux 提供了这样的一种机制:编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码可被动态地加载到内核中;这种机制被称为模块(Module)。模块具有以下特点。

1、模块本身不被编译入内核映像,从而控制了内核的大小。

2、模块一旦被加载,它就和内核中的其他部分完全一样.

常用命令

    1、insmod:加载内核模块,譬如insmod ./hello.ko

    2、modprobe:modprobe命令比insmod命令要强大,

    它在加载某模块时会同时加载该模块所依赖的其他模块。

    3、lsmod:获得系统中加载了的所有模块以模块间的依赖关系,该命令通过读取/proc/modules文件获取信息。

    4、modinfo:使用 modinfo <模块名>命令可以获得模块的信息,包括模块的作者、模块的说明、模块所支持的参数以及vermagic。

 

内核模块程序结构

一个Linux 内核模块主要由以下几个部分组成。

1、模块加载函数(init必须)。

当通过 insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相

关初始化工作。

2、模块卸载函数(exit必须)。

当通过 rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能。

3、模块许可证声明(必须)。

模块许可证(LICENSE)声明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时,将收到内核被污染

(kernel tainted)的警告。在 Linux 2.6 内核中,可接受的LICENSE 包括“GPL”、“Dual BSD/GPL”等。大多

数情况下,内核模块应遵循GPL 兼容许可权。

注:不声明模块许可,会导致无法会使用内核提供的众多API.

4 模块参数(可选)。

模块参数是模块被加载的时候可以被传递给它的值,它本身对应模块内部的全局变量。

5 模块导出符号(可选)。

内核模块可以导出符号(symbol,对应于函数或变量),这样其他模块可以使用本

模块中的变量或函数。

6、模块作者等信息声明(可选)。

 

Linux设备总体介绍

n  字符设备

    一个字符( char ) 设备是一种可以当作一个字节流来存取的设备( 如同一个文件 );

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值