- 博客(31)
- 资源 (3)
- 收藏
- 关注
原创 boost解析ini配置文件错误——conversion of data to type “i“ failed
ini文件中在行后加上注释符号会导致类型被解析成。下面加的注释方式可以。
2025-03-17 17:10:37
165
原创 RISCV下Dovetail移植(2)——原子操作
但riscv提供amo指令,AMO 指令能够在一个指令中完成读取、修改和写回操作,这些操作是不可分割的,不会被中断或重新排序,因此并不需要修改中断。Dovetail将Linux中的中断全部虚拟化,来实现无论何时都能被中断以提供evl的实时性。在这种中断保护被虚拟化的情况下,需要在所有需要。
2025-03-05 20:51:44
202
原创 RISCV下Dovetail移植(1)——pipeline
handle_arch_irq函数是函数指针,Dovetail对处理中断的handler函数(例如handle_simple_irq ),即handle_arch_irq所指函数,插入。函数执行(handle_arch_irq 是 Linux 内核中用于处理中断的全局函数指针,其主要作用是将中断处理从底层硬件中断控制器过渡到内核的中断处理机制)。函数,arch_do_IRQ_pipelined是需要我们根据不同架构调用相应的Linux中断程序进行处理。Dovetail需要拦截处理中断的函数,即上文提到的。
2025-03-05 20:39:01
747
原创 xenomai4的dovetail学习(5)——文件和网络
在Dovetail中,evl希望能够复用使用和管理。但Dovetail在带外上下文中使用Linux内核的(虚拟文件系统)服务来实现对文件的访问控制,current->files可能无法安全地从带外阶段被访问。Dovetail提供了一种简单机制,在VFS中插入hook函数,evl可以在设备驱动在Linux内核注册时调用该hook函数完成在evl中的注册。为区分设备驱动是否支持oob请求,struct file中包含一个名为oob_data的指针。
2025-03-03 23:05:45
800
原创 xenomai4的dovetail学习(4)——交替调度
evl需要为每个进程维护专属数据集,Dovetail 在通用的 struct mm_struct 描述符中添加了一个名为 oob_state 的成员,类型为 struct oob_mm_state。evl需要某个线程从inband阶段返回用户模式之前进行拦截,例如,你可能希望强制该线程在离开Linux内核并恢复用户模式执行之前切换回oob阶段。task_struct用来描述进程,与架构无关的,而thread_info是task_struct的一部分,与架构相关的,是一个。通过在evl中调度一个具有。
2025-03-03 19:15:20
1138
原创 xenomai4的dovetail学习(3)——自旋锁和远程调用
锁验证器会自动协调实际和虚拟中断状态,因此它可以为在带内和带外上下文中定义的锁构造提供正确的诊断。这意味着当启用 LOCKDEP 时,硬和混合自旋锁包含在验证集中。然而,当启用 LOCKDEP 时,延迟数据可能会非常糟糕,因为锁验证器可能需要在 CPU 禁用中断的情况下执行大量工作,以强制执行临界区。其功能与常规的smp_call_function_single()函数在语义上等价,但不同之处在于,在带外(out-of-band)阶段运行回调函数,并且关闭硬中断(hard irqs off)。
2025-02-27 19:58:13
393
原创 xenomai4的dovetail学习(2)——oob和中断管理
当 Dovetail 收到硬件中断时,会在进入中断处理流程时调用 irq_enter_pipeline(),在退出中断处理流程时调用 irq_exit_pipeline()。内核 API 只能控制带内(in-band)阶段的中断禁用, **hard_local_irq_*()**控制实际的硬件中断。只能是 RESCHEDULE_OOB_IPI、TIMER_OOB_IPI 或 CALL_FUNCTION_OOB_IPI类型的IPI,irq_switch_oob()函数开启或关闭指定中断切换到oob阶段处理。
2025-02-26 22:29:53
729
原创 xenomai4的dovetail学习(1)——概览
因此,在自主内核和linux之间需要区分中断屏蔽和传递的优先级,带外阶段(oob,自主内核内)用于处理高优先级的中断,不会被带内阶段的linux操作延迟。控制的,而不是直接禁用硬件中断。中断流水线位于硬件和中断管理之间,当调用 local_irq_save()、local_irq_disable() 或类似 spin_lock_irqsave() 的锁控制屏蔽操作时,这个。的延迟,对于某些内核组件,尤其是那些需要可预测且非常短的响应时间(例如几微秒)的组件,这种中断屏蔽机制是一个主要障碍。
2025-02-26 16:07:12
810
原创 riscv xv6学习笔记
记录做实验时对xv6 2020操作系统的观察和理解,环境搭建Ubuntu20.04,交叉编译工具链直接apt安装就行,自己编译反而会因为选择的qemu和编译工具版本不匹配导致无法启动xv6。代码仓库网址:https://github.com/cmyhhhh/xv6-labs-2020/在Makefile的UPROGS里加入$U/_sleep\,用于后续清理编译后的文件。系统调用接口xv6实验里已经申明好,user/user.h文件定义了系统调用和工具接口,usys.pl用于生成usys.S文件,usy
2025-01-31 15:37:18
1084
原创 RISC-V Non-MMU Linux学习笔记
另外,在 RISC-V Linux 下,关闭 MMU 以后,内核和应用都将工作在纯 Machine Mode 模式,原有的 Machine Mode 的 Firmware 也不再需要,所以,这里也涉及到整个软件架构的变化,从原有的 M/S/U 三层权限变成更为扁平的 M/U 两层权限。它在内部实现上与标准的ELF格式有所不同,特别是在程序链接表(PLT)的实现上,但对程序员来说,从外部来看,它仍然是一个ELF文件。在MMU的情况下:使用虚拟页读入文件,对文件的改变反映到内存中,fork时复制;
2024-09-05 16:33:26
982
原创 riscv linux内核内存学习笔记
内核中的物理内存由伙伴系统(buddy system)进行管理,它的分配粒度是以物理页帧(page)为单位的,但内核中有大量的数据结构只需要若干bytes的空间,倘若仍按页来分配,势必会造成大量的内存被浪费掉。在内核中,经常会使用一些链表,链表中会申请许多相同结构的结构体,比如文件对象,进程对象等等,如果申请比较频繁,那么为它们建立一个内存池,内存池中都是相同结构的结构体,当想申请这种结构体时,直接从这种内存池中取一个结构体出来,是有用且速度极快的。为了减小TLB的缺失率,通常TLB为全相联的结构。
2024-09-05 09:55:46
1223
原创 cron定时运行python任务并附上出现的错误
使用crontab -l可以查看已有的定时任务,日志记录在/var/log/cron.log中,但/var/log/cron.log可能没有,需要手动开启。之后,重启rsyslog服务:sudo systemctl restart rsyslog.service,接着重启cron任务:sudo systemctl restart cron.service,/var/log/cron.log就出现了。
2024-09-03 19:19:11
343
原创 riscv架构下Linux中断学习笔记
RISCV的架构设计就决定了必须要有程序运行在M模式下,来为S模式提供一些基础的服务,RISCV为此定义了SBI(Supervisor Binary Interface)接口规范,让运行在S模式下的操作系统在不同的RISCV处理器上都可以使用标准的SBI接口来使用相应的功能。,简称M模式、S模式和U模式。同理,在 __restore 恢复 Trap 上下文的时候,我们也必须从内核地址空间切换回应用地址空间,因为应用的代码和数据只能在它自己的地址空间中才能访问,应用是看不到内核地址空间的。
2024-09-01 10:52:03
1324
原创 RROS学习笔记和代码连接汇总
https://blog.youkuaiyun.com/qq_45806499/article/details/141282404https://blog.youkuaiyun.com/qq_45806499/article/details/141368988https://blog.youkuaiyun.com/qq_45806499/article/details/141421149https://blog.youkuaiyun.com/qq_45806499/article/details/141529960
2024-08-26 12:16:59
167
原创 arm64架构下的linux内核中断——学习笔记
资料来源:https://github.com/carloscn/blogARMv8包含4个异常等级,由privilege level整合而来:ARMv8分为普通世界(normal world)和安全世界(secure world),两个世界通过硬件进行隔离,安全世界目的是保证数据和程序安全,例如指纹认证就在安全世界执行。secure monitor负责控制两个世界之间的相互访问。Hypervisor 是一种软件,它在物理服务器和操作系统之间创建一个抽象层,允许多个操作系统和应用程序共享一个物理服务器。T
2024-08-25 22:33:45
836
原创 双内核操作系统学习笔记——Dovetail和RROS
双内核主要依靠中断来分发任务给linux kernel和实时os。资料来源:https://www.bilibili.com/video/BV1Zt421G7wS/
2024-08-25 20:50:17
1148
原创 linux中断和异常的区别
对于可屏蔽中断,除了受本身的屏蔽位的控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(Interrupt Flag)的控制,IF位为1,可以得到CPU的响应,否则,得不到响应。典型的可屏蔽中断源的例子是打印机中断,CPU对打印机中断请求的响应可以快一些,也可以慢一些。异步中断分为可屏蔽硬件中断和不可屏蔽中断,不可屏蔽中断源一旦提出请求,cpu必须无条件响应,而对于可屏蔽中断源的请求,cpu可以响应,也可以不响应。中断是统称,但作为与异常并列的概念时,是另一种含义,即异步中断。
2024-08-20 21:58:59
303
原创 linux内核中断处理学习笔记—x86
中断就是当软件或者硬件需要使用 CPU 时引发的 事件(event),通过APIC来处理中断请求。当一个中断发生时,操作系统必须确保下面的步骤顺序:内核必须暂停执行当前进程(取代当前的任务);内核必须搜索中断处理程序并且转交控制权(执行中断处理程序);中断处理程序结束之后,被中断的进程能够恢复执行。每个中断处理程序的地址都保存在中断描述符表(Interrupt Descriptor Table, IDT)中。
2024-08-20 16:54:17
1085
原创 Ubuntu20.4中ModuleNotFoundError: No module named ‘softwareproperties‘
将其改为对应Ubuntu版本默认的python版本(Ubuntu20.4默认的Python版本是3.8),不要随意修改,只改变/usr/bin/文件夹下python的软连接是没用的。在Ubuntu20.4中类似下方python文件运行时找不到module,但在本地能找到这个module时,可以修改报错文件中的。
2024-04-17 15:23:25
819
1
原创 在Ubuntu上使用J-Trace调试开发板
在 https://www.segger.com/downloads/jlink/ 网址下载安装J-Link Software and Documentation pack。在 https://developer.arm.com/downloads/-/gnu-rm 网址下载安装Arm GNU toolchain。
2024-03-24 20:03:56
354
1
原创 FRDM-K64F配置计时程序
与FRDM-K66F不同,FRDM-K64F内置的调试硬件不同,FRDM-K66F内置jlink调试烧录器,而FRDM-K64F内置的是arm的mbed,与jlink不一样。mbed的GitHub仓库:https://github.com/ARMmbed/DAPLink,可以参照这个自己搭建debug环境。但搞了一会发现太麻烦了,MCUXpresso IDE可以很方便的配置debug和烧录环境,就都在使用IDE配置板子。遇到问题建议直接看生成的源代码,手册里很多东西都没有(可以用来看看引脚)。
2024-03-08 14:58:57
370
1
原创 NXP FRDM-K66F板子在Ubuntu上初始化FreeRTOS并与电脑进行SPI通信
本文记录如何在Ubuntu系统上对FRDM-K66F使用MCUXpresso IDE初始化FreeRTOS代码,并使用SPI进行通信。
2024-03-01 15:22:32
835
原创 Windows环境下STM32板子初始化freertos并与电脑端进行spi通信
先下载STM32CubeIDE,STM32CubeIDE里包括了STM32CubeMX(用于初始化引脚和时钟等),支持ST-LINK 和 J-Link调试和烧录。https://www.st.com/zh/development-tools/stm32cubeide.html是。
2024-02-27 10:48:09
1354
原创 在Linux中vscode配置anaconda选择环境,但并没有运行对应环境
初始点击运行按钮默认运行“Run Code”,执行的是本地默认python环境。需要点击“运行Python文件”才会运行自己选择的conda环境。
2023-11-30 16:11:38
631
原创 git clone - fatal:鉴权失败
github官方网址操作步骤(https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)Password for ‘https://***@github.com’:(输入personal access token,而不是账号对应的密码)Username for ‘https://github.com’:(输入账号)
2023-11-29 22:16:41
2245
1
原创 IDA和conda的python冲突
IDA找不到python路径,conda的python环境识别不出来,需要在环境变量里加上PYTHONHOME(conda里的python.exe所在的文件夹路径名)。但加上了PYTHONHOME就会导致conda环境打不开。
2023-11-21 17:23:03
342
1
原创 ubuntu vscode c语言找不到对应的头文件<stdio.h>
apt 和 aptitude 都是 Debian 和基于 Debian 的操作系统中的软件包管理器,它们的主要区别在于依赖处理的方式。apt 倾向于直接安装所需的软件包,而不考虑软件包之间的依赖关系,这可能导致软件包之间的依赖问题。相比之下,aptitude 具有更为智能的依赖处理能力,它将考虑软件包之间的依赖关系来确定应该安装哪些软件包。因此,aptitude 在处理依赖关系时可能会更加健壮,且出现依赖问题的机率可能会更小。aptitude会列出多种解决方案,本人是选择依赖版本降级的解决方案。
2023-06-13 16:09:21
2154
1
原创 pyqt5出现no Qt platform plugin could beinitialized问题
本人在运行基于pyqt5的框架时报出no Qt platform plugin could beinitialized错误,在pip uninstall pyqt5和pip uninstall pyqt5-tools后发现\Lib\site-packages下还存在pyqt5相关的文件夹,在删除这些文件夹之后再安装pyqt5即恢复正常,pip install pyqt5 -i https://pypi.mirrors.ustc.edu.cn/simple和pip install pyqt5-tools -
2023-04-21 21:59:52
527
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人