byd yes
这个作者很懒,什么都没留下…
展开
-
2.5 opensbi: riscv: opensbi源码解析
从sbi_trap_handler()函数中,我们可以看到其中处理的中断只有IRQ_M_TIMER和IRQ_M_SOFT,处理函数分别为sbi_timer_process()和sbi_ipi_process()。函数作用:设置所有hart状态为SBI_HSM_STATE_STARTED。函数位置:lib/sbi/sbi_timer.c。函数位置:lib/sbi/sbi_hart.c。函数位置:lib/sbi/sbi_hsm.c。函数位置:lib/sbi/sbi_ipi.c。原创 2023-09-06 09:27:14 · 276 阅读 · 0 评论 -
riscv-linux中的多核启动流程
在注册sbi_ipi_event_create的时候ipi_ops_array[0]为ipi_smode_ops,ipi_ops_array[1]为ipi_halt_ops,异常处理函数sbi_trap_handler,判断为IRQ_M_SOFT,则调用软中断处理函数sbi_ipi_process,根据SBI_EXT_HSM和SBI_EXT_HSM_HART_START可以在opensbi找到对应的回调函数。找到cpu_ops_sbi结构体:sbi_cpu_start是我想找到的启动第二个核的函数。原创 2023-08-30 17:43:50 · 425 阅读 · 0 评论 -
2.4 opensbi: riscv: opensbi源码解析
当编程timer中断到来时,陷入m模式的异常,进入_trap_handler汇编函数,调用sbi_trap_handler()->sbi_timer_process(),在sbi_timer_process函数中触发一个s模式的timer中断,真正的timer中断处理函数是在s模式处理的。在aclint_mtimer_cold_init()函数中会初始化time_rd以及time_wr回调函数,64位系统为mtimer_time_rd64()函数和mtimer_time_wr64()函数。原创 2023-08-29 09:30:14 · 253 阅读 · 0 评论 -
2.3 opensbi: riscv: opensbi源码解析
设置hart 的状态,如果是冷启动hart设置为PENDING,其他的hart设置为STOPPED,状态信息放在hsm_data的state字段中。sbi_platform_early_init(plat, TRUE) 函数,调用对应平台设置的回调函数,一般都没有设置。冷启动的hart为每个hart的extra space空间分配一个struct sbi_hsm_data结构体。如果热启动的hart则开启ipi,并且判断字节的状态不是PENDING的话则进入wfi状态。原创 2023-08-21 11:01:40 · 191 阅读 · 0 评论 -
2.2 opensbi: riscv: opensbi源码解析
函数位置:firmware/fw_base.S函数作用:重置寄存器 除了ra, a0, a1 和a2关闭和清理所有中断设置每个hartid的栈地址设置mscratch指向sbi_scatch结构体设置异常处理函数_trap_handler(所有hart 都会去设置)设置参数为sbi_scatch结构体,调用sbi_init/*1. 重置寄存器 除了ra, a0, a1 和a2*/li ra, 0/*2. 关闭和清理所有中断*//*3. 设置每个hartid的栈地址*/原创 2023-07-25 20:45:36 · 355 阅读 · 0 评论 -
2.1 opensbi: riscv: opensbi源码解析
在spl跳转到opensbi执行的时候,携带了三个参数,分别保存在a0,a1,a2,三个参数的含义:hartid、fdt地址(u-boot的dtb文件)和struct fw_dynamic_info结构体地址。在这里我们使用的是dynamic负载,所有fw_boot_hart汇编函数位于firmware/fw_dynamic.S。opensbi第一条执行的指令是从_start开始(firmware/fw_base.S).代码如下。在执行make的时候可以指定是否开启FW_PIC,,如果开启FW_PIC,原创 2023-07-19 18:26:51 · 1298 阅读 · 0 评论 -
1.2 SPL:riscv:uboot-spl源码解析
问题:如何根据struct spl_image_loader *drv找到对应的代码加载u-boot答:在common/spl/spl_mmc.c中,可以看到宏会将每个驱动函数定义的struct spl_image_loader结构体链接到__u_boot_list_2_spl_image_loader_1和__u_boot_list_2_spl_image_loader_3段中间。分析展开**SPL_LOAD_IMAGE_METHOD()**宏。原创 2023-07-16 09:29:27 · 914 阅读 · 0 评论 -
1.1 SPL: riscv: u-bool-spl源码解析
riscv spl分两部分,这是其中第一部分。原创 2023-07-15 13:26:38 · 492 阅读 · 0 评论