硬件知识
文章平均质量分 80
leoufung
Linux Kernel,Virtualization
展开
-
PCI:传输层概述
1. 传输层概览消息类型Memory Transactions I/O Transactions Configuration Transactions Message Transactions2. 报文格式头部包括原创 2020-12-12 19:11:59 · 309 阅读 · 0 评论 -
CPU 桥片变化
将主板按以下方式摆放:键盘,鼠标,显卡等接口冲左边;CPU冲上;PCI等各种插槽冲下;内存插槽,电源插槽,等冲右边.这样你就会按上北下南来分辨了.上边离CPU最近的是北桥芯片,负责CPU和内存,硬盘之间的数据,一般都带有散热片;最下边的是南桥芯片,一般离BIOS电池很近,负责键盘鼠标等I/O输入输出功能.CPU 南桥接低速设备,北桥接高速设备原创 2017-03-09 11:36:18 · 3045 阅读 · 0 评论 -
NUMA和PCI相关命令
1. 查看设备属于哪个NUMA节点cat /sys/class/net/enp5s0f0/device/numa_node 2. 查看PCI的树状关系lspci -t -v原创 2016-12-05 16:08:22 · 5383 阅读 · 0 评论 -
VIRTIO的vring收发队列创建流程
针对评审文档那天提出的问题,又看了一下代码,VIRTIO收发队列的创建位置是在GUEST的前端驱动里 GUEST前端驱动,以网络设备为例: Virtio-net: PCI 发现后,通过PCI总线分配收发队列static int virtnet_probe(structvirtio_device *vdev){…… /* * 初始化virt原创 2016-10-28 13:28:41 · 4789 阅读 · 0 评论 -
KVM 中断系统结构关系
KVM 中断系统结构关系 现在,KVM虚拟机的中断是在KVM内核模块中实现的(一般我们都是这么使用的),理解数据结构就可以了解一个软件是如何实现的,所以本博文就来对虚拟中断子系统所涉及的数据结构进行梳理,给大家一个中断系统直观简单的感受。这里不多介绍apicv PI以及vt-d PI,以后博文再介绍,也可以直接请教Intel OTC的中断大牛WuFeng同学(邮件地址去邮件列表里面去搜索原创 2016-11-08 13:17:26 · 3667 阅读 · 0 评论 -
LIBVIRT报告qemu-system-x86_64: CPU feature cmt not found的解决办法
今天在ThinkServer RD350上用libvirt创建虚拟机,发生如下现象error: internal error: qemu unexpectedly closed the monitor: 2016-08-12T05:44:04.825824Z qemu-system-x86_64: CPU feature cmt not found原因是libvirt或QEMU没有支持C原创 2016-08-12 13:47:48 · 6955 阅读 · 0 评论 -
关于LENOVO ThinkServer RD350使用RT内核后无法正常启动的原因分析
今天在LENOVO ThinkServer RD350服务器上安装自己编译好的实时内核,但是启动时报错如下:[ 0.000000] Initializing cgroup subsys cpu[ 0.000000] Initializing cgroup subsys cpuacct[ 0.000000] Linux version 4.4.6-rt14nfv-compi原创 2016-08-11 19:04:57 · 4808 阅读 · 0 评论 -
KVM硬件能力代码配置流程
KVM硬件能力配置过程vmx_init -> kvm_init-> kvm_arch_hardware-> kvm_x86_ops->hardware_setup-> hardware_setup-> setup_vmcs_config原创 2016-08-16 17:17:44 · 571 阅读 · 0 评论 -
硬件中断处理相关的杂记
假设硬件连接为外设 --> IOAPIC --> LAPIC外部中断处理流程为:外设发出中断到IOAPIC引脚IOAPIC会查询引脚对应的RTE,IOAPIC根据RTE的设定,决定是否mask该中断IOAPIC根据RTE的设定,如deliver mode, vector等组件interrupt messageIOAPIC将interrupt message发送给LAPI原创 2016-05-19 11:30:12 · 1572 阅读 · 0 评论 -
Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)按照下面列出的方式,在trap_init()函数中,可以查找到重点的中断的处理函数有哪些1. 缺页中断start_kernel-> trap_init //注册各种中断和异常-> set_intr_gate(14,&page_fault); //注册缺页中断入口-> ENTRY原创 2016-04-13 11:02:26 · 1442 阅读 · 0 评论 -
KVM虚拟机发送IPI的流程
参考:http://www.lxway.com/4405095264.htmGuest内核发送IPI,也就是向虚拟机APIC的寄存器中写入,对APIC的写动作会被截获,并退出到ROOT模式,对APIC的写动作调用 apic_reg_write()static const struct kvm_io_device_ops apic_mmio_ops = {.read原创 2016-04-01 18:55:30 · 1989 阅读 · 0 评论 -
WLAN控制器 – 系统总体架构
WLAN控制器 – 系统总体架构1.背景与需求1.1传统路由器架构简介 1.1.1路由器软件架构路由器从软件逻辑结构上来讲,分为控制面和数据面,如下图所示: 图 1 路由器逻辑架构l 控制面:完成路由协议计算,路由优选等工作,形成最优路由下发给数据面。控制面注重协议兼容的完整性和系统一些RA原创 2021-12-15 16:07:04 · 2052 阅读 · 0 评论 -
X86 32位内存管理
目录 1.内存及寻址2.地址变换3.分段机制4.分页机制5.保护6.去到底部 一、内存及寻址返回目录 二、地址变换![](http://images2017.cnblogs.com/blog/825979/201801/825979-20180120210830521-745157906.png)80X86 从 逻辑地址 到 物理地址 的转换:第一阶段是使用分段机制把...原创 2019-02-07 11:05:55 · 454 阅读 · 0 评论 -
x86 分段机制
目录 1.段的定义2.段描述符表3.段选择符4.段描述符5.LDTR是什么6.直达底部 段的定义 段的介绍分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存单元。 80386虚拟地址空间中的虚拟地址(逻辑地址)由一个段部分和一个偏移部分构成。段是虚拟地址到线性地址转化的基础。每个段有三个参数定义:段基地址,指定段在线性地址空间中的开始地址。基地址是线性地...原创 2019-02-07 11:03:24 · 2441 阅读 · 1 评论 -
BIOS 加电启动原理
BIOS 加电启动原理 目录 教学视频0. 背景描述1.上电加载三部曲2. 什么是实模式3. 启动BIOS,准备实模式下的中断向量表和中断服务程序直达底部 教学视频 BIOS上电过程, BIOS内存布局,BIOS加载中断向量表和中断服务程序 0. 背景描述 - X86 32bit cpu- 内核采用 Linux Kernel 0.11 版本- 使用 qemu 模拟器...原创 2019-02-07 15:59:40 · 1908 阅读 · 0 评论 -
Linux内核启动:虚拟盘空间设置和内存管理结构初始化
Linux内核启动:虚拟盘空间设置和内存管理结构初始化 目录 教学视频1. 设置虚拟盘并初始化2. 初始化内存管理结构mem_map直达底部 教学视频 Linux内核启动:虚拟盘空间设置和内存管理结构初始化 1. 设置虚拟盘并初始化 接下来main函数将对外设中的虚拟盘区进行设置。 检查makefile文件中“虚拟盘使用标志”是否设置, 以此确定系统是否使用了虚拟盘(假设有虚拟盘...原创 2019-02-13 12:48:27 · 412 阅读 · 0 评论 -
Linux内核启动:main函数设置根设备并规划内存
Linux内核启动:main函数设置根设备并规划内存 目录 教学视频1. 楔子2. 设置根设备和硬盘3. 规划物理内存直达底部 教学视频 Linux内核启动:main函数设置根设备并规划系统内存 1. 楔子 从现在开始执行 main()函数! 目的就是让用户程序能够以“进程”的方式正常运行。 能够实现这一目的的标准包括三方面的内容:用户程序能够在主机上进行运算,...原创 2019-02-12 00:22:07 · 383 阅读 · 0 评论 -
Linux内核启动:head程序执行过程
Linux内核启动:head程序执行过程 目录 教学视频1. 整体过程描述2. HEAD 程序设置栈寄存器3. HEAD设置IDT和GDT5. 重建GDT表和调整段寄存器6. 检测A207. 检测并开启协处理器8. main函数入栈9. 设定内核页表10. 返回执行main函数直达底部 教学视频 Linux内核启动:head程序开始执行(一)Linux内核启动:hea...原创 2019-02-10 09:31:57 · 578 阅读 · 0 评论 -
setup程序为保护模式执行head程序做准备
setup程序为保护模式执行head程序做准备 目录 教学视频1. 编程8259A中断控制器2. 使能保护模式直达底部 教学视频 Linux内核启动:setup程序为保护模式执行head程序做准备 1. 编程8259A中断控制器 为了建立保护模式下的中断机制,setup 程序将对可编程中断控制器 8259A 进行重新编程(因为中断号和中断引脚需要重新映射)。8259A: 专门...原创 2019-02-09 15:22:39 · 291 阅读 · 0 评论 -
setup 程序打开 A20 实现32位寻址
setup 程序打开 A20 实现32位寻址 目录 教学视频1. 打开A20实现32位寻址2. Linux内核–A20地址线直达底部 教学视频 [Linux内核启动过程:setup程序打开A20实现32位寻址](http://toutiao.com/item/6655854296564761092/ "Linux内核启动过程:setup程序打开A20实现32位寻址") 1. 打开A...原创 2019-02-09 12:47:24 · 673 阅读 · 1 评论 -
setup移动system程序块以及设置32位GDT,IDT
setup移动system程序块以及设置32位GDT,IDT 目录 教学视频1. 关闭中并移动SYSTEM代码2. 设置中断描述符表和全局描述符表直达底部 教学视频 setup程序移动内核代码system程序块以及设置32位GDT,IDT 1. 关闭中并移动SYSTEM代码 接下来, 操作系统要使计算机在 32 位保护模式下工作,这要做大量的重建工作, 并且持续工作到 操作系统的...原创 2019-02-09 00:31:43 · 417 阅读 · 0 评论 -
bootsec加载内核system及SETUP初始执行
bootsec加载内核system及SETUP初始执行 目录 教学视频bootsec加载内核system程序及SETUP程序初始执行1. 载入SYSTEM代码2. 确认根文件系统设备号3. 跳转到 SETUP 程序5. 执行 SETUP 程序直达底部 教学视频 1. 载入SYSTEM代码 第二批代码 setup 已经载入内存, 现在要加载第三批代码 system 。 仍然使...原创 2019-02-08 16:44:56 · 544 阅读 · 0 评论 -
bootsec 加载内核 setup 代码
bootsec 加载内核 setup 代码 目录 教学视频1. 加载系统代码整体步骤2. 加载bootsec代码直达底部 教学视频 VEDIO: Linux系统启动程序bootsec加载内核setup代码 1. BOOTSEC内存规划 BIOS 已经把 bootsect 也就是引导程序载入内存了,现在它的作用就是把第二批和第三批程序陆续加载到内存中。 为了把第二批和第三批程序加载...原创 2019-02-08 10:07:07 · 369 阅读 · 0 评论 -
BIOS 加载操作系统 bootsec 代码
BIOS 加载操作系统 bootsec 代码 目录 教学视频VEDIO: BIOS 加载操作系统 启动扇区 bootsec 代码1. 加载系统代码整体步骤2. 加载bootsec代码直达底部 教学视频 1. 加载系统代码整体步骤 BIOS 将分三批逐次加载操作系统的内核代码。 第一批 由 BIOS 中断 int 0x19 把第一扇区 bootsect 的内容加载到内存;...原创 2019-02-07 23:14:10 · 1558 阅读 · 0 评论 -
ARM64 Linux的启动分析
ARM64 Linux的启动分析 1. 找到Linux启动流程Linux启动,会启动内核编译后的文件vmlinuxvmlinux是一个ELF文件,按照./arch/arm64/kernel/vmlinux.lds设定的规则进行链接的./arch/arm64/kernel/vmlinux.lds 是 ./arch/arm64/kernel/vmlinux.lds.S编译之原创 2016-01-25 19:35:37 · 4063 阅读 · 1 评论 -
ARM64多核CPU启动流程
ARM64多核CPU启动流程ARM64使用ACPI parking protocol specificationBP核:start_kernel//开始初始化内核需要的全局变量,硬件资源等-> setup_arch -> setup_processor-> cpu_init //设定IRQ堆栈-> rest_init //在最后启动其他核原创 2016-01-25 17:25:06 · 5850 阅读 · 0 评论 -
PLL(锁相环)电路原理
最近在看系统时钟,网上找了几篇关于锁相环资料,拼了一篇文档,觉得自己看明白了,分享出来(一)PLL(锁相环)电路原理 在通信机等所使用的振荡电路,其所要求的频率范围要广,且频率的稳定度要高。无论多好的LC振荡电路,其频率的稳定度,都无法与晶体振荡电路比较。但是,晶体振荡器除了可以使用数字电路分频以外,其频率几乎无法改变。如果采用PLL(锁相环)(相位锁栓回路,PhaseLo转载 2015-12-11 19:55:48 · 159700 阅读 · 17 评论 -
Intel UCE和CE,以及register banks的意思
最近阅读intel SDM的RAS部分的时候,遇到了一些名字难以理解,找到了相关的高手询问得到了答案,这里共享出来CE: corrected error。意思就是可矫正的错误。举个例子来说,当内存检查遇到了错误的时候,当检查到的错误是1bit的时候,可能就是因为ECC校验码错误导致的,这时候CPU可以对其进行纠正,不会影响系统的任何进程,这种情况就是corrcted error。UCE:uncor原创 2015-09-28 09:57:20 · 9308 阅读 · 0 评论 -
MACHINE-CHECK 相关的MSR(一) - 概述
Machine check使用了一组相关的MSR。这些MSR有两部分组成,第一部分是全局控制和状态寄存器(global),另外一部分是一些记录错误信息的banks(banks的概念在前面的文章已经讲过,请看参考文章)。MSR的整体布局如下图所示 每一个错误报告的bank都同处理器中一个特定的硬件单元(或一组硬件单元)相关联。使用RDMSR或WRMSR来对这些寄存器进行读写。将上面图中的banks展原创 2015-09-28 09:57:31 · 1774 阅读 · 0 评论 -
Intel MCE CMCI (三) 系统软件中CMCI的相关实现
系统软件必须负责使能CMCI,并能管理CMCI。系统软件在相关的逻辑CPU上需要设定CMCI的中断处理程序,可以对CMCI LVT进行编程,并且可以串行的查询被多个处理器共享的machine check banks本文将讲述系统软件如何管理CMCI,包括:CMCI的初始化,中断处理函数(如何同最小的方式处理banks访问的竞争问题)1. CMCI的初始化虽然根据 c原创 2015-09-28 10:08:42 · 1380 阅读 · 0 评论 -
Intel MCE CMCI (二) CMCI的LAPIC接口
CMCI的操作图如下所示CMCI中断的传送被配置向为LAPIC寄存器空间中的 LVT CMCI写入,该寄存器默认的起始地址为 APIC_BASE + 2F0H。如果MC errors影响到了多个逻辑处理器,那么CMCI就会被传递到多个逻辑处理器上。例如,两个逻辑处理器共享一个cache,在该cache上发生了可校正(corrected)的bit错误,那么CMCI原创 2015-09-28 10:06:56 · 1086 阅读 · 0 评论 -
Intel处理器中断18 - Machine-Check Exception (#MC)介绍
概述当处理器探测到机器内部错误或者总线错误的时候,就会发送该中断。当然,一个外部的硬件代理设备探测到总线错误的时候,也会发送该中断。近期的工作是围绕内存错误的,所以发现了内存 错误,就会对处理器发送该中断。machine-check exception 在Pentium以后的芯片上才得以支持,而且对于不同的CPU模型都是不同的,需要参考相关的model-specific。Intel不同处理器家族对原创 2015-09-28 09:57:15 · 13218 阅读 · 0 评论 -
Intel MCE CMCI (一) 概述
Corrected machine-check error interrupt (CMCI) 是MCA的增强特性。在原来的芯片里面,都是使用一种叫做threshold-based error reporting的机制来处理corrected error. 但是threshold-based error reporting需要系统软件周期性的轮询检测硬件的corrected MC error原创 2015-09-28 10:05:07 · 3070 阅读 · 0 评论 -
Intel MCA 硬件机制概述
Intel引入了 MACHINE-CHECK ARCHITECTURE(MCA) 和 machine-check exception(#MC) 机制用来对服务器硬件进行自检,并在发现硬件错误的时候发出中断或异常。系统软件收到中断或异常后,会对其进行响应,进行相应的修复、告警或其他策略等动作。通过Intel的这个RAS特性,保证在发生crash等错误前,服务器可以有机会做一些容错处理,大大提升了I原创 2015-09-28 09:57:28 · 7714 阅读 · 0 评论 -
Intel MCE UCR ERRORS(二) UCR的报告和记录
IA32_MCi_STATUS MSR 用来报告UCR错误、corrected错误和 uncorrected errors错误。 IA32_MCi_STATUS的定义如下所示,通过其中的bit位可以唯一的标明UCR错误。根据UCR的错误类型,UCR错误可以通过CMCI方式通知,也可以通过MCE( machine check exception)方式发送。原创 2015-09-28 13:44:57 · 1574 阅读 · 0 评论 -
Intel MCE CMCI (二) CMCI的LAPIC接口
CMCI的操作图如下所示CMCI中断的传送被配置向为LAPIC寄存器空间中的 LVT CMCI写入,该寄存器默认的起始地址为 APIC_BASE + 2F0H。如果MC errors影响到了多个逻辑处理器,那么CMCI就会被传递到多个逻辑处理器上。例如,两个逻辑处理器共享一个cache,在该cache上发生了可校正(corrected)的bit错误,那么原创 2015-09-28 08:41:50 · 1882 阅读 · 0 评论 -
Intel MCE UCR ERRORS(三) UCR的错误分类
通过 IA32_MCi_STATUS中的S和AR两位的不同编码,可以将UCR分为如下类别Uncorrected no action required (UCNA) - 该类UCR不会通过MCE进行通知,而是按照corrected machine check error的方式报告给系统软件。UCNA意味着系统都的某些数据损坏了,但是这些坏数据还没有被使用,并且处理器的状态是有效的原创 2015-09-28 14:21:52 · 3347 阅读 · 1 评论 -
Intel MCE CMCI (一) 概述
Corrected machine-check error interrupt (CMCI) 是MCA的增强特性。在原来的芯片里面,都是使用一种叫做threshold-based error reporting的机制来处理corrected error. 但是threshold-based error reporting需要系统软件周期性的轮询检测硬件的corrected MC error原创 2015-09-28 07:58:27 · 6514 阅读 · 0 评论 -
MACHINE-CHECK 相关的MSR(二) - Machine-Check 全局控制MSR
Machine-Check 全局控制MSR包括:IA32_MCG_CAP, IA32_MCG_STATUS,IA32_MCG_CAP, IA32_MCG_STATUS。其中后两个是可选的1. IA32_MCG_CAP MSRIA32_MCG_CAP是一个只读寄存器,其中报告了当前芯片MCA相关的能力信息。如下图所示 其中Count field, bits 7:0 - 当前处理器记录错误信息的ba原创 2015-09-28 09:57:33 · 1851 阅读 · 0 评论 -
Intel MCE UCR ERRORS(一) 概述
UCR( uncorrected recoverable machine check errors) 错误恢复是MCA的一种增强特性,第一个支持该特性的芯片是Intel的45nm芯片(CPUID为DisplayFamily_DisplayModel: 06H_2EH)。该特性允许系统软件对于特定类型的uncorrected errors做出一些恢复性动作以便保持系统的正常稳定允许原创 2015-09-28 10:52:25 · 1782 阅读 · 0 评论