- 博客(23)
- 收藏
- 关注
原创 kernel根据device加载ko
kernel根据device加载ko根据device选择性加载kohttps://wiki.archlinux.org/title/Modaliashttps://lwn.net/Articles/740455/
2021-05-24 21:11:31 367
原创 sparse irq
sparse irq中断分配流程19) | vfio_pci_set_msi_trigger [vfio_pci]() {19) | pci_enable_msi_range() {19) 0.841 us | pci_msi_supported();19) | pc...
2020-04-20 10:13:56 453
原创 crash 工具使用
crash使用案例常用命令dis 反汇编list 查看链表数据结构,-H 尝尝配合使用,list device_domain_info.global -H device_domain_liststruct -o -x 查看结构体成员偏移task pid 直接查看 task_struct 结构p 直接打印sym 查看地址和符号对应关系使用例程https://blog.csdn....
2020-03-22 11:24:10 1477
原创 iommu & intel-iommu实现
iommu & intel-iommu本篇文章主要针对iommu和intel-iommu讲述linux代码具体实现。同时由于这里整体实现代码较多,文章主要从iommu、domain、group、device这几个数据结构出发,阐述这几个数据结构如何建立关联,并讲解如果建立的iommu映射。先不考虑vfio的情况,只考虑物理机开启iommu的情况。第二部分会针对vfio做讨论。iommu...
2020-03-19 15:02:02 3694
原创 Posted-Interrupt
文章目录1 virtual APIC2 Posted-Interrupt原理3 Posted-Interrupt实现问题记录1 virtual APIC这里只讨论利用硬件实现virtual APIC的情况,在硬件实现过程中,会分配一个物理页虚拟APIC。对与APIC的一些寄存器访问可以配置是否产生vm exit,详见《64-ia-32-architectures-software-develo...
2020-01-18 14:12:44 2915
原创 VFIO PassThrough
VFIO PassThrough对于VFIO的概述可以参考文章vfio 概述。这里以PCI设备为例讲述VFIO PassThrough具体实现(VFIO不仅仅支持PCI设备)。对于一个透传给虚机的PCI设备,主要处理config空间透传、BAR空间透传和中断三方面,下面分别讲述如何实现这两方面的透传。1.config空间透传实现对于config空间,或者是模拟,或者是透传,具体行为由qemu...
2020-01-18 14:07:13 2663
原创 VFIO概述
文章目录1.IOMMU1.1 IOMMU功能简介1.2 IOMMU作用1.3 IOMMU工作原理1.4 Source Identifier2.VFIO2.1 概念介绍2.2 使用示例3.设备透传分析3.1 虚机地址映射3.2 设备透传实现1.IOMMU1.1 IOMMU功能简介IOMMU主要功能包括DMA Remapping和Interrupt Remapping,这里主要讲解DMA Rem...
2020-01-18 13:48:32 7443 3
原创 PCI入门
PCI入门1. PCI基础基于PCI总线的处理器系统结构图如下:1.1 Host主桥PCI总线树主要由Host主桥(存在与SouthBridge)、PCI总线、PCI设备构成,Host主桥主要功能包括:隔离处理器系统的存储器域和PCI总线域,每个Host主桥都对应一个PCI总线域管理PCI总线域完成处理起与PCI设备间的数据交换1.2 PCI总线PCI总线由Host主桥或P...
2020-01-18 13:28:35 5195
原创 内存虚拟化-shadow实现
内存虚拟化1. 虚拟化目的提供给虚机从 零地址开始的连续物理内存空间视图虚机之间隔离及共享内存资源2. 概念阐述地址空间和物理内存空间:地址空间可以理解为地址域,比如32bit CPU,能访问的地址空间是2 ^ 32 = 4G,这是地址空间,但是我可以只插1G内存。即使插4G内存,有一部分地址空间还要划分给mmio使用,物理内存占用整个地址空间的一部分,它俩并不是一个慨念。在虚拟化...
2020-01-17 23:54:05 2205 2
原创 fedora下利用Kvm/Qemu安装虚拟机
fedora下安装kvm虚拟机介绍,在虚拟机fedora28下,安装kvm虚拟机开发环境macOS虚拟机 Parallels DesktopParallels Desktop镜像 fedora28kvm安装镜像 ubuntukylin-16.04-desktop-amd64.iso搭建流程及遇到问题1. 安装qemu安装qemu教程很多,这里不在详细阐述,博主在安装qemu后...
2019-06-01 15:17:28 2022
原创 SylixOS ArmV7m 支持
SylixOS ArmV7m 支持问题分析Cortex-M系列与Cortex-A系列不同,在中断处理函数中,会产生如下情况: 问题一 Cortex-A系列进入中断后,会切换到IRQ模式,同时硬件上自动关闭IRQ,而Cortex-M系列进入中断后,硬件不会自动关闭中断。即使中断处理中,第一条指令执行CPSID I关闭中断,如果有高优先级中断产生,仍然有可能还没有来的及关中断,就被高优...
2019-04-25 13:17:26 943
原创 SylixOS针对cortex-m平台的实现
SylixOS cortex-m支持对于cortex-m平台,根据任务切换的手段不同,SylixOS有两个不同版本,一个版本是利用svc进行任务切换等操作,另一个版本是利用pendsv进行任务切换,下面会对两个版本的实现方式进行阐述。cortex-m简介在介绍具体实现前,先简单介绍一下cortex-m平台关于任务切换、中断响应、中断嵌套的工作原理。主动保存上下文这都好办,但是当中断来临时如何...
2019-04-20 00:58:52 452
原创 SylixOS Makefile结构分析
SylixOS Makefile结构分析SylixOS的工程主要有BASE、BSP、APP等,不同工程会有相应的Makefile模板来控制编译参数,下面以BASE工程为例,分析整个Makefile的工作原理。这里先给出整个BASE工程的Makefile结构,然后再逐步讲解。 +-------...
2019-04-17 21:14:28 427
原创 浅谈ldrex
LDREX简介在Armv6开始支持多核,通过ldrex与strex指令来保证数据操作的原子性,比如自旋锁的上锁操作、原子变量操作等。在Armv6之前,都是单核,为保证数据的原子性,需要进行关中断操作。对于多核平台,关中断操作只能关闭本核中断,要想对数据进行原子操作,必须借助ldrex指令与strex。对于ldrex指令与strex指令原理这里不在介绍,网上资料很多,下面简单介绍SylixOS的队...
2019-04-16 20:40:23 2777
原创 cache组织方式(VIVT、VIPT、PIPT)
cache组织方式本文主要讲述如何根据虚拟地址或物理地址来寻找cache,及各种方案的优劣比较。在阅读前,需要对cache基本工作原理及MMU工作原理有一定了解,比如cache的映射方式(直接映射,组相联,全相联),虚拟地址到物理地址的转换过程及TLB等。VIVT(Virtual Index Virtual Tag)使用虚拟地址做索引,虚拟地址做Tag。早期的ARM处理器一般采用这种方式,在...
2019-04-12 16:33:56 18338 5
原创 多核处理器cache一致性
多核处理器cache一致性实现对于多核处理器,每个核都有独立cache,通过一致性协议来维护一个有限状态机,根据存储器读写指令或总线上的传输,进行状态迁移和相应的cache操作来保证cache一致性。cache一致性协议主要有两大类别,一类是监听协议(Snooping Protocol),每个cache都要被监听或者其它cache的总线活动;另外一类是目录协议(Directory Protoco...
2019-04-12 14:05:40 6220
原创 SylixOS backtrace实现
SylixOS backtrace实现backtrace用于输出当前调用栈信息,根据这些信息可以知道程序运行流程,有助于分析bug实现原理下面分别以ARM平台(ARMV7-A)和x86平台(32位)为例,讲述backtrace实现原理。ARM平台实现这里先简单介绍下ARM平台下,c语言函数的调用过程,应用程序代码如下:#include <stdio.h>void fun...
2019-04-02 19:14:26 482
原创 vim 操作快捷键
vim操做笔记阅读《vim使用技巧》记录笔记vim -u NONE -N -u NONE 标志让 Vim 在启动时不加载你的vimrc,这样,你的定制项就不会生 效,插件也会被禁用。当用不加载vimrc 文件的方式启动时,Vim 会切换到vi 兼 容模式,这将导致很多有用的功能被禁用,而-N 标志则会使能‘nocompatible’ 选 项,防止进入vi 兼容模式&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;G 命...
2019-03-15 15:13:28 509
原创 git使用
git聊雪峰git学习笔记git用户配置$ git config --global user.name “Your Name”$ git config --global user.email "email@example.com"git创建初始化一个Git仓库,使用git init命令添加文件到Git仓库,分两步:使用命令git add <file>,注意,可反复多次使...
2019-03-15 15:03:26 169
原创 应用程序及共享库的动态链接
加载原理应用程序与动态链接库的加载SylixOS中的应用程序与Linux并不相同,Linux每个进程用于独立的虚拟地址空间(32位机空间为4GB),SylixOS的内核与应用共享整个虚拟空间,这样的话就要求不同的应用程序不能占有相同的虚拟地址空间,SylixOS中的应用程序可以理解为与.so共享库一个道理,并没有执行链接操作,应用程序与.so具有两个相同的特点:两者都是位置无关码,编译时加...
2019-03-14 16:04:10 712
原创 LMA与VMA
VMA 即为运行地址,LMA 即为装载地址,在链接脚本中语法如下:.data ORIGIN(data) : AT(_etext) { . = ALIGN(4); PROVIDE (_data = .); *(.data) . = ALIGN(4); PROVIDE (_edata = .);} &amp;amp;gt; DATA其中利用AT指定装...
2019-03-13 10:47:02 748
原创 动态装载简介
动态装载包括两个方面,一种是应用程序和系统的分离,第二个是动态库的实现,两者机制相似动态装载有两个特点:位置无关码共用代码段,而又有独立的数据段其中,位置无关比较容易实现,而有独立的数据段需要硬件支持才行1.位置无关码的实现首先,位置无关码通过引入.GOT 和 .PLT 来实现对 外部全局变量 或者 外部函数的引用,在访问.GOT和.PLT时用的都是相对跳转,然后再.GOT中使用绝...
2019-01-09 13:59:07 546
原创 AT&T汇编简介
Intel 386汇编与AT&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;T区别AT&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;T语法与Intel汇编程序使用的语法很不一样,他们之间的主要区别有以下几点:AT&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;T语法中立即操作数
2018-06-04 16:34:25 2204 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人