摘要:
目录1. 前言2. 编写模块2.1 编写模块代码2.2 编写 Makefile3. 编译和运行3.1 编译3.2 运行3.2.1 加载模块3.2.2 卸载模块 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 编写模块 2.1 编写模块代码 /* * 阅读全文
posted @ 2025-04-07 14:45
JiMoKuangXiangQu
阅读(31)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 测试环境3. 配置步骤3.1 host 配置3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况3.1.2 网桥一端的建立:创建网桥设备,并添加 host 网卡到网桥3.1.3 网桥另一端的建立:TUN/TAP 配置3.2 guest 端的配置3.3 小结4. 参考 阅读全文
posted @ 2025-04-07 14:44
JiMoKuangXiangQu
阅读(283)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 提交内核补丁的步骤2.1 从代码仓库下载内核源码2.2 建立本地分支 linux-next_master2.3 制作一个补丁2.3.1 编辑器 VIM 配置2.4 提交补丁2.4.1 配置发送邮箱2.4.2 配置 git-email2.4.3 发送补丁2.4.4 回复邮件3. 邮 阅读全文
posted @ 2025-04-07 14:43
JiMoKuangXiangQu
阅读(143)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 什么尾调用(Tail Call)?3. 尾调用优化4. Linux内核下的尾递归优化使用5. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,对此给读者带来的损失,作者不错任何承诺。 2. 什么尾调用(Tail Call)? 如果对函数B的调用是函数A执行的最后一条语句 阅读全文
posted @ 2025-04-07 14:42
JiMoKuangXiangQu
阅读(35)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 测试环境3. 实现3.1 概念3.2 数据结构3.3 对基数树的操作3.3.1 初始化3.3.2 插入3.3.3 查找3.3.4 删除3.3.5 tag 操作3.3.5.1 设置 tag3.3.5.2 清除 tag3.3.5.3 获取 tag 状态4. 使用范例5. Linux 阅读全文
posted @ 2025-04-07 14:41
JiMoKuangXiangQu
阅读(97)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 硬件拓扑4. 以太网卡 PHY 驱动实现4.1 MDIO 总线对象的创建和注册4.2 MDIO 总线从设的 创建注册 和 驱动注册的加载4.2.1 以太网的 PHY 设备创建和注册4.2.2 以太网的 PHY 设备驱动注册和加载4.3 绑定以太网卡的 MAC 和 PHY 阅读全文
posted @ 2025-04-07 14:40
JiMoKuangXiangQu
阅读(593)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 网卡数据收发流程3.1 网络数据接收流程3.1.1 网卡数据接收流程3.1.2 网卡数据向上传递给L3,L4的流程3.2 网卡数据发送流程4. 番外:嵌入式平台下网卡的典型结构 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 阅读全文
posted @ 2025-04-07 14:38
JiMoKuangXiangQu
阅读(54)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 进程标准输入、输出的建立过程3.1 系统的启动登录过程3.1.1 getty 启动过程3.1.2 login 登录过程3.2 在 shell 里启动程序的标准输入、输出的建立4. 结语5. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失 阅读全文
posted @ 2025-04-07 14:38
JiMoKuangXiangQu
阅读(25)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 分析背景3. USB 总线硬件拓扑4. USB 协议栈概览4.1 Linux USB 子系统概览4.2 USB外设(如U盘)固件基础5. Linux USB 子系统初始化6. Linux USB 主机控制器(HCD) 驱动6.1 USB 主机控制器驱动初始化6.2 USB 主机控 阅读全文
posted @ 2025-04-07 14:36
JiMoKuangXiangQu
阅读(184)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 分析背景3. CPU 多核启动流程3.1 支持 PSCI 平台的 CPU 启动流程3.1.1 BOOT CPU 启动流程3.1.2 非 BOOT CPU 启动流程3.2 不支持 PSCI 平台的 CPU 启动流程3.2.1 BOOT CPU 启动流程3.2.2 非 BOOT CP 阅读全文
posted @ 2025-04-07 14:35
JiMoKuangXiangQu
阅读(137)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 分析背景3. 设备节点的创建和移除3.1 通过 devtmpfs 创建移除设备节点3.1.1 devtmpfs 初始化3.1.2 通过 devtmpfs 创建设备节点3.1.2.1 发出设备创建请求3.1.2.2 处理设备创建请求3.1.2.3 通知用户态设备事件监听程序:设备对 阅读全文
posted @ 2025-04-07 14:34
JiMoKuangXiangQu
阅读(68)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 什么 是 eBPF?4. eBPF 框架5. eBPF 范例5.1 编译5.1.1 编译环境搭建5.1.1.1 安装 eBPF 程序依赖的内核头文件5.1.1.2 安装 eBPF 程序编译套件5.1.1.3 安装用户程序依赖库5.1.2 编译 eBPF 程序5.1.3 阅读全文
posted @ 2025-04-07 14:33
JiMoKuangXiangQu
阅读(181)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. ftrace3.1 简介3.2 挂载 ftrace 文件系统3.3 ftrace 文件系统说明3.3.1 current_tracer3.3.2 available_tracers3.3.3 tracing_on3.3.4 trace3.3.5 trace_pipe3. 阅读全文
posted @ 2025-04-07 14:32
JiMoKuangXiangQu
阅读(360)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 性能分析概述3. 性能分析方法论一览3.1 TSA 和 USE3.1.1 TSA3.1.1.1 TSA 概述3.1.1.2 TSA 状态转换3.1.1.3 延迟类状态3.1.1.3 TSA 总结3.1.2 USE3.1.2.1 USE 简介3.1.2.2 低利用率是否意味着没有饱 阅读全文
posted @ 2025-04-07 14:31
JiMoKuangXiangQu
阅读(64)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 概述3. 分析方法概述3.1 CPU 采样 方法3.2 跟踪 方法4. 使用火焰图分析4.1 On-CPU 分析4.2 Off-CPU 分析4.2.1 Off-CPU 两种分析方法对比4.2.2 生成 Off-CPU 火焰图5. 参考资料 1. 前言 限于作者能力水平,本文可能存 阅读全文
posted @ 2025-04-07 14:29
JiMoKuangXiangQu
阅读(160)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 内存增长和泄漏分析方法3.1 跟踪 malloc(), free() 等接口3.1.1 用 perf 采样3.1.2 用 ebpf 来跟踪3.2 跟踪 brk() 调用3.2.1 使用 perf 跟踪 brk()3.2.2 使用 ebpf 跟踪 brk()3.3 跟踪 阅读全文
posted @ 2025-04-07 14:29
JiMoKuangXiangQu
阅读(101)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 使用内核事件跟踪系统3.1 启用、禁用追踪事件3.2 追踪事件的目录结构3.3 追踪事件数据格式3.4 事件过滤器3.4.1 过滤器表达式语法3.4.2 设置和清除事件过滤器3.4.3 事件过滤器的限制3.4.4 事件子系统(subsystem)过滤器3.4.5 按进程 阅读全文
posted @ 2025-04-07 14:28
JiMoKuangXiangQu
阅读(60)
评论(0)
推荐(0)
摘要:
目录1. 前言2. SPI 总线驱动2.1 SPI 总线拓扑2.2 SPI 总线工作模式2.3 SPI 总线驱动2.3.1 SPI master 模式总线驱动2.3.1 SPI slave 模式总线驱动3. SPI 从设驱动4. SPI 用户空间接口4.1 创建 SPI 总线用户空间字符设备节点4. 阅读全文
posted @ 2025-04-07 14:26
JiMoKuangXiangQu
阅读(250)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 进程间通信机制2.1 管道2.1.1 匿名管道2.1.2 popen() 和 pclose()2.1.3 命名管道 FIFO2.2 消息队列2.3 共享内存2.4 信号量2.5 网络套接字2.6 UNIX套接字2.7 信号3. 参考资料 1. 前言 限于作者能力水平,本文可能存在 阅读全文
posted @ 2025-04-07 14:23
JiMoKuangXiangQu
阅读(36)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 测试环境3. NFS 服务器搭建3.1 安装 NFS 服务3.2 导出 NFS 共享目录3.3 重启 NFS 服务4. 客户端连接 NFS 服务端5. VMware + Ubuntu6. Linux 内核 NFS 支持7. NFS 相关工具 1. 前言 限于作者能力水平,本文可能 阅读全文
posted @ 2025-04-07 14:22
JiMoKuangXiangQu
阅读(75)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Linux Timer 使用 和 实现2.1 线程组内共享的唯一定时器2.1.1 用户空间接口2.1.1.1 alarm()2.1.1.2 setitimer()2.1.2 alarm() 和 setitimer() 的实现2.1.2.1 timer 的定义2.1.2.2 tim 阅读全文
posted @ 2025-04-07 14:18
JiMoKuangXiangQu
阅读(103)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 为什么需要内存一致性(Memory Consistency)模型3. 什么是内存一致性(Memory Consistency)模型4. 各种内存一致性(Memory Consistency)模型4.1 顺序一致性(SC: Sequential Consistency)模型4.2 阅读全文
posted @ 2025-04-07 14:16
JiMoKuangXiangQu
阅读(277)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. ARM32 中断向量表 和 中断处理流程3.1 ARM32 中断向量表3.2 ARM32 中断处理流程4. ARM32 各 CPU 模式下的栈配置4.1 SVC 模式下各 CPU 栈配置(内核栈配置)4.1.1 BOOT CPU SVC 模式栈配置(内核栈配置)4.1. 阅读全文
posted @ 2025-04-07 14:15
JiMoKuangXiangQu
阅读(71)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 编译选项3.1 架构无关 编译选项3.1.1 -v,--verbose3.1.2 -fverbose-asm,-frecord-gcc-switches,-grecord-gcc-switches3.1.3 -falign-functions3.1.4 -g,-ggdb 阅读全文
posted @ 2025-04-07 14:14
JiMoKuangXiangQu
阅读(96)
评论(0)
推荐(0)
摘要:
@目录1. 前言2. 分析环境3. 问题描述4. 问题分析4.1 代码分析4.2 程序日志分析4.2.1 CPU 频率变换引发的抖动?4.2.2 中断导致的调度延迟?5. 结语 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 分析环境 1. SoC: 阅读全文
posted @ 2025-04-07 14:13
JiMoKuangXiangQu
阅读(17)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 为什么需要更多的字符集编码?4. 提供更多字符集编码支持需要做哪些工作?5. Linux 是怎样提供各种字符集支持的?5.1 文件系统各种字符集支持5.1.1 注册可支持的语种字符集5.1.2 文件系统使用系统中注册的字符集5.2 用户空间各种字符集支持 1. 前言 限 阅读全文
posted @ 2025-04-07 14:12
JiMoKuangXiangQu
阅读(31)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. DMA 硬件基础3.1 什么是 DMA?3.2 为什么需要 DMA?3.3 DMA 传送模式3.4 DMA 常见硬件拓扑3.4.1 ARM 架构常见 DMA 硬件拓扑3.4.2 其它架构 DMA 硬件拓扑4. Linux 下的 DMA4.1 DMA 内存地址和区域4.1 阅读全文
posted @ 2025-04-07 14:10
JiMoKuangXiangQu
阅读(270)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 问题的 重现 和 分析4. 分析手段5. 后记 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文所涉软硬件环境: SoC: 德州仪器(TI) AM335X,单核 1GHz,256MB DDR,32MB 存储 内 阅读全文
posted @ 2025-04-07 14:09
JiMoKuangXiangQu
阅读(70)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. USB Gadget 驱动3.1 什么是 USB Gadget 驱动?3.2 USB Gadget 驱动框架3.3 USB 设备控制器(UDC) 驱动3.3.1 USB 设备控制器(UDC) 驱动 概述3.3.2 USB 设备控制器(UDC) 驱动示例3.4 USB G 阅读全文
posted @ 2025-04-07 14:08
JiMoKuangXiangQu
阅读(111)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. zImage 的构建过程4. 内核引导过程5. 内核解压缩过程6. 内核加压缩过程小结7. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文基于 ARM32架构 + Linux 4.14内核 进行分析 阅读全文
posted @ 2025-04-07 14:07
JiMoKuangXiangQu
阅读(49)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 调试环境3. 调试内核启动代码的步骤3.1 工具准备3.2 构建客户端系统3.2.1 编译可调试内核3.2.2 构建根文件系统3.3 调试客户端系统内核3.3.1 ARM32 Linux 内核启动过程3.3.2 内核启动过程调试3.3.2.1 调试 内核解压程序3.3.2.2 调 阅读全文
posted @ 2025-04-07 14:05
JiMoKuangXiangQu
阅读(77)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. Linux SysRq3.1 SysRq 简介3.1.1 SysRq 初始化3.2 通过 procfs 发起 SysRq 请求3.2.1 修改内核日志等级3.2.1.1 触发3.2.1.2 实现简析3.2.2 手动触发内核 panic3.2.2.1 触发3.2.2.2 阅读全文
posted @ 2025-04-07 14:04
JiMoKuangXiangQu
阅读(67)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. Cache 硬件基础3.1 什么是 Cache ?3.2 Cache 工作原理3.3 Cache 层级架构3.4 内存架构中各级访问速度概览3.5 Cache 分类3.6 Cache 的 查找 和 组织方式3.6.1 Cache 组织相关术语3.6.2 Cache 查找 阅读全文
posted @ 2025-04-07 14:03
JiMoKuangXiangQu
阅读(125)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. TCP连接的建立和断开3.1 TCP协议状态机3.2 TCP的三握四挥3.2.1 TCP 连接建立的三次握手过程分析3.2.1.1 服务端和客户端套接字的创建3.2.1.2 服务端进入 LISTEN 状态3.2.1.3 服务端 应用程序 用 accept() 取出 已建 阅读全文
posted @ 2025-04-07 14:02
JiMoKuangXiangQu
阅读(22)
评论(0)
推荐(0)
摘要:
目录1. 前言2. TCP 状态机3. tcpdump 工作原理概述4. tcpdump 常见选项说明4.1 不将 IP 地址 转换为 主机名: -n4.2 显示绝对序列号: -S4.3 抓每个包的部分内容: -s4.4 更多选项5. tcpdump 抓包示例5.1 三握四挥 和 数据收发5.1.1 阅读全文
posted @ 2025-04-07 14:01
JiMoKuangXiangQu
阅读(132)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 分析背景3. Linux 声卡驱动框架3.1 ALSA 通用框架3.2 ASoC 框架4. alsa 声卡设备5. alsa-lib 简介5.1 alsa-lib 插件5.1.1 alsa-lib 插件概览5.1.2 alsa-lib 插件工作细节5.1.2.1 插件对象的创建和 阅读全文
posted @ 2025-04-07 14:00
JiMoKuangXiangQu
阅读(132)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 分析背景3. 内核镜像线性临时映射的建立过程3.1 预备工作:内核解压缩3.2 BOOT CPU: 建立内核镜像区域的临时映射页表3.2.1 定位内核入口3.2.2 建立内核线性映射前的其它启动工作3.2.2.1 将 CPU 设为 SVC 模式,且禁用 IRQ + FIQ 中断3 阅读全文
posted @ 2025-04-07 13:58
JiMoKuangXiangQu
阅读(71)
评论(0)
推荐(0)
摘要:
上一篇:Linux内存管理 (1):内核镜像映射临时页表的建立 目录1. 前言2. 分析背景3. memblock 简介3.1 memblock 数据结构3.2 memblock 接口4. memblock 的构建过程4.1 添加系统可用内存区域列表4.2 建立保留内存区域列表5. 小结 1. 前言 阅读全文
posted @ 2025-04-07 13:56
JiMoKuangXiangQu
阅读(55)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 什么是 loop device?3. loop device 典型应用场景4. 内核 loop device 支持5. loop device 相关工具6. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 什么是 loo 阅读全文
posted @ 2025-04-07 13:55
JiMoKuangXiangQu
阅读(53)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Path MTU Discovery(PMTUD) 协议2.1 PMTUD 发现最小 MTU 的过程3. Linux 的 PMTUD 简析3.1 创建 socket 时初始化 PMTUD 模式3.2 数据发送时 PMTUD 相关处理3.2.1 源头主机发送过程中 PMTUD 处理 阅读全文
posted @ 2025-04-07 13:54
JiMoKuangXiangQu
阅读(161)
评论(0)
推荐(1)
摘要:
目录1. 前言2. 什么是 strace ?3. 使用 strace3.1 追踪指定进程3.1.1 通过程序名追踪进程3.1.2 通过 进程 ID (PID) 追踪程序3.1.3 追踪 子进程 或 线程3.2 系统调用情况统计3.3 追踪过滤3.3.1 追踪指定的系统调用集合3.3.2 追踪对指定文 阅读全文
posted @ 2025-04-07 13:52
JiMoKuangXiangQu
阅读(45)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 什么是 TCP 序列号?3. TCP 序号 的 初始值设置 和 后续变化过程3.1 三次握手 连接建立 期间 客户端 和 服务端 序号 的 变化过程3.1.1 客户端 socket 初始序号 的 建立3.1.2 服务端 socket 初始序号 的 建立3.1.3 客户端 sock 阅读全文
posted @ 2025-04-07 13:51
JiMoKuangXiangQu
阅读(96)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Linux 命令和工具2.1 CPU 工具2.2 内存工具2.3 磁盘工具2.3.1 查看路径所属文件系统信息2.4 查询进程信息2.5 虚拟化相关工具2.6 ELF 工具2.6.1 获取 ELF 目标文件的编译器信息2.7 系统版本信息查询2.8 远程操作2.9 搜索查找2.1 阅读全文
posted @ 2025-04-07 13:49
JiMoKuangXiangQu
阅读(35)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Linux 存储设备分区2.1 MTD(Memory Technology Device) 类设备分区2.1.1 通过 DTS 设定 MTD 类设备分区2.1.2 通过 内核命令行 设定 MTD 类设备分区2.1.3 小结2.2 块(block) 类设备分区2.2.1 块(blo 阅读全文
posted @ 2025-04-07 13:48
JiMoKuangXiangQu
阅读(43)
评论(0)
推荐(0)
摘要:
目录1. 前言2. PTP(Precision Time Protocol) IEEE 1588 协议简介2.1 PTP IEEE 1588 协议时间同步原理2.1.1 选举最优时钟2.1.2 时钟 频率、相位 同步2.2 PTP IEEE 1588 协议时钟类型2.2.1 普通时钟(OC: Or 阅读全文
posted @ 2025-04-07 13:47
JiMoKuangXiangQu
阅读(263)
评论(0)
推荐(1)
摘要:
目录1. 前言2. 以太网设备的初始化3. 以太网设备的数据收发过程 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 以太网设备的初始化 下面以 U-Boot 2016.05 代码下 ARMv7 架构代码为例,来说明 U-Boot 以太网设备的初始化 阅读全文
posted @ 2025-04-07 13:46
JiMoKuangXiangQu
阅读(81)
评论(0)
推荐(0)
摘要:
目录1. 前言2. NAND 初始化3. 访问 NAND 设备3.1 查看 NAND 设备信息3.1.1 查看 NAND 设备基本信息3.1.2 查看 NAND 设备 MTD 分区3.1.3 查看 NAND 设备坏块3.2 NAND 擦除操作3.3 NAND 写操作3.4 NAND 读操作3.5 其 阅读全文
posted @ 2025-04-07 13:45
JiMoKuangXiangQu
阅读(80)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 网络状态观察2.1 硬件:网络硬件 调试观察2.1.1 网络 PHY 芯片 调试观察2.1.1.1 观察方法2.1.1.2 源码实现2.1.1.2.1 用户空间部分2.1.1.2.2 内核空间部分2.1.2 网卡调试观察2.1.2.1 网卡性能评估2.1.2.1.1 网卡性能评估 阅读全文
posted @ 2025-04-07 13:44
JiMoKuangXiangQu
阅读(81)
评论(0)
推荐(0)
摘要:
我们学习的每一个领域,大多都有着宽泛的知识面,那在学习过程中,我们是应该一开始就专钻一个方向(即深度),还是应该先扩展知识面(即广度)?个人认为,应该先扩展知识面宽度,然后再精研某个方向,也即先广度后深度。为什么要这样做?从我个人经验来讲,一方面是因为在工作过程中,不同的产品经常会涉及不同的知识面, 阅读全文
posted @ 2025-04-07 13:39
JiMoKuangXiangQu
阅读(69)
评论(0)
推荐(1)
摘要:
目录1. 前言2. DHCP 协议简介2.1 DHCP 客户端广播 DHCPDISCOVER 消息2.2 DHCP 服务器回复 DHCPOFFER 消息2.3 DHCP 客户端广播 DHCPREQUEST 消息2.4 DHCP 服务器回复 DHCPACK 消息2.5 剩余的工作3. 参考资料 1. 阅读全文
posted @ 2025-04-07 13:37
JiMoKuangXiangQu
阅读(60)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 问题描述3. 问题简析4. 番外:交叉编译 iperf3 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题描述 在 TI 的 AM335x 平台适配了一个 1000Mbps 的 PHY 芯片,通过 iperf 打流,TCP 带 阅读全文
posted @ 2025-04-07 13:36
JiMoKuangXiangQu
阅读(27)
评论(0)
推荐(0)
摘要:
目录1. 前言2. softirq 实现2.1 softirq 初始化2.1.1 注册各类 softirq 处理接口2.1.2 创建 softirq 处理线程2.2 softirq 的 触发 和 处理2.1.1 softirq 触发2.1.2 softirq 处理2.1.2.1 在 中断上下文 处理 阅读全文
posted @ 2025-04-07 13:35
JiMoKuangXiangQu
阅读(45)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Linux 中断是否会嵌套?2.1 分析背景2.2 中断处理抢占、嵌套可能性分析2.3 中断处理抢占、嵌套小结3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. Linux 中断是否会嵌套? 2.1 分析背景 本文基于 阅读全文
posted @ 2025-04-07 13:34
JiMoKuangXiangQu
阅读(55)
评论(0)
推荐(0)
摘要:
目录1. 前言2. libwebsockets 的 编译 和 使用2.1 编译2.2 使用2.2.1 构建运行上下文2.2.2 事件处理循环3. websocket 协议 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. libwebsockets 的 阅读全文
posted @ 2025-04-07 12:55
JiMoKuangXiangQu
阅读(120)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 案例背景3. 案例问题4. 案例分析4.1 普通文件写入流程概要4.2 dd 写 NAND 时,会不会使用 page cache ?4.3 dd 写 NAND 时,对比 U-Boot 读 NAND,是否采用了相同的坏块策略 ?4.3.1 U-Boot 读 NAND 过程中遇坏块的 阅读全文
posted @ 2025-04-07 12:54
JiMoKuangXiangQu
阅读(92)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Netlink 范例3. Netlink 简析3.1 Netlink 协议簇注册3.2 创建 用户空间 Netlink 套接字3.3 用户空间 Netlink 套接字 的 绑定3.4 向 内核空间 Netlink 套接字 发消息3.5 从 内核空间 Netlink 套接字 读消息 阅读全文
posted @ 2025-04-07 12:01
JiMoKuangXiangQu
阅读(28)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Netfilter 简介2.1 Netfilter 的功能2.2 Netfilter 示例2.3 Netfilter 实现概览2.3.1 Netfilter hook 的 注册 和 注销2.3.2 Netfilter hook 的触发2.3.2.1 NF_INET_PRE_ROU 阅读全文
posted @ 2025-04-07 11:59
JiMoKuangXiangQu
阅读(121)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 为什么不应该在内核代码中使用 volatile ?4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文基于 Linux 内核文档 Why the “volatile” type class shou 阅读全文
posted @ 2025-04-07 11:58
JiMoKuangXiangQu
阅读(17)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 为什么要有 ACCESS_ONCE() ?4. ACCESS_ONCE() 代码实现5. ACCESS_ONCE() 实例分析6. ACCESS() 的演进7. 结语8. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺 阅读全文
posted @ 2025-04-07 11:57
JiMoKuangXiangQu
阅读(16)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 编译器内存屏障2.1 编译器内存访问重排序规则2.2 编译器屏障的几种形式2.2.1 显式编译器屏障2.2.2 隐式编译器屏障2.2.3 硬件内存屏障充当编译屏障2.2.4 编程语言内存模型提供的编译屏障2.3 编译器内存屏障实例2.3.1 Linux spinlock3. 结语 阅读全文
posted @ 2025-04-07 11:56
JiMoKuangXiangQu
阅读(25)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 什么是内存屏障?3. 为什么需要内存屏障?3.1 多发射(Multi-issuing)3.2 乱序执行(Out-of-order execution)3.3 预测执行(Speculative execution)3.4 Load-Store 优化3.5 CPU Cache3.6 阅读全文
posted @ 2025-04-07 11:51
JiMoKuangXiangQu
阅读(69)
评论(0)
推荐(0)
摘要:
目录1. 前言2. ubi rootfs 故障现场3. 故障分析与解决4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. ubi rootfs 故障现场 问题故障内核日志如下: Starting kernel ... [ 0.000000 阅读全文
posted @ 2025-04-07 11:40
JiMoKuangXiangQu
阅读(179)
评论(0)
推荐(0)
摘要:
目录1. 前言2. ubi rootfs 故障现场3. 问题解决4. 问题分析5. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. ubi rootfs 故障现场 内核故障日志如下: ...... [ 0.000000] Linux ver 阅读全文
posted @ 2025-04-07 11:39
JiMoKuangXiangQu
阅读(94)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 什么是 Dynamic debug (dyndbg) ?3. Dynamic debug (dyndbg) 的使用3.1 开启 Dynamic debug (dyndbg) 功能3.2 使用 Dynamic debug (dyndbg) 功能4. Dynamic debug (d 阅读全文
posted @ 2025-04-07 11:38
JiMoKuangXiangQu
阅读(75)
评论(0)
推荐(0)
摘要:
目录1. 前言2. CFS 调度器2.1 概述2.1.1 CFS 核心设计思想2.2 CFS 的一些实现细节2.3 CFS 运行队列:红黑树2.3.1 CFS 运行队列红黑树的时间复杂度2.4 CFS 的一些特征2.4.1 最小粒度2.4.2 目标延迟2.4.3 nice 优先级权重2.5 CFS 阅读全文
posted @ 2025-04-07 11:36
JiMoKuangXiangQu
阅读(42)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 问题背景3. 问题分析4. 问题修复 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题背景 负责在 Linux 4.9 内核上开发 Qt 应用的同事反馈了一个问题:将 Qt 库由一个低版本迁移到更高版本后,准备进入测试阶段,于 阅读全文
posted @ 2025-04-07 11:35
JiMoKuangXiangQu
阅读(18)
评论(0)
推荐(0)
摘要:
目录1. 前言2. MAC Address2.1 MAC 地址格式2.2 Locally Administered MAC Address2.3 MAC 单播 和 多播3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. MAC Addre 阅读全文
posted @ 2025-04-07 11:34
JiMoKuangXiangQu
阅读(86)
评论(0)
推荐(0)
摘要:
目录1. 前言2. TASK_INTERRUPTIBLE 和 TASK_UNINTERRUPTIBLE2.1 语义2.2 实现2.2.1 TASK_INTERRUPTIBLE 实现2.2.1.1 等待的条件成立时 唤醒2.2.1.2 信号 唤醒2.2.1.3 中断 唤醒2.2.1.3.1 内核态的处 阅读全文
posted @ 2025-04-07 11:33
JiMoKuangXiangQu
阅读(36)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 问题场景3. 问题定位和分析4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题场景 调试 Marvell 88E6320 时,发现 eth0 出人意料的进入了 promiscuous(混杂) 模式: [ 5384 阅读全文
posted @ 2025-04-07 11:33
JiMoKuangXiangQu
阅读(58)
评论(0)
推荐(0)
摘要:
目录1. 前言2. gdbserver 远程调试2.1 准备工作2.1.1 准备 客户端 gdb 程序2.1.2 准备 服务端 gdbserver2.1.3 准备 被调试程序2.2 调试2.2.1 通过网络远程调试2.2.1.1 通过 gdbserver 直接启动程序调试2.2.1.2 通过 gdb 阅读全文
posted @ 2025-04-07 11:31
JiMoKuangXiangQu
阅读(573)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 进程 PID 相关数据结构3. 进程 PID 的构建3.1 第一个进程 PID 构建3.2 第二个进程 PID 的构建过程3.2.1 从当前进程复制进程 PID 信息3.2.2 创建每进程的 PID 管理数据 (struct pid) 并初始化3.2.3 绑定进程和其相关的 PI 阅读全文
posted @ 2025-04-07 11:30
JiMoKuangXiangQu
阅读(60)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 进程优先级概述2.1 普通进程的优先级2.2 实时进程的优先级3. 进程优先级初始化3.1 系统中第一个静态创建进程的优先级3.2 动态创建进程的优先级初始化4. 进程优先级的动态修改4.1 普通进程的优先级修改4.2 实时进程的优先级修改5. 进程优先级反转6. 进程优先级小结 阅读全文
posted @ 2025-04-07 11:28
JiMoKuangXiangQu
阅读(78)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 什么是中断的 CPU 亲和性3. IRQ 中断 默认的 CPU 亲和性4. 硬件架构 CPU 固有 IRQ 中断亲和性5. 中断芯片 各中断 CPU 亲和性 初始化5.1 GIC v2 芯片的 SPI 中断 CPU 亲和性 初始化5.1.1 软件层次: 中断 CPU 亲 阅读全文
posted @ 2025-04-07 11:27
JiMoKuangXiangQu
阅读(145)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. PL330 简介4. PL330 驱动加载流程4.1 PL330 设备注册流程4.2 PL330 驱动加载流程5. 小结6. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文基于 ARMv8 架构、L 阅读全文
posted @ 2025-04-07 11:25
JiMoKuangXiangQu
阅读(153)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 概述3. trace-cmd3.1 下载3.2 交叉编译3.3 安装、运行3.3.1 trace-cmd 示范:抓取系统调度信息3.3.2 trace-cmd 的更多用法4. kernelshark5. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的 阅读全文
posted @ 2025-04-07 11:23
JiMoKuangXiangQu
阅读(205)
评论(0)
推荐(1)
摘要:
目录1. 前言2. 背景3. SMP 架构下 CPU 核间通信3.1 ARM 架构下的 IPI_* 消息实现3.1.1 IPI_TIMER3.1.2 IPI_RESCHEDULE3.1.3 IPI_CALL_FUNC3.1.4 其它 IPI 消息3.2 其它架构 IPI 实现4. 观察 IPI 中断 阅读全文
posted @ 2025-04-07 11:21
JiMoKuangXiangQu
阅读(111)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 概念3. 实时进程 的 带宽限制3.1 实时进程 带宽限制 初始化3.2 启动 实时进程 带宽 监测定时器3.3 累加 实时进程 消耗的带宽3.4 查看 实时进程 带宽消耗情况3.5 小结 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 阅读全文
posted @ 2025-04-07 11:19
JiMoKuangXiangQu
阅读(51)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 构建 Rust 编译运行环境3. 编写第一个 Rust 程序4. Cargo4.1 用 Cargo 构建 Rust 工程5. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 构建 Rust 编译运行环境 本文以 Ubun 阅读全文
posted @ 2025-04-07 11:13
JiMoKuangXiangQu
阅读(23)
评论(0)
推荐(0)
摘要:
上一篇:Rust 学习笔记 1:编译运行环境的构建 目录1. 前言2. 背景3. 猜数字游戏3.1 概述3.2 实现4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文基于 Rust 文档 Programming a Guess 阅读全文
posted @ 2025-04-07 11:12
JiMoKuangXiangQu
阅读(22)
评论(0)
推荐(0)
摘要:
上一篇:Rust 学习笔记 2:猜数字游戏 目录1. 前言2. 背景3. Rust 中的一般性编程概念3.1 变量及其可变性(Mutability)3.1.1 变量定义3.1.2 常量3.1.3 变量隐藏(Shadowing)3.2 基本类型3.2.1 标量(scalar)类型3.2.1.1 整型( 阅读全文
posted @ 2025-04-07 11:11
JiMoKuangXiangQu
阅读(32)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 进程的调度时机2.1 延迟调度2.1.1 延迟调度第 1 步:发起调度请求2.1.1.1 进程创建2.1.1.2 周期性调度2.1.1.3 进程唤醒2.1.1.4 CPU 亲和性设置2.1.1.5 CPU 热插拔:启停2.1.1.6 CPU 负载均衡2.1.1.7 NUMA 节点 阅读全文
posted @ 2025-04-07 11:08
JiMoKuangXiangQu
阅读(63)
评论(0)
推荐(0)
摘要:
目录1. 前言2. kdbg 安装使用2.1 安装 kdbg2.2 使用 kdbg 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. kdbg 安装使用 2.1 安装 kdbg kdbg 是 gdb 的图形化界面的前端,在 Ubuntu 16.04.6 阅读全文
posted @ 2025-04-07 11:07
JiMoKuangXiangQu
阅读(25)
评论(0)
推荐(0)
摘要:
目录1. 前言2. ARM 大小端模拟测试2.1 裸机模拟测试2.1.1 大端模拟测试2.1.2 小端模拟测试2.2 用户空间模拟测试2.2.1 大端模拟测试2.2.2 小端模拟测试2.3 结论3. 参考链接 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 阅读全文
posted @ 2025-04-07 11:06
JiMoKuangXiangQu
阅读(46)
评论(0)
推荐(0)
摘要:
声明 本文版权属于笔者朋友 YangHui ,所有资料内容均由 YangHui 提供,笔者只是一个转述者。 目录声明1. 前言2. 问题的发生、跟踪、解决3. 小结 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题的发生、跟踪、解决 YangHu 阅读全文
posted @ 2025-04-07 11:03
JiMoKuangXiangQu
阅读(39)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 今天的德芙,不那么丝滑3. 后记 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 今天的德芙,不那么丝滑 最近的工作不是很丝滑,本以为三两下会解决的问题,结果还是缠缠绵绵好久;当然,生活有苦也有甜,有时候以为会很难搞的问题,结果没 阅读全文
posted @ 2025-04-07 11:02
JiMoKuangXiangQu
阅读(42)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 问题3. 分析和解决 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题 由于开发的嵌入式板的 NOR FLASH 剩余空间过小,仅剩 65 MB,也没有接口外挂存储设备,且无法通过删减来增大空间,于是打算通过 NFS 远程挂载 阅读全文
posted @ 2025-04-07 11:00
JiMoKuangXiangQu
阅读(64)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 音频编程基础2.1 采样率2.2 采样精度2.3 声道数2.4 帧 (frame)2.5 周期大小(period_size)2.6 缓冲大小(buffer_size)2.7 数字音频接口2.7.1 I2S2.8 音频工具3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬 阅读全文
posted @ 2025-04-07 10:58
JiMoKuangXiangQu
阅读(162)
评论(0)
推荐(0)
摘要:
目录1. 前言2. EDSA 协议以太网帧的发送和接收2.1 什么是 EDSA ?2.2 EDSA 以太网帧的发送2.3 EDSA 以太网帧的接收3. 验证 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. EDSA 协议以太网帧的发送和接收 2.1 阅读全文
posted @ 2025-04-07 10:43
JiMoKuangXiangQu
阅读(53)
评论(0)
推荐(0)
摘要:
目录1. 前言2. Linux 的网络配置2.1 传统的网络配置方法2.2 新的网络配置方法2.3 用 DHCP 客户端管理网络3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. Linux 的网络配置 2.1 传统的网络配置方法 Lin 阅读全文
posted @ 2025-04-07 10:33
JiMoKuangXiangQu
阅读(21)
评论(0)
推荐(0)
摘要:
目录1. 前言2. mount 的主要细节 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. mount 的主要细节 mount 从系统调用 sys_mount() 发起,如 mount -t tmpfs cgroup /sys/fs/cgroup: 阅读全文
posted @ 2025-04-07 10:32
JiMoKuangXiangQu
阅读(24)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 什么是 cBPF?2.1 cBPF 工作原理2.2 cBPF 的使用2.3 实现细节2.3.1 挂接 BPF 指令到 sokcet2.3.2 执行 BPF 指令过滤数据包3. cBPF 示例:过滤 EDSA 协议下的 PTP 以太网帧4. 参考资料 1. 前言 限于作者能力水平, 阅读全文
posted @ 2025-04-07 10:30
JiMoKuangXiangQu
阅读(34)
评论(0)
推荐(0)
摘要:
目录1. 前言2. ASoC 声卡设备硬件参数2.1 将 DAI、Machine 平台的硬件参数添加到声卡2.2 打开 PCM 流时将声卡硬件参数配置到 PCM 流2.3 应用程序对 PCM 流参数进行修改调整 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺 阅读全文
posted @ 2025-04-07 10:28
JiMoKuangXiangQu
阅读(84)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 编译过程2.1 准备内核源代码2.2 安装编译工具2.3 配置、编译、运行2.3.1 配置2.3.2 编译2.3.3 运行3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 编译过程 本文基于 Ubuntu 20.04 阅读全文
posted @ 2025-04-07 10:16
JiMoKuangXiangQu
阅读(58)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 开发 Lua 插件 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 Wireshark 不认识用 tcpdump 抓取的数据帧,仔细分析相关代码和数据帧后,发现是交换芯片在以太网帧头和 IP 帧头之间插入了 6 个 阅读全文
posted @ 2025-04-07 10:13
JiMoKuangXiangQu
阅读(82)
评论(0)
推荐(0)
摘要:
目录1. 前言2. skb 数据管理2.1 初始化2.2 数据的插入2.2.1 在头部插入数据2.2.2 在尾部插入数据2.2 数据的移除3. 小结 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. skb 数据管理 数据结构: /* include/ 阅读全文
posted @ 2025-04-07 10:12
JiMoKuangXiangQu
阅读(94)
评论(0)
推荐(0)
摘要:
目录1. 前言2. qemu-user-static 的工作原理 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. qemu-user-static 的工作原理 我们通常使用交叉编译的方式来构建 ARM 程序,譬如有一个 hello.c 程序,其代码如 阅读全文
posted @ 2025-04-07 10:11
JiMoKuangXiangQu
阅读(147)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 构建 runc2.1 准备 C 交叉编译器2.2 编译 libseccomp 库2.3 编译 runc2.3.1 安装 go 编译器2.3.2 编译 runc3. 构建 runc 镜像包 + 测试运行3.1 OCI 规范3.2 手工构建 OCI 镜像3.3 运行 1. 前言 限于 阅读全文
posted @ 2025-04-07 10:07
JiMoKuangXiangQu
阅读(33)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 背景3. 案例情景和分析 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文基于 ARMv8 架构、Linux 6.1.75 进行分析,DMA 控制器(DMAC: DMA Controller)为 ARM 的 PL330 阅读全文
posted @ 2025-04-07 10:00
JiMoKuangXiangQu
阅读(65)
评论(0)
推荐(0)
摘要:
目录1. 前言2. 安装2.1 在 Host 安装 Arm Performance Studio2.2 在 ARM 目标平台安装 gatord3. 使用3.1 离线方式3.2 在线方式3.3 添加符号表4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任 阅读全文
posted @ 2025-04-07 09:57
JiMoKuangXiangQu
阅读(523)
评论(0)
推荐(0)

浙公网安备 33010602011771号