怎样低成本做网站推广,网站设计与开发的基本步骤包括哪些?,国内大型免费网站建设,帮人注册网站 做app以下内容源于朱有鹏嵌入式课程的学习与整理#xff0c;如有侵权请告知删除。 一、uboot的由来 1、uboot从哪里来的#xff1f; uboot是SourceForge上的开源项目。uboot项目的作者#xff1a;一个德国人最早发起的项目。uboot就是由一个人发起#xff0c;然后由整个网络上所…以下内容源于朱有鹏嵌入式课程的学习与整理如有侵权请告知删除。 一、uboot的由来 1、uboot从哪里来的 uboot是SourceForge上的开源项目。uboot项目的作者一个德国人最早发起的项目。uboot就是由一个人发起然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。2、uboot的发展历程 自己使用的小开源项目。被更多人认可使用。被SoC厂商默认支持。uboot经过多年发展已经成为事实上的业内bootloader标准。现在大部分的嵌入式设备都会默认使用uboot来做为bootloader。3、uboot的版本号问题 早期的uboot的版本号类似于uboot1.3.4后来版本号变成类似于uboot-2010.06。uboot的核心部分几乎没怎么变化越新的版本支持的开发板越多而已对于一个老版本的芯片来说新旧版本的uboot并没有差异。4、uboot的可移植性的理解 uboot就是universal bootloader通用的启动代码通用的意思就是在各种地方都可以用所以说uboot具有可移植性。uboot具有可移植性并不是说uboot在哪个开发板都可以随便用而是说uboot具有在源代码级别的移植能力可以针对多个开发板进行移植。二、uboot的作用 1、计算机系统的主要部件 典型的计算机系统有PC机台式机笔记本、嵌入式设备手机、平板电脑、游戏机、单片机家用电器像电饭锅、空调所有的计算机系统运行时需要的主要核心部件都是3个东西CPU 外部存储器Flash/硬盘 内部存储器DDR SDRAM/SDRAM/SRAM2、PC机的启动过程 典型的PC机的部署BIOS程序部署在PC机主板上随主板出厂时已经预制了操作系统部署在硬盘上内存在掉电时无作用CPU在掉电时不工作。启动过程PC上电后先执行BIOS程序实际上PC的BIOS就是NorFlashBIOS程序负责初始化DDR内存负责初始化硬盘然后从硬盘上将OS镜像读取到DDR中然后跳转到DDR中去执行OS直到启动OS启动后BIOS就无用了。3、典型嵌入式linux系统启动过程 典型嵌入式系统的部署uboot程序部署在Flash能作为启动设备的Flash上OS部署在FLash嵌入式系统中用Flash代替硬盘上、内存在掉电时无作用CPU在掉电时不工作。启动过程嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR初始化Flash然后将OS从Flash中读取到DDR中然后启动OSOS启动后uboot就无用了4、android系统启动过程 android系统的启动和linux系统前面讲的典型的嵌入式系统启动几乎一样只是在内核启动后加载根文件系统后不同了。可以认为启动分为2个阶段第一个阶段是uboot到OS启动第二个阶段是OS启动后到rootfs加载到命令行执行。现在我们主要研究第一个阶段android的启动和linux的差别在第二阶段。5、uboot的作用 uboot主要作用是用来启动操作系统内核。uboot还要负责部署整个计算机系统。uboot中还有操作Flash等板子上硬盘的驱动。uboot还得提供一个命令行界面供人来操作。三、uboot的特点 1、自身可开机直接启动 一般的SoC都支持多种启动方式譬如SD卡启动、NorFlash启动、NandFlash启动等。uboot要能够开机启动必须根据具体的SoC的启动设计来设计uboot。uboot必须进行和硬件相对应的代码级别的更改和移植才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件中具体处理了这一块。2、能够引导操作系统内核启动并给内核传参 uboot的终极目标就是启动内核。linux内核在设计的时候设计为可以被传参。我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定位置然后传给内核内核启动后会到这个特定位置去取这些参数然后在内核中解析这些参数这些参数将被用来指导linux内核的启动过程。3、能提供系统部署功能 uboot必须能够被人借助而完成整个系统包括uboot、kernel、rootfs等的镜像在Flash上的烧录下载工作。可以利用uboot中的fastboot功能将各种镜像烧录到iNand中然后从iNand启动。4、能进行soc级和板级硬件管理 为了完成一些任务uboot中必须初始化一部分硬件。比如uboot要实现刷机必须能驱动iNand比如uboot要在刷机时LCD上显示进度条就必须能驱动LCD比如uboot能够通过串口提供操作界面就必须驱动串口比如uboot要实现网络功能就必须驱动网卡芯片。SoC级就是SoC内部外设比如串口板级就是SoC外面开发板上面的硬件比如网卡、iNand。5、uboot的生命周期 uboot的生命周期指uboot什么时候开始运行什么时候结束运行。uboot本质上是一个裸机程序不是操作系统一旦uboot开始SoC就会单纯运行uboot别的程序是不可能同时运行的一旦uboot结束运行则无法再回到uboot。uboot的入口是开机自动启动uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务譬如烧录系统一般任务执行完后都可以回到uboot的命令行但启动内核命令一旦执行就回不来了。四、uboot与kernel的区别 1、uboot是一个裸机程序内核也是一个裸机程序 uboot的本质是一个裸机程序操作系统内核也是一个裸机程序。操作系统运行后在软件上分为内核层和应用层两层的权限不同。在内存访问和设备操作的管理上更加精细内核可以随便访问各种硬件而应用程序只能被限制地访问硬件和内存地址。2、均部署在SD卡中特定分区内 静止时bootloader、kernel、rootfs等都以镜像的形式存储在启动介质中。X210中是iNand/SD卡。 不能将镜像放在SD卡的任意位置。我们需要对SD卡进行分区然后将各镜像存放到对应分区中这样在启动过程中就知道去哪里找uboot、kernel和rootfs了。另外uboot和kernel中的分区表必须一致同时和SD卡的实际使用的分区要一致。 运行时都是在DDR内存中运行的与存储介质无关。 从静止态到运行态的过程即启动过程。即一个从SD卡逐步搬移到DDR内存并且运行启动代码进行相关的硬件初始化和软件架构的建立最终达到运行时稳定状态的过程。 3、运行时都必须先加载到DDR中链接地址处 uboot在第一阶段进行重定位时将第二阶段整个uboot镜像加载到DDR的0xc3e00000地址处该地址即uboot的链接地址。 uboot启动内核时将内核从SD卡读取放到DDR中也是重定位的过程必须放在内核的链接地址处否则启动不起来比如内核移植时因为解压缩地址不是内核的链接地址因此没有正确解压缩内核运行不起来。 4、内核启动需要启动参数 uboot是无条件启动的而内核的启动需要uboot帮忙。比如uboot帮助内核实现重定位从SD卡到DDR给内核提供启动参数。 五、uboot的工作方式 1、从裸机程序镜像uboot.bin说起 uboot的本质就是一个裸机程序和我们写的那些裸机程序xx.bin并没有本质区别。如果非说要有区别那就是我们写的大部分小于16KB而uboot大于16KB一般uboot在180k-400k之间。uboot本身是一个开源项目由若干个.c文件和.h文件组成配置编译之后会生成一个uboot.bin这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理地烧录到启动介质中也就是说uboot在没有运行时表现为uboot.bin一般躺在启动介质中。uboot运行时会被加载到内存中然后一条指令一条指令的拿给CPU去运行。2、uboot的命令式shell界面 普通的裸机程序运行起来就直接执行了执行时效果和代码有关。有些程序需要和人进行交互于是程序中就实现了一个shellshell就是提供人机交互的一个界面uboot就实现了一个shell。shell不是操作系统和操作系统一点关系都没有。linux中打开一个终端后就得到了一个shell可以输入命令回车执行。uboot中的shell工作方式和linux中的终端shell非常像其实几乎是一样的只是命令集不一样。譬如linux中可以lsuboot中ls就不识别uboot启动后大部分时间和工作都是在shell下完成的譬如uboot部署系统要在shell下输命令、要设置环境变量也得在命令行下要启动内核也要在命令行敲命令命令就是uboot的shell中可以识别的各种命令。uboot中有几十个命令其中有一些常用另一些不常用我们还可以自己给uboot添加命令。uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同。uboot在设计时借助了操作系统的设计理念命令行工作方式借鉴了linux终端命令行环境变量借鉴了操作系统的环境变量uboot的驱动管理几乎完全照抄了linux的驱动框架。环境变量可以被认为是系统的全局变量环境变量名都是系统内置的认识就认识不认识就不认识这部分是系统自带的默认的环境变量譬如PATH但是也有一部分环境变量是自己添加的自己添加的系统就不认识但是我们自己认识。系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行。这样设计的好处就是灵活譬如我们要让一个程序更改运行方法不用去重新修改程序代码再重新编译运行而只要修改相应的环境变量就可以了。环境变量就是运行时的配置属性。