linux驱动学习笔记(一)

1. linux下的C编程特点

  if/forwhile/switch语句,“{"不另起一行

if和for只有一行代码,不要使用"{ }";对于函数需要另起一行使用"{ }"。

2. switch case 语句switch 与 case 对齐使用

3. 内核模块的加载,卸载,显示命令

insmod 加载内核模块

rmmod  卸载内核模块

lsmod 显示当前内核模块,对应/pro/modules文件

4. linux内核模块程序结构

⑴模块加载函数(一般需要)

⑵模块卸载函数(一般需要)

⑶模块许可证声明(必须)

⑷模块参数(可选)

⑸模块导出符号(可选)

⑹模块作者等信息声明(可选)

5. 模块加载函数

static int __init initialization_function(void)

{

/*初始化代码*/

}

module_init (initialization_function);

模块的加载必须以module_init(函数名)的形式被指定;

6. 模块卸载函数

static int __exit cleanup_function(void)

{

/*释放代码*/

}

module_exit(cleanup_function);

模块在卸载的时候不返回任何值,必须以module_exit(函数名)的形式来指定。

7. 模块加载和卸载完成的功能

1)若模块加载函数时注册了XXX,则模块卸载函数应该注销XXX。

2)若模块加载函数动态申请了内存,则模块卸载函数应释放该内存。

3)若模块加载函数申请了硬件资源(中断、DMA通道、I/O端口和I/O内存等)的占用,则模块卸载函数应该释放掉这些硬件资源。

4)若模块加载函数开启了硬件,则卸载函数中一般要关闭之。

8. 模块的使用计数

linux 2.4内核中模块在身通过MOD_INC_USE_COUNT、MOD_DEC_USE_COUNT宏来管理自己被使用的次数。

linux 2.6内核提供了管理接口try_module_get(&module)和module_put(&module),取代了2.4内核中的模块使用计数管理宏。

int try_module_get(struct module *module);返回0表示调用失败,

void module_put(struct module *module);用于减少模块的计数。

只有当前设备不再被使用时,模块才允许被卸载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值