随想录(mmu的学习)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feixiaoxing/article/details/84799849

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    有一本书叫《一步一步写嵌入式操作系统——ARM编程方法与实践》。这本书很薄,大约有250-300多页的样子。虽然不是很厚,但是内容还是很实在的。特别是它依赖于skyeye和toolchain,可以单凭一台pc就可以完成大部分的嵌入式操作系统开发工作,这本身还是值得肯定的。当然,用它开发出来的os不可以作为工业使用,但是它对我们了解toolchain、soc、print、mmu、interupt、fs、进程调度、系统调用这些功能的实现,还是非常有用的。

    当然,对我自己来说,最喜欢的还是关于MMU的部分。因为本书中虽然关于MMU描述的内容很多,但是真正涉及的代码不多,有兴趣的同学可以看看这个链接https://github.com/feixiaoxing/skyeye_ucos2/blob/master/mmu.c

    只要大家耐着性子将这个mmu.c代码读一下,就会发现被大家讨论很多的MMU其实不过如此。阅读之后,大家也会得出自己的一些结论。比如,

1,一开始soc上电后是没有开始MMU的

2,刚开始执行的pc地址就是物理地址

3,MMU本身依赖的其实就是一张表,cpu要知道的就是这张表的基地址

4,image版本大部分都是根据virtual address编译的

5,TLB就是MMU table的缓存

6, MMU中除了说明基地址,还要进行读、写、执行、cache、优先级权限的设置

7,一般IMMU和DMMU是分开的

8,设置MMU后,一般就不再关闭

9,IO地址也可以MMU

10,cpu只认virtual address,但是bus只认physical address

11,kernel中的pc address其实也是virtual address

12,MMU中不同的virtual address 其实可以对应同一块physical address

13,MMU中table基地址肯定是physical address

14,DMA永远需要的是physical address,不过为了方便user使用,还要是uncacheable的

    上面的认知只是我个人的想法,特别是学习了openrisc cpu的代码,并且结合arm的mmu汇编代码之后,自己对mmu、icache、dcachhe的认知就更加深刻了。

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/84799849