第8章:
本章主要讲了蜂鸣器的实现原理,实现完整的蜂鸣器驱动。主要用到的是pwm驱动,pwm由多个文件组成。
首要介绍的是Linux驱动代码的重用。编译是由多个文件组成的Linux驱动。两个完整的linux驱动是word_count和led驱动,都是由一个源代码文件组成(.c)。但对于复杂的linux驱动需要使用多个源代码文件存放不同功能代码,最终生成ko文件或linux内核。
接着是Linux驱动模块依赖。代码重用分为静态和动态,在该节中介绍了模块依赖即为导出符号:在一个驱动模块里使用另一个驱动模块里的被导出的符号。在Linux驱动中使用到两个宏导出函数,分别为export_symbol和export_symbol_gpl。由于存在两个Linux驱动所以需要在makefile文件中指定两个linux模块,在卸载两个linux驱动顺序时要先卸载symbol_consumer再卸载symbol_producer。
再者是在出现异常情况下卸载Linux驱动。初始化函数崩溃、卸载函数被阻塞。蜂鸣器驱动原理是通过脉冲来控制蜂鸣器打开和停止。(pwm)pwm使用端口F的GPFCON寄存器进行控制。该寄存器在linux内核中对应的宏是S3C64XX_GPFCON。该宏表示GPFCON寄存器的虚拟地址。测试蜂鸣器:使用到ioctl,先进入/root/drivers/ioctl目录,执行build.sh脚本文件编译和上传ioctl文件。在测试pwm驱动之前先要编译和安装pwm驱动,然后进入开发板终端的/data/local目录,打开pwm。