先从整体分析汇编做的事情,有个大体框架。 路径:arch/riscv/kernel/head.S,入口是ENTRY(_start_kernel) 从ENTRY(_start_kernel)开始进行启动前的一些初始化,建立页表前的主要工作: 关闭所有中断 /* 关闭所有中断 */ csrw CSR_IE, zero csrw CSR_IP, zero 加载全局指针gp /* 加载全局指针gp */ .option ...
--调用mret指令,hardid和next_arg1作为第1-2参数启动u-boot。 在u-boot起始阶段,将hartid和next_arg1保存到gd_t中: _startmvtp, a0mvs1, a1 SREG s1, GD_FIRMWARE_FDT_ADDR(gp)/*save the boot hart id to global_data*/SREG tp, GD_BOOT_HART(gp) 3 u-boot到Linux uboot启动Linux: bo_bootm...
1. Zero Stage Bootloader (ZSBL) : 从ROM获取核心代码。 2. Reset Code : 清除寄存器和片上存储器, 为FSBL准备RAM空间。 3. First Stage Bootloader (BBL) :设置trap表,将SELF复制到RAM中, 从 SD 卡载入Linux内核 。 4. Linux: 安装页表, 驱动载入 ,运行环境准备 。 5. init (Busybox) :启动 shell。
2.5 U-Boot启动Kernel流程 参考《u-boot到linux》。 3 Linux安全应用和OPTEE交互流程 Linux下OPTEE安全应用和OPTEE TA交互流程如下:
内核的整体启动流程如上所示,我们从代码中进行分析,具体内核在启动过程中做了什么。 首先我们找到 head.S 文件。 ENTRY(_start_kernel) /* Mask all interrupts */ csrwCSR_IE,zero csrwCSR_IP,zero 1. 2. 3. 4. 在内核启动时,一开始就关闭了所有中断。Technical Report UCB/EECS-2016-129 一文中讲了...
dragonos在linux上的启动流程包括以下部分: DragonStub DragonStub是依托于uboot提供的efi环境来运行的,它基于linux efi stub,负责把dragonos内核加载到对应的位置。并把FDT传递给dragonos内核。它主要是使得dragonos内核的引导不依赖于具体板卡,不用把设备树编译到内核里面去。
工具链安装后,配置Linux内核时,选择riscv 64位系统配置,并在编译时指定CROSS_COMPILE变量。接着,制作BusyBox根文件系统,静态链接可执行文件,再通过qemu模拟器运行编译后的Linux内核。最后,通过Windows或Linux版本的qemu,成功模拟了Linux系统的运行。整个流程包括内核配置、编译、文件系统构建和虚拟机启...
下载BusyBox源码,选择静态编译方式,修改配置以满足RISC-V环境需求。进入目录,创建常见文件夹,复制BusyBox生成的文件至指定路径。修改fstab>文件配置,调整init.d/rcS>文件以优化系统启动。完成rootfs.img卸载后,根文件系统镜像文件rootfs.img制作完成。四、QEMU模拟器运行Linux内核 获取QEMU模拟器,选择...
在RISC-V平台上运行Linux内核可以充分利用该架构的优势,并享受Linux社区提供的丰富软件生态。本文将指导读者完成RISC-V平台上Linux内核的编译和运行过程。 一、RISC-V架构简介 RISC-V是一种基于精简指令集(RISC)的开源指令集架构,它提供了多种扩展和变种,以适应不同的应用场景。RISC-V架构的主要特点包括: 模块化...