当前位置:  技术问答>linux和unix

关于外设的物理地址 和 虚拟地址。。。

    来源: 互联网  发布时间:2015-08-08

    本文导语:  系统空间的地址和物理内存地址之间有一个 简单的映射关系:sys_add = phy_add + PAGE_OFFSET     现在假如系统中有一外设,它的总线(物理)地址为io_phy_add, 我在研究内核时好像它和它对应的虚拟地址(当然位于系统...

系统空间的地址和物理内存地址之间有一个
简单的映射关系:sys_add = phy_add + PAGE_OFFSET
    现在假如系统中有一外设,它的总线(物理)地址为io_phy_add,
我在研究内核时好像它和它对应的虚拟地址(当然位于系统空间)就
没有上述PAGE_OFFSET的简单的偏移关系。
    
    大虾们都有啥见解??

|
linux内核可以分配两种地址供使用,用kmalloc或者get_free_page分配的地址叫做逻辑地址,逻辑地址在很多体系结构上都是你说的那种sys_add = phy_add + PAGE_OFFSET,这就是说,你这么分配来的内存是和物理内存对应的,这样分来的内存一般会被保留住(比如显卡framebuffer方式),不再参加内存管理。
 还有一种就是用vmalloc分来的,这种内存地址叫做虚拟地址,这种地址完全是内存管理技巧的结果,它和物理内存不是对应的关系。

|
外设的地址不是简单的加个便宜量就可以了,是通过ioremap()

|
内核的地址0xc0000000到0xffffffff, 对应于内存物理地址的低端0-0x40000000
但外设的地址是通过另外一种途径来的吧,因为访问外设地址的时候,会被识别出来而转为访问外设
我对外设的IO地址一直搞不清楚,到底是通过什么机制映射过去的呢?
像BIOS映射到内存中,就不知道它是怎么做的

|
外设的物理地址是通过一个函数来映射的,iomap?
并不是简单的加上一个偏移

|
"系统空间的地址和物理内存地址之间有一个简单的映射关系:sys_add = phy_add + PAGE_OFFSET"

是PAGE_OFFSET吗?

|
虚地址与物理内存地址并没有映射关系
虚拟地址是与 页项在页表中的偏移 有映射关系
同一虚拟地址所对应的物理地址,在进程运行的过程中动态变化

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用applet能否控制外设?如打印机之类
  • linux系统下怎么控制外设(光驱、U盘、串口等)端口的禁用和启用?
  • linux的NC上能不能接USB外设啊
  • Linux下怎么使用write read 操作外设
  • 请教:往外设寄存器写数据遇到的麻烦
  • 大家是怎么编写linux 有关外设的应用程序的
  • 请问, android+linux内核 平台上, 有一个串口接口的外设置芯片, 想对它进行初化, 一般根据该平台下什么驱动改写?
  • UNIX下,终端辅口与外设通讯的问题
  • 请问重新编译LINUX内核是否能将没有用的外设的驱动程序删除并减少内核占有内存的资源?请好心人仕指教!
  • linux下向外设读写数据用什么函数?
  • 怎么样在嵌入式linux下实现spi与外设的通信


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3