U-Boot 环境变量损坏会怎样?冗余环境如何提高可靠性?
环境区保存 bootcmd、启动参数等可变配置,CRC 或格式损坏时 U-Boot 通常回退默认环境。冗余环境使用两个副本和有效/序列状态,在掉电更新中选择最后完整版本,但仍需限制写频率和保护安全变量。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
环境区保存 bootcmd、启动参数等可变配置,CRC 或格式损坏时 U-Boot 通常回退默认环境。冗余环境使用两个副本和有效/序列状态,在掉电更新中选择最后完整版本,但仍需限制写频率和保护安全变量。
广播面向一个二层/子网广播域内所有主机,组播面向加入特定组的接收者并由网络设备按组转发。接收端需在指定接口加入组,发送端还要考虑 TTL、回环和多网卡出口。UDP 本身不保证送达和顺序。
Wait Queue 让任务围绕可重复条件睡眠并由事件唤醒,等待宏会循环检查条件以应对伪唤醒;Completion 表达一次或计数式完成事件,适合等待某项初始化或 I/O 结束。两者都只能在可睡眠上下文等待。
devm 将已注册资源与 struct device 生命周期绑定,probe 失败或设备解绑时按规则自动释放,减少 goto 回滚代码。但业务启动的工作线程、DMA、硬件使能和跨设备引用未必都能靠默认释放顺序安全停止。
fork 创建调用进程的子进程,现代系统借助写时复制延后物理页复制;exec 用新程序映像替换当前进程但 PID 通常保持;父进程用 wait/waitpid 回收退出状态,避免子进程变成僵尸。
initramfs 是内核早期展开到内存的临时根,可加载存储/加密/RAID 依赖、做恢复或选择最终根;最终 rootfs 承载长期用户空间。极简设备也可只用 initramfs,但内容占 RAM 且更新方式不同。
kmalloc 返回物理上连续的小到中等内存并适合多数内核对象;vmalloc 只保证虚拟连续,页表映射开销更大;DMA 必须使用 DMA API 获得设备可访问地址与一致性语义,不能把 CPU 虚拟地址直接给设备。
MAP_SHARED 的修改可对映射同一对象的参与者可见,并可按语义回写文件;MAP_PRIVATE 使用写时复制,修改只属于当前映射。两者都不自动提供多线程或多进程同步。