1、确定这是不是一个新的架构移植。 2、了解我们要移植的硬件。 3、了解内核的基本概念。 在riscv已经被移植支持的情况下,我们现在要做的是分析,Linux内核是如何支持riscv架构的。 - configs/:支持系统的默认配置 (i.e. *_defconfig files) - include/asm/ :Linux源码内部使用的头文件 - i
RISC-V Linux的汇编启动部分比较简单,不算复杂。有两个部分比较核心:页表创建和重定向。页表创建是用C语言写的,今天先分析汇编部分,先带大家分析整体汇编启动流程,然后分析重定向。 注意:本文基于linux5.10.…
左边窗口是QEMU shell,显示OPTEE日志;右边窗口Linux shell: 2 启动流程 对于2个Hart的OpenSBI+OPTEE+U-BOot启动流程如下: RISC-V下SPL->OpenSBI-OPTEE-Linux启动流程如下: M-Mode:u-boot-spl加载u-boot.itb文件,启动OpenSBI。 M-Mode->S-Mode:OpenSBI通过mret跳转到OPTEE执行,启动TOS。 S-Mode->M-Mode:OP...
--调用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...
RISC-V架构的Linux启动过程从汇编代码开始,经过多个阶段最终进入C语言环境。以下是详细分析: 1. 启动入口点 RISC-V Linux内核的汇编启动代码通常位于arch/riscv/kernel/head.S文件中。启动入口点为_start符号。 .section ".text.head" ENTRY(_start)
又比如Linux定义了设备规则等等: 而risc-v虽然目前芯片种类少,但是也需要制定一些启动规则,于是有了下面的规则: 当有了opensbi后,再回头看启动流程,与aarch64之间进行一个对比: aarch64借助atf框架,从EL3跳转到EL1,并启动u-boot。 对于riscv,上图是一个标准的加载启动流程,其中Opensbi提供了M模式的运行时库。
dragonos在linux上的启动流程包括以下部分: DragonStub DragonStub是依托于uboot提供的efi环境来运行的,它基于linux efi stub,负责把dragonos内核加载到对应的位置。并把FDT传递给dragonos内核。它主要是使得dragonos内核的引导不依赖于具体板卡,不用把设备树编译到内核里面去。
将usr/initramfs_inc_data链接进Vmlinux. 放在段.init.ramfs中 __initramfs_size处放置大小,放在段.init.ramfs.info中 .section .init.ramfs,"a" __irf_start: .incbin "usr/initramfs_inc_data" __irf_end: .section .init.ramfs.info,"a"
Linux中RTOS需要一个tick心跳进行调度处理,linux中的tick处理函数是scheduler_tick。本文从整体流程上来分析下执行到scheduler_tick的流程,以及过程中定时器中断相关的回调是如何注册的,以stime即中断号为5为例。 先上流程图方便对照 二.设置异常入口handle_exception ...