自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 linux usb驱动移植(1)

void *buf);probe:当usb接口驱动和usb接口匹配成功之后,就会调用probe函数,usb接口驱动所有的资源的注册和初始化全部放在probe函数中;id_table:往往一个usb接口驱动可能能同时支持多个usb接口,这些usb接口的标识信息都放在该结构体数组中;drvwrap:为struct usbdrv_wrap结构体类型,其中有一个成员为struct device_driver类型,即驱动基类,驱动基类,内核维护的所有的驱动必须包含该成员;

2023-10-13 13:25:10 926

原创 linux usb驱动

通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。在USB总线出现之前,计算机与键盘、鼠标、扫描仪、打印机等的设备连接都使用专用的接口连接,不同的设备的接口不能互用,扩展性很差,每次插拔设备都要关闭计算机,不支持热插拔,且通信速率很低。为了解决上述问题,USB总线诞生了。

2023-10-08 14:52:09 865

原创 ARM64 SMP多核启动详解2(psci)

上面说了pin-table的多核启动方式,看似很繁琐,实际上并不复杂,无外乎主处理器唤醒从处理器到指定地址上去执行指令,说他简单是相对于功能来说的,因为他只是实现了从处理器的启动,仅此而已,所以,现在社区几乎很少使用spin-table这种方式,取而代之的是psci,他不仅可以启动从处理器,还可以关闭,挂起等其他核操作,现在基本上arm64平台上使用多核启动方式都是psci。下面我们来揭开他神秘的面纱,其实理解了spin-table的启动方式,psci并不难(说白了也是需要主处理器给从处理器一个启动地址,然

2023-09-22 11:33:03 608

原创 ARM64 SMP多核启动详解1(spin_table)

处理器架构:arm64uboot版本:uboot-2023内核源码:linux-5.10ubuntu版本:20.04.1一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cpu都是相同的处理器,如4核Contex-A53。

2023-09-21 20:54:44 688 2

原创 Linux内核工作队列workqueue详解

linux 内核 workqueue详解

2023-07-26 17:39:35 1754 1

原创 uboot传参流程

uboot把内核复制到SDRAM之后,需要跳转到内核的入口函数执行。在跳转之前,还要给内核传递启动参数。传递方式是uboot把启动参数按一定的格式放在指定的地址(位于SDRAM),启动内核之后,内核再去这个地址上读取启动参数。boot_prep_linux函数做的工作就是“把启动参数按一定的格式放在指定的地址”params结构体的首地址就是存放tag的首地址。:直接替换设备树bootargs。uboot是如何传递参数到内核。

2023-06-13 23:07:41 118

原创 PCIe DMA Link list (PCS-CCS-CB-TCB Producer-Consumer Synchronization)

pcie dma link list

2023-04-25 16:14:02 936

原创 arm64 - 设备树的加载流程

设备树的加载流程

2022-12-14 10:18:42 959 1

原创 PCIE基本概念

pcie

2022-09-29 17:50:05 8225

原创 ARMv8架构u-boot启动流程详细分析(2)

uboot

2022-08-12 15:52:37 1835

原创 ARMv8架构u-boot启动流程详细分析(1)

armv8 uboot启动流程

2022-08-08 16:58:09 3049 2

原创 PCIe学习(1)——Type0 & Type1 型配置请求

Type0 & Type1 型配置请求

2022-06-29 11:23:15 2136

原创 ARM GIC 与Linux kernel的中断子系统(5)softirq

1. 为何有softirq和tasklet1、为何有top half和bottom half中断处理模块是任何OS中最重要的一个模块,对系统的性能会有直接的影响。想像一下:如果在通过U盘进行大量数据拷贝的时候,你按下一个key,需要半秒的时间才显示出来,这个场景是否让你崩溃?因此,对于那些复杂的、需要大量数据处理的硬件中断,我们不能让handler中处理完一切再恢复现场(handler是全程关闭中断的),而是仅仅在handler中处理一部分,具体包括:(1)有实时性要求的(2)和硬件相关的。例如ac

2022-04-02 15:39:42 375

原创 ARM GIC 与Linux kernel的中断子系统(3)

1. 驱动申请中断API1. 1 和中断相关的linux实时性分析以及中断线程化的背景介绍1、linux内核的实时性在Linux kernel中,一个外设的中断处理被分成top half和bottom half,top half进行最关键,最基本的处理,而比较耗时的操作被放到bottom half(softirq、tasklet)中延迟执行。虽然bottom half被延迟执行,但始终都是先于进程执行的。为何不让这些耗时的bottom half和普通进程公平竞争呢?因此,linux kernel借鉴了

2022-04-01 16:36:23 571

原创 ARM GIC 与Linux kernel的中断子系统(2)

1. IRQ number和中断描述符1.1 基本概念1、通用中断的代码处理示意图一个关于通用中断处理的示意图如下:在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来描述,我们称之中断描述符(struct irq_desc)。linux kernel中会有一个数据结构保存了关于所有IRQ的中断描述符信息,我们称之中断描述符DB(上图中红色框图内)。当发生中断后,首先获取触发中断的HW interupt ID,然后通过irq domain翻译成IRQ nuber

2022-04-01 14:01:43 257

原创 ARM GIC 与Linux kernel的中断子系统(1)

1. 综述linux kernel版本4.191.1 中断系统相关硬件描述中断硬件系统主要有三种器件参与,各个外设、中断控制器和CPU。各个外设提供irq request line,在发生中断事件的时候,通过irq request line上的电气信号向CPU系统请求处理。外设的irq request line太多,CPU需要一个小伙伴帮他,这就是Interrupt controller。Interrupt Controller是连接外设中断系统和CPU系统的桥梁。**CPU的主要功能是运算,因此C

2022-03-31 17:05:24 545

原创 PCIE Resizable BAR

1. 什么是Resizable BARResizable BAR特性在PCIe规范中定义.仅可以通过本地DBI在控制寄存器中更改“Supported Resource Sizes”字段Resizable BAR Capability是一个可选的功能,它允许硬件传递资源大小,系统软件在确定最佳大小后,将最佳大小传递回硬件。硬件通过 Resizable BAR Capability and Control registers来传达可接受的操作资源大小。硬件必须支持1mb ~ 512gb之间的至少一个大小。

2022-03-29 15:34:32 3435

原创 ARM WFI和WFE

1. 前言WFI(Wait for interrupt)和WFE(Wait for event)是两个让ARM核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现2.WFI和WFE1)共同点WFI和WFE的功能非常类似,以ARMv8-A为例(参考DDI0487A_d_armv8_arm.pdf的描述),主要是“将ARMv8-A PE(Processing Element, 处理单元)设置为low-power standby state”。

2022-03-15 18:21:19 561

原创 linux nvme ssd性能降低分析

本文简介:由于linux内核版本升级(由4.19到5.10),驱动移植完成后,测试发现ssd读性能下降了接近50%。最终经过blktrace、ftrace等一系列工具分析,确定在5.10内核中,dd命令所映射的物理地址超过了pcie的dma寻址范围,而内核使用了swiotlb技术来解决该问题,导致性能下降。1.问题描述测试命令:mount /dev/nvme0n1p1 /diskdd if=/dev/zero of=/disk/test.file bs=1M count=2048 conv=fs

2022-02-18 16:54:36 2622

原创 blktrace 编译与使用

blktrace使用

2022-02-17 14:16:36 1243

原创 ARM GIC 与Linux kernel的中断子系统(4)GIC和中断处理

1.GICGIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。GIC v3中断类别:GICv3定义了以下中断类型:SGI (Software Generated Interrupt):软件触发的中断。软件可以通过写 GICD_SGIR 寄存器来触发一个中断事件,一般用于核间通信,内核中的 IPI:inter-processor interrupts 就是基于 SGI。

2022-01-13 15:00:40 1620

原创 虚拟内存(深入了解计算机系统)

文章目录1.物理和虚拟寻址1.1 物理寻址1.2 虚拟寻址2.虚拟内存作为缓存的工具2.1 DRAM 缓存的组织结构2.2 页表2.3 页命中2.4 缺页2.5 分配页面3 虚拟内存作为内存管理的工具4 虚拟内存作为内存保护的工具5 地址翻译5.1 结合高速缓存和虚拟内存5.2 利用TLB加速地址翻译5.3 多级页表5.4 深入理解端到端的地址理解(示例)6. Linux 虚拟内存系统6.1 Linux 缺页异常处理7 内存映射7.1 共享对象7.2 fork函数7.3 execve函数7.4 mmap函数

2022-01-04 11:26:55 1063

原创 ARM64下 Kdump & Crash

1.工具准备1.1 kexeckexec 是一个 Linux 内核到内核的引导加载程序,可以帮助从第一个内核的上下文引导到第二个内核。kexec会关闭第一个内核,绕过BIOS或固件阶段,并跳转到第二个内核。在没有 BIOS 阶段的情况下,重新启动变得更快。下载最新的kexec-tools源码包kexec源码下载地址2. 解压源码包tar xvpzf kexec-tools.tar.gz进入到kexec-tools目录中,并进行配置(静态编译)LDFLAGS=-static ./co

2021-06-17 14:28:10 2382

空空如也

空空如也

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

TA关注的人

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