Linux 内核常用数据结构
Linux内核中广泛使用多种通用数据结构,其中双向循环链表list_head使用频率最高,哈希链表hlist专为哈希桶设计以减少内存开销,红黑树rbtree提供O(log n)的自平衡搜索,而xarray和radix_tree用于整数到指针的映射(xarray为radix tree的替代品),优先级链表plist用于按优先级处理任务。
ClaudeCode
ClaudeCode是Anthropic推出的AI编码工具,支持通过Node.js下载,可选择DeepSeek作为后端模型以节省成本。它集成到Vscode和Emacs编辑器,通过设置环境变量和安装插件使用。它还提供Skill扩展机制(即Markdown格式的技能包),分为项目级和用户级目录,可安装官方市场或推荐的Skill(如Karpathy-Inspired指南和codegraph)来增强功能。
smatch
Smatch 是专为 Linux 内核设计的静态分析工具,通过追踪代码执行路径发现空指针解引用、锁错误、资源泄漏等深层 bug。它借助内核编译系统构建数据库,实现跨文件漏洞侦测;支持指定参数进行字节序检查、编译目标及输出文件定制,也可针对特定文件或非内核项目分析,并建议定期更新数据库以提升检查准确度。
查询内核API最早引入版本
查询内核API最早引入版本
Linux并发与竞争
Linux并发访问共享资源会导致竞争问题,主要成因包括多线程、中断、抢占及多核并发访问。内核提供原子操作、自旋锁、互斥锁等同步机制,其中原子操作通过atomic_t和atomic64_t结构体实现整形变量的不可分割读写,并提供init、read、set、add、sub、inc、dec等API来避免竞争,确保数据一致性。
数据结构与算法
数据结构与算法的核心内容包括数据的逻辑结构(线性结构如线性表、栈、队列,非线性结构如树、图)和存储结构(顺序、链式、索引、散列),并介绍了算法的基本概念(有穷性、确定性等)及效率度量(时间复杂度)。线性表、栈等数据结构的具体实现和基本操作时间复杂度也在文中详细阐述。
Linux LCD
LCD(液晶显示器)通过电场改变液晶分子排列控制光学性质,是常见的显示外设。文章对比了CRT和OLED技术,详细介绍了TFT、TN、IPS、VA、SLCD等面板类型的特点与优劣(IPS色彩最佳、TN响应最快、VA对比度最高),并解释了像素(RGB三原色混合)和分辨率的基本概念。
Linux USB
USB通用串行总线标准自1994年发展至今,速率从1.5Mbps提升至40Gbps,接口从Type-A/B演进到正反插的Type-C,但Type-C接口的实际传输速度取决于所搭载的USB协议版本;USB版本命名历经多次更改,例如USB 3.0现称USB 3.2 Gen 1;设备分为Host和Slave,仅两者连接才能实现数据传输,RK3568处理器内置多个USB2.0、USB3.0及OTG接口。
Linux IIO
IIO是Linux内核中处理ADC、DAC及工业传感器的统一子系统,提供标准化接口、支持多种设备类型和事件触发机制。文章以RK3568的SARADC为例,分析IIO设备注册流程,包括设备树节点匹配、struct iio_dev结构与私有数据绑定、通道规格定义及使用devm_iio_device_register()完成注册。
io_uring
io_uring 是 Linux 5.1 引入的高性能异步 I/O 框架,统一了 Linux 异步 I/O 框架,支持存储文件和网络文件,设计上真正异步,灵活性和可扩展性优于传统 Linux AIO,但需重写应用适配,性能提升仅在特定场景下约 5%。文章还回顾了 Linux I/O 系统调用的演进,包括阻塞式 I/O、非阻塞式 I/O(select、poll、epoll)、线程池、Direct I
Linux ADC
ADC将模拟信号转换为数字信号,过程包含采样、保持、量化、编码四步。分辨率是衡量转换精度的关键参数,常见于传感器、音频、工业自动化等场景。
Qemu 模拟树莓派4b Linux module开发环境
使用QEMU模拟树莓派4B,搭建Linux模块开发环境。选择ARM官方便携式交叉编译器(如aarch64-none-linux-gnu-gcc),编译内核与根文件系统。根文件系统可通过busybox、buildroot或yocto构建,需注意工具链与内核版本一致,环境基于WSL2的Archlinux。


