自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 qemu u-boot跳转linux kernel错误gdb调试

按照网上教程操作,在qume环境下vexpress开发板,通过u-boot启动 kernel,内核始终起不来。qume环境单独启动u-boot和Linux都可以。u-boot启动Linux打印“Starting kernel ...”后,就没有任何输出了。本文演示了该问题的分析方法,这是重点,如果对分析方法不感兴趣可以直接跳到结论处。

2023-11-06 14:01:17 408

原创 ARM汇编ADR和LDR指令的区别

ADR指令是地址无关码,程序运行地址和链接的地址不一致时,依然能通过相对偏移,得到正确的标签地址;LDR是地址相关码。

2023-10-28 20:03:36 553

原创 Linux内核启动建立临时页表与开启MMU过程分析(GDB+QEMU跟踪调试)

本文基于arm vexpress开发板+qemu模拟器,深度分析Linux内核启动时,建立临时页表与开启MMU过程。通过GDB对照汇编代码,调试跟踪整个过程。分析为何需要给__turn_mmu_on到__turn_mmu_on_end这段代码建立全等映射。vexpress开发板基于Cortex-A9芯片,配置内核空间和用户空间各2GB,所以内核虚拟地址从0x80000000开始。而开发板物理地址从0x60000000开始。

2023-10-28 14:13:08 574

原创 FreeRTOS中vTaskSuspendAll()为什么不用关中断保护

最近学习FreeRTOS源码时,看到vTaskSuspendAll()函数中,在++uxSchedulerSuspended前后,没有调用taskENTER_CRITICAL()和taskEXIT_CRITICAL()关闭中断保护。++uxSchedulerSuspended毫无疑问不是原子操作,看着好像有问题(当然,大神写的代码肯定没问题),网上搜索了一些相关文章,,但是笔者看了还是不太清晰,不甚明了,所以就自己分析了一下。

2023-09-25 15:10:34 492 5

原创 RISC-V架构异常处理与栈回溯分析(二)

FreeRTOS\Source\portable\GCC\RISC-V\portASM.S文件中通过宏portcontextSAVE_CONTEXT_INTERNAL保存上下文代码有点漏洞:portcontextSAVE_CONTEXT_INTERNAL最后将sp保存到pxCurrentTCB->pxTopOfStack中,在创建任务和调用vTaskStartScheduler()之前pxCurrentTCB必然是个空指针,此时触发异常处理,跳转到异常函数处理入口

2023-09-19 22:12:24 363

原创 RISC-V架构异常处理与栈回溯(一)

前面两篇文章分析了RISC-V上FreeRTOS的启动以及OS任务切换的处理流程,本文基于之前的分析,实现自己的栈回溯函数,程序出错陷入异常处理中,打印处函数调用关系及其上下文数据,方便以后问题调试。还是基于qemu模拟器,使用FreeRTOS官方标准发布包的FreeRTOS/Demo/RISC-V-Qemu-virt_GCC工程调试。

2023-09-19 14:46:12 1245

原创 RISC-V FreeRTOS异常处理及任务切换分析(基于qemu+gdb跟踪调试)

也就回到了进入异常前的任务,或者完成任务切换(这里FreeRTOS是实时操作系统,并不是只有在timer中断时才切换任务,比如高优先级任务被唤醒而发生抢占,或者当前运行的任务主动挂起都会触发任务切换)。为了观察prvQueueSendTask上下文的恢复情况,我们先在processed_source最后的mret指令处增加断点,继续运行到新增加断点处,此时理应恢复了prvQueueSendTask的上下文,那我们就再打印一次相关寄存器,与前一次打印的对比,可以看到是一模一样的。

2023-09-14 22:35:14 1024

原创 RISC-V FreeRTOS启动过程分析(基于qemu+gdb调试)

最近在学RISC-V架构,有幸找到了一个非常好的课程《循序渐进,学习开发一个RISC-V上的操作系统》,学完后受益匪浅,但是课程上开发的操作系统毕竟只是教学用,想对比学习一下实际商用的RTOS的实现。FreeRTOS以前也用过,是一个非常流行的开源RTOS,所以选择了qume+FreeRTOS分析学习相关代码。本文先分析RISC-V + qume + FreeRTOS的启动流程。环境搭建可以参考。

2023-09-14 15:07:01 1554

原创 Linux ARM64 SMP系统PSCI启动方式ATF固件处理分析

在之前一篇文章中尝试了使用spin-table启动方式实现Hiberate功能,原本应该采用PSIC启动方式,所以学习了一下PSIC启动方式,这里分析下PSIC启动时涉及到的ATF Bl31固件代码。关于PSIC启动的介绍可以参考我们知道PSIC启动方式,主cpu启动secondary cpu时,最后是主CPU通过SMC陷入EL3的BL31固件中,调用bl31中电源管理相关服务的接口,完成secondary cpu的启动。psci接口规定了命令对应的function_id、接口的输入参数以及返回值。

2023-08-24 11:27:16 1479

原创 Linux 使用2个USB分别虚拟出网卡和串口

上一篇文章《》中,实现了使用指定USB口实现虚拟网卡功能,那么开发板有多个USB口时,应该就可以同时虚拟出串口和网卡。本人尝试实现了该功能。

2023-07-10 22:11:18 2142 4

原创 Linux指定某个USB口虚拟网卡

上一篇文章中,虚拟网卡必须用USB0,可不可以用USB2虚拟网卡,当时的配置usb2也是用作peripheral(如下图),当时试了一下,接usb2是不行的。后来想想为什么usb2不行,或者怎么修改可以使用usb2虚拟网卡,没有找到相关文章,那就自己分析内核代码吧。以

2023-07-08 11:33:39 1767

原创 Linux USB虚拟网卡多板级联通信

最近接到一个客户需求,希望把多个开发板通过USB连接,由一块主板通过USB,将AI运算任务分配给多个多块板同时计算,经过内部讨论,决定将USB虚拟成网卡,采用网络通信方式,将多块板连通通信。

2023-07-03 18:16:12 1350

原创 Linux ARM64 spin-table启动方式实现Hiberate功能

笔者自己在arm64 SMP系统,spin-table启动方式上,实现cpu hotplug缺少的相关接口,完成了spin-table启动 Hiberate功能 。

2023-06-09 17:34:10 491 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除