2.1. start.S各个部分的总结

其实关于start.S这个汇编文件,主要做的事情就是系统的各个方面的初始化。

关于每个部分,上面具体的代码实现,也都一行行的解释过了,此处不再赘述。

此处,只是简单总结一下,其实现的方式,或者其他需要注意的地方。

  1. 设置CPU模式

    总的来说,就是将CPU设置为SVC模式。

    至于为何设置CPU是SVC模式,请参见后面章节的详细解释。

  2. 关闭看门狗

    就是去设置对应的寄存器,将看门狗关闭。

    至于为何关闭看门狗,请参见后面章节的详细解释。

  3. 关闭中断

    关闭中断,也是去设置对应的寄存器,即可。

  4. 设置堆栈sp指针

    所谓的设置堆栈sp指针,这样的句子,之前听到N次了,但是说实话,一直不太理解,到底更深一层的含义是什么。

    后来,看了更多的代码,才算有一点点了解。所谓的设置堆栈sp指针,就是设置堆栈,而所谓的设置堆栈,要做的事情,看起来很简单,就只是一个很简单的动作:让sp等于某个地址值,即可。

    但是背后的逻辑是:

    首先你自己要搞懂当前系统是如何使用堆栈的,堆栈是向上生长的还是向下生长的。

    然后知道系统如何使用堆栈之后,给sp赋值之前,你要保证对应的地址空间,是专门分配好了,专门给堆栈用的,保证堆栈的大小相对合适,而不要太小以至于后期函数调用太多,导致堆栈溢出,或者堆栈太大,浪费存储空间,等等。

    所有这些背后的逻辑,都是要经过一定的编程经验,才更加容易理解其中的含义的。

    此处,也只是简单说说,更多相关的内容,还是要靠每个人自己多实践,慢慢的更加深入的理解。

  5. 清除bss段

    此处很简单,就是将对应bss段,都设置为,0,即清零。

    其对应的地址空间,就是那些未初始化的全局变量之类的地址。

  6. 异常中断处理

    异常中断处理,就是实现对应的常见的那些处理中断的部分内容。

    说白了就是实现一个个中断函数。uboot在初始化的时候,主要目的只是为了初始化系统,及引导系统,所以,此处的中断处理部分的代码,往往相对比较简单,不是很复杂。