先从整体分析汇编做的事情,有个大体框架。 路径:arch/riscv/kernel/head.S,入口是ENTRY(_start_kernel) 从ENTRY(_start_kernel)开始进行启动前的一些初始化,建立页表前的主要工作: 关闭所有中断 /* 关闭所有中断 */ csrw CSR_IE, zero csrw CSR_IP, zero 加载全局指针gp /* 加载全局指针gp */ .option ...
作为bootloader的第一阶段FSBL(First Stage Boot Loader),BOOT0从启动日志上可以看出一些它的功能:打开倍频统一时钟,初始化串口,DRAM内存初始化测试,储存(闪存)初始化测试,标记三个程序(文件)入口:opensbi、DTB(设备树)、u-boot,将内存信息加载到设备树,跳转至bootloder下一阶段。在片外DRAM上加载OpenSBI与Uboot本体,...
一、启动文件概述 启动文件是MCU启动时的第一个执行程序,它负责初始化硬件资源、设置系统时钟、配置中断向量表等任务,为操作系统的运行做好准备。在CH32V103中,启动文件通常包含以下几个关键部分: _start:这是整个启动文件的入口点,第一个指令通常是跳转至handle_reset处理函数,负责处理复位后的初始化工作。 _vecto...
首先分析 setup_arch 这个函数,该函数属于架构相关函数,对应的文件在 arch/riscv/kernel 文件下。 parse_dtb() 这个函数首先要执行的是解析设备树,这说明 RISC-V 像 arm 一样,使用设备树进行设备驱动的管理,我们查看 x86 架构下的 setup_arch 则无设备树相...
在Linux系统中,RISC-V架构的SMP多核启动流程包括以下步骤:cpu上电后启动bootRom,bootRom启动opensbi,opensbi中调用sbi_init函数,如果是coldboot core则调用init_coldboot函数,否则调用init_warmboot函数。Coldboot core启动Linux,Linux进行一系列初始操作,其中在kernel_init中经过一系列函数调用,最后在...
关于dragonos在riscv上的启动流程的概述 dragonos在linux上的启动流程包括以下部分: DragonStub DragonStub是依托于uboot提供的efi环境来运行的,它基于linux efi stub,负责把dragonos内核加载到对应的位置。并把FDT传递给dragonos内核。它主要是使得dragonos内核的引导不依赖于具体板卡,不用把设备树编译到内核里面去。
从RISCV生态的角度上来看,D1哪吒开发板确实是一块不错的可以研究很深的开发板。本文主要从研究D1启动流程的角度出发,探索一下D1的裸机开发实践。对于研究D1的底层裸机开发,首先需要知道可以玩那些东西,也可以对RISCV相关的软件生态有比较透彻的理解,本文会从spl阶段到opensbi阶段以及后续阶段做一个简单的分析。
RISC-V MCU CH32V103启动文件分析 启动文件由汇编语言编写,是系统上电复位后第一个执行的程序。主要执行以下内容: 初始化gp(globalpointer)全局指针寄存器、sp(stackpointer)堆栈指针寄存器 将data数据从flash中加载至RAM中 清空bss段数据 初始化中断向量表
本文就针对riscv64的最开始的启动部分代码进行分析,从最小的一个裸机代码开始分析,彻底的弄清楚riscv启动的流程。 本次使用的环境是riscv64 qemu,而编译器是通过下面的地址进行下载: https://www.sifive.com/software 2.最小工程的构成 一个最小的工程包含两个东西:链接脚本以及源代码。 源代码就是可以让cpu...