文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux设备驱动程序中注意的问题

Linux设备驱动程序中注意的问题

时间:2009-06-12  来源:LYZC11

1、I/O端口    和硬件打交道离不开I/O端口,在Linux下,操作系统没有对I/O端口屏蔽,也就是是说,任意驱动程序都可以对任意的I/O口操作,这样就很容易引起混乱。每个驱动程序应该自己避免误用端口。有两个重要的kernel函数可以保证驱动程序做到这一点。 check_region(int io_port,int off_set) 这个函数查看系统的I/O表,看是否有别的驱动程序在占用某段I/O端口。 参数1:I/O端口的基地址。 参数2:I/O端口占用的范围。 返回值:0-没有被占用;非0-已经被占用。   request_region(int io_port,int off_set,char* devname) 如果这段I/O口没有被占用,在驱动程序中就可以使用它。在使用之前,必须向系统登记,以防其被其他程序占用,登记后,在/proc/ioports文件中可以看到登记的I/O口。 参数1:I/O端口的基地址。 参数2:I/O端口占用的范围。 参数3:使用这段I/O地址的设备名。 在对I/O端口登记后,就可以放心地使用inb(),outb()之类的函数来访问了。   2、内存操作    在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者使用get_free_pages直接申请页。释放内存使用的是kfree或free_pages。   3中断处理    同处理I/O端口一样,要使用一个中断,必须先向系统登记。 int request_irq(unsigned int irq,                 void(*handle)(int,void*,struct pt_regs*),                 unsigned int long flags,                 const char* device); irq:要申请的中断。 bandle:中断处理函数指针。 flags:SA_INTERRUPT-请求一个快速中断;0-正常中断。 device:设备名。 如果登记成功,返回0,这时在/proc/interrupts文件中可以看到请求的中断。   4、和设备文件对话    驱动程序提供了对设备操作的接口,同时在程序中实现了基本操作所需要的基本函数,用户程序通过访问设备文件的方式对设备间接操作,Linux系统提供了ioctl()函数可以很方便的实现这一操作。 int ioctl(int fd,int cmd,...); fd:用户程序打开设备时使用open函数返回的文件标识符。 cmd:用户程序对设备的控制命令。 省略号:一些补充参数,一般多于一个,有或没有是和cmd的意义相关的。 注意:cmd设备的控制命令选择需要根据Linux文档所提供的标准控制字中选择合适       的控制字,如果选择不合适会造成和系统中的其他设备冲突。
相关阅读 更多 +
排行榜 更多 +
火柴人狙击高手

火柴人狙击高手

飞行射击 下载
僵尸射击防御汉化版

僵尸射击防御汉化版

飞行射击 下载
士兵生存

士兵生存

飞行射击 下载