Skip to content

总节奏与时间分配(复述)

  • 工作日(周一—周五):每晚 1.0–1.5 小时(以看书/视频/读资料为主)

  • 周末(周六—周日):每天 2.5–3.5 小时(以动手实践为主)

  • 周任务验收:每周日晚上确认 deliverable(如能运行一个 demo、完成一篇笔记、一条 git commit / PR 等)

月份与周计划(简洁且直接可执行)

第 1 月:Linux & 工具链入门(Week 1–4)

目标:熟悉 Linux 基础、搭建交叉编译环境、把第一个 aarch64 程序跑起来(QEMU 或板子)。

Week 1

  • 周一(1h):看视频 — Linux 文件/权限与常用命令(ls、cp、chmod、chown、find)。

  • 周二(1h):读文档 — shell 基础(bash:变量、管道、重定向)。

  • 周三(1h):看视频 — SSH/scp/rsync 基本用法、tmux/screen 快速上手。

  • 周四(1h):读文档 — 安装并熟悉 git 基本命令(clone/commit/push/branch)。

  • 周五(1h):看短教程 — apt/yum 基本包管理(你的主机对应的)。

  • 周六(3h):实操 — 在主机上安装 aarch64 cross toolchain(例如 aarch64-linux-gnu-gcc);编写并交叉编译 hello.c:aarch64-linux-gnu-gcc -static -o hello hello.c

  • 周日(3h):实操 — 用 QEMU 或将二进制拷到板子上运行;记录串口/ssh 运行结果(写 git commit + README)。

本周 deliverable:能在 QEMU 或目标板上运行 hello 二进制;提交一个 README 描述步骤。

Week 2

  • 周一(1h):视频 — make/CMake 基础与交叉编译注意点(toolchain file)。

  • 周二(1h):读文档 — gdb-multiarch 与远程调试原理(gdbserver)。

  • 周三(1h):视频 — strace/ltrace 用法与定位问题。

  • 周四(1h):练习阅读 — cross gcc 常见编译选项。

  • 周五(1h):复习并整理笔记(把遇到的问题记录到 Issue/Note)。

  • 周六(3h):实操 — 使用 gdb remote 调试:启动 gdbserver 在板子上、主机 gdb 连接调试 hello。

  • 周日(3h):实操 — 用 Makefile 或 CMake 构建一个小项目(含多个源文件),交叉编译并跑通。

deliverable:gdb remote 调试记录(截图或日志)+ 一个在板子/ QEMU 上运行的多文件小项目。

Week 3

  • 周一(1h):读 — Linux 进程/线程/信号简介(简单笔记)。

  • 周二(1h):视频 — 文件系统、挂载、fstab、procfs/sysfs 概念。

  • 周三(1h):读 — systemd/unit 基本用法(服务管理)。

  • 周四(1h):实践阅读 — 查看 dmesg、journalctl 用法。

  • 周五(1h):整理本月笔记,写月中小结。

  • 周六(3h):实操 — 在板子上写一个 systemd service 启动你的 hello 程序并观察日志。

  • 周日(3h):实操 — 用 strace 分析程序的系统调用,记录结果。

deliverable:systemd service 文件 + strace 分析报告(简短)。

Week 4(复盘周)

  • 周一—周五(每天 1h):复习前 3 周笔记;补看未看完的视频。

  • 周六(3–4h):整合:把所有脚本、Makefile、service 文件放进一个 git repo,写清楚 README 步骤。

  • 周日(3–4h):挑战题:在 QEMU 下模拟一个简短的引导(用 initramfs)或在板子上跑一个小 shell 脚本服务;写周报。

deliverable:Git 仓库 URL(或说明)+ 月结(包含遇到的问题与解决方案)。

第 2 月:C/C++ 与交叉调试进阶(Week 5–8)

目标:掌握 C/C++ 常用模式、内存调试、交叉调试工具链更熟练。

Week 5

  • 周一:视频(1h)— C 指针/内存管理复习(malloc/free、内存泄漏概念)。

  • 周二:读(1h)— C++ 基础(类/RAII/智能指针)。

  • 周三:视频(1h)— valgrind 概念(注意:板子上可能无法运行,主机验证)。

  • 周四:读(1h)— 常见内存错误与 debug 方法(堆栈溢出、use-after-free)。

  • 周五:整理笔记(1h)。

  • 周六(3h):实操 — 在主机使用 valgrind 检查程序,修复问题。

  • 周日(3h):实操 — 在交叉环境做堆栈/崩溃测试,收集 core(如果开启 core dump)。

deliverable:valgrind 报告 + 修复后的 commit。

Week 6

  • 周一—周五(每天 1h):学习 gdb 的高级用法(条件断点、watchpoints、反汇编)。

  • 周六(3h):实操 — 用 gdb 调试一个崩溃程序(模拟崩溃),分析 backtrace。

  • 周日(3h):编写小工具:收集板子上日志、自动打包为 bug report(shell 脚本)。

deliverable:gdb 调试记录 + bug-report 脚本。

Week 7

  • 周一(1h):读 — Makefile/CMake 进阶(交叉 toolchain file 模板)。

  • 周二(1h):视频 — 交叉编译 Qt/C++ 库的注意点(依赖管理)。

  • 周三(1h):读 — 静态链接 vs 动态链接优缺点。

  • 周四(1h):整理并写一个交叉构建流程图。

  • 周六(3h):实操 — 写 CMake toolchain 文件,交叉构建一个使用外部 lib 的小 app(例如 OpenCV-lite)。

  • 周日(3h):在板子上运行并 debug 依赖问题(ldd、strace)。

deliverable:CMake toolchain 文件 + 在板子上能运行的 demo。

Week 8(复盘周)

  • 周一—周五:复习前几周调试案例与笔记(每天 1h)。

  • 周末(每天 3–4h):综合实操:创建一个小项目(C++)— 从源码到交叉编译、打包、安装、systemd 启动。写周报。

deliverable:可重现的 build/install 脚本 + 月总结。

第 3 月:ARM 架构与 RK3588 SoC 概览(Week 9–12)

目标:理解 ARM64 特性、RK3588 的主要外设与 device tree 基础。

Week 9

  • 周一(1h):视频 — ARMv8/AArch64 架构要点(寄存器、异常层次)。

  • 周二(1h):读 — ELF/ABI 基础(aarch64 ABI)。

  • 周三(1h):视频 — 中断/IRQ 概念与 Linux 的中断处理。

  • 周四(1h):读 — MMU 简要、页表概念(用于理解 kernel/boot)。

  • 周五(1h):整理笔记。

  • 周末(各 3h):阅读 RK3588 简介资料(vendor brief),把 CPU/GPU/NPU/VPU/ISP 列成一页速查表并写笔记。

deliverable:RK3588 速查笔记(PDF/MD)。

Week 10

  • 周一—周五(每天 1h):Device Tree 概念系列(.dts/.dtsi、compatible、reg、interrupts)。

  • 周六(3h):实操 — 查看你板子的 dts(或参考 BSP),理解关键节点(uart、mmc、i2c)。

  • 周日(3h):修改一个简单的 DT 节点(例如改变串口的 baud 设置或 GPIO),重编并测试(需要重启)。

deliverable:修改 DT 并记录 boot log(dmesg)差异。

Week 11

  • 周一(1h):读 — RK3588 NPU/VPU 概念及常见工具链(简单笔记)。

  • 周二(1h):视频 — Mali GPU / OpenGL ES / Vulkan 基本概念。

  • 周三(1h):读 — DMA、CSI(摄像头接口)、display pipeline 概念。

  • 周四(1h):整理比较表:GPU vs VPU vs NPU 各自用途与限制。

  • 周末(每天 3h):在板子上查找已加载的驱动(lsmoddmesg),记录 vendor blob 信息。

deliverable:一页"外设与 Linux 对应表"。

Week 12(复盘周)

  • 工作日复习(每天 1h),周末(每天 3–4h)做一次小报告:写一篇 1–2 页的"RK3588 硬件与 Linux 映射"文档,并把问题列入 backlog(例如需要哪些 BSP、哪个 kernel 版本)。

deliverable:文档 + backlog(用于后续月度任务)。

第 4 月:U-Boot 与 引导流程(Week 13–16)

目标:理解并能编译/刷入 U-Boot,掌握串口与 bootargs 调试。

Week 13

  • 周一(1h):看视频 — SoC boot sequence(ROM → SPL → U-Boot → kernel)。

  • 周二(1h):读 — U-Boot 源码结构与常见配置(board、config)。

  • 周三(1h):视频 — 串口调试工具(minicom)与 bootlog 解析。

  • 周四(1h):读 — eMMC/SD/USB 引导差异(简单笔记)。

  • 周末(各 3h):拉取 BSP 的 U-Boot 源码,配置交叉编译并尝试本地编译(生成 SPL/u-boot.img)。

deliverable:编译出的 U-Boot artifact(记录编译命令)。

Week 14

  • 周一—周五(每天 1h):学习如何通过串口修改 U-Boot 环境(bootcmd、bootargs),以及如何用 fastboot 或 update 工具刷写。

  • 周末(每天 3h):在安全环境(或 SD 卡)测试新 U-Boot(避免刷坏板子),观察串口输出并记录。

deliverable:成功从 SD 卡用新 U-Boot 启动的 bootlog。

Week 15

  • 周一(1h):读 — U-Boot 中的设备树装载与传递机制(fdt commands)。

  • 周二(1h):视频 — U-Boot 脚本(auto boot)与网络引导(tftp)。

  • 周三(1h):读 — u-boot 的环境变量持久化(env save)。

  • 周末(每天 3h):试验修改 bootargs(比如 kernel cmdline 增加 console=root=),并验证 kernel 启动行为变化。

deliverable:修改 bootargs 的 demo(bootlog +说明)。

Week 16(复盘周)

  • 周中复习 U-Boot/boot 流程(每天 1h),周末把 U-Boot 改动写成 wiki(带刷机风险提示),并把串口常见错误与排查步骤整理成 checklist。

deliverable:U-Boot wiki + checklist。

第 5 月:Linux 内核编译与 Device Tree(Week 17–20)

目标:能编译 kernel、调整 config、加载模块、调试驱动加载流程。

Week 17

  • 周一(1h):视频 — kernel 源码大体模块(init、drivers、mm、net)。

  • 周二(1h):读 — make menuconfig 操作流程与常用选项。

  • 周三(1h):视频 — 如何应用 vendor patches / defconfig。

  • 周四(1h):读 — kernel module 编写模板(hello world module)。

  • 周末(各 3h):获取 BSP kernel,尝试编译(交叉),并准备 zImage / dtb 等。

deliverable:编译出的 kernel image/dtb。

Week 18

  • 周一—周五(每天 1h):研究并调整 kernel config 来启用某个你想测试的驱动(例如 CONFIG_GPIOCONFIG_I2C)。

  • 周末(每天 3h):编写、编译并在板子上插入一个 kernel module;观察 dmesg 与加载结果。

deliverable:kernel module + dmesg 输出记录。

Week 19

  • 周一(1h):读 — Device Tree overlay / runtime 修改(if 支持)。

  • 周二(1h):视频 — kernel boot 参数与 early printk 使用。

  • 周三(1h):读 — kernel log 调试技巧(ftrace 简介)。

  • 周末(每天 3h):通过修改 dtb 或 .dts,增加/移除一个外设描述并验证(例如控制某个 LED/GPIO)。

deliverable:修改过的 .dts + bootlog 证明(功能变化)。

Week 20(复盘周)

  • 工作日复习(每天 1h),周末整合本月改动:把 kernel 构建脚本整理成可重现脚本(build.sh),并写一页"如何快速重建 kernel"说明。

deliverable:可复现的 kernel build 脚本 + 月结。

第 6 月:驱动与外设(GPU/VPU/Camera/Audio)(Week 21–24)

目标:理解 display pipeline、GPU/VPU 驱动、用 gstreamer 或 vendor demo 测试媒体能力。

Week 21

  • 周一(1h):看视频 — Linux framebuffer / DRM / KMS 基本概念。

  • 周二(1h):读 — Wayland vs X11 vs eglfs 对嵌入式的影响。

  • 周三(1h):视频 — GStreamer 插件体系与硬件加速 pipeline。

  • 周末(各 3h):在板子上运行一个 vendor 的视频解码 demo(或用 gstreamer pipeline 调用 v4l2/mpp),观察是否走硬件解码。

deliverable:视频播放 demo(录像或运行日志)。

Week 22

  • 周一—周五(每天 1h):学习 Mali 驱动与 Mesa 在嵌入式的集成(若 vendor 给 blob,则研究如何匹配)。

  • 周末(每天 3h):尝试运行一个 OpenGL ES demo(例如 hello_triangle),观察是否使用 GPU(查看 dmesg / glxinfo if available)。

deliverable:GL demo 运行记录。

Week 23

  • 周一(1h):读 — VPU/ISP 工作流程(capture → preprocess → encode/decode)。

  • 周二(1h):视频 — 使用 v4l2 摄像头采集到用户空间(OpenCV)。

  • 周三(1h):读 — audio pipeline(ALSA、pulseaudio 简介)。

  • 周末(各 3h):接入摄像头:用 v4l2-ctl 检测并用 OpenCV 或 gstreamer 拉流,显示到 framebuffer/Qt 窗口。

deliverable:摄像头采集 demo(能在 Qt/窗口显示简单帧)。

Week 24(复盘周)

  • 周中复习(每天 1h),周末整合 demo:把 video/camera/gpu 的测试脚本写成一键运行脚本并做记录(性能/分辨率/帧率)。

deliverable:一键测试脚本 + 测试报告。

第 7 月:Buildroot / Yocto 入门(Week 25–28)

目标:掌握 Buildroot 快速产出 rootfs;入门 Yocto(layers/recipes)。

Week 25

  • 周一(1h):看 Buildroot 快速入门文档(概念)。

  • 周二(1h):读 Yocto 基本概念(meta-layer, bitbake)。

  • 周三(1h):视频 — 区别:Buildroot vs Yocto(何时用哪一个)。

  • 周末(各 3h):下载 Buildroot,尝试构建一个 minimal image(包含 ssh + busybox + 你的 hello)。

deliverable:Buildroot 生成的 sdcard 镜像并能启动。

Week 26

  • 周一—周五(每天 1h):Yocto 入门(bblayers.conf、local.conf、创建 layer)。

  • 周末(每天 3h):尝试用 Yocto 构建一个基本镜像(可能耗时较久,注意主机资源),引入 meta-rk 或 community layer(如果可用)。

deliverable:Yocto 构建日志 + 初始 image(若成功)或详细记录失败点(用于排查)。

Week 27

  • 周一(1h):读 — 在 Buildroot/Yocto 中添加自定义包(如何写 recipe / package)。

  • 周二(1h):视频 — rootfs 定制与 post-build 脚本。

  • 周末(各 3h):把你的 Qt 应用/ demo 打包成 package,加进 image(Buildroot 或 Yocto)。

deliverable:包含你的 app 的镜像 + 打包脚本。

Week 28(复盘周)

  • 周中复习(每天 1h),周末(每天 3–4h)整理镜像构建流程写成文档(CI-friendly),并把 build 脚本放入 git。

deliverable:镜像构建文档 + git 仓库。

第 8 月:Qt 桌面部署(Week 29–32)

目标:交叉编译部署 Qt(5/6),完成最小 Qt 桌面与 launcher。

Week 29

  • 周一(1h):视频 — Qt 在嵌入式的后端选择(eglfs / wayland / xcb)。

  • 周二(1h):读 — Qt cross build 基本流程(qtbase、qtquick)。

  • 周三(1h):看 — qmake/cmake 在 Qt 项目中的差别。

  • 周末(各 3h):尝试交叉编译 Qt 库(或在板子上安装预编译包以快速验证显示)。

deliverable:交叉编译的 Qt binary 或在板子上能运行的简单 Qt app。

Week 30

  • 周一—周五(每天 1h):学习 Qt Quick / QML 基础与嵌入式布局注意点(分辨率、触摸事件)。

  • 周末(每天 3h):实现一个最小桌面 Launcher(QML 页面:应用图标、点击启动外部程序)。

deliverable:可运行的 Qt Launcher(code + 在板子运行截图/视频)。

Week 31

  • 周一(1h):读 — 将 OpenCV/AI 推理结果 overlay 到 Qt 界面(如何在 QImage 上绘制)。

  • 周二(1h):视频 — Qt 与 Wayland compositor 基础(if 你选 Wayland)。

  • 周三(1h):读 — 启动管理(autostart systemd service 启动 Qt app)。

  • 周末(各 3h):把 Launcher 做成 systemd 自动登录并自动运行(实现 autostart)。

deliverable:开机自动进入你的 Qt 桌面 demo。

Week 32(复盘周)

  • 周中复习(每天 1h),周末整合桌面:实现一个最小的任务栏/托盘功能(比如显示时间、打开设置),并写 UI 说明文档。

deliverable:桌面代码 + 使用说明。

第 9 月:桌面工程化与 UX(Week 33–36)

目标:把桌面做得更"可用":应用管理、自动更新、主题与多分辨率支持。

Week 33

  • 周一(1h):读 — session 管理与用户切换(嵌入式常见做法)。

  • 周二(1h):视频 — 软件更新机制(apt / ostree / custom updater)。

  • 周三(1h):读 — Qt 风格与主题(qss/QML theme)。

  • 周末(各 3h):实现应用列表(扫描 /usr/bin 或预定义清单)并在 Launcher 中展示。

deliverable:应用管理 demo(可启动已安装 app)。

Week 34

  • 周一—周五(每天 1h):学习如何实现简单的 OTA/更新脚本(备份+回滚策略)。

  • 周末(每天 3h):实现一个"更新"功能:把新的 app 包复制到某目录并重启桌面加载(模拟 OTA)。

deliverable:更新脚本 + 回滚测试记录。

Week 35

  • 周一(1h):读 — 多分辨率与 DPR 支持(Qt 的适配建议)。

  • 周二(1h):视频 — 性能监控与内存优化(Qt profiling)。

  • 周末(各 3h):优化 Launcher 启动速度、测量内存占用并做简单优化(延迟加载图标等)。

deliverable:优化前后对比数据与优化说明。

Week 36(复盘周)

  • 周中复习(每天 1h),周末做用户体验测试(自己模拟使用场景,记录 bug),整理为 issue 列表并优先修复。

deliverable:桌面 QA 清单 + 修复记录。

第 10 月:AI(模型转换与 RKNN)(Week 37–40)

目标:掌握模型导出/量化/转 RKNN,并在板子上跑推理 demo(摄像头→NPU→Qt 显示)。

Week 37

  • 周一(1h):读 — ONNX / TensorFlow / PyTorch 模型导出基础。

  • 周二(1h):视频 — 量化基础(INT8/校准集概念)。

  • 周三(1h):读 — RKNN Toolkit 概览(转换流程)。

  • 周末(各 3h):在主机上用 PyTorch 导出一个轻量模型(MobileNetV2/简化 YOLO)为 ONNX。

deliverable:ONNX 模型 + 导出命令记录。

Week 38

  • 周一—周五(每天 1h):学习 RKNN 转换命令与常见错误(unsupported ops、shape mismatch)。

  • 周末(每天 3h):尝试把 ONNX 转成 RKNN,用 sample 校准数据做量化并在 host 上验证。

deliverable:RKNN 模型文件 + 转换日志。

Week 39

  • 周一(1h):读 — 在板子上部署 RKNN runtime(如何调用、输入/输出格式)。

  • 周二(1h):视频 — OpenCV 与 Qt 的集成显示(overlay)。

  • 周三(1h):读 — 性能监控 NPU 的方法(runtime profiling)。

  • 周末(各 3h):在板子上运行 RKNN 推理 demo(摄像头输入,显示识别框到 Qt 界面)。

deliverable:板子上运行的推理 demo(录像或运行日志)。

Week 40(复盘周)

  • 周中复习(每天 1h),周末对模型进行微优化(裁剪/量化参数调整),记录 FPS/延迟差异。

deliverable:模型性能测试报告 + 调优记录。

第 11 月:性能调优与稳定性(Week 41–44)

目标:使用 perf、ftrace 等工具找瓶颈,做 thermal 管理与多进程 orchestration。

Week 41

  • 周一(1h):读 — perf、top、htop 的基本用法。

  • 周二(1h):视频 — ftrace/trace-cmd/tracepoints 简介。

  • 周三(1h):读 — thermal/clock/ DVFS 概念。

  • 周末(各 3h):在板子上跑完整 pipeline(camera→NPU→Qt),用 top/perf 记录资源占用。

deliverable:perf/top 报告 + 初步瓶颈列表。

Week 42

  • 周一—周五(每天 1h):学习如何对 NPU/CPU 进行调度(affinity)、并发限制(worker pool)。

  • 周末(每天 3h):实现一个简单的推理调度器(控制并发、异步队列),并测试稳定性。

deliverable:推理调度器代码 + 稳定性测试结果。

Week 43

  • 周一(1h):读 — logrotate、systemd watchdog、auto-restart 实践。

  • 周二(1h):视频 — thermal 政策与节能技巧(降低频率、限帧率)。

  • 周末(各 3h):实现日志轮转、systemd watchdog 配置、并在高负荷下测试自动恢复能力。

deliverable:稳定性改进清单 + 测试日志。

Week 44(复盘周)

  • 周中复习(每天 1h),周末把性能/稳定性改动写入部署文档(如何在现场定位问题、reset 策略等)。

deliverable:运维/排障文档。

第 12 月:集成 + Capstone(Week 45–48) + 两周缓冲(Week 49–52)

目标:整合所有部分,完成 capstone:RK3588 上的 Qt 桌面 + 摄像头 AI 功能,并写成可复现的镜像与文档。

Week 45

  • 周一—周五(每天 1h):整合所有 backlog(BSP、kernel、u-boot、rootfs、Qt app、RKNN 模型)。

  • 周末(各 3–4h):开始构建 final image(Buildroot 或 Yocto)并把 app 放入。

deliverable:初版 final image。

Week 46

  • 周末(每天 3–4h):在板子上多次冷/热启动测试,修复启动脚本与依赖问题。

deliverable:稳定启动镜像与启动日志记录。

Week 47

  • 周末:完整功能测试(开机自动进入桌面、摄像头 AI 可用、更新流程可用),录制 2–3 分钟演示视频。

deliverable:演示视频 + 用户使用手册(README)。

Week 48(复盘 + 发布)

  • 周中整理所有脚本、镜像、文档到 GitHub(含 build.sh、如何刷机、常见问题)。周末写 final README 和部署指南。

deliverable:完整仓库 + 部署文档 + 演示视频链接。

Week 49–52(缓冲与强化)

  • 这 4 周作为缓冲与强化:补齐未完成项、做性能更深优化、写技术沉淀(博客/面试要点)、准备演示与答辩材料。每天安排:工作日读写 1h,周末实践 3–4h。

deliverable(最终):可交付的 RK3588 镜像(含 build 脚本)、Qt 桌面源码、RKNN demo、完整文档与演示录像。

Built with VitePress