u-boot 学习笔记
u-boot 学习笔记 u-boot分类 1.1. api 1.1.1. api.md 1.2. arch 1.2.1. arm 1.2.1.1. arm.md 1.2.1.2. assembly.md 1.2.2. arch.md 1.3. boot 1.3.1. bootm.md 1.3.2. bootretry.md 1.3.3. bootz.md 1.3.4. image.md 1.4. cmd 1.4.1. cmd.md 1.5. common 1.5.1. autoboot.md 1.5.2. board.md 1.5.3. cli.md 1.5.4. command.md 1.5.5. console.md 1.5.6. dmalloc.md 1.5.7. event.md 1.5.8. export.md 1.5.9. log.md 1.5.10. main.md 1.6. dm 1.6.1. adc.md 1.6.2. button.md 1.6.3. clock.md 1.6.4. core.md 1.6.5. dts.md 1....
RT-Thread 学习笔记
RT-Thread 学习笔记 其他资料 1.1. fatfs 1.1.1. fatfs.md 2. ARM指针寄存器.md 3. CAN驱动.md 4. completion.md 5. condvar.md 6. dataqueue.md 7. DFS.md 8. fal.md 9. fatfs.md 10. FINSH模块.md 11. I2C驱动.md 12. IDLE线程.md 13. IPC.md 14. littlefs.md 15. map文件分析.md 16. pipe.md 17. PM电源管理.md 18. readme.md 19. ringblock.md 20. ringbuffer.md 21. romfs.md 22. RTC.md 23. RT-LINK.md 24. RTT系统初始化.md 25. SDMMC.md 26. SIGNAL.md 27. SPI驱动.md 28. tmpfs.md 29. ULOG.md 30. USB.md 31. waitqueue.md 32. 串口驱动.md 33. 调度.md 34. 工作队列...
bust_spinlocks
[toc] bust_spinlocks:在 oops/panic 等路径放宽“控制台/日志相关锁约束”,保证关键日志可达作用与实现原理 yes != 0:进入 oops/panic 类路径,递增 oops_in_progress,表示系统正处在异常打印阶段。 yes == 0:退出异常打印阶段,调用 console_unblank() 尝试唤醒/点亮控制台;递减 oops_in_progress,当其回到 0 时唤醒日志守护线程(传统实现中为 klogd 相关等待队列)。 该函数名中的 “bust spinlocks” 的含义是:异常阶段可能有锁/状态阻止日志输出,该函数通过提升 oops_in_progress 等全局状态让相关路径避免在锁上阻塞或放宽某些限制,从而提高“panic/oops 信息可达性”。 bust_spinlocks123456789101112131415161718/** * @brief 在 oops/panic 等异常路径中切换“允许输出关键日志”的模式。 * * @param...
panic
[toc] Linux 内核崩溃处理核心(kernel/panic.c)全面解析[kernel/panic.c] [内核 Panic/Oops 终止路径] [在不可恢复错误时完成“停止系统/通知/转储/重启”等收尾流程]介绍kernel/panic.c 主要实现内核在致命错误时的统一收尾路径: panic():不可继续运行时进入的终止流程(通常不返回)。 与 Oops/BUG/WARN 的策略联动:例如 “Oops 是否升级为 panic”、是否自动重启、是否触发 kdump 等。 提供 panic notifier、kmsg dump、停止其它 CPU、控制台输出解锁(bust spinlocks)等机制,尽量在系统已不稳定时仍完成关键动作。 历史与背景诞生解决的问题 内核遇到不可恢复错误时,继续运行可能导致数据破坏扩大;需要统一路径完成: 记录信息(console/printk、dumpers) 通知相关子系统(notifier) 尝试转储(kdump/kmsg...
Git实战指南:如何从另一个分支同步文件时完整保留Commit提交历史
@[toc] Git实战指南:如何从另一个分支同步文件时完整保留Commit提交历史本文将深入解析Git中两种截然不同的文件同步方式,重点解决一个核心问题:如何从另一个分支获取文件,同时不丢失原作者、提交时间和提交说明等历史记录。我们将对“仅复制文件内容”与“移植提交记录”进行对比,并详细拆解“手动修改触发Cherry-Pick”这一高阶技巧的底层逻辑。 1. 为什么普通复制会丢失历史记录?在Git中,最直观的同步方式是直接把文件“拿过来”。这种方式对应命令 git restore 或 git checkout。它的本质是将文件的当前状态复制到你的工作区,但不包含该文件之前的任何演变过程。 1.1 git restore/checkout 的工作原理当执行这两个命令时,Git仅仅是读取了源分支里该文件的内容(Blob数据),然后用这些内容覆盖你当前分支的文件。 结果:你得到了最新的文件代码。 代价:当你提交(commit)时,Git会把这当作是你刚刚创建的一次全新修改。原作者的名字、原来的提交时间、原来的Commit Message(提交说明)全部消失,变成了当前操作者的...
serio
drivers/input/serio.c 串行输入总线抽象(Serial Input Bus Abstraction) PS/2及传统输入端口的核心历史与背景这项技术是为了解决什么特定问题而诞生的?这项技术以及它所实现的serio(Serial I/O)子系统,是为了给Linux内核提供一个标准化的、与具体硬件控制器解耦的框架,来管理传统的、基于串行字节流的输入设备。它主要解决了以下问题: 抽象硬件接口:在PC体系结构中,键盘和PS/2鼠标都连接到一个称为i8042(或兼容的)键盘控制器上。这个控制器本身有其复杂的、通过I/O端口访问的底层接口。serio框架将这种底层的、特定于控制器的交互,抽象成一个简单的、通用的串行字节流接口。 分离总线与设备驱动:serio扮演了一个“总线”的角色。它将硬件控制器(如i8042)的驱动与连接在该控制器上的具体设备(如PS/2鼠标、AT键盘)的驱动分离开来。这使得鼠标驱动(psmouse.c)无需关心它是在和一个真实的i8042芯片通信,还是在和一个虚拟化环境模拟的控...
Ubuntu 虚拟机根文件系统损坏故障的深度分析与修复
@[toc] Ubuntu 虚拟机根文件系统损坏故障的深度分析与修复 1. 问题背景与故障现象本次故障发生于一台运行 Ubuntu 的虚拟机。异常关机后,系统在下次启动过程中无法正常完成根文件系统挂载,进入 initramfs 维护环境并要求手动执行文件系统一致性修复。 12345flowchart TB A[异常关闭虚拟机电源] --> B(下次启动时进行文件系统检查) B --> C{检测到根文件系统错误} C --> |是| D[挂载根分区失败,进入initramfs环境] D --> E[管理员执行fsck修复] 1.1 initramfs 进入条件与报错定位系统在启动早期阶段输出以下错误信息,表明根分区 /dev/sda5 需要人工修复: 1234/dev/sda5 contains a file system with errors, check forced.Directory inode ... directory corruptedUNEXPECTED INCONSISTENCY; RUN...
sys_info
lib/sys_info.c:sys_info 调试掩码 sysctl 子系统概览介绍lib/sys_info.c 为 sys_info() 调试输出提供配置接口与执行路径:sys_info_sysctl_init() 在子系统初始化阶段注册 kernel_sys_info sysctl 项,由 sysctl_sys_info_handler() 统一处理读写,内部通过位掩码选择任务、内存、定时器、锁、ftrace、全 CPU 回溯等信息的收集范围。 历史与背景 诞生动机:为内核调试路径提供可配置的统一入口,通过位掩码决定 sys_info() 触发时的输出范围。 迭代里程碑:引入 sysctl 处理器与早期 initcall 注册,确保调试接口在大多数驱动加载前即可使用。 社区与应用:常用于现场调试或自动化诊断脚本,结合 SysRq/延迟工作触发,以收集当前系统状态。 核心原理与设计 sysctl 表注册:sys_info_sysctls 定义 kernel_sys_info 项,绑定到全局位掩码 kernel_si_mask,读写均由 sysctl_sy...
Xshell终端连接Ubuntu无颜色的解决方案
@[toc] 一、问题的烦恼:为何我的终端一片“黑白”?您是否遇到了这样的情况:通过Xshell连接到远程的Linux服务器(如Ubuntu、Debian)后,无论执行ls命令还是查看命令行提示符,都只有单调的黑白字符,失去了彩色的高亮显示? 这不仅让界面显得枯燥,更重要的是,我们失去了通过颜色快速区分文件类型(如目录、可执行文件、压缩包)和定位命令行信息的能力,大大降低了工作效率。 12345678910111213graph TD subgraph "理想的彩色终端" A["<font color=blue>user@hostname</font>:<font color=purple>~/project</font>$ ls"] B["<font color=blue><b>directory/</b></font>"] C["<font color=...
安全移除VMware虚拟机数据磁盘的终极指南
@[toc] 一、引言:为何需要“安全”移除?在虚拟机管理中,添加磁盘是一项常规操作,但移除磁盘,尤其是移除一块正在使用的数据盘(例如,您挂载在/opt目录下的100GB数据盘),则需要格外的谨慎。 错误的移除方式可能导致灾难性后果,最常见的就是——虚拟机无法启动! 这是因为操作系统(如Ubuntu)在启动时,会根据一个名为/etc/fstab的“自动挂载配置文件”去寻找并挂载所有已声明的磁盘。如果您直接在VMware设置中移除了物理磁盘,但没有告知操作系统“别再找它了”,系统在下次启动时会因为找不到预期的磁盘而卡在引导过程中,无法进入系统。 12345678graph TD A["系统启动"] --> B{"读取 /etc/fstab 文件"}; B --> C["找到一条记录:<br/>'请将磁盘X挂载到/opt'"]; C --> D{"尝试寻找磁盘X"}; D -- &quo...








