这周又一段时间没怎么写文章了,这周上班接触的东西有点多,每天都在接受挑战。维护公司移动app界面,设计到的技术是css、html、javascript。然后把写好的app程序通过threadx和Linux两个系统的支持(Linux内核版本是在3.10版本的,在安霸和海思平台);第一次搭建编译环境(这里跟平时学的环境有比较大的出路,作者被骂了好几次,终于是成功了,呜呜。。。),然后实时在PC或者手机端采集实时视频监控。后期会不断学习和分享自己在工作当中的一些经验给大家,希望对大家有帮助。今天开始写Uboot的文章和Linux驱动的文章。之前Linux应用的文章全部在公众号后台有。以上学习过程中,作者是学习朱有鹏老师的嵌入式课程。
一、为什么要有Uboot?
1、计算机系统的主要部件:
计算机系统就是 CPU 来做核心进行运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器);当然对于计算机系统的理解,可以把比喻成管理岗位上的管理者,因为当一个公司初创的时候,可能不需要怎样管理和运营,但是当公司慢慢发展壮大,如果还是原来那样的运营模式,那肯定是不行的,现在时代都讲究效率,每个员工在公司里面扮演着不同的角色,也就承担不同的岗位职责,所以这个时候就需要好的管理;把这种思想联想到计算机的操作系统上来,就可以理解计算机系统的重要作用了。
2、计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机运行时需要的主要核心部件都是这三个东西,我们也比较熟悉:
二、PC机的启动过程:
1、典型的PC机的部署:BIOS程序部署在 PC 机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。
2、启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了)。
三、典型嵌入式linux系统启动过程:
1、嵌入式系统的部署和启动都是参考PC机的。只是设备上有一些差别。
2、典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。
3、启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)
4、小结:嵌入式系统和PC机的启动过程几乎没有两样,只是BIOS成了uboot,硬盘成了Flash。
四、android系统启动过程:
1、android系统的启动和linux系统(前面讲的典型的嵌入式系统启动)几乎一样。几乎一样意思就是前面完全一样,只是在内核启动后加载根文件系统后不同了。
2、可以认为启动分为2个阶段:第一个阶段是uboot到OS启动;第二个阶段是OS启动后到rootfs加载到命令行执行;现在我们主要研究第一个阶段,android的启动和linux的差别在第二阶段。
五、总结:
1、uboot主要作用是用来启动操作系统内核。
2、uboot还要负责部署整个计算机系统。
3、uboot中还有操作Flash等板子上硬盘的驱动。
4、uboot还得提供一个命令行界面供人来操作。