内核子系统、SoC控制器驱动、驱动与内核的关系
这是一个关于Linux内核架构的核心问题涉及内核子系统、SoC控制器驱动、驱动与内核的关系。让我用清晰的层次结构为您解释一、整体架构关系图┌─────────────────────────────────────────────────────────┐ │ 用户空间 (User Space) │ │ 应用程序、库函数、Shell │ └──────────────────────┬──────────────────────────────────┘ │ 系统调用 (System Call) ┌──────────────────────▼──────────────────────────────────┐ │ 内核空间 (Kernel Space) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Linux内核子系统 (核心层) │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ 进程调度 │ │ 内存管理 │ │ 虚拟文件 │ │ 网络协议 │ │ │ │ │ │ (Scheduler)│ (MM) │ │ 系统(VFS)│ │ 栈(Net) │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ 设备模型 │ │ 电源管理 │ │ 中断管理 │ │ 时钟管理 │ │ │ │ │ │(Device) │ │ (PM) │ │ (IRQ) │ │ (Clock) │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ DMA引擎 │ │ 调试系统 │ │ 安全模块 │ │ 其他... │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ └────────────────────────┬────────────────────────────┘ │ │ │ 提供API接口 │ │ ┌────────────────────────▼────────────────────────────┐ │ │ │ 内核驱动层 (Driver Layer) │ │ │ │ ┌───────────────────────────────────────────────┐ │ │ │ │ │ SoC控制器驱动 (Controller Driver) │ │ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │ │ │ │ │ │GPIO控制器│ │I2C控制器│ │SPI控制器│ │DMA控制器│ │ │ │ │ │ │ │ (pinctrl)│ │ (i2c) │ │ (spi) │ │ (dma) │ │ │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └───┬────┘ │ │ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │ │ │ │ │ │时钟控制器│ │中断控制器│ │PWM控制器│ │USB控制器│ │ │ │ │ │ │ │ (CCU) │ │ (GIC) │ │ (pwm) │ │ (usb) │ │ │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └────────┘ │ │ │ │ │ └───────────────────┬─────────────────────────────┘ │ │ │ │ │ 注册到内核子系统 │ │ │ ┌───────────────────▼─────────────────────────────┐ │ │ │ │ │ 设备驱动 (Device Driver) │ │ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │ │ │ │ │ │LCD驱动 │ │触摸驱动 │ │网卡驱动 │ │eMMC驱动│ │ │ │ │ │ │ │(drm) │ │(input) │ │(netdev) │ │(mmc) │ │ │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └────────┘ │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────┘ │ └──────────────────────────┬────────────────────────────────┘ │ 硬件抽象层 (寄存器操作) ┌──────────────────────────▼────────────────────────────────┐ │ 硬件层 (Hardware) │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ GPIO引脚 │ │ I2C总线 │ │ SPI总线 │ │ 物理内存 │ │ │ │ 寄存器 │ │ 控制器 │ │ 控制器 │ │ 控制器 │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ └───────────────────────────────────────────────────────────┘二、核心问题解答2.1 内核子系统在内核中吗是的内核子系统是内核的核心组成部分。子系统源码位置作用进程调度kernel/sched/管理CPU时间片分配内存管理mm/虚拟内存、页表、SLAB分配器VFSfs/文件系统抽象层网络协议栈net/TCP/IP协议实现设备模型drivers/base/总线、设备、驱动的统一管理中断管理kernel/irq/中断注册、分发、处理时钟管理kernel/time/tick、定时器、时间戳电源管理kernel/power/休眠、唤醒、DVFS关键理解这些子系统编译后就是vmlinuz内核镜像的一部分随系统启动加载到内存运行。2.2 SoC控制器驱动在内核中吗是的但属于驱动层而非核心子系统。层次区分内核源码树 ├── kernel/ ← 核心子系统进程、内存、中断等 ├── mm/ ← 内存管理子系统 ├── fs/ ← 文件系统子系统 ├── net/ ← 网络子系统 ├── drivers/ ← 【驱动层】 │ ├── clk/ ← SoC时钟控制器驱动 (CCU) │ ├── gpio/ ← GPIO控制器驱动 │ ├── i2c/busses/ ← I2C控制器驱动 │ ├── spi/ ← SPI控制器驱动 │ ├── irqchip/ ← 中断控制器驱动 (GIC) │ ├── dma/ ← DMA引擎驱动 │ └── ... ← 其他SoC IP驱动 └── arch/arm/mach-sunxi/ ← SoC架构相关代码 (T113-I)关键区别核心子系统管理全局资源提供通用API与硬件无关SoC控制器驱动操作具体硬件寄存器但通过标准接口注册到子系统2.3 驱动是调用内核子系统的API控制硬件吗关系正好相反是双向的方向调用关系示例驱动 → 子系统驱动注册到子系统使用子系统提供的工具APIregister_chrdev()向VFS注册字符设备子系统 → 驱动子系统通过统一接口回调驱动实现的硬件操作VFS调用file_operations中的my_read()驱动 ↔ 硬件驱动直接读写寄存器控制硬件writel(val, reg_base OFFSET)完整调用链示例T113-I LCD显示用户程序 │ ▼ open(/dev/dri/card0) ┌─────────────────────────────────────┐ │ VFS子系统 (fs/) │ │ sys_open() → 查找inode → 找到file_ops │ └─────────────┬───────────────────────┘ │ 调用 f_op-open ┌─────────────▼───────────────────────┐ │ DRM子系统 (drivers/gpu/drm/) │ │ drm_open() → 找到drm_driver │ └─────────────┬───────────────────────┘ │ 调用 driver-open ┌─────────────▼───────────────────────┐ │ sun4i_drm驱动 (drivers/gpu/drm/sun4i/)│ │ sun4i_drm_open() │ │ ├──► 调用 **时钟子系统API** │ │ │ clk_prepare_enable() │ │ │ (请求使能DE2时钟) │ │ │ │ │ ├──► 调用 **复位子系统API** │ │ │ reset_control_deassert() │ │ │ (释放DE2复位) │ │ │ │ │ └──► 直接写 **硬件寄存器** │ │ writel(VAL, de2_regs CTL) │ │ (配置DE2寄存器) │ └─────────────────────────────────────┘三、关键机制详解3.1 驱动如何接入子系统以字符设备为例// 1. 驱动实现硬件操作函数staticstructfile_operationsmy_fops{.ownerTHIS_MODULE,.readmy_hardware_read,// 实际读硬件的函数.writemy_hardware_write,};// 2. 驱动注册到VFS子系统staticint__initmy_init(void){alloc_chrdev_region(dev_num,0,1,mydev);// 向VFS申请设备号cdev_init(my_cdev,my_fops);// 绑定操作函数cdev_add(my_cdev,dev_num,1);// 正式注册到VFS}// 3. 用户调用时VFS回调驱动函数// 用户: read(fd, buf, len)// → VFS: sys_read()// → 找到my_fops.read// → 调用my_hardware_read() (操作硬件寄存器)3.2 SoC控制器驱动的特殊地位SoC控制器驱动是**“驱动的驱动”**中间层┌─────────────────────────────────────────┐ │ 具体设备驱动 (Device Driver) │ │ LCD驱动、网卡驱动、声卡驱动等 │ │ 调用通用API不感知硬件差异 │ └─────────────────┬───────────────────────┘ │ i2c_transfer() / spi_write() │ dmaengine_submit() / clk_set_rate() ┌─────────────────▼───────────────────────┐ │ SoC控制器驱动 (Controller Driver) │ │ I2C控制器、SPI控制器、DMA控制器、CCU等 │ │ 将通用API转换为具体寄存器操作 │ └─────────────────┬───────────────────────┘ │ 读写寄存器 ┌─────────────────▼───────────────────────┐ │ 硬件寄存器 │ └─────────────────────────────────────────┘T113-I时钟控制器CCU示例// drivers/clk/sunxi/clk-sun8iw20.c (T113-I CCU驱动)// 1. 实现时钟操作硬件相关staticintsunxi_ccu_enable(structclk_hw*hw){structsunxi_ccu_clk*clkto_sunxi_ccu_clk(hw);void__iomem*regclk-baseclk-enable_reg;// 直接写寄存器使能时钟writel(readl(reg)|BIT(clk-enable_bit),reg);return0;}// 2. 注册到时钟子系统通用框架staticconststructclk_opssunxi_ccu_ops{.enablesunxi_ccu_enable,.disablesunxi_ccu_disable,.recalc_ratesunxi_ccu_recalc_rate,};// 3. 设备树解析后时钟子系统统一管理// 其他驱动通过通用API使用// clk_prepare_enable(de2_clk); // 调用到底层的sunxi_ccu_enable四、总结三层模型层级位置职责代码示例内核子系统kernel/mm/fs/资源管理、抽象接口、调度策略VFS、调度器、内存分配器SoC控制器驱动drivers/clk/drivers/gpio/drivers/dma/硬件控制器初始化、寄存器封装、向子系统注册CCU驱动、GPIO控制器、pinctrl设备驱动drivers/video/drivers/net/drivers/input/具体设备控制、业务逻辑、用户接口LCD驱动、网卡驱动、触摸驱动调用关系口诀用户调用子系统子系统回调驱动驱动操作硬件SoC控制器驱动是承上启下的关键层对上实现子系统定义的struct clk_ops/struct dma_device等标准接口对下直接读写SoC内部寄存器如T113-I的0x02000000时钟基地址

相关新闻

别再为一个气体终端写三套对接代码了

别再为一个气体终端写三套对接代码了

在集成环境监测设备时,你是否经历过这些场景? 楼宇自控系统要求 Modbus TCP,但终端只输出私有协议; 安全平台想用 MQTT 订阅 TVOC 数据,却要先解析厂商的二进制帧; IT 网管想监控设备在线状态,结…

2026/7/4 15:50:03 阅读更多 →
拒绝 PPT 内耗!虎贲等考 AI 一键生成学术演示天花板,开题 / 答辩直拿高分

拒绝 PPT 内耗!虎贲等考 AI 一键生成学术演示天花板,开题 / 答辩直拿高分

论文写完不是终点,PPT 制作才是 “渡劫” 开始 —— 有人熬 3 晚排版,却被导师批 “逻辑混乱、重点模糊”;有人照搬论文文字,评委看一眼就犯困;有人套网红模板,花哨到丢了学术专业感。做学术 PPT&#xff0…

2026/7/3 14:10:47 阅读更多 →
论文降重 + 去 AIGC 双 buff!虎贲等考 AI 让学术合规率飙升 98%

论文降重 + 去 AIGC 双 buff!虎贲等考 AI 让学术合规率飙升 98%

“查重率 35% 改到崩溃,越改逻辑越乱”“AI 写的初稿被检测出 AIGC 痕迹,直接打回重写”“降重只换同义词,导师批‘学术性丧失’”—— 论文写作的最后一道坎,往往是 “降重” 与 “去 AIGC 痕迹”。很多人陷入 “降重 改字”“去…

2026/7/3 14:10:51 阅读更多 →

最新新闻

当老板走近时:3分钟学会用Boss-Key打造你的数字安全空间

当老板走近时:3分钟学会用Boss-Key打造你的数字安全空间

当老板走近时:3分钟学会用Boss-Key打造你的数字安全空间 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 你是否经历过这样的尴…

2026/7/4 15:50:33 阅读更多 →
机器学习可解释性实战:从监管合规到业务落地的完整工程指南

机器学习可解释性实战:从监管合规到业务落地的完整工程指南

1. 项目概述:为什么“模型能解释”比“模型很准”更难搞你训练出一个准确率98.7%的信贷风控模型,银行却拒绝上线——不是因为不准,而是因为当它拒绝一位申请人时,业务经理问:“为什么?”你答不上来。这场景…

2026/7/4 15:48:32 阅读更多 →
时序模型基础与实战:从ARIMA到SARIMA应用指南

时序模型基础与实战:从ARIMA到SARIMA应用指南

1. 时序模型基础认知 时序模型(Time Series Model)是数据分析领域的经典工具,专门用于处理按时间顺序排列的观测值集合。这类数据在金融、气象、工业等领域无处不在,比如股票价格逐日波动、城市气温每小时变化、工厂设备每分钟传感…

2026/7/4 15:46:32 阅读更多 →
M24C04-R与MK64FN1M0VDC12的嵌入式存储方案实践

M24C04-R与MK64FN1M0VDC12的嵌入式存储方案实践

1. 为什么选择M24C04-R与MK64FN1M0VDC12组合 在嵌入式系统中,非易失性数据存储是个永恒的话题。我最近在一个工业控制项目中,需要存储设备参数和运行日志,经过多次对比测试,最终选择了M24C04-R EEPROM与MK64FN1M0VDC12 MCU的组合方…

2026/7/4 15:44:31 阅读更多 →
Solo Practitioner的机器学习生存指南:无基建、无团队、无标准流程下的实战路径

Solo Practitioner的机器学习生存指南:无基建、无团队、无标准流程下的实战路径

1. 这不是一本“机器学习入门书”,而是一份深夜调试模型时你真正需要的生存手记 “Building ML in the Dark”——这个标题我第一次看到就停顿了三秒。它没说“从零开始”“手把手教学”“保姆级教程”,而是直白地用了“in the Dark”(在黑暗…

2026/7/4 15:44:31 阅读更多 →
基于YOLOv11的教师行为实时检测系统开发

基于YOLOv11的教师行为实时检测系统开发

1. 项目概述 在智慧教育快速发展的今天,教师行为分析已成为提升教学质量的关键技术。传统的人工观察方式不仅效率低下,还容易受到主观判断的影响。我们基于最新的YOLOv11算法,开发了一套能够实时识别6种典型教师行为的智能检测系统。 这套系…

2026/7/4 15:44:31 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻