- 博客(1015)
- 收藏
- 关注
原创 我的CSDN近期规划
CSDN博主技术路线规划 博主近期暂停更新,专注梳理技术博客方向: 桌面端GUI:整合Win32/现代Windows GUI技术,构建《通用GUI编程技术指南》专题,配套代码库筹备中 嵌入式开发: 单片机结合现代C++教学 基于IMX6ULL的嵌入式Linux教程(含U-Boot/内核开发) 开源项目转化:包括x86_64操作系统开发等半成品项目教程化 所有代码资源均开源至GitHub仓库,涵盖嵌入式学习、现代C++及操作系统开发方向。博主邀请读者反馈兴趣点,共同推进技术分享。
2026-03-13 20:18:44
259
原创 Cinux是如何管理进程的 —— 上下文与调度
[Cinux进程管理机制解析] Cinux通过任务控制块(Task)抽象进程,实现了协作式多任务管理。核心机制包括: 上下文切换 - 通过汇编保存/恢复callee-saved寄存器(r15-rbx)及关键指针(rsp/rip),在函数调用边界实现执行流切换 任务管理 - 使用Task结构体封装执行状态、上下文、栈等资源,支持运行/就绪/阻塞/死亡四种状态 调度框架 - 基于轮转队列的协作式调度器,通过yield主动让出CPU 地址空间 - 采用higher-half内存布局,为后续进程隔离奠定基础 当前实
2026-08-08 10:58:30
265
原创 更好的错误处理方式——std::expected<T, E>:类型安全的错误传播
本文介绍了C++23引入的std::expected<T,E>类型,这是一种类型安全的错误处理机制。它类似于Rust的Result<T,E>,可以同时携带成功值(T)或错误信息(E)。 主要内容包括: 基本用法:通过has_value()检查状态,value()获取值,error()获取错误 构造方式:直接构造表示成功,std::unexpected构造表示失败 访问方法:value()会抛出异常,operator*需要前置检查 Monadic操作: and_then:链式调用可能失败的操作 transfo
2026-08-08 10:53:10
185
原创 IMX6ULL WM8960 的移植——前置介绍
IMX6ULL WM8960音频驱动移植指南 本文介绍了在i.MX6ULL平台上移植WM8960音频驱动的完整方案。主要内容包括: 驱动架构:详细解析Linux ASoC子系统的四层架构(machine、cpu_dai、codec、platform),以及它们在i.MX6ULL+WM8960组合中的具体实现。 硬件连接:说明WM8960通过I2C1(控制)和SAI2(数据)与CPU的连接方式,特别是音频时钟(12.288MHz MCLK)的产生和路由。 驱动复用:强调直接使用主线内核已完善的wm8960.c
2026-08-08 10:47:58
345
原创 通用GUI编程技术新篇 —— 为什么我们要用现代 C++ 在 Win32 上从零造一个 GUI 框架
摘要 本文介绍了一个名为ModernWindows的开源GUI框架教学项目,旨在通过现代C++20(协程、Concepts等)从零构建Win32图形界面框架,揭示GUI框架的核心原理。项目特点包括: 教学导向:不是生产级框架,而是解剖GUI框架八大核心组件的"教学标本"。 技术栈特色: 基于Windows原生图形栈(Direct2D 1.1/DirectComposition/DirectWrite) 采用C++20协程实现异步消息处理 实现细粒度响应式系统和依赖追踪 开发范式: 使用CMake+VS202
2026-08-07 09:33:35
892
原创 随意聊聊optional:一种不计划表达为什么出错的错误处理
这个仓库已经开源!现代化 C++(C++11/14/17/20)从基础到进阶的系统教程都在这里,力争做一条完备的现代 C++ 学习路径!欢迎各位大佬前来参观,喜欢的话点个⭐!Github 一键直达: git clone https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP。
2026-08-07 09:31:54
282
原创 Cinux的内存管理:在页上切块:内核堆分配器
本文介绍了Cinux内核堆分配器的设计与实现。该分配器在已映射的虚拟内存页上进行细粒度内存管理,支持任意大小的内存分配,解决了内核中仅能整页分配内存的问题。 核心设计包括: 基于空闲链表(free list)管理内存块,每个块包含32字节的BlockHeader记录大小、状态等信息 实现first-fit分配策略,支持块分裂和合并以减少内存碎片 处理对齐分配需求,确保返回的指针满足指定对齐要求 支持动态扩展,初始分配64KB,不足时自动向VMM申请更多页 重载全局operator new/delete,使标
2026-08-05 09:21:55
168
原创 现代Qt开发教程(进阶篇)1.11——定时器进阶:高精度计时与性能分析
本文深入探讨Qt定时器的高阶用法,包括三种精度级别定时器的特性差异(PreciseTimer/CoarseTimer/VeryCoarseTimer)、QElapsedTimer的纳秒级时间测量、QDeadlineTimer的超时管理机制,以及QTimer的单次定时API。文章通过实际项目案例揭示了定时器精度问题可能引发的严重后果,并提供了常见问题的解决方案和性能优化建议。最后设计了定时器精度基准测试练习项目,帮助开发者掌握不同场景下的定时器选型技巧。适合需要处理高精度定时、实时系统或性能优化的Qt开发者阅
2026-08-05 09:16:12
224
原创 现代C++工程实践 WeakPtr 实战(四):序列亲和性与 lazy 绑定
本篇文章深入探讨了现代C++中WeakPtr的两个关键特性:序列亲和性与延迟绑定(lazy binding)。文章首先分析了Chromium源码中关于WeakPtr序列安全性的契约,强调解引用和失效操作必须发生在同一序列上以避免竞态条件。随后揭示了Flag的延迟绑定机制——它不在构造时绑定序列,而是在首次被访问时才确定所属序列,从而支持跨序列构造但单序列使用的场景。文章还对比了IsValid和MaybeValid的本质区别:前者要求同序列调用且结果绝对可靠,后者允许跨序列调用但仅负面结果可信。最后指出这些检
2026-08-04 09:22:30
208
原创 IMX6ULL: ICM-20608 驱动层实现 —— SPI 框架与字符设备的结合
IMX6ULL: ICM-20608驱动实现 —— SPI与字符设备结合 本文介绍了IMX6ULL平台上ICM-20608运动传感器的驱动实现方法,主要包含以下要点: 驱动架构:采用SPI框架与字符设备结合的驱动方式,底层使用SPI通信,上层通过字符设备接口向用户空间提供数据。 关键技术点: 使用spi_write_then_read简化寄存器读写操作 新内核中SPI延时参数改用struct spi_delay结构体 一次读取连续寄存器提高效率 实现步骤: 定义设备寄存器地址 构建设备结构体保存数据和状态
2026-08-04 09:14:28
155
原创 Cinux的内存管理:在页上切块:内核堆分配器
如果您是想尝试 Cinux,并对一些驱动、前沿细节的实现感兴趣的朋友,请移步到下面的仓库:如果您对手写一个现代 C++ 操作系统感兴趣的朋友,请到这里:或者,直接访问文档站开始阅读:https://awesome-embedded-learning-studio.github.io/Cinux-Book/如果上面的内容,对您的学习和实际的开发哪怕有一丝帮助,都是笔者极大的荣幸!喜欢的话,麻烦小小的赏一个 ⭐(QAQ)。自己的知识仍不精湛,文章必然还有很多错误,还请各位大佬批评斧正!
2026-08-03 09:10:19
201
原创 现代C++的错误处理的演进:从错误码到类型安全
本文探讨了现代C++错误处理机制的演进历程,从C风格错误码到类型安全的解决方案: C风格错误码存在可忽略性、信息匮乏、全局状态依赖和资源泄漏风险等问题 C++异常机制解决了控制流分离问题,但带来了性能不确定性、控制流不透明和嵌入式兼容性问题 改进版错误码使用enum class和结构体增强类型安全,但仍无法强制错误检查 现代C++提供类型安全方案:C++17的optional/variant和C++23的expected 文章分析了每种方案的优缺点,指出异常适合应用层开发但不适合嵌入式,而现代类型系统为错误
2026-08-03 09:06:50
155
原创 现代C++的文件系统操作:目录遍历与搜索
摘要:现代C++文件系统操作之目录遍历与搜索 C++17标准库<filesystem>提供了强大的目录遍历功能,包括directory_iterator(单层遍历)和recursive_directory_iterator(递归遍历)。关键点: 基本遍历:使用range-based for循环即可遍历目录内容,返回directory_entry对象包含路径和文件状态信息 过滤文件:可在循环体内通过扩展名或文件类型进行筛选,或使用C++20 ranges进行函数式处理 递归遍历:recursive_direc
2026-08-02 09:16:44
188
原创 IMX6ULL: 来看看imx写的SPI驱动到底在做什么呢?
文章摘要: IMX6ULL SPI驱动分析文章深入剖析了Linux内核中NXP工程师编写的SPI主机驱动实现。文章重点分析了四个关键环节:1) 使用spi_alloc_host而非旧版spi_alloc_master申请控制器;2) 通过bits_per_word_mask等字段声明控制器能力;3) 采用transfer_one作为核心传输回调,体现现代队列化驱动特点;4) 最终通过spi_register_controller完成注册。文中特别指出设备树中cs-gpios配置的关键作用,并对比了6.12与
2026-08-02 09:15:09
151
原创 现代C++:浅谈文件与目录操作
文章摘要:本文介绍了现代C++(C++17及以上)中使用<filesystem>库进行文件和目录操作的方法。主要内容包括文件状态查询(exists/is_regular_file/is_directory等)、元数据获取(file_size/last_write_time)、目录创建(create_directory/create_directories)以及文件复制(copy/copy_options)。文章特别强调了错误处理和跨平台兼容性,并提供了GCC/Clang/MSVC环境下的实用代码示例,适合需
2026-08-01 11:10:36
154
原创 现代C++随谈:未检查的指针与泛型编程的边界
本文探讨了现代C++中指针安全性和泛型编程的边界问题。作者首先指出未检查指针的安全隐患,强调应尽快将裸指针包装进类型安全的容器。接着通过number_of模板类展示如何利用CTAD简化类型安全数值的书写,仅37行代码就解决了数值隐式转换问题。文章重点讨论了std::sort的传统问题——当传入不满足要求的迭代器时,编译器报错信息难以理解,指出这反映了泛型编程长期缺乏类型约束检查的缺陷。最后提到C++20引入的concepts终于解决了这一问题,使泛型编程能够明确表达对参数的要求,让错误信息更直观。全文通过具
2026-07-31 09:23:20
400
原创 通用GUI编程指南:可访问性不是附加功能
摘要 GUI编程中的可访问性不是附加功能,而是基本义务。文章指出,大多数程序缺乏对辅助技术的支持,导致障碍用户无法使用。关键点包括: 屏幕阅读器依赖语义树而非视觉元素,需要明确role/name/value/state四要素 可访问性涵盖视觉、运动和认知等多方面需求 自绘控件需要手动构建语义树,否则对辅助技术不可见 可访问性应从一开始就设计,后期补做成本高昂 文章强调,开发者应从第一个控件开始考虑可访问性,确保软件能被所有人使用,而不仅是视觉正常的用户。
2026-07-31 08:54:37
168
原创 IMX6ULL SPI 驱动框架 —— 主机、设备、驱动,和那次改名
这篇文章主要介绍了Linux内核中SPI驱动框架的基本结构,重点阐述了从spi_master到spi_controller的命名变更以及现代SPI驱动的实现方式。文章摘要如下: Linux SPI框架与I2C类似,采用主机/设备分离的设计哲学,核心层负责粘合 SPI主机驱动结构体已从spi_master更名为spi_controller,以支持主从模式 现代SPI主机驱动实现transfer_one而非旧式transfer,采用队列化传输机制 SPI设备驱动使用spi_driver结构体,与platform
2026-07-31 08:53:47
145
原创 C++17 中的文件系统处理——path 操作:跨平台路径处理
C++17 文件系统路径处理摘要 C++17 引入的 <filesystem> 库提供了跨平台的路径处理能力,核心是 std::filesystem::path 类。它支持从字符串构造路径,并能智能处理不同操作系统的路径分隔符差异(Windows 的 \ 和 Linux/macOS 的 /)。 path 类提供丰富的路径分解方法: root_name():获取驱动器号(Windows) root_directory():获取根目录分隔符 filename():获取最后一级文件名 stem() 和 exten
2026-07-30 08:53:19
181
原创 Cinux —— 给物理内存建账本:bitmap 物理内存管理器
Cinux物理内存管理器:基于bitmap的页分配机制 本文介绍了Cinux操作系统中物理内存管理(PMM)的核心实现,采用bitmap机制管理4KB物理页的分配和回收。主要内容包括: 内存映射解析:通过BIOS E820获取内存布局,过滤出可用区域(type=1),丢弃1MB以下内存,并确保4KB对齐。 bitmap设计:每个bit对应一个4KB物理页,1表示占用,0表示空闲。bitmap本身放置在已映射的内核栈顶部区域。 分配机制:实现了alloc_page()和alloc_pages()接口,通过位运
2026-07-30 08:43:30
422
原创 CppCon笔记1:让我们从手动判断到隐式守护说起
文章摘要 本文从C++泛型编程的历史背景出发,探讨了类型安全的隐式窄化转换问题。作者首先回顾了模板元编程的起源,指出模板从简单的宏替代品意外发展为图灵完备的编译期计算系统。随后,文章通过具体代码示例展示了隐式窄化转换带来的潜在风险,如数据截断和数值溢出。为解决这一问题,作者介绍了C++20的concept特性,演示如何定义"number"概念来建模数字类型,并提出编译期检测窄化转换的方法。全文强调泛型编程应以表达性和性能为核心,而非抽象本身,同时提供了实用技巧来规避常见的类型安全陷阱。
2026-07-29 09:37:23
244
原创 现代Qt开发教程(进阶篇)1.9——多线程进阶:线程池、并发与锁
本文是Qt多线程进阶教程,重点讲解线程池、并发编程和锁机制的高级用法。作者通过实际项目经验指出,盲目增加线程数反而会降低性能,推荐使用QThreadPool自动管理并发度。教程详细介绍了QtConcurrent的高阶API(如map/filter/run)、QReadWriteLock在读多写少场景的优势,并分析了常见陷阱(如任务队列膨胀、共享数据竞争等)。最后提供了一个并行图像处理器的实践项目,要求使用QtConcurrent实现2倍以上的性能提升。文中所有代码示例基于Qt6.5+和C++17标准,适合已
2026-07-29 09:36:19
225
原创 Cinux · 听见键盘:第一个真正的输入设备与 IRQ1
文章摘要: 本文介绍了在Cinux操作系统中实现键盘输入功能的过程。通过PS/2控制器(i8042)初始化、中断处理和数据解码三个关键步骤,完成了第一个真正的输入设备驱动开发。核心是构建生产者-消费者环形缓冲区模型:中断handler快速读取扫描码并解码为按键事件入队,主循环从队列取出事件并回显到控制台。文章详细剖析了PS/2控制器的初始化流程、扫描码解码机制以及中断与主循环的协作模式,为后续构建交互式shell奠定了基础。该系统实现了从单向输出到双向交互的关键跨越,展示了现代操作系统处理输入设备的中断驱动
2026-07-28 08:24:48
250
原创 现代C++:再谈 string_view 的陷阱与最佳实践
文章摘要:现代C++中string_view的陷阱与最佳实践 本文深入探讨了C++17引入的string_view在实际使用中的常见陷阱,重点分析了三类主要问题:悬垂引用(函数返回临时string的view、隐式临时对象、间接引用链)、null终止问题(与C API交互时的危险),以及隐式转换陷阱(string到string_view的过度便捷性)。文章通过典型代码示例揭示了这些问题的隐蔽性和危害性,特别强调了调试版本可能"正常工作"而发布版本崩溃的危险现象。最后指出,虽然string_view性能优越,但
2026-07-28 08:22:05
482
原创 浅谈GUI开发:输入法、焦点、文本:GUI 的深水区
本文探讨了GUI开发中文本输入相关的复杂问题,指出支持中文等非拉丁文字输入时面临的挑战。文章从三个核心方面展开:焦点管理机制决定键盘输入的接收对象;输入法编辑器(IME)的工作原理,用户按键需经过composition和候选选择才生成最终字符;自绘控件需要自行实现IME接入的难点。作者强调文本输入不是简单的按键到字符映射,而是一套复杂的状态机系统,尤其对中文等语言的支持更为复杂。文章最后指出,评估GUI框架时需特别关注其对IME的支持程度,这往往是区分成熟框架与简单demo的关键指标。
2026-07-27 08:03:37
227
原创 RK3506B — SD启动移植,上电零输入到 shell
这篇文章记录了在RK3506B开发板上实现从SD卡自动启动(零输入进入shell)的完整过程。主要内容包括: 解决方案选择:通过创建第二份uboot defconfig(evb-rk3506_sd_defconfig)而非修改环境变量,实现了与NAND启动方案并存的SD卡自动启动方案。 关键技术点: 配置CONFIG_BOOTCOMMAND实现自动启动流程 处理SD卡分区布局与内存地址映射 解决uboot构建时的冲突问题(采用git worktree方案) 最终效果:开发板上电后完全自动完成从SD卡加载内核
2026-07-27 08:01:15
189
原创 现代Qt开发教程(进阶篇)1.8——文件IO进阶:序列化与文件监控
文章摘要 本文深入探讨了Qt文件IO的进阶技术,重点讲解了四个核心知识点:1)QDataStream二进制序列化的版本兼容策略,强调通过setVersion()确保跨版本数据读写一致性;2)QFileSystemWatcher文件监控的跨平台差异及解决方案,包括事件合并和重新监控机制;3)原子写入技术保障数据完整性,详细分析临时文件替换方案及操作系统差异处理;4)内存映射文件技术在大文件处理中的应用。文章结合工程实践中的典型问题(如版本升级导致数据损坏、文件监控失效等),提供了具体代码实现和解决方案,最后提
2026-07-26 09:46:27
218
原创 Cinux · 文本控制台与 kprintf 双输出:012 那个回调终于接上了屏幕
本文介绍了如何在Cinux操作系统中实现文本控制台与kprintf的双输出功能。主要内容包括: 在已实现的framebuffer和字体绘制基础上,构建了Console类,管理光标位置、换行和滚动功能,将像素级操作抽象为行列式文本网格。 扩展了kprintf的输出机制,从单一串口输出升级为最多8路的多后端输出系统,使内核诊断信息能同时显示在串口和屏幕上。 Console类通过行列计数和像素坐标转换,实现了自动换行、退格等终端基本功能,解决了直接像素绘制的位置管理问题。 kprintf通过之前设计的回调接口,无
2026-07-26 09:31:47
202
原创 C++:浅谈string_view的性能
C++ string_view性能分析摘要 本文通过基准测试分析了C++17引入的string_view与std::string的性能差异,主要发现: substr操作:string_view的substr比std::string快约100倍(0.4ms vs 38.7ms),因其只需指针操作而非内存分配和拷贝。 函数参数传递: 当传递std::string时,string_view参数与const string&性能相当 当传递字符串字面量时,string_view避免临时对象构造,显著快于const s
2026-07-26 09:29:26
177
原创 现代C++工程实践——WeakPtr 实战(四):序列亲和性与 lazy 绑定
这个仓库已经开源!现代化 C++(C++11/14/17/20)从基础到进阶的系统教程都在这里,力争做一条完备的现代 C++ 学习路径!欢迎各位大佬前来参观,喜欢的话点个⭐!Github 一键直达: git clone https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP。
2026-07-24 09:19:45
185
原创 Cinux · kprintf 重构与引导期 SSE:在大步前进前夯实两个地基
本文介绍了Cinux操作系统中kprintf功能的重构与SSE初始化问题的修复。主要内容包括: kprintf功能重构: 将格式化引擎与输出后端解耦,采用模板化设计,支持回调机制 新增左对齐、负数零补等格式化功能,修复了边界条件问题 设计为header-only模板,便于在主机环境进行单元测试 SSE初始化问题: 修复了-O2优化级别下内核崩溃的问题 在引导阶段早期初始化CR4寄存器的相关SSE标志位 解决了潜在的内存操作问题 这些改进为后续开发打下了坚实基础,特别是: 提供了更可靠的诊断输出功能 确保了内
2026-07-23 08:26:00
273
原创 C++20-23 新属性:性能导向的编译器提示
C++20-23 新属性:性能优化特性 C++20 和 C++23 标准引入了一系列以性能优化为导向的新属性,标志着属性系统从"代码正确性"向"性能优化"的转变。这些新属性包括: 分支预测提示:[[likely]] 和 [[unlikely]] 帮助编译器优化分支预测,特别适用于错误处理路径等场景。 内存优化:[[no_unique_address]] 解决了空类占用空间的问题,替代传统的空基类优化(EBO)方案。 假设优化:[[assume]] 允许开发者提供优化提示(C++23)。 这些属性需要谨慎使用
2026-07-23 08:20:22
193
原创 现代C++工程实践 WeakPtr 实战(三):WeakPtrFactory 与「最后成员」惯用法
接下来这条是这一篇真正想讲的东西。Chromium 的weak_ptr.h顶部那段 EXAMPLE,专门把这条规矩写在最显眼的位置():翻译过来一句话:成员变量得声明在前面,factory 放最后。笔者第一次读到这条时心里嘀咕——至于吗,成员顺序还能影响正确性?还真能。咱们一条一条拆。把上面这两条拼一块儿,推论自己就冒出来了。
2026-07-22 08:49:11
339
原创 IMX6ULL: AP3216C 驱动层实现 —— I2C 框架与字符设备的合体
这篇文章摘要可以概括为: IMX6ULL平台上AP3216C传感器驱动的实现详解,采用I2C框架与字符设备结合的架构。主要内容包括: 寄存器定义头文件实现(ap3216creg.h) 设备结构体设计,整合设备号、字符设备、I2C客户端等关键元素 I2C通信核心机制: 底层i2c_transfer消息构建原理 高层i2c_smbus便捷函数封装 数据采集实现: 通过连续读取6个寄存器获取IR/ALS/PS三路数据 数据有效性判断与拼接处理 文章通过从底层到高层的完整实现路径,展示了I2C设备驱动与字符设备接口
2026-07-17 09:27:46
205
原创 现代C++工程实践:decltype 与返回类型推导
本文探讨了现代C++中的decltype关键字和返回类型推导技术。主要内容包括: decltype的核心特性:保留表达式的精确类型(包括引用和const),与auto的推导规则形成对比 decltype的易错点:变量加括号会改变推导结果(decltype((x))总是返回左值引用) decltype(auto)的优势:结合auto的简洁和decltype的精确,特别适合函数返回值类型推导 尾置返回类型在模板编程中的应用,以及C++14对其的简化 decltype在模板元编程和完美转发中的实际应用场景 文章通
2026-07-17 09:16:43
229
原创 通用GUI技术编程指南:MVC / MVP / MVVM / Elm Architecture:同一道题的四代解法
这篇文章探讨了GUI架构模式的演进历程,将MVC、MVP、MVVM和Elm Architecture视为同一问题的四代解决方案。核心观点如下: 所有交互式应用都需要处理状态、视图和输入的三角循环关系 MVC(1979)首次分离三个角色,但存在Controller/View边界模糊问题 MVP通过让View完全被动、Presenter集中协调来解决边界问题,但导致Presenter臃肿 MVVM引入专门为View设计的ViewModel,通过数据绑定实现自动同步 Elm Architecture采用纯函数和不
2026-07-16 08:07:52
246
原创 Cinux · 大内核的 GDT:给内核铺好“段“的地基
以下是文章摘要(149字): Cinux操作系统的big kernel需要构建自己的全局描述符表(GDT)以取代mini kernel的临时方案。虽然x86-64长模式忽略段基址和界限,但GDT仍管理关键属性:代码段必须设置L位标志64位模式,特权级切换依赖选择子的RPL位,TSS和中断处理也需通过GDT实现。设计包含7个条目:空段、内核代码/数据段、用户代码/数据段及跨槽的TSS描述符。代码采用类型安全的scoped enum定义段属性,配合编译期校验确保结构正确。通过lgdt指令加载新GDT并更新段寄存
2026-07-16 08:05:30
190
原创 现代C++工程实践——WeakPtr 第二关:核心骨架与控制块
本文介绍了现代C++中WeakPtr的三层架构实现,重点讲解了最底层的Flag控制块设计。Flag作为原子状态载体,通过继承RefCountedThreadSafe实现线程安全引用计数,使用AtomicFlag管理对象存活状态。Flag提供Invalidate()和IsValid()方法,分别采用release-store和acquire-load内存序确保线程安全。文章强调通过私有析构函数限制删除权限,只能通过引用计数机制释放资源。这是WeakPtr系统中最核心的底层组件,为上层WeakReference
2026-07-15 08:40:44
159
原创 RK3506: init 时序:从 switch_root 到 login 的两道暗门
文章摘要: 文章记录了RK3506芯片从switch_root到login过程中遇到的"两道暗门"问题及解决方案。第一道是控制台被抢问题,表现为输入字符被拆分,原因是inittab中重复配置了串口控制台,导致两个shell进程争抢同一UART设备。第二道是/dev目录为空问题,表现为切换rootfs后无法打开/dev/ttyS0,原因是devtmpfs未正确挂载到新根文件系统。作者通过调整inittab配置和在initramfs中手动挂载devtmpfs成功解决,最终实现从内核到rootfs的完整启动流程。
2026-07-15 08:00:24
175
原创 RK3506B: buildroot:出一份正规的最小 rootfs
RK3506B处理器构建最小rootfs的实践总结:使用buildroot生成正规可维护的根文件系统,解决了WSL路径空格、外部工具链语言检查、glibc RPC迁移等关键问题,最终生成8.2MB的cpio和8.8MB的tar格式rootfs,包含busybox、glibc运行时和完整FHS结构。通过BR2_EXTERNAL机制实现定制化配置,避免直接修改buildroot源码,确保构建流程的可持续性。
2026-07-11 20:18:39
262
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅