其实关于start.S这个汇编文件,主要做的事情就是系统的各个方面的初始化。
关于每个部分,上面具体的代码实现,也都一行行的解释过了,此处不再赘述。
此处,只是简单总结一下,其实现的方式,或者其他需要注意的地方。
- 设置CPU模式
总的来说,就是将CPU设置为SVC模式。
至于为何设置CPU是SVC模式,请参见后面章节的详细解释。
- 关闭看门狗
就是去设置对应的寄存器,将看门狗关闭。
至于为何关闭看门狗,请参见后面章节的详细解释。
- 关闭中断
关闭中断,也是去设置对应的寄存器,即可。
- 设置堆栈sp指针
所谓的设置堆栈sp指针,这样的句子,之前听到N次了,但是说实话,一直不太理解,到底更深一层的含义是什么。
后来,看了更多的代码,才算有一点点了解。所谓的设置堆栈sp指针,就是设置堆栈,而所谓的设置堆栈,要做的事情,看起来很简单,就只是一个很简单的动作:让sp等于某个地址值,即可。
但是背后的逻辑是:
首先你自己要搞懂当前系统是如何使用堆栈的,堆栈是向上生长的还是向下生长的。
然后知道系统如何使用堆栈之后,给sp赋值之前,你要保证对应的地址空间,是专门分配好了,专门给堆栈用的,保证堆栈的大小相对合适,而不要太小以至于后期函数调用太多,导致堆栈溢出,或者堆栈太大,浪费存储空间,等等。
所有这些背后的逻辑,都是要经过一定的编程经验,才更加容易理解其中的含义的。
此处,也只是简单说说,更多相关的内容,还是要靠每个人自己多实践,慢慢的更加深入的理解。
- 清除bss段
此处很简单,就是将对应bss段,都设置为,0,即清零。
其对应的地址空间,就是那些未初始化的全局变量之类的地址。
- 异常中断处理
异常中断处理,就是实现对应的常见的那些处理中断的部分内容。
说白了就是实现一个个中断函数。uboot在初始化的时候,主要目的只是为了初始化系统,及引导系统,所以,此处的中断处理部分的代码,往往相对比较简单,不是很复杂。