1、电脑上的BIOS 一般电脑启动的时候先执行BIOS(BIOS保存在BIOS芯片里面,一般电脑出厂的时候厂家会烧写好)程序,BIOS就是负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动,系统启动后BIOS就没有用了,所以说BIOS就是用来启动操作系统的。 2、嵌入式上Uboot 嵌入式上的启动过程就是参考PC机上的,所以说Uboot的功能就是电脑的BIOS,Uboot在Flash里面,嵌入式系统启动的时候就是先启动Uboot,然后Uboot负责初始化DDR,初始化内存,从Flash中读取系统到DDR中,然后启动系统,Uboot还要负责部署整个系统,还要操作硬盘驱动,还要提供一个命令界面来让人操作,Uboot在启动的时候还会初始化一部分的硬件(比如iNand驱动,串口驱动,LCD驱动,网卡驱动等),但是其本身是一个裸机程序,一旦执行完就不会在回来了。 3、安卓系统启动 安卓系统启动和linux是一样的,只是加载根目录的时候不同了。 4、bootloader bootloader就是启动代码,一般我们都用Uboot,因为Uboot是免费开源的,Uboot由于其可移植性强,可以针对多个开发板进行移植,所以一般开发板都用Uboot来作为启动代码,Uboot可以利用fastboot功能将各种镜像烧录到iNand中的。 5、系统开机 一般Soc都支持多种启动方式,譬如从SD启动,NorFlash中启动,NandFlash中启动等,Uboot必须要进行和硬件相对应的代码级别的更改和移植,Uboot的start.s文件中具体处理了这一块,Uboot中事先会给linux内核准备一参数,然后存放在特定的位置,内核启动后会在这个特定的位置去取这些参数,然后这些参数会被用来指导linux内核启动(比如传参不同启动方式就不同),这样就可以达到内核动态配置的作用。 6、Uboot工作方式 Uboot在没有运行时Uboot.bin文件是被合理的烧录在启动介质中,在运行的时候会被加载到内存然后一条一条指令执行,uboot为了实现人机交互,实现了一个shell,用户可以在shell里面输入相应命令(用户还可以添加自己的shell命令),uboot里的shell和linux中的shell非常想,只是命令集不一样,烧写系统就是在shell里面进行的,uboot启动后大部分工作都是在shell里面进行的。 7、Uboot的环境变量 环境变量可以认为是系统或者程序的全局变量,也就是系统可以认识的,用户也可以添加自己的环境变量,这样我们就可以通过修改环境变量来设置系统属性或者我们自己的程序了,譬如可以通过修该环境变量来改变开机启动的方式。 |