- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
物理地址转换为虚拟地址(静态)
物理地址转换为虚拟地址(静态) 说明: 参考/Column/Column225.htm 物理地址可以静态地转换为虚拟地址,因为静态所以必须编译进内核。因此如需变动,必须更改内核代码,重新编译内核。 内核提供在系统启动时通过map_desc结构体静态创建I/O资源到内核地址空间的线性映射表。 程序员可以自己定义该I/O内存资源映射后虚拟地址。 创建好静态映射表后,在内核驱动访问I/O资源是无需ioremap动态映射,可以直接通过静态映射后的I/O虚拟地址访问。 静态映射表主要通过struct map_desc描述,主要有3个,分别是s3c_iodesc,s3c6410_iodesc,smdk6410_iodesc。 map_desc定义在文件arch/arm/include/asm/mach/map.h中,如下:1 struct map_desc {2 unsigned long virtual;3 unsigned long pfn;4 unsigned long length;5 unsigned int type;6 }; s3c_iodesc在文件arch/arm/plat-s3c64xx/cpu.c中定义,如下: 1 static struct map_desc s3c_iodesc[] __initdata = { 2 { 3 .virtual = (unsigned long)S3C_VA_SYS, 4 .pfn = __phys_to_pfn(S3C64XX_PA_SYSCON), 5 .length = SZ_4K, 6 .type = MT_DEVICE, 7 }, { 8 .virtual = (unsigned long)(S3C_VA_UART + UART_OFFS), 9 .pfn = __phys_to_pfn(S3C_PA_UART),10 .length = SZ_4K,11 .type = MT_DEVICE,12 }, {13 .virtual = (unsigned long)S3C_VA_VIC0,14 .pfn = __phys_to_pfn(S3C64XX_PA_VIC0),15 .length = SZ_16K,16 .type = MT_DEVICE,17 }, {18 .virtual = (unsigned long)S3C_VA_VIC1,19 .pfn = __phys_to_pfn(S3C64XX_PA_VIC1),20 .length = SZ_16K,21 .type = MT_DEVICE,22 }, {23 .virtual = (unsigned long)S3C_VA_TIMER,24 .pfn = __phys_to_pfn(S3C_PA_TIMER),25 .length = SZ_16K,26 .type = MT_DEVICE,27 }, {28 .virtual = (unsigned long)S3C64XX_VA_GPIO,29 .pfn = __phys_to_pfn(S3C64XX_PA_GPIO),30 .length = SZ_4K,3
文档评论(0)