欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 03:19:43 责任编辑: Author_N1

 

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

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

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

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:19:43
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20866/
本文WWW.DOC100.NET DOC100.NET版权所有。