- 博客(42)
- 收藏
- 关注
原创 Linux驱动的加载与卸载
insmod [选项] <模块文件>:指定insmod命令的其他行为或输出。:要加载的内核模块文件,通常是以.ko结尾的文件。以下是一般的选项,具体支持的选项以实际为准。
2025-10-29 20:59:59
954
原创 Linux内核xarray数据结构使用
Linux 内核的xarray(eXtensible Array)是一种灵活、高性能的,核心功能是将 64 位整数 ID 与指针(内核对象)关联,支持 ID 分配、查找、插入、删除等操作,适用于需要管理大范围 ID 映射的场景(如进程 ID、文件句柄、设备资源等)。
2025-10-18 16:38:57
1024
原创 Linux内核idr数据结构使用
Linux 内核的idr(ID 映射)是一种用于将的数据结构,核心功能是高效分配、查找、释放 ID,并通过 ID 快速定位对应的内核对象(如设备、会话、缓冲区等)。
2025-10-18 16:16:13
402
原创 Linux内核ida数据结构使用
Linux 内核中的ida(ID 分配器)是用于高效分配和释放唯一非负整数 ID 的轻量级工具,适用于只需 ID 标识而无需关联对象的场景。
2025-10-18 16:10:13
212
原创 【原】linux内核RCU锁
是 Linux 内核 RCU(Read-Copy-Update)机制中标记读临界区开始的核心函数,其实现原理围绕 “轻量级标记活跃读者” 展开,。
2025-10-15 21:13:42
969
原创 【转】深入理解linux网络
【深入理解Linux网络总结 - CSDN App】https://blog.csdn.net/weixin_45673259/article/details/139393872?
2024-12-15 09:24:09
178
原创 【转】聊一聊Linux网络性能王者——XDP技术
随着超高带宽网络技术10G,40G,100G网络的出现,Linux内核协议栈越来越不能适应新的网络技术的发展,Linux内核协议栈似乎成为了网络性能的瓶颈和鸡肋,为了解决这个尴尬的处境,Linux内核引入了一个新的技术内核旁路(Kernel Bypass)技术,内核旁路技术的核心思想是网络数据包跳过内核协议栈,直接由用户程序处理,这样可以避免内核协议栈的开销,大大提高网络性能。XDP是Linux特有的内核旁路技术,与之相对应的是DPDK技术。DPDK在性能方面表现出色,然而并不完全适用于Linux系统。
2024-12-09 21:03:26
1303
原创 【转】以太网PHY寄存器分析
转载:以太网PHY寄存器分析_link partner supports 1000base-t full duplex-CSDN博客
2024-11-19 11:37:40
223
原创 【原】设备驱动-随记
dma_alloc_coherent函数是用于在Linux内核中为设备驱动程序分配用于DMA操作的内存区域的函数。DMA是指通过外部设备直接访问系统内存的过程,它通常用于设备之间的数据传输,比如网络数据包的接收和发送,磁盘I/O等。通过使用container_of宏,可以很方便地根据结构体的某个成员的指针获取整个结构体的指针,从而进行相应的操作。dma_alloc_coherent函数的作用是在内核中分配一块物理上连续、足够大的内存区域,用于设备进行DMA操作。这个宏通常在设备驱动程序或内核模块中使用。
2024-04-25 11:44:11
536
原创 【原】自动化测试-ping超时联动
安装完AutoIt3后,在开始菜单输入auto可弹出AutoIt v3 Window Info软件,使用该软件的Finder Tool工具可定位窗口等相关信息的名称。直到出现连续10次ping超时的情况,调用click_script.au3脚本,执行click_script.au3中定义的相关功能。click_script.au3的功能为,点及窗口Window Title中的stop按钮。2.将click_script.au3和ping_click.bat拷贝到软件安装路径下。1.安装AutoIt3软件。
2024-04-17 14:36:49
289
原创 【转】Linux内核裁剪
Linux内核裁剪是一种优化Linux内核的过程,通过移除不必要的功能和模块,以及调整参数来减小内核的大小并提高性能。裁剪可以针对特定的嵌入式系统、服务器环境或个人需求进行定制,以满足特定的功能和资源要求。本文将介绍Linux内核裁剪的概述,包括裁剪的原因、方法和注意事项。
2024-04-13 15:37:03
613
原创 【原】Linux USB驱动(二)
USB集线器的每个下游端口的D+和D-上,分别接了一个15KΩ的下拉电阻到地,在端口悬空时,就被这两个下拉电阻拉到了低电平。Hub给Device发出复位信号,如果Device支持高速模式,就会回复一个K信号,Hub收到K信号后,如果自身也支持高速模式,就会发出一系列的KJ信号,Device收到后就知道Hub也支持高速模式,然后就会。当高速设备断开后,Hub发出的信号,得到的反射信号法无衰减,Hub监测到这些信号以后就知道设备已经断开(此处涉及到比较深的与阻抗匹配相关的硬件知识)。中已经封装好的函数接口。
2024-03-31 16:12:32
1193
原创 【原】Linux设备驱动
Linux设备驱动模型有(1):管理设备自身的属性信息(寄存地址或者led个数),对应的数据结构随类型而变,但有共同的属性成员 struct device。(2):实现设备的具体硬件操作(驱动方法),对应的数据结构随类型而变,但有共同的属性成员 struct device_driver;(3):绑定了符合该总线要求(匹配词)的设备端和驱动端,将设备和驱动匹配起来,对应的数据结构是struct bus_type。补充:多个类似的设备可以匹配同一个驱动。也有些设备与驱动时一对一匹配的。
2024-03-29 14:02:01
1252
原创 【原】malloc
在用户空间,进程调用malloc函数动态申请内存时,如果申请的内存大于128KB则使用mmap系统调用,否则使用brk系统调用。(128KB这个值可通过M_MMAP_THRESHOLD进行调节)。实际上,调用malloc会发生三种可能:操作系统为应为应用层提供了 mmap、brk 等系统调用来申请内存。但是这些系统调用在很多的时候,我们并不会直接使用。原因有以下两个:所以,现代编程语言的做法都是自己在应用层实现了一个内存分配器。其思想都和内核自己用的 SLAB 内存分配器类似。都是内存分配器预先向操作系统申
2024-03-27 20:35:00
910
原创 【原】Linux内核态信号量和用户态信号量
inux 内核信号量用户态信号量 详解 https://blog.csdn.net/weed_hz/article/details/8965733?Linux用户态的信号量 https://blog.csdn.net/zhang_shuai_2011/article/details/7653750。//把指定的信号量sem的值加1;POSIX信号量的引用头文件是<semaphore.h>,而SYSTEM V信号量的引用头文件是 <sys/sem.h>// 这是一个阻塞的函数,信号量减1。
2024-03-25 15:09:36
290
原创 【转-原】嵌入式linux与驱动开发面试题
https://zhuanlan.zhihu.com/p/676423106?utm_campaign=shareopn&utm_medium=social&utm_psn=1752605686738071552&utm_source=wechat_session&utm_id=0
2024-03-17 10:39:39
214
原创 【原】Linux驱动开发
我们在学习linux驱动开发时,我们去看视频去看书,我们能够看到的基本上全是基本的"驱动模型"。我们能够学到的也只是设备驱动程序的结构以及开发的套路。然而驱动开发真正的难点不在于此,而是需要我们对处理器,外设,外设与处理器通讯的接口协议,linux内核,这些内容的了解。所以需要去阅读,理解实际的驱动程序代码。
2024-03-09 07:51:01
142
原创 【原】Linux驱动开发相关API
需要注意的是,从Linux内核版本2.6.26开始,推荐使用device_create()和class_create()等函数来替代直接使用register_chrdev()和unregister_chrdev(),因为它们提供了更灵活和统一的设备管理方式。它会将驱动的信息注册到内核的设备驱动结构中,并与相应的平台设备匹配。platform_device_register 用于注册一个平台设备,根据提供的设备信息来动态创建相应的平台设备对象,并将其注册到内核中。
2024-03-08 21:03:25
969
原创 【原】Linux内核
Linux 内核源代码包含如下目录。● arch :包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如 i386、arm、 arm64、powerpc、mips 等。Linux 内核目前已经支持 30 种左右的体系结构。在 arch 目录下,存放的是各个平台以及各个平台的芯片对 Linux 内核进程调度、内存管理、 中断等的支持,以及每个具体的 SoC 和电路板的板级支持代码。● block:块设备驱动程序 I/O 调度。
2024-03-06 22:50:43
1111
原创 【原】LINUX内存空间布局
不在需要用到《7.1.2 ZONE_HIGHMEM 高端内存》小节中介绍的高端内存那种动态映射方式。在程序执行前BSS段会被清零,所以未初始化德 全局变量和静态变量的初始值是0。在 64 位体系下的内核虚拟内存空间与物理内存的映射就变得非常简单,
2024-02-26 20:30:02
637
原创 【原】内存管理——常用函数接口
根据内存空间分配方式的不同,可以将内存分为和。动态内存与静态内存是两种不同的分配内存的方式,那么它们在分配方式上存在什么样的区别呢?
2024-02-25 10:40:24
780
原创 【原】Linux内存管理相关—基础知识篇(二)
对于每个进程而言有4GB的虚拟内存空间,一般来说3GB(0-3GB)用于用户空间,1GB(3-4GB)用于内核空间,其中内核空间这1GB是所有进程共用的(每个用户进程都有 0x00000000~0xbfffffff 范围的用户空间虚拟地址以及共用的 0xc0000000~0xffffffff 内核空间虚拟地址)。当然这一比例是可以通过内核配置而修改的,有3:1的,有1:3的,也有2:2的。
2024-02-24 18:06:50
738
原创 【原】Linux内存管理相关—命令操作篇
PS:高端内存一般供用户态申请使用,如果高端内存被用完,则会到低端内存及线性内存区申请,使用高端内存的目的可能是可以减少内存碎片化,具体原因待进一步学习。Bounce: 0 kB //可反弹高端内存区域的页的内存量。Active: 95776 kB //当前正在使用的内存页的物理内存量。Unevictable: 0 kB //无法被从内存中删除的页的内存量,通常为锁定的内存。
2024-02-20 20:34:51
548
原创 【转-原】linux面试题
以下链接汇总了一些linux相关的面试题,学习时需要有着重点的来学,有些内容一带而过了解一下就行,有些内容需要在linux上实操一下,而有些内容则需要以这个为引子单独开辟专题来学习。
2024-02-06 08:56:10
148
原创 【原】SVN相关
1.工作中遇到问题,本地调试编译成功,上传至SVN后在拉取下来编译报错,报错信息为找不到某个.o文件。经定位,原因为windows系统下svn上传时会默认过滤掉.o类型的文件,而报错信息中多提到的.o文件不是我们代码编译产生的二十光模块厂家给的,在编译时需要使用。所以需要上传至SVN。
2024-01-31 08:56:53
210
原创 【原】Linux内存管理相关—基础知识篇(一)
工作中遇到这样的问题,调用alloc_pages(GFP_KERNEL, 13),返回值为NULL,并且打印告警。使用cat /proc/buddyinfo 命令查看,最大为2的10次方,将13改为10,函数成功调用。
2024-01-29 22:17:05
1265
3
原创 【原】常用通信协议
是一种将数据一个位一个地传输的方式。在串行通信中,数据通过单个信道传输,一个位接一个位地传输。例如,串行通信可以通过电缆或光纤将数据从一台计算机传输到另一台计算机。串行通信的优点是可以使用较少的信道传输大量数据,但是传输速度较慢。串行通信根据发送时源和接收时源是否保持一致,又分为同步通信和异步通信,其优点是只需要几条线就可以在系统之间交换信息。是一种同时传输多个位的方式。在并行通信中,多个位同时传输,通常使用多个信道进行传输。例如,计算机内部使用并行通信将数据从内存传输到处理器。
2024-01-23 22:36:31
854
原创 【原】【Bootloader&uBoot】
下图给出了U-boot的Stage-1和Stage-2阶段在Flash和RAM中的分配。U-boot支持许多的处理器和开发板,主要是该软件有良好的架构,以ARM处理器的smdk2410开发板为例分析U-boot的启动流程,在其他处理器架构上,U-boot也执行类似的启动流程。通过Bootloader的代码初始化初始化处理器的各寄存器以及其他外部设备,建立存储器映射图以及初始化堆栈,为操作系统提供基本的运行环境。是U-boot整个程序的入口,该文件使用汇编语言编写,不同体系结构的代码是不同的;
2023-12-24 12:12:36
443
原创 【转】关于内核移植
2、此后Linux要将自己的剩余部分全部加载到内存(如果有的话,视硬件平台的不同而不同),初始化所有设备,在内存中建立好所需的数据结构(有关进程、设备、内存等)。内核加载根设备并启动init守护进程,init守护进程会根据配置文件加载文件系统、配置网络、服务进程、终端等。1、一个不隶属于任何操作系统的加载程序将Linux部分内核调入内存,并将控制权交给内存中Linux内核的第一行代码。对于系统移植而言,Linux系统实际上由两个比较独立的部分组成:即内核部分和系统部分。
2023-11-28 10:34:37
321
原创 【原】PCI和PCIE_No.2
IDSEL(初始化设备选择)引脚,想要配置某个设备时,通过这个引脚来选中他。不同的桥,选中IDSEL的方式可能不同,例如,使用不同的AD引脚来连接不同设备的IDSEL引脚,以达到选中不同的设备的效果。后面,CPU发出的地址就会被转换为PCI空间的地址,设备发现这个地址属于自己地址空间范围内的地址时就会回应CPU。对于PCI总线,FRAM信号为底时的第一个时钟期间,AD总线传输的是地址,在后续的时钟里,传输的是数据。a)扫描PCI设备,读取配置寄存器,获取设备种类以及设备所需要的空间。
2023-11-15 22:48:19
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅