从今天开始进入正文,和讲解liteos一样,我们先从连接器脚本开讲。我们知道连接器脚本描述了编译输出程序的布局,那么linux内核编译输出的布局是怎么样的呢?听我慢慢道来,关于连接器脚本的大概使用用途,可以参见
liteos链接器脚本一
liteos链接器脚本二
这里先说明一下对于linux的所有讲解都是基于x86的,像arm他会有自己的连接器脚本,但是大致类似,包括后面分享的内存管理,任务调度等等和硬件相关的是少数,大多还是通用的。
在开始连接器脚本之前,由于后面的连接器脚本部分以及内核解压启动部分的代码分析,会有一些比较重要的知识点,我这里需要提前宣贯普及一下。叫做知识可能不太确切,应该叫做猜测理解。可能做编译器的会更加的明确,不过按照理解不会有逻辑冲突,应该是合理猜测。就是c语言的指针对应的地址是什么地址。
我们知道x86是支持分段和分页的,分段是一定使能的,分页是可以关闭的功能。我们看下图的cpu怎么找到存储
其中绿色部分的分页单元在启动的初期是关闭的,系统可以通过程序使能或者关闭分页单元。分页单元是现代处理器很重要的一个功能模块,它使得物理地址的寻址更加灵活,也增加了系统的安全性
逻辑地址:逻辑地址是通过段寄存器和偏移地址表示的