码迷,mamicode.com
首页 > 其他好文 > 详细

第八章 蜂鸣器驱动

时间:2016-07-08 13:38:28      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

1.linux驱动的代码重用(采用标准C程序):分为静态和动态重用

2.如果Linux 驱动要使用第三方的源代码 , 那 么 就不得不编译多个源代码文件 ,最终生成.ko 文件或编译进linux内核

3.在main.c中通过extern关键字使用 fun.c中的函数,通过包含 product.h 文件使用 product.c 文件中的函数

4.这两个宏分别用来标识linux驱动始化函数(main_init)和linux驱动卸载函数,在这两个函数中使用_init和_exit并不是必需的,但使用它们,会提高linux驱动的运行效率。因为这两个宏实际上是编译指令

5.最关键一步是编写Makefile文件代码如下

# Makefile obj-m :=multi_file_driver.o multi_file_driver-y:=main.c fun.c product

6.在 multi_file_driver目录中有一个 build,sh 脚本文件,用于编译和测试本节的示例.

7.卸载这两个 Linux 驱动的顺序正好相反,要先卸载 symboI_consumer ,然后才能卸载symbol_producer,

输入# lsmod|grep symbol可以看到 symbol_prod‘uce庐和 symbol_consumer之 间的依赖关系。

8.depmod 命令用于分析 Linux模块之间的依赖性,这一功能在多个Linux模块之间拥有复杂的依赖关系方面非常有用。使用 depmod分析完 Linux模块的依赖关系后,就可以使用 modprobe 命令装载 Linux模块.modprobe 命令全根据depmod命令生成的 Linux模块依赖关系来装载Linux模块,并不需要像使用insmod命令那样挨个装载 Linux 模块。

首先需要使用下面的命令生成 symbol_producer 和 symbol_consumer 的依赖关系。

#depmod /root/drivers/ch08/driver_shared/export_symbol/symbol_consumer.ko

/root/drivers/ch08/driver_shared/export_symbol/symbol_producer.ko

9.强行卸载linux驱动

(1)初始化函数崩溃:由于 Linux 驱动模块的初始化函数(通过module_init 宏指定的函数〉进行了某些操作而崩溃,从而导致初始化函数无法正常返回.

这种情况的关键是引用计数器的值和引用者不一致.

//使module指向的linux驱动模块的引用计数器加1,成功返回1,失败返回0

static inline int try_module_get(struct module *module)

//使module指向的linux驱动模块的引用计数器减1

externvoid module_put(struct module *module)

(2)卸载函数被阻塞:在使用rmmod命令卸载 Linux 驱动时,系统会调用卸载函数(通过modu le_exit 宏指定的函数),只有卸载函数成功返回肘, Linux 驱动才会被卸载.如果卸载函数被阻塞(可能是死循环,并发等情况引起的阻塞), rmmod命令也会被阻塞.也就是说永远不会执行到卸载 Linux 驱动模块的代码.只要将原来的卸载函数替换成一个空的卸载函数即可.

由于module结构体的地址在内核空间,因此,只能编写linux驱动来卸载另一个linux驱动.

10.蜂鸣器也称为 PWM (脉冲宽度调制),基本原理是通过脉冲来控制蜂鸣器的打开和停止.PWM使用端口F的GPFCON寄存器进行控制.该寄存器在 Linux内核中对应的宏是S3C64XX_GPFCON,,该宏表示 GPFCON 寄存器寄存器的虚拟地址. GPFCON只用了最高两位(30和31位)来控制PWM,当最高两位为10时,打开PWM.为00时停止PWM.所以只需要通过iowrite32函数为 GPFCON 寄存器设置不同的值即可。

11.测试蜂鸣器驱动:

首先进入/root/drivers/ioct1目录,执行build.sh脚本文件编译和上传ioct1文件.

打开PWM:#  ./ioctl/dev/pwm_dev 1 0

停止PWM:#  ./ioctl/dev/pwm_dev 0 0

第八章 蜂鸣器驱动

标签:

原文地址:http://www.cnblogs.com/yqing/p/5653036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!