Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
您现在的位置: 天极网 > 开发频道 > 如何编写Linux设备驱动程序
全文

如何编写Linux设备驱动程序

2004-05-21 14:55 作者: 出处: 利索脚 责任编辑:>方舟
  三、设备驱动程序中的一些具体问题

  1. I/O Port.

  和硬件打交道离不开I/O Port,老的ISA设备经常是占用实际的I/O端口,在linux下,操作系统没有对I/O口屏蔽,也就是说,任何驱动程序都可对任意的I/O口操作,这样就很容易引起混乱。每个驱动程序应该自己避免误用端口。

  有两个重要的kernel函数可以保证驱动程序做到这一点。

  1)check_region(int io_port, int off_set)

  这个函数察看系统的I/O表,看是否有别的驱动程序占用某一段I/O口。

  参数1:io端口的基地址,

  参数2:io端口占用的范围。

  返回值:0 没有占用, 非0,已经被占用。

  2)request_region(int io_port, int off_set,char *devname)

  如果这段I/O端口没有被占用,在我们的驱动程序中就可以使用它。在使用之前,必须向系统登记,以防止被其他程序占用。登记后,在/proc/ioports文件中可以看到你登记的io口。

  参数1:io端口的基地址。

  参数2:io端口占用的范围。

  参数3:使用这段io地址的设备名。

  在对I/O口登记后,就可以放心地用inb(), outb()之类的函来访问了。

  在一些pci设备中,I/O端口被映射到一段内存中去,要访问这些端口就相当于访问一段内存。经常性的,我们要获得一块内存的物理地址。在dos环境下,(之所以不说是dos操作系统是因为我认为DOS根本就不是一个操作系统,它实在是太简单,太不安全了)只要用段:偏移就可以了。在window95中,95ddk提供了一个vmm 调用 _MapLinearToPhys,用以把线性地址转化为物理地址。但在Linux中是怎样做的呢?

共5页。 9 7 1 2 3 4 5 8 :
共5页。 9 1 2 3 4 5 :
网友关注
最新上市
编辑推荐
文章阅读排行
周排行
月排行
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml