程序基于Linux的驱动程序编写指南(linux编写驱动)
驱动程序是Linux上极其重要的一类程序,它们提供了Linux系统与软硬件设备之间沟通的桥梁。在编写基于LINUX的驱动程序时,下面我们总结一些常用的做法,以供参考。
首先,在编写Linux驱动程序前,应该先获取软硬件设备的参数信息,以便建立恰当的驱动模型来支持该设备。
其次,设计驱动程序文件要录入宏和函数,例如使用MODULE_LICENSE特定模快的声明相关版权信息,MODULE_AUTHOR可声明驱动程序的作者,MODULE_DESCRIPTION声明驱动程序功能描述,MODULE_ALIAS可声明模块的它名:
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Author"); MODULE_DESCRIPTION("module example");
MODULE_ALIAS("alias_name");
另外,实现驱动功能时应采用多个地址空间中的抽象表示和访问模块实现。这包括内存(memory)和IO(I/O)地址空间的抽象,以及条件处理,如读取寄存器和写入寄存器:
//读取内存
readb(unsigned int address);
//写入内存writeb(unsigned char b,unsigned int address);
//定义输出#define outb(value,port) \
__asm__ ("outb %b0, %w1" :"=a"(value):"Nd"(port))
//定义输入#define inb(port) \
({ unsigned char _v; \ __asm__ volatile ("inb %w0, %b1" :"=a"(_v):"Nd"(port)); \
_v; \ })
最后,将Linux驱动程序文件打包,编译成模块:
make ARCH=arm CROSS_COMPILE=arm-linux-
cp ...../.ko /rootfs/home
然后上传模块,添加到内核,进行试验。
总之,要编写一个Linux的驱动程序不仅需要仔细阅读软硬件设备的信息,也需要熟悉Linux内核语言编程,特别要掌握Linux内核宏和抽象机制。正确理解并遵循这些步骤,编写基于Linux的驱动程序就不是什么难事。