4月份对linux内存管理的初始化录制了好几期代码导读的视频,我们从vmlinux.lds.S链接文件开始讲起,然后和大家讲解了head.S汇编代码,带领大家去看一个ARM芯片是如何穿越汇编代码进入到C语言代码的?
到了C语言的start_kernel部分,我们又带领大家去了解一款芯片是如何初始化内存部分的,在arch/arm目录里面究竟做了那些东西,最后怎么把内存添加到伙伴系统的?
视频已经都上传到网盘上了,订阅了旗舰篇的小伙伴可以开始观看了。
我们在视频中给大家回答了如下几个疑问:
  1. 在System.map文件中我们看到_stext的地址是0xc0008000,可是CPU跑到head.S文件夹中的_stext的时候还没有初始化MMU啊,那就说现在CPU跑着物理地址上,而不是虚拟地址上,为啥链接文件vmlinux.lds.S文件要把内核的入口地址定义在虚拟地址上?难道内核吃错药了?
  2. 在内核初始化MMU的时候,为什么要开启一段虚拟地址等于物理地址的恒等映射?不这么玩行不行?
  3. ARM处理器一上电 为啥要跑一大段的汇编(head.S),能不能直接跑到C语言的start_kernel里面?
  4. Qemu能不能单步调试head.S文件里所有汇编代码?如果能,为什么?如果不能,又为什么?如何解决?

  5. ARM处理器跑到start_kernel之后,它是怎么get到系统有多少的物理内存?
  6. Linux内核是如何把一大段的物理内存 塞给伙伴系统的?一页一页的塞还是一段一段的塞?怎么玩法?
  7. 如何把代码中的pr_debug()的打印出来?
以上几个问题都有今年必考的面试题目哟,相信看完笨叔的这几个视频,对上面的问题对答如流。
如果您也想看笨叔的视频,请赶紧来订阅哟!
原价1199,现价999!
继续阅读
阅读原文