Linux 的 atomic_t 能保证计数原子,是否也自动保证周围数据顺序?
原子读改写只保证目标操作不可撕裂,其内存排序强度取决于具体 API;relaxed、acquire、release 和全屏障版本语义不同。发布对象状态时必须按内核内存模型选正确原语,不能靠 volatile。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
原子读改写只保证目标操作不可撕裂,其内存排序强度取决于具体 API;relaxed、acquire、release 和全屏障版本语义不同。发布对象状态时必须按内核内存模型选正确原语,不能靠 volatile。
命令号应用 _IO/_IOR/_IOW/_IOWR 宏表达方向、类型和结构大小,用户结构采用固定宽度类型、明确填充和版本/长度,驱动用 copy_from_user/to_user 并校验保留字段。发布后的 UAPI 不应随意改变布局。
驱动应通过标准框架按描述符获取 regulator、clk、reset 和 pinctrl,而不是直接写 SoC 固定寄存器;按器件数据手册的顺序 enable/deassert/select,并在失败或 remove/suspend 时逆序回滚。
regmap 抽象寄存器地址和值宽、字节序、总线访问、缓存、更新位和调试能力,使驱动逻辑与 I²C/SPI 细节分离。易变、只读、写一清零和有副作用寄存器必须正确描述,不能盲目缓存。
DMA mask 告诉内核设备能访问多少位地址,映射层据此选择可达内存或建立转换。设备看到的 DMA 地址可能经过 IOMMU、总线窗口或 bounce buffer,并不保证等于 CPU 物理地址,驱动只能使用 DMA API 返回值。