- 博客(85)
- 资源 (1)
- 收藏
- 关注
原创 PCIe 入门 Demo(一):基础知识
这一节不涉及太多的细节,旨在从宏观上介绍一下,以对 PCI/PCIe 有一个更全面的认识。PCIe 子系统拓扑结构如下所示:如 PCI 一样,每个 PCIe 功能(Function)的标识在其所在的设备内,以及这个设备所连接的总线内,都是唯一的,其标识符一般被称为 “BDF”。对于任意一个 PCIe 拓扑结构,配置软件负责检测出拓扑中的每个 Bus、Device 和 Function,缩写为 BDF。PCIe 主要有两种地址空间 :PCI 配置空间 256B,PCIe 配置空间 4KB,PCIe 兼容 PC
2024-07-08 18:29:00 894
原创 RPM 打包入门(基于openEuler)
主要参考内容(均为官方文档):本文的环境:WSL2 + Qemu + OpenEuler24.03提到的所有示例,均在该环境下测试。
2024-06-21 16:20:26 1301
原创 【学一点RISC-V】RISC-V IMSIC
这两个数组中的每个位都对应不同的中断标识号,不同来源的 MSI 可通过该标识号在中断文件中进行区分。
2024-03-13 11:32:36 1894
原创 【学一点RISC-V】ACLINT(高级核心本地中断控制器)文档
【此 RISC-V ACLINT 规范定义了一组内存映射设备,这些设备为多 HART RISC-V 平台上的每个 HART 提供处理器间中断 (IPI) 和定时器功能】。在多 HART RISC-V 平台上运行的操作系统、引导加载程序和固件需要这些 HART 级 IPI 和定时器功能。SiFive 核心本地中断器 (CLINT) 器件已在 RISC-V 领域广泛采用,以提供机器级 IPI 和定时器功能。不幸的是,
2024-03-08 14:19:04 1472
原创 实践:qemu 运行 linux riscv with AIA(APLIC&IMSIC)
但我在文中提供的仓库中,未发现 patch 文件(仅找到了对比,如果一个一个复制粘贴则太多了,也可能是我的方式不正确),索性直接下载其源代码。这些补丁也可在 riscv_aia_v14 分支中找到,网址是:https://github.com/avpatel/linux。这里我使用了ubuntu-base的文件系统,如果有需要可以参考我之前的博客,或者使用其他文件系统也可以。按照前文内容,在 Linux-6.8-rc5 的基础上,添加相应的patch即可。,直接下载 riscv_aia_v14分支的代码。
2024-03-07 13:26:52 1580 2
原创 RISCV 中断控制器 PLIC & APLIC (非MSI部分)
在 RISC-V 系统中,【平台级中断控制器(PLIC)负责处理通过导线而非 MSI 发出信号的外部中断】。当系统中的 RISC-V 硬件没有 IMSIC 时,硬件本身也不支持 MSI,此类硬件的所有外部中断都必须通过 PLIC。但是,【即使在有 IMSIC 且大多数中断都通过 MSI 通信的计算机中,某些设备中断仍通过专用线路发出信号的情况也很常见】。特别是对于不需要在系统中启动总线事务的设备(或设备控制器)来说,支持 MSI 的成本尤其高昂,因此有线中断是一种省钱的替代方案。
2024-03-05 14:58:56 2114
原创 【Jailhouse论文】Look Mum, no VM Exits! (Almost)
多核 CPU 已成为许多现代嵌入式系统的标准组件。它们的虚拟化扩展使得可以隔离服务,并且在实现混合关键性或其他分割系统方面变得越来越流行。我们介绍了Jailhouse,一个基于Linux的、与操作系统无关的分区型虚拟化监控程序,它使用了新颖的架构方法,将 Linux(一个功能强大的通用系统)与严格隔离的特殊用途组件结合起来。我们的设计目标是以简单性取胜于功能,并建立一个最小的代码库,最大限度地减少监控程序的活动。硬件直接分配给客户机,并结合延迟初始化方案,
2024-02-22 23:50:59 712
原创 SPEC CPU 2017 Qemu RISCV
部分问题同x86上执行一致, 可以参考我的 quick start 的记录的博客: https://blog.csdn.net/jingyu_1/article/details/135695701。https://blog.csdn.net/zhangkefan116/article/details/128019033 (这篇文档中提到的问题, 基本都遇到了, 参考并可解决了)注意: 以下的记录均为 根用户 的操作, 在存在用户的情况下, 则类似于使用了。类似名字的压缩包,这就是制作tools的源码。
2024-01-26 17:59:06 1257
原创 ubuntu-base(arm64与riscv64) 根文件系统, 并用qemu启动
Qemu 启动 Linux(aarch64 与 riscv64):https://blog.csdn.net/jingyu_1/article/details/135746098?Ubuntu-base 镜像: https://cdimage.ubuntu.com/ubuntu-base/releases/jammy/release/,你也可以选择你需要的版本进行安装。配置,比如遇到我上面所说的情况,或者后续内核缺少某个模块的时候再来修改配置,重新编译,(以及后续提到的安装内核模块)
2024-01-24 15:00:01 1535
原创 Qemu 启动 Linux(aarch64 与 riscv64)
其他老哥的方案(借助gitee):https://blog.csdn.net/limanjihe/article/details/122373942。可以参考我的另一篇博客:https://blog.csdn.net/jingyu_1/article/details/135631512。可以参考我之前的博客:https://blog.csdn.net/jingyu_1/article/details/135625477。
2024-01-22 13:37:13 1517 1
原创 SPEC CPU 2017 quick start
我这里选择在 linux(ubuntu22.04.3) 上安装 SPEC CPU 2017,gcc、g++、gfortran 均使用 sudo apt install xxx 安装(其版本为11.4.0)官方的 SPEC CPU 2017 在 Unix Systems 安装示例:https://www.spec.org/cpu2017/Docs/install-guide-unix.html以下是官方提供的系统需求:我自己的配置:x86-64、Linux、32G内存、512G磁盘这部分我没有操作,官方提供示
2024-01-19 13:37:14 2341 1
原创 Ubuntu22 启动后只有鼠标没有桌面
本人机器配置:CPU Intel Core i7-11700,显卡 Nidia Quadro P400 ,操作系统为 Ubuntu22.04.3。现象:刚安装的操作系统,在隔天(断电)重新启动时出现只有鼠标没有桌面的情况。有说搜狗输入法的(我刚安装的系统,肯定不是这个情况)可以进入一个虚拟终端,输入用户名/密码,然后。但是仅当次有效,再断电重启,仍会出现此问题。有说驱动相关的(有可能是这个情况)之后,可以单次进入桌面。简而言之就是驱动相关。
2024-01-17 09:54:11 1540
原创 构建 aarch64 以及 riscv64 交叉编译工具链(裸机)
工具链官方仓库:https://github.com/riscv-collab/riscv-gnu-toolchain。我要安装的是 riscv64-unknown-elf-xxx 交叉编译工具,对应的是 Newlib 部分。其他工具链也类似,在给出的两个官方链接中提供了所有的交叉工具链,选择合适的工具构建即可。因为我的需求是构建裸机的程序,所以我选择了裸机相关的交叉工具链。表示的是 通用的、无特定的系统供应商 的含义。为了在任意位置可以使用,将其添加到环境变量中。,和我的操作系统和平台架构是一致的。
2024-01-16 18:01:19 1731
原创 Qemu 之安装(源码安装)
这部分参考文档 https://wiki.qemu.org/Hosts/Linux。,会编译安装各种平台的Qemu模拟器(aarch64,riscv64等)如果要添加新的目标平台,则直接在qemu的源码目录执行。的64位机器,以及两个平台上的应用程序。表示的是模拟整个物理机,使用。,然后重新配置、编译、安装即可。仅模拟用户应用程序,使用。之后就可以在任意目录下使用。指定了随后的安装路径。,建议自定义一个路径。我这里的配置支持模拟。
2024-01-16 15:04:48 1145
原创 LDR伪指令和ADR指令的区别
其中 0xfd8000000000 是在链接器脚本中指定的虚拟地址,改地址是通过 ldr 伪指令从内存中读取出来的,如果使用 adr 指令是不可以的,偏移超过了指令的范围,adr 获取的地址与当前 PC 有关系,此时运行在物理地址空间,所以 adr 得到的是物理地址。要求 label 和 $PC 位置在 正负1MB的范围内(这个数值和上面提到的imm有关)看 Operation 即可看出作用,Xd 赋值为 $PC + imm。
2024-01-13 16:49:32 440
原创 学习体系结构 - AArch64内存管理
本指南介绍了AArch64中的内存转换,这是内存管理的关键。它解释了如何将虚拟地址转换为物理地址转换表格式,以及软件如何管理转 换转译后备缓冲器(TLB)。这些信息对于任何正在开发底层代码的人都很有用,比如启动代码或驱动程序。它与任何正在编写设置或管理内存管理单元(MMU)代码的人特别相关。在本指南的最后,您可以检查您的知识。您将了解如何将虚拟地址转换为物理地址。您将能够命名不同的地址空间,并描述地址空间如何映射到翻译的各个阶段。您还将了解软件何时必须执行TLB维护,以及TLB维护命令的语法。
2023-12-31 18:00:13 1255
原创 学习体系结构 - AArch64 异常模型
在 AArch64 中,只能将 EL0 中的异常到更高的异常级别处理,而不会将异常处理到 EL0,也没有 EL0 向量表。如执行态和安全态一章所述,**PE 也只能在复位或发生异常或从异常返回时改变执行态。**AArch32 和 AArch64 执行状态之间的交互称为进程间交互。
2023-12-31 17:49:17 1471 8
原创 【论文】 虚拟机 和 Linux容器 的 最新性能比较
云计算广泛使用虚拟机(VM),因为它们允许工作负载相互隔离,并在一定程度上控制资源使用。然而,虚拟化所涉及的额外抽象层次会降低工作负载的性能,而这种性能会以更低的性价比转嫁给客户。基于容器的虚拟化的最新进展简化了应用程序的部署,同时继续允许控制分配给不同应用程序的资源。在本文中,我们探讨了传统虚拟机部署的性能,并将其与 Linux 容器的使用进行了对比。我们使用了一套对 CPU、内存、存储和网络资源有压力的工作负载。**我们使用 KVM 作为代表性管理程序,使用 Docker 作为容器管理器。
2023-12-14 13:45:18 1174
原创 Nanodet-train.py代码解读
Nanodet是一个轻量的目标检测网络,具有很多优点,当前很多网络都将它作为超越的对象。下面是本人对于train.py的代码注释,加入了部分个人的理解。
2023-01-14 20:51:49 420 2
原创 Java用BufferedReader快读
java使用scanner在读取大批量数据时效率比较低,借助BufferedReader类来提高读取效率。
2023-01-12 21:51:51 256
原创 算法-并查集模版
并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有连通子图、求最小生成树的。查找时,递归找祖宗,祖宗集合号等于本身时停止。回归时,把查找路径上的所有节点统一为祖宗的集合号。合并时,只需要把一个元素的祖宗集合号改为另一个元素的祖宗集合号。算法和求最近公共祖先(LCA)等。...
2022-07-26 20:35:13 174
原创 算法-图论
以下内容部分来自陈小玉老师的算法ppt,将图论中常见的算法进行汇总。包括图的存储以及图论的经典算法(最短路径、最小生成树)等。部分代码转自陈小玉老师的《算法训练营》。主要汇总了常用的图的存储和算法,建议初学者直接看B站的相关视频。...
2022-07-15 13:38:52 1222
原创 Java基础2(期末复习用)
Java基础2主要内容来自华科-辜老师ppt以下仅将个人觉得重要的内容摘取整理出来了,并补充了一点内容用以理解一、对象和类类(class)定义或封装同类对象共有的属性和方法,即将同类型对象共有的属性和行为抽象出来形成类的定义。Java没有struct和union。构造函数无返回类型,名字同类名,用于初始化对象。只在new时被自动执行。必须是实例方法(无static),可为公有、保护、私有和包级权限。如果类未定义任何构造函数,编译器会自动提供一个不带参数的默认构造函数。Java没有析
2022-05-21 16:02:36 490
原创 Java基础1(不含面向对象--期末复习)
Java基础1Java的历史等请自行查阅注:本文不适合没有任何编程基础的同学观看,适用于Java期末考试复习javac(编译java程序)、java(运行java程序)、jdb(调试java程序)API、JDK、IDE、JVM一、基本程序设计1、输入、输出标准输入、输出流System.out//标准输出流类OutputStream对象System.in//标准输入流类InputStream对象Scanner类(java.util.Scanner)Scanner sca
2022-05-21 10:41:02 262
原创 Java内部类和Lambda表达式(入门)
Java内部类和Lambda表达式主要内容来源:华科-辜老师ppt一、内部类内部类也称为嵌套类,是在一个类的内部定义的类。通常一个内部类仅被其外部类使用时,同时也不想暴露出去,才定义为内部类。内部类不能定义在方法中。实例内部类内部不允许定义静态成员。创建实例内部类的对象时需要使用外部类的实例变量.new 实例内部类类名( )。(即只有当有了外部类的实例,才能实例化 实例内部类的对象)静态内部类用static定义,其内部允许定义实例成员和静态成员。静态内部类的方法不能访问外部类的实例成员变量。
2022-05-20 22:29:49 415
原创 x86汇编语言期末复习
x86汇编语言期末复习本人对于易错点的整理,欢迎食用。(临近期末、格式没有调整)一、Intel中央处理器32位的CPU按其主要功能通常可分为6大部件:总线接口部件、执行部件、指令预取部件、指令译码部件、分段部件、分页部件。标志寄存器中CF可以指进位,也可以指借位。标志寄存器的理解:根据每次执行设置新的标志寄存器,会把相应的所有位都赋值,至于取哪一位用,要看程序员使用的指令。x86的三种工作方式:实地址方式(1MB物理存储空间)、保护方式(4GB物理存储空间)、虚拟8086方式二、主存储
2022-05-14 14:27:21 540 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人