自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (1)
  • 收藏
  • 关注

原创 80386 AT&T汇编语法

因此,可能的后缀有“bl”(从字节到长)、“bw”(从不字节到单词)和“wl”(从单词到长)。请注意,‘jcxz’、‘jecxz’、‘sloop’、‘loopz’、‘aloope’、'loopnz’和’loopne’指令仅以字节位移形式出现,因此,如果使用这些指令(gcc不使用它们),则可能会收到错误消息(和不正确的代码)。这些对应于操作码后缀“s”、“l”和“t”t’代表临时实数,80387仅通过’fldt’(将临时实数加载到堆栈顶部)和’fstpt’(存储临时实数和弹出堆栈)指令支持此格式。

2024-03-21 13:49:59 1024

原创 指令的装载和运行

在 Linux 中,逻辑地址通常指的是由段选择符和段内偏移量组成的地址,这种地址表示方式主要用于 x86 架构的机器。而线性地址是指一种平坦的统一地址空间,它不涉及任何段的概念。逻辑地址通常对程序员是透明的,也就是说,程序员通常不需要直接处理逻辑地址。在高级编程语言中,程序员通常使用变量名来访问内存中的数据,编译器和操作系统负责将这些变量名转换为逻辑地址或线性地址。总的来说,逻辑地址对于大多数程序员来说通常是不可见的,因为高级语言和操作系统抽象了底层硬件细节,使得程序员可以更加专注于程序设计和功能实现。

2024-03-21 10:46:23 903

原创 汇编器AS命令行用法

汇编器:将汇编语言翻译为机器目标代码的程序。全称assembler.assemb是组装的意思。

2024-03-20 00:00:00 581

原创 【virtio-networking 和 vhost-net 简介】

在这篇文章中,我们触及了virtio网络生态系统的表面,向您介绍了virtio网络使用的虚拟化和网络的基本构建块。我们已经简要介绍了 virtio 规范和 vhost 协议,回顾了用于实现 virtio 接口的前端和后端架构,并带您了解了 vhost-net(host内核)与 virtio-net(guest内核)通信的 vhost-net/virtio-net 架构。在试图解释事物时,我们遇到的一个根本性挑战是历史上术语的超载。

2024-03-19 15:44:45 217

原创 介绍 virtio-networking:为现代 IT 结合[虚拟化]和[网络]

各家硬件厂商都有自己的网卡硬件标准。virtio networking是有统一标准的网络解决方案。

2024-03-19 12:19:43 53

原创 【虚拟化简介】

CPU处理能力的飞速提升。它的另一面也就意味着, 个人单独拥有一台计算机, 从资源利用效率角度来看, 被大大闲置了的。硬件对于软件来说,就是一堆寄存器和资源的总和。虚拟化技术是一种资源管理技术,它可以将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来, 以达到最大化利用物理资源的目的。并可供分割、组合为一个或多个计算机配置环境。

2024-03-19 10:58:34 24

原创 linux 传统网卡收、发包流程

但是,需要注意的是,在执行新中断B的过程中,可能会修改一些寄存器或内存的值,这些修改可能会影响到旧中断A下半部的执行结果。这说明__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发,中断发生后,相应的寄存器会将中断标志置位,在__enable_irq()开启中断后,由于相应的中断标志没有清空,因而还会触发中断。是的,如果旧中断A的下半部正在执行时发生了新中断B,那么旧中断A的下半部会被新中断B中断,新中断B的下半部会开始执行。是的,硬件中断的上半部是实时执行的。

2024-03-19 10:48:47 65

原创 QEMU的内存虚拟化[1]——基本数据结构理解

kvm_set_phys_mem中的start_addr为该MemoryRegionSection在AddressSpace中的起始地址,对address_space_memory而言,其表示的就是虚拟机的物理地址,kvm_set_phys_mem(kml, &u1->section调用kvm_set_user_memory_region进行物理内存HVA和GPA关系的的注册和映射。system_memory和system_io是所有MemoryRegion的root节点。

2024-03-14 16:35:03 24

原创 qemu虚拟机内存分配 -m size参数解析

visit_type_MemorySizeConfiguration 中获取了-m size到mem->size中。machine->memdev是在create_default_memdev里赋值的。1373代码行处将ms->ram_size作为memdev backend的大小。完成了memdev的MR ram_block主机内存分配和MR初始化。将machine->ram的一部分添加到system_memory中。

2024-03-13 15:23:28 81

原创 QEMU开启vIOMMU的VFIO设备直通下的地址翻译流程

此处,iova是GIOVA,vaddr是HVA,这次的ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map)最终完成了在Host IOMMU页表中的GIOVA到HPA的PFN的映射。IOMMU映射[786432,size=2146697216]IOVA->[0x7ffecfec0000]HVA。IOMMU映射[786432,size=131072]IOVA->[0x7fffd8400000]HVA。4G GPA地址区间和HVA的IOMMU映射关系已全部建立。

2024-03-12 14:13:28 95

原创 dpdk-vdpa中QEMU热迁移脏页log内存的分配和传递流程

QEMU:dev->vhost_ops->vhost_set_log_base调用vhost_user_set_log_base,传递fd和mmap size给dpdk-vdpa进程;log是通过vhost_log_alloc调用log->log = qemu_memfd_alloc分配的,这个会在Host上创建一个共享文件和fd;dpdk-vdpa中,调用rte_vfio_container_dma_map做IOVA到log_base(HVA)的IOMMU页表映射关系。

2024-03-07 18:12:44 51

原创 在QEMU中实现一个PCIe仿真设备

以qemu自带的edu设备为基础,实现一个直通PCIe设备。

2024-03-06 17:51:42 160

原创 Features/VT-d vIOMMU介绍

本页介绍QEMU中的VT-d仿真(guest-vIOMMU)以及所有相关内容。有关该技术的详细信息,请参阅参考资料部分。下图显示了QEMU中的一个基本设备分配用例。让我们考虑上面的一个通用PCI设备,它是连接到主机系统的真实硬件。主机可以使用通用内核驱动程序来驱动设备。在这种情况下,该设备的所有读/写都将受到主机IOMMU的保护,这是安全的。受保护的DMA如绿色箭头所示。PCI设备也可以分配给guest。通过利用主机内核中的VFIO驱动程序,设备可以由任何用户空间程序(如QEMU)独占管理。

2024-03-06 16:58:21 37

原创 QEMU设备直通pass through的地址映射转换

DMA内存是有Guest driver通过dma_alloc_coherent等DMA API接口分配,由于Guest中没有开启IOMMU,多以dma_alloc_coherent分配的内存的物理地址GPA就是DMA地址。GPA地址被写到Host device的寄存器中,Host device从而可以访问GPA地址。在__domain_mapping里,将IOVA(即GPA)和HVA对应的物理地址HPA的PFN填充到IOMMU的二级翻译页表项的PTE中,实现GPA->HPA的转换。第六列:映射的文件名。

2024-03-05 17:53:44 58

原创 iommu=pt内核参数解析

PCI总线的地址位宽是32位,所以可能存在设备无法访问到4GB以上内存地址空间的问题。但是,PCIe 3.0的总线地址位宽是64位。这意味着它可以支持高达8TB(2^64字节)的寻址空间。完全可以覆盖目前的内存地址空间范围。在linux内核中,iommu=pt是一个默认项,不添加改参数也是开启的pt模式。即device访问的DMA地址就是内存物理地址。没有iommu二级翻译转换(IOVA->PA),所以性能比开启iommu二级翻译转换高。

2024-03-04 15:50:17 689

原创 IOMMU的PASID

所以CPU这边的接口就只有dma=dma_alloc(dev, size),分配了物理地址,然后映射为内核的va,然后把pa作为dma地址,CPU提供给设备,设备访问这个dma地址,就得到内存里面的那个数据了。我这个需要提醒一句,iommu用的页表,和mmu用的页表,不是同一个页表,为了容易区分,我们把前者叫做iopt,后者叫pt。等你从VFIO上detach,把你的domain删除了,这个iommu就会恢复原来的default_domain,这样你就可以继续用你的内核的dma API了。

2024-02-26 16:52:00 143

原创 vDPA测试环境搭建

运行 Linux 发行版的计算机。本指南使用 CentOS 9-stream,但对于其他 Linux 发行版,特别是对于 Red Hat Enterprise Linux 7,命令不应有重大变化。具有 sudo 权限的用户~ 主目录中有 25 GB 的可用空间至少 8GB 内存。

2024-02-23 11:04:34 448

原创 vDPA资料/文档/博客 链接

vDPA Support in Linux Kernel - Jason Wang, Red Hat

2024-02-19 17:11:03 476

原创 disagrees about version of symbol

都是基于内核源码树编译的,但是两次编译导致模块B中的函数CRC和A中的函数CRC不一样,因此报错。原因是编译两个核外驱动,是单独编译的。A用了一次Make,B用了一次Make。内核有两个驱动模块A和B,B调用A EXPORT_SYMBOL出来的函数。将A和B使用同一个Makefile一次性编译,insmod不再报错。但是报标题描述的错误。

2023-08-18 16:07:57 559

原创 qemu设备仿真---edu

qemu源码中自带edu仿真设备,用于教学。

2023-05-30 18:02:14 397

原创 【网络编程】sendto/recvmsg demo; man getaddrinfo(3)

Server programClient program

2022-12-07 16:31:41 191

原创 计算机上电流程

initramfs挂在root文件系统找到systemd。CPU执行指定位置的UEFI固件代码。grub加载initramfs。grub加载操作系统内核。运行initramfs。

2022-11-23 11:13:52 228

原创 VFIO demo

【代码】VFIO demo。

2022-10-28 16:26:04 155

原创 【KVM demo】

【代码】【KVM demo】

2022-10-19 09:42:03 141

翻译 bonding

Linux以太网绑定驱动程序HOWTO最新更新:2011年4月27日最初发布:Thomas Davis <lda.gov上的tadavis>更正,HA扩展:2000/10 / 03-15:威利·塔罗(Willy Tarreau)米奇·威廉姆斯<intel.com上的mitch.a.williams>介绍Linux绑定驱动程序提供了一种用于将多个网络接口聚合为单个逻辑“绑定”接口的方法。绑定接口的行为取决于模式。一般来说,模式提供热备用或负载平衡服务。另外,可以执行链路完整

2020-12-12 23:18:22 1336

翻译 initrd/initramfs文件制作及解压

MKINITRAMFS(8)系统管理MKINITRAMFS(8)名称mkinitramfs-用于生成initramfs image的低级工具概要 mkinitramfs [option]... -o outfile [version] mkinitramfs -h描述mkinitramfs脚本生成一个initramfs映像。initramfs是压缩的cpio归档文件。可以将归档文件与相应的Linux内核一起用于同一体系结构的不同机器中。mkinitramfs用于高级用途。在您的本

2020-12-10 16:34:24 6057

翻译 linux mount命令

MOUNT(8)系统管理MOUNT(8)名称 mount-挂载文件系统概要 mount [-l|-h|-V] mount -a [-fFnrsvw] [-t fstype] [-O optlist] mount [-fnrsvw] [-o options] device|dir mount [-fnrsvw] [-t fstype] [-o options] device dir描述Unix系统中所有可访问的文件都排列在一棵大树中,文件树的根目录为/。这些文件

2020-12-10 11:26:00 3549

翻译 Linux pktgen使用

file:///home/chenhao/backup/github/linux/Documentation/networking/pktgen.rst… SPDX-许可证标识符:GPL-2.0HOWTO for the linux packet generator启用CONFIG_NET_PKTGEN以在内核中编译和构建pktgen或作为模块。首选模块;如果需要,请使用modprobe pktgen。一旦在运行时,pktgen将为每个与该CPU有亲和力的CPU创建一个线程。监视和控制通过/ p

2020-12-09 15:31:37 1516

翻译 systemd man手册

SYSTEMD(1)systemd SYSTEMD(1)名称systemd,init-systemd系统和服务管理器概要 /lib/systemd/systemd [OPTIONS...] init [OPTIONS...] {COMMAND}描述systemd是Linux操作系统的系统和服务管理器。在启动时作为PID的第一个进程运行时,它充当启动系统并维护用户空间服务的初始化系统。为了与SysV兼容,如果将systemd作为init调用且PID不为1,它将执行telinit并

2020-11-30 21:49:22 606

翻译 linux内核启动“No init found.“ boot hang message解析

内核文档Documentation/admin-guide/init.rst对此问题有做解释。加载初始化二进制文件失败的一些高级原因(大致按执行顺序列出)如下:A)无法挂载根FSB)rootfs上不存在初始化二进制文件C)控制台设备损坏D)二进制文件存在但依赖项不可用E)无法加载二进制文件以上各问题的详细分析方法说明如下:A)设置“调试”内核参数(在引导程序配置文件或CONFIG_CMDLINE中)以获取更详细的内核消息。如在grub的linux命令行后加上loglevel=7.B)确保

2020-11-30 13:44:56 586

翻译 NETLINK

NETLINK(7)Linux程序员手册NETLINK(7)名称netlink-内核和用户空间之间的通信(AF_NETLINK)概要#include <asm / types.h>#include <sys / socket.h>#include <linux / netlink.h> netlink_socket = socket(AF_NETLINK, socket_type, netlink_family);描述Netlink用于在内核进程和

2020-11-11 17:48:50 931

翻译 linux音频声卡 pulseaudio服务

这里写目录标题pulseaudio(1)通用命令手册pulseaudio(1)pulse-daemon.conf(5)pulse-client.conf(5)daemon.confsetrlimit(2)/etc/security/limits.conf/ etc / machine-iddefault.pa(5)pacmd(1)pulseaudio(1)通用命令手册pulseaudio(1)名称pulseaudio-PulseAudio声音系统概要 pulseaudio [optio

2020-09-16 22:36:36 17672

翻译 PDFTOHTML Linux pdf转换为html工具

PDFTOHTML(1)通用命令手册PDFTOHTML(1)名称pdftohtml-将PDF文件转换为HTML,XML和PNG图像的程序概要pdftohtml [options] <PDF-file> [<HTML-file> <XML-file>]描述本手册页简要介绍了pdftohtml命令。该手册页是为Debian GNU / Linux发行版编写的,因为原始程序没有手册页。 pdftohtml是将PDF文档转换为HTML的程序。它在当前工作目录中

2020-09-12 21:13:14 1172

翻译 linux/Documentation/kbuild/module.rst

=========================构建外部模块本文档介绍了如何构建树外内核模块。… 目录=== 1简介=== 2如何构建外部模块-2.1命令语法-2.2选项-2.3目标-2.4建立单独的文件=== 3.为外部模块创建Kbuild文件-3.1共享Makefile— 3.2分开的Kbuild文件和Makefile-3.3二进制斑点— 3.4构建多个模块=== 4.包含文件— 4.1内核包含-4.2单个子目录— 4.3几个子目录=== 5.模块安装-5.1

2020-08-10 14:48:39 360

原创 iozone文件系统测试工具

IOZONE(1)通用命令手册IOZONE(1)名称Iozone-文件系统基准概要Iozone [-a|-A] [-s filesize_Kb] [-r record_size_Kb] [-f [path]filename] [-i test] [-E] [-p] [-m] [-M] [-t children] [-h] [-o] [-l min_number_procs] [-u max_number_procs] [-v] [-R] [-x] [-dmicroseconds

2020-07-06 11:21:44 643

原创 在x86电脑上交叉编译mips linux内核并升级替换原mips内核

asdfsadfsadfsdaff sadf

2020-06-02 11:32:22 2578 2

原创 linux内核串口日志抓取-minicom工具使用方法

linux man手册有如下描述MINICOM(1)版本2.7 MINICOM(1)名称 minicom-友好的串行通信程序概要 minicom [选项] [配置]描述 minicom是一种通信程序,有点像共享软件TELIX,但没有源代码,并且在大多数Unices下运行。功能包括具有自动重拨功能的拨号目录,对串行设备上UUCP样式的锁定文件的支持,单独的脚本语言解释器,捕获到文件,具有单独配置的多个用户等等。命令行 -s,--setu

2020-06-01 10:03:00 7147

原创 cmp/test && je/jz分析

以如下汇编函数为例:put_queue: pushl %ecx pushl %edx movl table_list,%edx # read-queue for console movl head(%edx),%ecx1: movb %al,buf(%edx,%ecx) incl %ecx andl $size-1,%ecx#cmp和sub指令对标志位寄存器是相同的效果,只是结果不会存储到目的操作数中。#如果源操作数和目的操作数是相同的,则结果为0,ZF=1。#je:Jump if

2020-05-09 20:45:22 724

原创 Linux内核开源代码风格批量修改

Linux内核源码有自己独特的开源编码规范。文档路径:\linux-5.5.tar\linux-5.5\linux-5.5\Documentation\process在开发的过程中经常因为不小心违反了编码规范,这里提供个方法可以进行代码风格检测和批量修改。在Linux内核源码中自带了代码风格检测脚本checkpatch.pl和代码风格修改工具Lindent。1.代码风格检测脚本checkp...

2020-05-06 22:26:16 769

原创 linux0.12编译问题解决记录

从setup跳转到head的时候显示“physical address not avaliable”。bochs单步调试,发现jmp 0,8后,执行的都是空指令,按‘c’连续执行,根据退出地址8:000000000c00知道head的数据在此处,突发灵感,觉得是gcc文件头格式变了,于是在build.c文件中构造system文件的地方,把GCC_HEADER宏加上0xc00,然后重新make,发...

2019-11-06 22:52:50 531

主板串口日志-S3正常(1040-r8169).txt

主板串口日志-S3正常(1040-r8169).txt

2021-10-13

空空如也

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

TA关注的人

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