首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

驱动物理地址和虚拟地址的有关问题

2013-07-04 
驱动物理地址和虚拟地址的问题今天看了别人写的一个驱动,发现里面对端口的访问都是直接通过物理地址访问的

驱动物理地址和虚拟地址的问题
今天看了别人写的一个驱动,发现里面对端口的访问都是直接通过物理地址访问的,让我很诧异,我一直认为驱动程序必须访问映射后的虚拟地址,但发现它的驱动程序是通过修改内核配置文件重新编译内核来做的,而不是通过模块加载来做的,请问是因为这个所以它的驱动可以访问物理地址吗?还是我没看明白它的代码?求大神啊
[解决办法]
关闭MMU才能直接访问物理地址,我怀疑是楼主理解错了
[解决办法]
不带MMU当然就没虚拟地址那,都是实地址
[解决办法]

引用:
Quote: 引用:

楼主第一个问题:那应该使用的是uclinux,专门针对没有MMU的处理器,并且内核中没有MMU部分,直接操作物理地址。楼主的另一个问题:内核驱动本来就有两种编译方式:一是也就是楼主说的模块的形式,这种方式需要自己写Makefile来编译驱动模块,然后内核启动之后,加载驱动模块。另一种方式:build-in方式,内核中大多数驱动及内核组件都是build-in的方式,通过修改Makefile及Kconfig文件来完成。然后就可以通过make menuconfig的方式来选定或者取消驱动模块进行驱动编译了!

厉害!确实是uclinux,我现在有另一个疑问是有没有这样一种情况,处理器不带MMU,但是操作系统用软件的办法实现了MMU的功能,内核代码仍然用虚拟地址。还是说只要处理器不带MMU,操作系统就一定使用物理地址?
你这个问题比较有创意,呵呵,感觉如果不是做像vmware那样的虚拟机的话,是多此一举,想用对地址有保护的操作系统,就选带MMU的处理器;如果方案是带MMU的处理器就选uclinux类操作系统。当然做虚拟化技术的话可能会出现你说的这种情况。个人观点,可能不准确,仅供参考。

热点排行