概述
前言
-
熟悉一个嵌入式平台,需要了解这个平台的启动方式,如Nand Flash、Nor Flash、SD卡等
-
不同的启动方式,可能固件本身存放的位置也不同,如Nand Flash启动,需要把各个固件,如boot0、uboot、kernel、rootfs等,先下载到指定的位置,或者说指定的存储【分区】,把固件存储分块,用于存放不同功能的固件
-
像SD卡、NandFlash等,一般不支持代码直接执行,所以像Linux等系统,都是通过bootloader,提前把系统启动起来,如初始化好RAM(SDRAM、DDR SDRAM等),把代码拷贝到RAM中执行,因此Nand Flash、SD卡作用主要是用于存储代码与数据,RAM用于系统的启动与运行,代码的执行
-
很多的CPU芯片,都支持多级启动方式,哪吒开发板上的全志D1 CPU,基于 RISCV64为的平头哥 C906核心,也支持多种的启动方式,如SD卡、Nand Flash等
-
uboot 是常见的boot 加 loader,也就是具备启动与加载的功能,具备固件升级的功能,但是CPU上电,还是要有一个原始的启动流程,这个流程基于CPU的ROM启动方式,如使用Nand Flash引导,需要boot 模式选择 Nand Flash,CPU 上电时会主动把 Nand Flash 中的一小部分代码,拷贝到RAM去执行,这就是 CPU ROM 本身的boot功能,硬件固化的,用户擦出不掉。
-
这【小段代码】,本身需要做好系统的基本初始化,如系统时钟配置、DEBUG引脚配置、RAM初始化等,并且具备【二级跳转功能】,跳转到 uboot等 bootloader。换句话说,CPU 本身的ROM固件,不支持直接加载Uboot,而是需要一个bootstrap 类型的 boot代码,通过这个bootstrap 启动 uboot,再去继续引导Linux等操作系统,再去加载文件系统,这样一级一级的跳转与执行
-
哪吒开发板上的全志D1 CPU,采用的是:
OpenSBI
,作为boot0
的方式,CPU 上电后,首先运行 ROM中的引导加载程序,执行OpenSBI
,然后把系统初步初始化好,接着就去跳转运行uboot等固件 -
OpenSBI
算是 全志 D1 CPU 的逻辑程序,可能受到启动引导方式的限制,这个OpenSBI
的固件大小会受到限制
启动流程
-
D1 哪吒开发板,在没有插入SD卡的情况下,默认会启动板载的
Tina Linux
,这个启动可以通过查看【DEBUG】串口的启动信息获取 -
基本的引导启动方式为:
-
CPU ROM 切到 Nand Flash引导方式
- OpenSBI v0.6
- U-Boot 2018.05
- Linux version 5.4.61
- BusyBox v1.27.2
-
这算是标准Linux 系统启动流程了
-
OpenSBI
-
U-Boot
-
Linux kernel
-
BusyBox rootfs
其他思考
-
如果启动RT-Thread 的 rt-smart 操作系统,这个基于Nand Flash的启动加载流程会是什么样子呢?
-
我初步认为可以是:
-
CPU ROM 切到 Nand Flash引导方式
- OpenSBI v0.6
- U-Boot
- rt-smart
- userapps
-
SD卡的启动方式,后面再继续研究
小结
-
初步接触 D1 哪吒开发板,开始了解系统的启动引导方式,了解固件的下载方式
-
固件下载可以使用:全志的
PhoenixSuit
工具,目前USB 驱动连接上了,但是 生成的rt-smart img 镜像工具不识别,所以需要继续研究
-
换句话说,需要找一个支持烧写 boot0 的工具,这个
PhoenixSuit
工具,估计只支持 Linux的那一套固件的烧写,默认使用uboot 加载引导的方式。 -
后面研究Nand Flash【空片】烧写、rt-smart 镜像的烧写方式
最后
以上就是谨慎水壶为你收集整理的D1 哪吒开发板 了解基本的启动加载流程的全部内容,希望文章能够帮你解决D1 哪吒开发板 了解基本的启动加载流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复