乐于分享
好东西不私藏

嵌入式八股之内核篇1

本文最后更新于2025-10-20,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

嵌入式八股之内核篇1

嵌入式八股之内核篇1

嵌入式八股之内核篇1

嵌入式八股之内核篇1

嵌入式八股之内核篇1

嵌入式八股之内核篇1

1️⃣ Linux驱动程序是干啥的?
🚦 设备管家: 负责设备的初始化(开机准备)和释放(关机收尾)。
📡 数据桥梁: 独家通道!专门负责内核(系统大脑)和硬件(物理设备)之间的数据交互。
🚨 故障急救员: 时刻监控设备,检测错误并紧急处理,保障系统稳定!

2️⃣ 内核里怎么申请内存?三大函数!
kmalloc() – 物理连续小能手
✅ 申请物理地址连续的内存 (对DMA设备超重要!)
✅ 虚拟地址也连续。
⚠️ 大小有限制:最大128KB (实际可用约112KB)。
🚨 常用flags:
GFP_ATOMIC:原子操作!中断上下文救命稻草!
GFP_KERNEL:常规操作,可睡眠。
GFP_DMA:专供DMA控制器。
🗑️ 释放用kfree()。
kzalloc() – 洁癖版kmalloc
✅ 本质是kmalloc + __GFP_ZERO标志。
✅ 申请物理连续内存,并自动清零内容!防脏数据神器!
🗑️ 释放也用kfree()。
vmalloc() – 虚拟连续大仓库
✅ 申请虚拟地址连续的内存。
❌ 物理地址不一定连续。
✅ 大小无硬性限制,大型模块加载救星!
⚠️ 会睡眠!中断上下文禁用!
🗑️ 释放用vfree()。

3️⃣ 内核申请内存 vs 应用程序申请内存?大不同!
🤖 内核层: (kmalloc, kzalloc, vmalloc)
kmalloc/kzalloc:直接拿到物理+虚拟都连续的内存块!
vmalloc:拿到虚拟连续的内存,物理内存也立刻分配了(但分散),只是页表映射稍后同步。
💻 应用层: (malloc)
拿到虚拟地址连续的内存块。
❌ 分配时不给实际物理页!
✅ 访问时触发缺页中断 (do_page_fault),才分配物理页并映射。

💎 一句话总结差异:
内核kmalloc:一步到位拿物理块(小快递📦)。
内核vmalloc:虚拟仓库立刻备货(大仓库🏚️)。
应用malloc:先开地址空头支票,用的时候才提货💳 (等缺页中断💸)。

#嵌入式 #嵌入式开发 #领域驱动设计 #计算机 #linux驱动 #八股 #校招 #社招 #经验分享

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 嵌入式八股之内核篇1
×
订阅图标按钮