2410下寄存器地址虚实映射

2410下寄存器地址虚实映射

ID:38363528

大小:29.50 KB

页数:6页

时间:2019-06-11

2410下寄存器地址虚实映射_第1页
2410下寄存器地址虚实映射_第2页
2410下寄存器地址虚实映射_第3页
2410下寄存器地址虚实映射_第4页
2410下寄存器地址虚实映射_第5页
资源描述:

《2410下寄存器地址虚实映射》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、2410下寄存器地址虚实映射的实现我们知道在我们的驱动里面一般操作的寄存器的地址都是虚拟地址, 然而一般在cpu的datasheet里描述的寄存器的地址都是物理地址, 那linux内核是如何把我们驱动中指定操作的虚拟地址转换成正真可寻址并操作的物理地址的呢? 这篇文档以s3c2410为例, 将详细的描述这么一个实现流程。       S3c2410使用的是arm920T的核,它支持MMU,正因为这样它才可以进行虚拟地址到物理地址的转换。而诸如使用arm7核的CPU一般都无法进行类似的转换, 就在于它没有MMU,所以它上面能跑的操作系统也是去掉了MMU功能后的linux如uClinu

2、x, 关于MMU的原理可参考相关文档。我们先来看文件Map.hincludeasm-armarch-s3c2410Map.h:#ifndef__ASSEMBLY__#defineS3C2410_ADDR(x)    ((void__iomem__force*)0xF0000000+(x))#else#defineS3C2410_ADDR(x)    (0xF0000000+(x))#endif #defineS3C2400_ADDR(x)    S3C2410_ADDR(x) /*interruptcontrolleristhefirstthingweputin,tomake

3、 *theassemblycodefortheirqdetectioneasier */#defineS3C24XX_VA_IRQ     S3C2410_ADDR(0x00000000)#defineS3C2400_PA_IRQ      (0x14400000)#defineS3C2410_PA_IRQ      (0x4A000000)#defineS3C24XX_SZ_IRQ      SZ_1M /*memorycontrollerregisters*/#defineS3C24XX_VA_MEMCTRLS3C2410_ADDR(0x00100000)#defineS3C2

4、400_PA_MEMCTRL(0x14000000)#defineS3C2410_PA_MEMCTRL(0x48000000)#defineS3C24XX_SZ_MEMCTRLSZ_1M…… 我们可以看到IRQ的寄存器虚拟地址定义为0xF0000000, 而物理地址为0x4A000000(这可从2410的datasheet上查到), memory控制器的寄存器虚拟地址定义为0xF0000000+0x00100000的地址处,物理地址为0x48000000, 其他如lcd 等寄存器都在这里定义了虚拟地址,当然这里仅仅是定义而已, 还没有和物理地址达成映射的联系。 我们接着看。 我们来

5、看2410的machine_desc结构:archarmmach-s3c2410Mach-smdk2410.c:MACHINE_START(SMDK2410,"SMDK2410")/*@TODO:requestanewidentifierandswitch                                *toSMDK2410*/       /*Maintainer:JonasDietsche*/       .phys_io  =S3C2410_PA_UART,       .io_pg_offst    =(((u32)S3C24XX_VA_UART)>>

6、18)&0xfffc,       .boot_params =S3C2410_SDRAM_PA+0x100,       .map_io         = smdk2410_map_io,       .init_irq   =s3c24xx_init_irq,       .init_machine  =smdk2410_init,       .timer             =&s3c24xx_timer,MACHINE_END  这里定义了一个描述2410开发板的结构, 其中的map_io,init_irq,init_machine都会在系统跑起来的时候被调用, 我

7、们这里要看的是smdk2410_map_io, 这个函数完成后我们的虚拟地址和物理地址的映射关系就完成了。archarmmach-s3c2410Mach-smdk2410.c:staticvoid__initsmdk2410_map_io(void){       s3c24xx_init_io(smdk2410_iodesc,ARRAY_SIZE(smdk2410_iodesc));//重点在这行       s3c24xx_init_clocks(0);  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。