当前位置: 技术问答>linux和unix
Linux设备驱动,程序员主要做哪些东西?
来源: 互联网 发布时间:2016-09-23
本文导语: 如题,貌似好多东西内核里面都已经做好了,比如一个通过SPI/I2C总线扩展的设备驱动,关于总线的一些东西内核都做好了,作为驱动开发人员要做哪些东西呢?难道只需要做一些具体硬件相关的代码就可以了?...
如题,貌似好多东西内核里面都已经做好了,比如一个通过SPI/I2C总线扩展的设备驱动,关于总线的一些东西内核都做好了,作为驱动开发人员要做哪些东西呢?难道只需要做一些具体硬件相关的代码就可以了?
另外,关于地址空间很不理解。内核还不能直接使用物理地址?还要将物理地址映射到内核空间。 映射?什么是映射?就是一个简单的偏移或类似页表的对应关系?
另外,关于地址空间很不理解。内核还不能直接使用物理地址?还要将物理地址映射到内核空间。 映射?什么是映射?就是一个简单的偏移或类似页表的对应关系?
|
基本可以这样讲。但严格说来是PCI内存地址映射到了RAM上,而PCI的I/O地址映射到了普通I/O地址上。
|
1、实际项目中,确实只需要做一些具体和硬件相关的代码就可以了。
2、运行可执行文件时,先被映射到进程的虚拟地址空间中,接着程序的一部分被操作系统装入到物理内存中。这种将映像链接到进程虚拟地址空间的方法称为“内存映射”
2、运行可执行文件时,先被映射到进程的虚拟地址空间中,接着程序的一部分被操作系统装入到物理内存中。这种将映像链接到进程虚拟地址空间的方法称为“内存映射”
|
举个例子:
PCI设备都有I/O地址空间和内存地址空间。他们在系统中的地址范围由处理器通过设置PCI设备配置空间中的基址寄存器来配置。在嵌入式系统中,这两个地址空间常被配置到与系统中的RAM和普通I/O空间相同的地址空间中,这样系统中的软件就可以象访问内存和普通I/O一样访问PCI的地址空间了。
PCI设备都有I/O地址空间和内存地址空间。他们在系统中的地址范围由处理器通过设置PCI设备配置空间中的基址寄存器来配置。在嵌入式系统中,这两个地址空间常被配置到与系统中的RAM和普通I/O空间相同的地址空间中,这样系统中的软件就可以象访问内存和普通I/O一样访问PCI的地址空间了。
|
我感觉驱动做到最后都没什么可做的了,首先,上层的实现不用你管;其次,最底层都是硬件给实现了,你管不了;比如USB:做到最后发现,什么都是硬件做好了,只需要将数据按协议描述的方式发送出现,硬件就会自动处理,具体怎么处理不用你管。所以驱动做到最后,也没什么可做的。如果是裸机的,只需要移植别的代码,然后调试通过就行了。如果是代操作系统的,只需要将驱动加入与注册到内核中,在注意一下并发与竞争的问题就可以了。在过个几年,做驱动的就烂大街了
|
我个人觉得差不多就是这样了,在国内做驱动做到最后就是这样了,改改这个驱动,剪剪那个驱动,有了子系统,照着驱动的框架往上一套跟写应用程序差不多了,而写应用程序还有自己写程序的时候,而驱动自己写的很少或者就是没有,要想在进入更深一层那只能做内核开发,但是在国内做内核开发的公司好像不多。现在做驱动的这么多,在过几年肯定也不怎么值钱了,除非转去做别的,比如:往上层走做协议或算法,往更下层走做硬件去。
|
内核逻辑地址映射了大部分乃至所有的主内存,并被视为物理内存使用。在大多数的体系结构中,逻辑地址及其所关联的物理地址间的区别,仅仅在于一个常数的偏移量。
|
操作寄存器
|
有关内存映射你可以看一下 “保护模式”