From 463f303c8b6add973a84285cbb30db5f775353a8 Mon Sep 17 00:00:00 2001 From: Charliechen114514 <725610365@qq.com> Date: Sun, 23 Aug 2026 15:13:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20journey=20track=20=E2=80=94=20evide?= =?UTF-8?q?nce-first=20rebuild=20of=20the=20tutorial=20mainline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete beat 00-08 + epilogues A/B under the new paradigm: experiment + verify script run green locally first, chapter written against the real transcript, prose polished to the content_forge target voice. - 00 env check (script doubles as the beat's teaching artifact) - 01 gcc pipeline + ELF dissection (nm/readelf/objdump; gcc's printf->puts) - 02 gdb (break/bt/watch, -O2 optimized-out, UB warning as evidence) - 03 make (undefined-reference incident -> dependency accounting) - 04 cmake (lib/app split, compile_commands.json, incremental semantics) - 05 cross-compile (dumpmachine, rdimon semihosting, arch diff, objcopy) - 06 bare-metal UART on qemu mps2-an385: vector table + linker script, volatile MMIO driver, expected-serial.txt committed as real capture (268-byte image), remote gdb via qemu gdbstub closes beat-02 foreshadow - 07 git deep-dive (restore, branch, real merge conflict, tag) + README - 08 vscode wiring (settings/launch/tasks; tier manual, JSON checks scripted) - 90/91 physical serial + lab safety epilogues (tier manual) - scripts/: run-all hub + command-consistency lint (94 commands, 0 warn); manual-tier chapters exempted from script pairing - CI: verify job on ubuntu+windows matrix (git-bash), lint in warn mode - site home rerouted to journey as the recommended entry --- .github/workflows/build-check.yml | 25 ++ scripts/journey/00-env-check.sh | 60 ++++ scripts/journey/01-elf.sh | 80 +++++ scripts/journey/02-gdb.sh | 85 ++++++ scripts/journey/03-make.sh | 158 ++++++++++ scripts/journey/04-cmake.sh | 68 +++++ scripts/journey/05-cross.sh | 84 ++++++ scripts/journey/06-qemu-uart.sh | 99 +++++++ scripts/journey/07-git.sh | 162 ++++++++++ scripts/journey/08-vscode.sh | 37 +++ scripts/lint.sh | 72 +++++ scripts/run-all.sh | 29 ++ src/journey/01-elf/hello.c | 10 + src/journey/02-gdb/buggy.c | 21 ++ src/journey/03-make/.gitignore | 4 + src/journey/03-make/Makefile | 20 ++ src/journey/03-make/main.c | 12 + src/journey/03-make/util.c | 12 + src/journey/03-make/util.h | 8 + src/journey/04-cmake/CMakeLists.txt | 16 + src/journey/04-cmake/src/main.c | 12 + src/journey/04-cmake/src/util.c | 12 + src/journey/04-cmake/src/util.h | 8 + src/journey/05-cross/main.c | 12 + src/journey/05-cross/util.c | 12 + src/journey/05-cross/util.h | 8 + src/journey/06-qemu-uart/.gitignore | 6 + src/journey/06-qemu-uart/expected-serial.txt | 2 + src/journey/06-qemu-uart/linker.ld | 40 +++ src/journey/06-qemu-uart/main.c | 43 +++ src/journey/06-qemu-uart/startup.c | 55 ++++ src/journey/08-vscode/.vscode/launch.json | 18 ++ src/journey/08-vscode/.vscode/settings.json | 8 + src/journey/08-vscode/.vscode/tasks.json | 12 + tutorial/index.md | 36 +-- tutorial/journey/00-env-check.md | 99 +++++++ tutorial/journey/01-elf.md | 226 ++++++++++++++ tutorial/journey/02-gdb.md | 177 +++++++++++ tutorial/journey/03-make.md | 289 ++++++++++++++++++ tutorial/journey/04-cmake.md | 128 ++++++++ tutorial/journey/05-cross.md | 122 ++++++++ tutorial/journey/06-qemu-uart.md | 297 +++++++++++++++++++ tutorial/journey/07-git.md | 222 ++++++++++++++ tutorial/journey/08-vscode.md | 101 +++++++ tutorial/journey/90-physical-serial.md | 58 ++++ tutorial/journey/91-lab-safety.md | 38 +++ tutorial/journey/index.md | 26 ++ 47 files changed, 3111 insertions(+), 18 deletions(-) create mode 100755 scripts/journey/00-env-check.sh create mode 100755 scripts/journey/01-elf.sh create mode 100755 scripts/journey/02-gdb.sh create mode 100755 scripts/journey/03-make.sh create mode 100755 scripts/journey/04-cmake.sh create mode 100755 scripts/journey/05-cross.sh create mode 100755 scripts/journey/06-qemu-uart.sh create mode 100755 scripts/journey/07-git.sh create mode 100755 scripts/journey/08-vscode.sh create mode 100755 scripts/lint.sh create mode 100755 scripts/run-all.sh create mode 100644 src/journey/01-elf/hello.c create mode 100644 src/journey/02-gdb/buggy.c create mode 100644 src/journey/03-make/.gitignore create mode 100644 src/journey/03-make/Makefile create mode 100644 src/journey/03-make/main.c create mode 100644 src/journey/03-make/util.c create mode 100644 src/journey/03-make/util.h create mode 100644 src/journey/04-cmake/CMakeLists.txt create mode 100644 src/journey/04-cmake/src/main.c create mode 100644 src/journey/04-cmake/src/util.c create mode 100644 src/journey/04-cmake/src/util.h create mode 100644 src/journey/05-cross/main.c create mode 100644 src/journey/05-cross/util.c create mode 100644 src/journey/05-cross/util.h create mode 100644 src/journey/06-qemu-uart/.gitignore create mode 100644 src/journey/06-qemu-uart/expected-serial.txt create mode 100644 src/journey/06-qemu-uart/linker.ld create mode 100644 src/journey/06-qemu-uart/main.c create mode 100644 src/journey/06-qemu-uart/startup.c create mode 100644 src/journey/08-vscode/.vscode/launch.json create mode 100644 src/journey/08-vscode/.vscode/settings.json create mode 100644 src/journey/08-vscode/.vscode/tasks.json create mode 100644 tutorial/journey/00-env-check.md create mode 100644 tutorial/journey/01-elf.md create mode 100644 tutorial/journey/02-gdb.md create mode 100644 tutorial/journey/03-make.md create mode 100644 tutorial/journey/04-cmake.md create mode 100644 tutorial/journey/05-cross.md create mode 100644 tutorial/journey/06-qemu-uart.md create mode 100644 tutorial/journey/07-git.md create mode 100644 tutorial/journey/08-vscode.md create mode 100644 tutorial/journey/90-physical-serial.md create mode 100644 tutorial/journey/91-lab-safety.md create mode 100644 tutorial/journey/index.md diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index 6789d7d..3796f65 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -5,6 +5,31 @@ on: branches: [main] jobs: + verify: + name: Verify (journey replays, ${{ matrix.os }}) + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install make (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: choco install -y make + + - name: Lint (commands vs scripts) + shell: bash + run: bash scripts/lint.sh + + - name: Replay all journey scripts + shell: bash + run: bash scripts/run-all.sh + build: runs-on: ubuntu-latest diff --git a/scripts/journey/00-env-check.sh b/scripts/journey/00-env-check.sh new file mode 100755 index 0000000..f570244 --- /dev/null +++ b/scripts/journey/00-env-check.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# ── 拍 00 · 环境体检 ──────────────────────────────────────────── +# 本拍比较特殊:验证脚本本身就是教具——教程教你读懂它输出的体检报告。 +# 必需工具(git/gcc/make)缺失 → 红;建议工具缺失只提示,不算失败。 +# tier: ci-matrix +# +# 本脚本的运行方式:bash scripts/journey/00-env-check.sh +# +# 装齐工具的手工指引(不同平台各取所需;脚本自己不会去装): +# Ubuntu/Debian: sudo apt install build-essential gdb cmake +# Arch: sudo pacman -S base-devel gdb cmake +# Windows 先装 WSL2(PowerShell 管理员): +# wsl --install -d Ubuntu +# 交叉工具链与模拟器(拍 05/06 才需要,现在可以先不装): +# Ubuntu/Debian: sudo apt install gcc-arm-none-eabi qemu-system-arm +# Arch: sudo pacman -S arm-none-eabi-gcc qemu-arm +set -euo pipefail + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +banner "机器与系统" +uname -a +printf 'bash %s\n' "${BASH_VERSION:-?}" + +banner "必需工具(缺任何一个,体检就是红)" +missing=0 +for tool in git gcc make; do + if command -v "$tool" >/dev/null 2>&1; then + printf ' [ok] %-8s -> %s\n' "$tool" "$(command -v "$tool")" + else + printf ' [缺失] %s\n' "$tool" + missing=1 + fi +done +[ "$missing" -eq 0 ] || { echo "FATAL: 必需工具缺失,安装指引见本文件头部注释" >&2; exit 1; } + +banner "工具版本" +git --version +gcc --version | head -1 +make --version | head -1 + +banner "建议工具(现在缺不要紧,后面的拍会用到再装)" +for tool in gdb cmake arm-none-eabi-gcc qemu-system-arm; do + if command -v "$tool" >/dev/null 2>&1; then + printf ' [ok] %s\n' "$tool" + else + printf ' [未装] %s —— 后面的拍会用到,到时候再装也来得及\n' "$tool" + fi +done + +banner "PATH —— shell 找命令的地方" +echo "$PATH" | tr ':' '\n' | sed 's/^/ /' + +banner "command not found 的三板斧" +echo " 1) 它装了吗: which gcc" +echo " 2) 它在哪: echo \"\$PATH\" 里有没有那个目录" +echo " 3) 名字对吗: 拼写、大小写、别名" + +echo +echo "✅ 拍 00 · 环境体检 —— 必需项全部就绪" diff --git a/scripts/journey/01-elf.sh b/scripts/journey/01-elf.sh new file mode 100755 index 0000000..ce790ba --- /dev/null +++ b/scripts/journey/01-elf.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# ── 拍 01 · 源码→程序 ─────────────────────────────────────────── +# 重放 tutorial/journey/01-elf.md 的全部命令:把一行 hello.c +# 逐步变成可执行文件,并把每一段的中间产物拆开看。 +# tier: ci-matrix +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +SRC="$REPO_ROOT/src/journey/01-elf" + +command -v gcc >/dev/null 2>&1 || { echo "FATAL: 没有 gcc,请先完成拍 00 体检" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT +cd "$WORK" +cp "$SRC/hello.c" . + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# ═══ 开场:一行命令,先跑起来 ═══ +banner "一行命令,先跑起来" +gcc hello.c -o hello +./hello +./hello | grep -q 'hello, EmbedBox!' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# ═══ 第一步:只跑预处理器 ═══ +banner "gcc -E:只跑预处理器" +gcc -E hello.c -o hello.i +wc -l hello.i +head -12 hello.i + +# 断言:stdio.h 展开后体积暴涨(几百行起步) +lines="$(wc -l < hello.i)" +[ "$lines" -gt 100 ] || { echo "FATAL: 预处理产物行数异常: $lines" >&2; exit 1; } + +# ═══ 第二步:到汇编为止 ═══ +banner "gcc -S:到汇编为止" +gcc -S hello.c +grep -n 'main:' hello.s +sed -n '/^main:/,/ret/p' hello.s + +# ═══ 第三步:到目标文件为止 ═══ +banner "gcc -c:到目标文件为止" +gcc -c hello.c +objdump -f hello.o + +# 断言:目标文件带着「待重定位」标记,还不是可执行文件 +objdump -f hello.o | grep -q 'HAS_RELOC' \ + || { echo "FATAL: hello.o 应当是可重定位目标文件" >&2; exit 1; } + +nm hello.o + +# 断言:符号表里有已定义的 main 和未决的标准库函数 +# (gcc 会把单参数带换行的 printf 优化成 puts,两者都合法) +nm hello.o | grep -q ' T main' || { echo "FATAL: 符号表缺 main" >&2; exit 1; } +nm hello.o | grep -Eq ' U (printf|puts)' || { echo "FATAL: 符号表缺未决的 printf/puts" >&2; exit 1; } + +# ═══ 第四步:链接成可执行文件 ═══ +banner "链接:hello.o → hello" +gcc hello.o -o hello +objdump -f hello +nm hello | grep -q ' T main' || { echo "FATAL: 可执行文件缺 main" >&2; exit 1; } +objdump -f hello | grep -q 'x86-64' || { echo "FATAL: 架构字段异常" >&2; exit 1; } +./hello +./hello | grep -q 'hello, EmbedBox!' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# ═══ 拆开看:段、反汇编、体积 ═══ +banner "readelf -S:可执行文件里的段" +readelf -S hello | grep -E '(\.text|\.data|\.bss|\.rodata)' || true +readelf -S hello | grep -q '\.text' || { echo "FATAL: 缺 .text 段" >&2; exit 1; } +readelf -S hello | grep -q '\.bss' || { echo "FATAL: 缺 .bss 段" >&2; exit 1; } + +banner "objdump -d:看自己程序的汇编" +objdump -d hello | sed -n '/
:/,/^$/p' + +banner "size:三个段各占多少" +size hello + +echo +echo "✅ 拍 01 · 源码→程序 —— 全部断言通过" diff --git a/scripts/journey/02-gdb.sh b/scripts/journey/02-gdb.sh new file mode 100755 index 0000000..f3d8339 --- /dev/null +++ b/scripts/journey/02-gdb.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# ── 拍 02 · 程序病了 ──────────────────────────────────────────── +# 重放 tutorial/journey/02-gdb.md 的全部命令:用 gdb 脚本化会话 +# 揪出 buggy.c 里故意埋的越界读。 +# tier: ci-matrix +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +SRC="$REPO_ROOT/src/journey/02-gdb" + +command -v gcc >/dev/null 2>&1 || { echo "FATAL: 没有 gcc" >&2; exit 1; } +command -v gdb >/dev/null 2>&1 || { echo "FATAL: 没有 gdb,请回拍 00 补装" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT +cd "$WORK" +cp "$SRC/buggy.c" . + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# ═══ 编译带调试信息的版本,先看症状 ═══ +banner "编译(-g 留下调试信息)与症状" +gcc -g -O0 -o buggy buggy.c +./buggy +./buggy | grep -Eq 'total = -?[0-9]+' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# ═══ 会话一:断点 + 参数 + 回溯 ═══ +banner "gdb 会话一:断点、info args、bt" +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ + -ex 'break scale' \ + -ex 'run' \ + -ex 'info args' \ + -ex 'bt' \ + | tee gdb1.log + +grep -q 'Breakpoint 1, ' gdb1.log || { echo "FATAL: 断点未命中" >&2; exit 1; } +grep -q 'factor = 2' gdb1.log || { echo "FATAL: info args 输出异常" >&2; exit 1; } +grep -Eq '#0 +scale' gdb1.log || { echo "FATAL: 回溯缺 scale 帧" >&2; exit 1; } +grep -Eq '#1 .*main' gdb1.log || { echo "FATAL: 回溯缺 main 帧" >&2; exit 1; } + +# ═══ 会话二:一路 continue 到第五次调用,看越界值 ═══ +banner "gdb 会话二:continue 到 data[4] 那一拍" +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ + -ex 'break scale' \ + -ex 'run' \ + -ex 'info args' \ + -ex 'continue' \ + -ex 'info args' \ + -ex 'continue' \ + -ex 'continue' \ + -ex 'continue' \ + -ex 'continue' \ + | tee gdb2.log + +# 第五次调用一定发生(循环 i=0..4 共五次),且 v 是越界读到的值 +stops="$(grep -c 'Breakpoint 1, ' gdb2.log)" +[ "$stops" -ge 5 ] || { echo "FATAL: 断点应命中 5 次,实际 $stops 次" >&2; exit 1; } +grep -q 'v = ' gdb2.log || { echo "FATAL: 缺 v 的打印" >&2; exit 1; } + +# ═══ 会话三:watch —— 让数据变化自己举手 ═══ +banner "gdb 会话三:watch total" +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ + -ex 'break main' \ + -ex 'run' \ + -ex 'watch total' \ + -ex 'continue' \ + | tee gdb3.log + +grep -q 'Old value = 0' gdb3.log || { echo "FATAL: watch 未捕获首次写入" >&2; exit 1; } +grep -q 'New value = 2' gdb3.log || { echo "FATAL: watch 首次写入值异常" >&2; exit 1; } + +# ═══ 会话四:-O2 下,变量被优化掉 ═══ +banner "-O2:优化和调试器打架" +gcc -O2 -g -o buggy-o2 buggy.c +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy-o2 \ + -ex 'break main' \ + -ex 'run' \ + -ex 'print total' \ + -ex 'print data' \ + | tee gdb4.log + +grep -q 'optimized out' gdb4.log || { echo "FATAL: 应观察到 optimized out" >&2; exit 1; } + +echo +echo "✅ 拍 02 · 程序病了 —— 全部断言通过" diff --git a/scripts/journey/03-make.sh b/scripts/journey/03-make.sh new file mode 100755 index 0000000..cf65418 --- /dev/null +++ b/scripts/journey/03-make.sh @@ -0,0 +1,158 @@ +#!/usr/bin/env bash +# ── 拍 03 · 程序长大 ──────────────────────────────────────────── +# 重放 tutorial/journey/03-make.md 的全部命令,并断言关键结果。 +# tier: ci-matrix(ubuntu / windows git-bash) +# +# 说明:正文里"文件长这样"的 C 代码块与第一/二幕的 heredoc 逐字一致; +# 最终态文件以 src/journey/03-make/ 为唯一事实源,用 cp 引入。 +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +SRC="$REPO_ROOT/src/journey/03-make" + +# ── 平台自举:windows runner 上只有 mingw32-make 时,做个 shim ── +if ! command -v make >/dev/null 2>&1; then + if command -v mingw32-make >/dev/null 2>&1; then + SHIM="$(mktemp -d)/bin" + mkdir -p "$SHIM" + printf '#!/usr/bin/env bash\nexec mingw32-make "$@"\n' > "$SHIM/make" + chmod +x "$SHIM/make" + export PATH="$SHIM:$PATH" + echo "[shim] 未找到 make,已将 mingw32-make 映射为 make" + else + echo "FATAL: 平台上没有 make/mingw32-make,无法重放本章" >&2 + exit 1 + fi +fi +command -v gcc >/dev/null 2>&1 || { echo "FATAL: 平台上没有 gcc" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT +cd "$WORK" + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# ═══ 第一幕 · 手工时代:主角还只有一个文件 ═══ +banner "第一幕:单文件时代" + +cat > main.c <<'EOF' +/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 */ +#include + +int main(void) +{ + printf("hello, EmbedBox!\n"); + return 0; +} +EOF + +gcc main.c -o hello +./hello +./hello | grep -q 'hello, EmbedBox!' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# 程序长大:greet 搬进 util,main 变小(三个文件见正文代码块) +cat > main.c <<'EOF' +#include +#include "util.h" + +int main(void) +{ + greet("EmbedBox"); + return 0; +} +EOF +cat > util.h <<'EOF' +#ifndef UTIL_H +#define UTIL_H + +/* greet 从 main.c 搬了出来,住进自己的家 */ +void greet(const char *who); + +#endif /* UTIL_H */ +EOF +cat > util.c <<'EOF' +#include +#include "util.h" + +void greet(const char *who) +{ + printf("hello, %s!\n", who); +} +EOF + +banner "第一幕:拆成三个文件,手工流水线" +gcc -c main.c +gcc -c util.c +gcc main.o util.o -o hello +./hello +./hello | grep -q 'hello, EmbedBox!' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# ═══ 第二幕 · 长大的痛:改了三处,只记得重编一个 ═══ +banner "第二幕:程序又长了,你只记得改过 main.c" + +# util.h 长出 version 声明、util.c 长出实现、main.c 用上了它—— +# 三个文件都换了新版(最终态 = src/journey/03-make/) +cp "$SRC/main.c" "$SRC/util.h" "$SRC/util.c" . + +gcc -c main.c +set +e +out="$(gcc main.o util.o -o hello 2>&1)" +rc=$? +set -e +printf '%s\n' "$out" +if [ "$rc" -eq 0 ]; then + echo "FATAL: 预期链接失败,却链接成功了" >&2 + exit 1 +fi +printf '%s\n' "$out" | grep -q 'undefined reference to .version' \ + || { echo 'FATAL: 报错里没有 undefined reference to `version' >&2; exit 1; } + +banner "第二幕:补上忘掉的那一步" +gcc -c util.c +gcc main.o util.o -o hello +./hello +./hello | grep -q 'journey beat 03: v0.3.0' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# ═══ 第三幕 · make 接管 ═══ +banner "第三幕:清掉手工残骸,让 make 接管" +rm main.o util.o hello +cp "$SRC/Makefile" . + +out="$(make 2>&1)" +printf '%s\n' "$out" +printf '%s\n' "$out" | grep -q 'main\.c' || { echo "FATAL: 首次 make 没有编译 main.c" >&2; exit 1; } +printf '%s\n' "$out" | grep -q 'util\.c' || { echo "FATAL: 首次 make 没有编译 util.c" >&2; exit 1; } +./hello +./hello | grep -q 'journey beat 03: v0.3.0' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +banner "第三幕:touch util.h —— 头文件变了,两个都要重编" +touch util.h +out="$(make 2>&1)" +printf '%s\n' "$out" +printf '%s\n' "$out" | grep -q 'main\.c' || { echo "FATAL: 头文件变了,main.c 没有重编" >&2; exit 1; } +printf '%s\n' "$out" | grep -q 'util\.c' || { echo "FATAL: 头文件变了,util.c 没有重编" >&2; exit 1; } + +banner "第三幕:什么都不改 —— make 说无事可做" +out="$(make 2>&1)" +printf '%s\n' "$out" +printf '%s\n' "$out" | grep -Eq '(Nothing to be done|is up to date)' \ + || { echo "FATAL: 没有改动时 make 应当无事可做" >&2; exit 1; } + +banner "第三幕:touch util.c —— 只重编真正变了的那个" +touch util.c +out="$(make 2>&1)" +printf '%s\n' "$out" +printf '%s\n' "$out" | grep -q 'util\.c' || { echo "FATAL: util.c 没有重编" >&2; exit 1; } +if printf '%s\n' "$out" | grep -q 'main\.c'; then + echo "FATAL: util.c 的改动不应该触发 main.c 重编" >&2 + exit 1 +fi + +banner "第三幕:make clean 与从零再来一遍" +make clean +[ ! -e hello ] || { echo "FATAL: clean 之后 hello 还在" >&2; exit 1; } +make +./hello | grep -q 'journey beat 03: v0.3.0' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +echo +echo "✅ 拍 03 · 程序长大 —— 全部断言通过" diff --git a/scripts/journey/04-cmake.sh b/scripts/journey/04-cmake.sh new file mode 100755 index 0000000..7f11c71 --- /dev/null +++ b/scripts/journey/04-cmake.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +# ── 拍 04 · 工程化 ────────────────────────────────────────────── +# 重放 tutorial/journey/04-cmake.md 的全部命令:CMake 配置、构建、 +# 运行,验证 compile_commands.json,并复验增量构建语义。 +# tier: ci-matrix(产物名在 Windows 上可能带 .exe,脚本做了兼容) +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +SRC="$REPO_ROOT/src/journey/04-cmake" + +command -v cmake >/dev/null 2>&1 || { echo "FATAL: 没有 cmake,请回拍 00 补装" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT +cp -r "$SRC/." "$WORK/" +cd "$WORK" + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# 定位产物:Linux/macOS 是 build/hello,部分 Windows 生成器是 hello.exe +find_bin() { + for cand in build/hello build/hello.exe build/Debug/hello.exe build/Release/hello.exe; do + [ -e "$cand" ] && { printf '%s' "$cand"; return 0; } + done + return 1 +} + +# ═══ 配置 + 构建 + 运行 ═══ +banner "cmake -S -B:配置(生成构建系统)" +cmake -S . -B build | tail -4 + +banner "cmake --build:构建" +cmake --build build | tail -8 + +BIN="$(find_bin)" || { echo "FATAL: 没找到构建产物 hello" >&2; exit 1; } +echo "产物: $BIN" +# 运行:./build/hello(Windows 生成器的产物名可能带 .exe,由上面的 find_bin 解析) + +banner "运行" +./"$BIN" +./"$BIN" | grep -q 'journey beat 04: v0.4.0' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } + +# ═══ compile_commands.json:给编辑器的那枚接口 ═══ +banner "compile_commands.json" +ls -l build/compile_commands.json +grep -q 'util\.c' build/compile_commands.json \ + || { echo "FATAL: compile_commands.json 里没有 util.c" >&2; exit 1; } + +# ═══ 增量构建:CMake 记着拍 03 那本账 ═══ +banner "touch src/util.h 之后再构建" +touch src/util.h +out="$(cmake --build build 2>&1)" +printf '%s\n' "$out" +printf '%s\n' "$out" | grep -q 'Building C object.*util\.c' \ + || { echo "FATAL: util.h 变了,util.c 没有重编" >&2; exit 1; } +printf '%s\n' "$out" | grep -q 'Building C object.*main\.c' \ + || { echo "FATAL: util.h 变了,main.c 没有重编" >&2; exit 1; } + +banner "什么都不动,再构建一次" +out="$(cmake --build build 2>&1)" +printf '%s\n' "$out" +if printf '%s\n' "$out" | grep -q 'Building C object'; then + echo "FATAL: 没有改动时不应重编" >&2 + exit 1 +fi + +echo +echo "✅ 拍 04 · 工程化 —— 全部断言通过" diff --git a/scripts/journey/05-cross.sh b/scripts/journey/05-cross.sh new file mode 100755 index 0000000..278686e --- /dev/null +++ b/scripts/journey/05-cross.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +# ── 拍 05 · 搬家:交叉编译 ────────────────────────────────────── +# 重放 tutorial/journey/05-cross.md 的全部命令:同一份源码交给 +# arm-none-eabi 工具链,对比架构产物,并验证「宿主机跑不了」。 +# tier: ci-linux 起步(ubuntu runner 可 apt 装 gcc-arm-none-eabi) +# +# 工具链安装指引(拍 00 体检的建议工具,现在该装了): +# Ubuntu/Debian: sudo apt install gcc-arm-none-eabi +# Arch: sudo pacman -S arm-none-eabi-gcc +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +SRC="$REPO_ROOT/src/journey/05-cross" + +command -v gcc >/dev/null 2>&1 || { echo "FATAL: 没有 gcc" >&2; exit 1; } +command -v arm-none-eabi-gcc >/dev/null 2>&1 \ + || { echo "FATAL: 没有 arm-none-eabi-gcc,安装指引见本文件头部注释" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT +cd "$WORK" +cp "$SRC/main.c" "$SRC/util.c" "$SRC/util.h" . + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# ═══ 同一个 gcc,不同的目标 ═══ +banner "两个 dumpmachine:编译器各自身后的目标机" +gcc -dumpmachine +arm-none-eabi-gcc -dumpmachine + +assert_dump() { # 断言:目标三元组应以 want 开头(各发行版中段可有可无) + local tool="$1" want="$2" + got="$("$tool" -dumpmachine)" + case "$got" in + "$want"*) ;; + *) echo "FATAL: $tool -dumpmachine = $got,期望 $want 前缀" >&2; exit 1 ;; + esac +} +assert_dump gcc x86_64 +assert_dump arm-none-eabi-gcc arm-none-eabi + +# ═══ 交叉编译,逐段走 ═══ +banner "交叉编译:编目标文件" +arm-none-eabi-gcc -c main.c -o main.o +arm-none-eabi-gcc -c util.c -o util.o + +banner "交叉链接(--specs=rdimon.specs:printf 的裸机后端)" +arm-none-eabi-gcc main.o util.o --specs=rdimon.specs -o hello.elf + +banner "架构对比:同一份 main.c,两个世界" +gcc -c main.c -o main-host.o +objdump -f main-host.o +arm-none-eabi-objdump -f main.o + +# 断言:两份目标文件架构不同,ARM 版真的是 arm +objdump -f main-host.o | grep -q 'x86-64' || { echo "FATAL: 宿主目标文件架构异常" >&2; exit 1; } +arm-none-eabi-objdump -f main.o | grep -q 'architecture: arm' \ + || { echo "FATAL: 交叉目标文件架构不是 arm" >&2; exit 1; } + +arm-none-eabi-readelf -h hello.elf | grep -E 'Class|Machine' + +banner "ELF → 裸二进制" +arm-none-eabi-objcopy -O binary hello.elf hello.bin +ls -l hello.elf hello.bin + +# 断言:.bin 是从 .elf 里抠出的裸字节,一定更小 +elf_size="$(stat -c %s hello.elf)" +bin_size="$(stat -c %s hello.bin)" +[ "$bin_size" -lt "$elf_size" ] \ + || { echo "FATAL: hello.bin($bin_size) 应当比 hello.elf($elf_size) 小" >&2; exit 1; } + +banner "在宿主机上跑它?试试" +set +e +out="$(./hello.elf 2>&1)" +rc=$? +set -e +printf '%s\n' "$out" +if [ "$rc" -eq 0 ]; then + echo "FATAL: ARM 程序不应该能在 x86 宿主机上运行成功" >&2 + exit 1 +fi + +echo +echo "✅ 拍 05 · 搬家 —— 全部断言通过(心脏造好了,还差身体)" diff --git a/scripts/journey/06-qemu-uart.sh b/scripts/journey/06-qemu-uart.sh new file mode 100755 index 0000000..5305805 --- /dev/null +++ b/scripts/journey/06-qemu-uart.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +# ── 拍 06 · 没有屏幕的机器 ────────────────────────────────────── +# 重放 tutorial/journey/06-qemu-uart.md 的全部命令:裸机构建、 +# QEMU 运行、串口证据与 expected-serial.txt 全量比对、gdbstub 远程调试。 +# tier: ci-linux(ubuntu:apt 装 gcc-arm-none-eabi + qemu-system-arm) +# +# 工具安装指引(Ubuntu): +# sudo apt install gcc-arm-none-eabi qemu-system-arm gdb +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +SRC="$REPO_ROOT/src/journey/06-qemu-uart" + +command -v arm-none-eabi-gcc >/dev/null 2>&1 || { echo "FATAL: 缺 arm-none-eabi-gcc(拍 05 已装过)" >&2; exit 1; } +command -v qemu-system-arm >/dev/null 2>&1 || { echo "FATAL: 缺 qemu-system-arm,安装指引见本文件头部注释" >&2; exit 1; } +command -v gdb >/dev/null 2>&1 || { echo "FATAL: 缺 gdb" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT +cd "$WORK" +cp "$SRC/startup.c" "$SRC/main.c" "$SRC/linker.ld" "$SRC/expected-serial.txt" . + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# ═══ 构建:点名 CPU,自己带链接脚本 ═══ +banner "交叉编译(点名 cortex-m3 / thumb-2)" +arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2 startup.c -o startup.o +arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2 main.c -o main.o + +banner "链接(-nostdlib:这次谁都不借)" +arm-none-eabi-gcc -nostdlib -T linker.ld startup.o main.o -o hello.elf + +arm-none-eabi-objdump -f hello.elf +arm-none-eabi-objdump -f hello.elf | grep -q 'architecture: arm' \ + || { echo "FATAL: 产物架构不是 arm" >&2; exit 1; } +arm-none-eabi-nm hello.elf | grep -q ' T main' || { echo "FATAL: 缺 main 符号" >&2; exit 1; } + +arm-none-eabi-objcopy -O binary hello.elf hello.bin +ls -l hello.elf hello.bin + +# 断言:没有 newlib/半主机拖家带口,镜像应当轻装 +bin_size="$(stat -c %s hello.bin)" +[ "$bin_size" -lt 4096 ] \ + || { echo "FATAL: 裸机镜像 $bin_size 字节,超出预期(应轻装)" >&2; exit 1; } + +# ═══ 运行:串口就是这台机器唯一的嘴 ═══ +banner "QEMU:上电(5 秒后关机)" +set +e +timeout 5 qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none \ + -kernel hello.elf > serial.txt 2> qemu.err +rc=$? +set -e +if [ "$rc" -ne 124 ] && [ "$rc" -ne 0 ]; then + echo "FATAL: QEMU 异常退出(rc=$rc)" >&2; cat qemu.err >&2; exit 1 +fi + +echo "── 串口输出 ──" +cat serial.txt + +# ═══ 证据落袋:与 expected-serial.txt 全量比对 ═══ +banner "diff:串口输出 vs expected-serial.txt" +if diff -u expected-serial.txt serial.txt; then + echo "两份逐字节一致" +else + echo "FATAL: 串口输出与期望不符" >&2 + exit 1 +fi + +# ═══ 远程调试:拍 02 的伏笔在此兑现 ═══ +banner "gdbstub:target remote,隔空断点" +GDB_PORT=12345 # 固定端口,正文命令逐字可核 +qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none \ + -kernel hello.elf -S -gdb tcp::12345 > /dev/null 2>&1 & +QEMU_PID=$! +cleanup_qemu() { kill "$QEMU_PID" 2>/dev/null || true; } +trap cleanup_qemu EXIT +sleep 1 +set +e +timeout 20 gdb -q -batch -iex 'set debuginfod enabled off' \ + -ex "target remote localhost:12345" \ + -ex 'break main' \ + -ex 'continue' \ + -ex 'bt' \ + hello.elf | tee gdb.log +gdb_rc=$? +set -e +cleanup_qemu +trap 'rm -rf "$WORK"' EXIT +if [ "$gdb_rc" -ne 0 ]; then + echo "FATAL: 远程调试会话失败(rc=$gdb_rc)" >&2 + exit 1 +fi + +grep -q 'Breakpoint 1, ' gdb.log || { echo "FATAL: 远程断点未命中" >&2; exit 1; } +grep -Eq '#0 +main' gdb.log || { echo "FATAL: 回溯缺 main 帧" >&2; exit 1; } +grep -q 'Reset_Handler' gdb.log || { echo "FATAL: 连接时应先停在复位入口" >&2; exit 1; } + +echo +echo "✅ 拍 06 · 没有屏幕的机器 —— 全部断言通过(终点事件完成)" diff --git a/scripts/journey/07-git.sh b/scripts/journey/07-git.sh new file mode 100755 index 0000000..3cb5829 --- /dev/null +++ b/scripts/journey/07-git.sh @@ -0,0 +1,162 @@ +#!/usr/bin/env bash +# ── 拍 07 · 记录旅程 ──────────────────────────────────────────── +# 重放 tutorial/journey/07-git.md 的全部命令:在临时目录里 +# 从零建仓、改坏再救回、制造并解决冲突、打上里程碑 tag。 +# tier: ci-matrix +set -euo pipefail + +command -v git >/dev/null 2>&1 || { echo "FATAL: 没有 git" >&2; exit 1; } + +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +# ═══ 建仓:第一份家业 ═══ +banner "git init:从零建仓" +cd "$WORK" +git init -b main box +cd box +git config user.name "Journey Learner" +git config user.email "learner@example.com" + +cat > README.md <<'EOF' +# box —— 一个程序的一生 + +主线实验仓:EmbedBox journey 的动手记录。 + +## 状态 + +- 拍 06:串口输出已捕获(证据在 expected-serial.txt) +EOF + +cat > hello.c <<'EOF' +#include + +int main(void) +{ + printf("hello, EmbedBox!\n"); + return 0; +} +EOF + +banner "git status:两件新家当还没登记" +git status + +banner "登记 + 第一笔户口" +git add README.md hello.c +git commit -m "hello: journey starts" + +# ═══ 长大:改动与差异 ═══ +banner "程序又长大了一行" +cat > hello.c <<'EOF' +#include + +int main(void) +{ + printf("hello, EmbedBox!\n"); + printf("journey: v0.2\n"); + return 0; +} +EOF + +banner "git diff:改了什么,一目了然" +git diff + +git diff | grep -q 'journey: v0.2' || { echo "FATAL: diff 里应当有新行" >&2; exit 1; } + +banner "git add + 第二笔户口" +git add hello.c +git commit -m "hello: add version line" + +banner "git log --oneline:户口本" +git log --oneline +[ "$(git log --oneline | wc -l)" -ge 2 ] || { echo "FATAL: 应当至少两笔提交" >&2; exit 1; } + +# ═══ 改坏了?历史来救 ═══ +banner "手滑改坏,先别慌" +cat > hello.c <<'EOF' +#include + +int main(void) +{ + /* 手滑:整个 main 被清空了 */ + return 0; +} +EOF +git diff --stat + +banner "git restore:从最近一笔户口恢复" +git restore hello.c +grep -q 'journey: v0.2' hello.c || { echo "FATAL: 恢复失败" >&2; exit 1; } +echo "hello.c 已恢复,文件内容和最近一次提交一致" + +# ═══ 分支:在不打扰主线的地方折腾 ═══ +banner "开分支改 README" +git checkout -b polish-readme +cat > README.md <<'EOF' +# box —— 一个程序的一生 + +主线实验仓:EmbedBox journey 的动手记录。 + +## 状态 + +- 拍 06:串口输出已验证 diff 一致 +EOF +git add README.md +git commit -m "readme: sharpen beat-06 note" + +banner "回主线,改同一行" +git checkout main +cat > README.md <<'EOF' +# box —— 一个程序的一生 + +主线实验仓:EmbedBox journey 的动手记录。 + +## 状态 + +- 拍 06:串口输出已捕获,连 \r\n 都是亲手发的 +EOF +git add README.md +git commit -m "readme: enrich beat-06 note" + +# ═══ 合并:冲突,以及它的解法 ═══ +banner "git merge:两边动了同一行" +set +e +out="$(git merge polish-readme 2>&1)" +rc=$? +set -e +printf '%s\n' "$out" +if [ "$rc" -eq 0 ]; then + echo "FATAL: 预期冲突,却合并成功了" >&2 + exit 1 +fi +printf '%s\n' "$out" | grep -q 'CONFLICT (content)' \ + || { echo "FATAL: 输出缺 CONFLICT 标记" >&2; exit 1; } + +banner "git status:冲突现场" +git status + +banner "手工裁决,然后收尾" +cat > README.md <<'EOF' +# box —— 一个程序的一生 + +主线实验仓:EmbedBox journey 的动手记录。 + +## 状态 + +- 拍 06:串口输出已捕获,且与 expected-serial.txt 逐字节一致 +EOF +git add README.md +git commit -m "merge polish-readme: pick the precise wording" + +# ═══ 里程碑:tag ═══ +banner "打上里程碑" +git tag v0.1-journey +git tag +git tag | grep -q 'v0.1-journey' || { echo "FATAL: tag 缺失" >&2; exit 1; } + +git log --oneline + +echo +echo "✅ 拍 07 · 记录旅程 —— 全部断言通过" diff --git a/scripts/journey/08-vscode.sh b/scripts/journey/08-vscode.sh new file mode 100755 index 0000000..8488328 --- /dev/null +++ b/scripts/journey/08-vscode.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# ── 拍 08 · 编辑器接线 ────────────────────────────────────────── +# tier: manual —— 编辑器交互无法无人值守重放,本脚本只做机械部分: +# 配置文件存在性 + JSON 合法性;其余为人工走查清单(见正文末)。 +# 用 VS Code 打开工程:code . +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +DOTVS="$REPO_ROOT/src/journey/08-vscode/.vscode" + +command -v node >/dev/null 2>&1 || { echo "FATAL: 缺 node(本仓库构建本身就需要它)" >&2; exit 1; } + +banner() { printf '\n──────── %s ────────\n' "$*"; } + +banner "机械检查:三份配置存在且是合法 JSON" +for f in settings.json launch.json tasks.json; do + [ -e "$DOTVS/$f" ] || { echo "FATAL: 缺 $DOTVS/$f" >&2; exit 1; } + node -e "JSON.parse(require('fs').readFileSync('$DOTVS/$f','utf8'))" + echo " [ok] $f" +done + +banner "机械检查:launch 引用的 preLaunchTask 在 tasks.json 里存在" +task_label="$(node -e "console.log(JSON.parse(require('fs').readFileSync('$DOTVS/launch.json','utf8')).configurations[0].preLaunchTask)")" +node -e "const ts=JSON.parse(require('fs').readFileSync('$DOTVS/tasks.json','utf8')).tasks; process.exit(ts.some(t=>t.label==='$task_label')?0:1)" \ + || { echo "FATAL: tasks.json 里没有 '$task_label'" >&2; exit 1; } +echo " [ok] preLaunchTask '$task_label' 可解析" + +banner "人工走查清单(编辑器交互,需真人执行)" +cat <<'EOF' + [ ] 在拍 04 的工程根目录放入本目录的 .vscode/,code . 打开 + [ ] IntelliSense 生效:src/util.c 里 greet 跳转定义可用,无红线 + [ ] F5 触发 cmake-build 并启动 gdb 会话,断点可命中 + [ ] Remote-WSL(Windows 用户):左下角绿色角标显示 WSL 发行版 +EOF + +echo +echo "✅ 拍 08 · 编辑器接线 —— 机械部分通过;人工部分见清单" diff --git a/scripts/lint.sh b/scripts/lint.sh new file mode 100755 index 0000000..5417caf --- /dev/null +++ b/scripts/lint.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# 正文命令与配对脚本的一致性检查(铁律 2:命令即引用)。 +# +# 规则:tutorial/journey/NN-x.md 的 ```bash 围栏里,每条非注释命令行 +# 必须逐字出现在 scripts/journey/NN-x.sh 中(containment 匹配)。 +# 约定:命令放 ```bash 围栏;输出/文件内容放无语言或 ```c/```text 围栏, +# 本脚本只检查 bash/sh/shell 围栏。 +# 模式:默认 warn(只报告);LINT_STRICT=1 时有告警即红。 +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +STRICT="${LINT_STRICT:-0}" + +shopt -s nullglob +docs=("$REPO_ROOT"/tutorial/journey/*.md) +shopt -u nullglob + +if [ "${#docs[@]}" -eq 0 ]; then + echo "[lint] tutorial/journey/ 下暂时没有正文" + exit 0 +fi + +warnings=0 +checked=0 + +for md in "${docs[@]}"; do + base="$(basename "$md" .md)" + # index 页是导览,不配脚本 + [ "$base" = "index" ] && continue + + script="$REPO_ROOT/scripts/journey/$base.sh" + if [ ! -e "$script" ]; then + # manual 级允许无配对脚本(编辑器交互/需硬件),但必须在 frontmatter 声明 tier + if grep -q '^tier: *manual' "$md"; then + continue + fi + echo "[lint] ⚠ $base.md: 缺配对脚本 scripts/journey/$base.sh" + warnings=$((warnings + 1)) + continue + fi + + # 抽取 bash 围栏中的命令行,落到临时文件再逐条核对 + cmds_tmp="$(mktemp)" + trap 'rm -f "$cmds_tmp"' EXIT + awk ' + /^```(bash|sh|shell)[[:space:]]*$/ { inblock = 1; next } + /^```/ { inblock = 0; next } + inblock { + line = $0 + sub(/^\$ /, "", line) # 去掉手写的提示符 + if (line ~ /^[[:space:]]*#/) next # 注释行 + if (line ~ /^[[:space:]]*$/) next # 空行 + if (line ~ /\\$/) next # 续行:v1 先跳过 + print line + } + ' "$md" > "$cmds_tmp" + + while IFS= read -r cmd; do + checked=$((checked + 1)) + if ! grep -Fq -- "$cmd" "$script"; then + echo "[lint] ⚠ $base.md: 命令未见于配对脚本 → $cmd" + warnings=$((warnings + 1)) + fi + done < "$cmds_tmp" +done + +echo +echo "[lint] 核对命令 $checked 条,告警 $warnings 条(模式:$([ "$STRICT" = 1 ] && echo strict || echo warn))" +if [ "$STRICT" = 1 ] && [ "$warnings" -gt 0 ]; then + exit 1 +fi +exit 0 diff --git a/scripts/run-all.sh b/scripts/run-all.sh new file mode 100755 index 0000000..294fa15 --- /dev/null +++ b/scripts/run-all.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# EmbedBox 验证总入口:顺序重放全部主线脚本。CI 与本地共用。 +# 任何一个脚本红,总出口码为红。 +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +shopt -s nullglob +scripts=("$REPO_ROOT"/scripts/journey/*.sh) +shopt -u nullglob + +if [ "${#scripts[@]}" -eq 0 ]; then + echo "[run-all] scripts/journey/ 下暂时没有脚本" + exit 0 +fi + +fail=0 +for script in "${scripts[@]}"; do + echo + echo ">>> 重放 $(basename "$script")" + if bash "$script"; then + echo "<<< $(basename "$script") 绿" + else + echo "<<< $(basename "$script") 红" >&2 + fail=1 + fi +done + +exit "$fail" diff --git a/src/journey/01-elf/hello.c b/src/journey/01-elf/hello.c new file mode 100644 index 0000000..7529703 --- /dev/null +++ b/src/journey/01-elf/hello.c @@ -0,0 +1,10 @@ +/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 + * 对应教程:tutorial/journey/01-elf.md + */ +#include + +int main(void) +{ + printf("hello, EmbedBox!\n"); + return 0; +} diff --git a/src/journey/02-gdb/buggy.c b/src/journey/02-gdb/buggy.c new file mode 100644 index 0000000..73c4b26 --- /dev/null +++ b/src/journey/02-gdb/buggy.c @@ -0,0 +1,21 @@ +/* 拍 02 的病号:越界读一颗,答案就歪了 + * 对应教程:tutorial/journey/02-gdb.md + */ +#include + +static int scale(int v, int factor) +{ + return v * factor; +} + +int main(void) +{ + int data[4] = {1, 2, 3, 4}; + int total = 0; + + for (int i = 0; i <= 4; i++) { /* 病根:<=,data[4] 不是我们的 */ + total += scale(data[i], 2); + } + printf("total = %d\n", total); + return 0; +} diff --git a/src/journey/03-make/.gitignore b/src/journey/03-make/.gitignore new file mode 100644 index 0000000..4b312d6 --- /dev/null +++ b/src/journey/03-make/.gitignore @@ -0,0 +1,4 @@ +# 学习者在本目录动手实验的产物 +*.o +hello +hello.exe diff --git a/src/journey/03-make/Makefile b/src/journey/03-make/Makefile new file mode 100644 index 0000000..be1d6b5 --- /dev/null +++ b/src/journey/03-make/Makefile @@ -0,0 +1,20 @@ +# 主线拍 03 · 程序长大 —— 最终 Makefile:变量 + 模式规则 + 头文件依赖 +# 对应教程:tutorial/journey/03-make.md + +CC := gcc +CFLAGS := -Wall -Wextra -g +TARGET := hello +OBJS := main.o util.o + +.PHONY: all clean +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) -o $@ $^ + +# 模式规则:任何 .o 都从同名 .c 编出来,并且都依赖头文件 +%.o: %.c util.h + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + rm -f $(TARGET) $(OBJS) diff --git a/src/journey/03-make/main.c b/src/journey/03-make/main.c new file mode 100644 index 0000000..fc994b8 --- /dev/null +++ b/src/journey/03-make/main.c @@ -0,0 +1,12 @@ +/* 主线拍 03 · 程序长大 —— 主角长成三个文件后的入口 + * 对应教程:tutorial/journey/03-make.md + */ +#include +#include "util.h" + +int main(void) +{ + greet("EmbedBox"); + printf("journey beat 03: %s\n", version()); + return 0; +} diff --git a/src/journey/03-make/util.c b/src/journey/03-make/util.c new file mode 100644 index 0000000..e7344a6 --- /dev/null +++ b/src/journey/03-make/util.c @@ -0,0 +1,12 @@ +#include +#include "util.h" + +void greet(const char *who) +{ + printf("hello, %s!\n", who); +} + +const char *version(void) +{ + return "v0.3.0"; +} diff --git a/src/journey/03-make/util.h b/src/journey/03-make/util.h new file mode 100644 index 0000000..3251b42 --- /dev/null +++ b/src/journey/03-make/util.h @@ -0,0 +1,8 @@ +#ifndef UTIL_H +#define UTIL_H + +/* greet 与 version 从 main.c 里搬了出来,住进自己的家 */ +void greet(const char *who); +const char *version(void); + +#endif /* UTIL_H */ diff --git a/src/journey/04-cmake/CMakeLists.txt b/src/journey/04-cmake/CMakeLists.txt new file mode 100644 index 0000000..e0a45b8 --- /dev/null +++ b/src/journey/04-cmake/CMakeLists.txt @@ -0,0 +1,16 @@ +# 主线拍 04 · 工程化 —— 同一个程序,搬进 CMake 工程 +# 对应教程:tutorial/journey/04-cmake.md +cmake_minimum_required(VERSION 3.16) + +project(journey_box C) + +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# util 从「几个文件」升格为库:接口(include)随库走,消费者自动可见 +add_library(util STATIC src/util.c) +target_include_directories(util PUBLIC src) + +add_executable(hello src/main.c) +target_link_libraries(hello PRIVATE util) diff --git a/src/journey/04-cmake/src/main.c b/src/journey/04-cmake/src/main.c new file mode 100644 index 0000000..c619ebc --- /dev/null +++ b/src/journey/04-cmake/src/main.c @@ -0,0 +1,12 @@ +/* 主线拍 04 · 工程化 —— 库与应用分离后的入口 + * 对应教程:tutorial/journey/04-cmake.md + */ +#include +#include "util.h" + +int main(void) +{ + greet("EmbedBox"); + printf("journey beat 04: %s\n", version()); + return 0; +} diff --git a/src/journey/04-cmake/src/util.c b/src/journey/04-cmake/src/util.c new file mode 100644 index 0000000..21d771a --- /dev/null +++ b/src/journey/04-cmake/src/util.c @@ -0,0 +1,12 @@ +#include +#include "util.h" + +void greet(const char *who) +{ + printf("hello, %s!\n", who); +} + +const char *version(void) +{ + return "v0.4.0"; +} diff --git a/src/journey/04-cmake/src/util.h b/src/journey/04-cmake/src/util.h new file mode 100644 index 0000000..aee68be --- /dev/null +++ b/src/journey/04-cmake/src/util.h @@ -0,0 +1,8 @@ +#ifndef UTIL_H +#define UTIL_H + +/* 拍 04:util 升格为静态库,接口不变 */ +void greet(const char *who); +const char *version(void); + +#endif /* UTIL_H */ diff --git a/src/journey/05-cross/main.c b/src/journey/05-cross/main.c new file mode 100644 index 0000000..8bc593c --- /dev/null +++ b/src/journey/05-cross/main.c @@ -0,0 +1,12 @@ +/* 主线拍 05 · 搬家 —— 同一份源码,换个目标机 + * 对应教程:tutorial/journey/05-cross.md + */ +#include +#include "util.h" + +int main(void) +{ + greet("EmbedBox"); + printf("journey beat 05: %s\n", version()); + return 0; +} diff --git a/src/journey/05-cross/util.c b/src/journey/05-cross/util.c new file mode 100644 index 0000000..12dc71e --- /dev/null +++ b/src/journey/05-cross/util.c @@ -0,0 +1,12 @@ +#include +#include "util.h" + +void greet(const char *who) +{ + printf("hello, %s!\n", who); +} + +const char *version(void) +{ + return "v0.5.0"; +} diff --git a/src/journey/05-cross/util.h b/src/journey/05-cross/util.h new file mode 100644 index 0000000..3ed3bee --- /dev/null +++ b/src/journey/05-cross/util.h @@ -0,0 +1,8 @@ +#ifndef UTIL_H +#define UTIL_H + +/* 接口不变 —— 搬家不该惊动住户 */ +void greet(const char *who); +const char *version(void); + +#endif /* UTIL_H */ diff --git a/src/journey/06-qemu-uart/.gitignore b/src/journey/06-qemu-uart/.gitignore new file mode 100644 index 0000000..b59a236 --- /dev/null +++ b/src/journey/06-qemu-uart/.gitignore @@ -0,0 +1,6 @@ +# 学习者在本目录动手实验的产物 +*.o +hello.elf +hello.bin +serial.txt +qemu.err diff --git a/src/journey/06-qemu-uart/expected-serial.txt b/src/journey/06-qemu-uart/expected-serial.txt new file mode 100644 index 0000000..86b2e97 --- /dev/null +++ b/src/journey/06-qemu-uart/expected-serial.txt @@ -0,0 +1,2 @@ +hello, EmbedBox! +journey beat 06: no OS, just UART (v0.6.0) diff --git a/src/journey/06-qemu-uart/linker.ld b/src/journey/06-qemu-uart/linker.ld new file mode 100644 index 0000000..9eee2e1 --- /dev/null +++ b/src/journey/06-qemu-uart/linker.ld @@ -0,0 +1,40 @@ +/* 主线拍 06 · 没有屏幕的机器 —— 程序的住址由这张纸决定 + * 对应教程:tutorial/journey/06-qemu-uart.md + * 目标:QEMU mps2-an385 —— 代码区在 0x00000000,RAM 在 0x20000000 + */ +ENTRY(Reset_Handler) + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 512K +} + +_estack = ORIGIN(RAM) + LENGTH(RAM); /* 栈从 RAM 顶端向下长 */ + +SECTIONS +{ + .isr_vector : { + KEEP(*(.isr_vector)) /* 向量表必须是第一块 */ + } > FLASH + + .text : { + *(.text*) + *(.rodata*) + } > FLASH + + _sidata = LOADADDR(.data); /* .data:行李在 flash,人在 RAM */ + + .data : { + _sdata = .; + *(.data*) + _edata = .; + } > RAM AT > FLASH + + .bss : { + _sbss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > RAM +} diff --git a/src/journey/06-qemu-uart/main.c b/src/journey/06-qemu-uart/main.c new file mode 100644 index 0000000..517ed5a --- /dev/null +++ b/src/journey/06-qemu-uart/main.c @@ -0,0 +1,43 @@ +/* 主线拍 06 · 没有屏幕的机器:串口是我们唯一的嘴 + * 对应教程:tutorial/journey/06-qemu-uart.md + * 目标板:QEMU mps2-an385(Cortex-M3),UART0 = CMSDK APB UART + */ +#include + +#define UART0_BASE 0x40004000UL +#define UART_DATA (*(volatile uint32_t *)(UART0_BASE + 0x00)) +#define UART_STATE (*(volatile uint32_t *)(UART0_BASE + 0x04)) +#define UART_CTRL (*(volatile uint32_t *)(UART0_BASE + 0x08)) +#define UART_BAUDDIV (*(volatile uint32_t *)(UART0_BASE + 0x0C)) + +#define UART_STATE_TXBF (1u << 0) /* 发送缓冲满:满了就等 */ +#define UART_CTRL_TXEN (1u << 0) /* 打开发送 */ + +static void uart_init(void) +{ + UART_BAUDDIV = 16; /* QEMU 不仿真波特率时序;真板按 PCLK/baud 算 */ + UART_CTRL = UART_CTRL_TXEN; /* 我们只需要说话,不需要听 */ +} + +static void uart_putc(char c) +{ + while (UART_STATE & UART_STATE_TXBF) { } + UART_DATA = (uint32_t)c; +} + +static void uart_puts(const char *s) +{ + while (*s) { + if (*s == '\n') + uart_putc('\r'); /* 串口世界的礼貌:\n 前面补一个 \r */ + uart_putc(*s++); + } +} + +int main(void) +{ + uart_init(); + uart_puts("hello, EmbedBox!\n"); + uart_puts("journey beat 06: no OS, just UART (v0.6.0)\n"); + for (;;) { } /* 裸机主循环:永远不许返回 */ +} diff --git a/src/journey/06-qemu-uart/startup.c b/src/journey/06-qemu-uart/startup.c new file mode 100644 index 0000000..be90816 --- /dev/null +++ b/src/journey/06-qemu-uart/startup.c @@ -0,0 +1,55 @@ +/* 主线拍 06 · 出生证明:向量表 + 复位流程 + * 对应教程:tutorial/journey/06-qemu-uart.md + * 目标板:QEMU mps2-an385(Cortex-M3) + */ +#include +#include + +/* gcc 会把「抄写循环」识别成 memcpy 调用、把「清零循环」识别成 memset 调用; + * -nostdlib 的世界里没有 libc,所以裸机工程自带这两个最小实现。 */ +void *memcpy(void *dst, const void *src, size_t n) +{ + unsigned char *d = dst; + const unsigned char *s = src; + while (n--) *d++ = *s++; + return dst; +} + +void *memset(void *dst, int c, size_t n) +{ + unsigned char *d = dst; + while (n--) *d++ = (unsigned char)c; + return dst; +} + +/* 这些地址全部由链接脚本(linker.ld)定义 */ +extern uint32_t _estack; /* 初始栈顶 */ +extern uint32_t _sidata; /* .data 的行李在 flash 里的位置 */ +extern uint32_t _sdata; /* .data 在 RAM 里的家 */ +extern uint32_t _edata; +extern uint32_t _sbss; /* .bss 在 RAM 里的家 */ +extern uint32_t _ebss; + +int main(void); + +void Reset_Handler(void) +{ + uint32_t *src = &_sidata; + uint32_t *dst = &_sdata; + while (dst < &_edata) /* .data:把行李从 flash 搬进 RAM */ + *dst++ = *src++; + + for (dst = &_sbss; dst < &_ebss; dst++) /* .bss:按合同清零 */ + *dst = 0; + + (void)main(); + for (;;) { } /* main 不该回来;回来了就原地罚站 */ +} + +/* Cortex-M 的向量表:第 0 项是初始栈顶,第 1 项是复位入口。 + * 硬件复位时自己读这张表,不需要咱们写一行汇编。 */ +__attribute__((section(".isr_vector"), used)) +const uintptr_t vector_table[] = { + (uintptr_t)&_estack, + (uintptr_t)Reset_Handler, +}; diff --git a/src/journey/08-vscode/.vscode/launch.json b/src/journey/08-vscode/.vscode/launch.json new file mode 100644 index 0000000..13adb92 --- /dev/null +++ b/src/journey/08-vscode/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) hello", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/hello", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "preLaunchTask": "cmake-build" + } + ] +} diff --git a/src/journey/08-vscode/.vscode/settings.json b/src/journey/08-vscode/.vscode/settings.json new file mode 100644 index 0000000..2d7b514 --- /dev/null +++ b/src/journey/08-vscode/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json", + "files.associations": { + "*.h": "c" + }, + "editor.insertSpaces": true, + "editor.tabSize": 4 +} diff --git a/src/journey/08-vscode/.vscode/tasks.json b/src/journey/08-vscode/.vscode/tasks.json new file mode 100644 index 0000000..ebfe2db --- /dev/null +++ b/src/journey/08-vscode/.vscode/tasks.json @@ -0,0 +1,12 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "cmake-build", + "type": "shell", + "command": "cmake --build build", + "group": { "kind": "build", "isDefault": true }, + "problemMatcher": ["$gcc"] + } + ] +} diff --git a/tutorial/index.md b/tutorial/index.md index c9fa5a5..0ee3a5d 100644 --- a/tutorial/index.md +++ b/tutorial/index.md @@ -1,40 +1,40 @@ --- layout: home title: EmbedBox -titleTemplate: 嵌入式开发通用工具链教程 +titleTemplate: 嵌入式中的 CSAPP · 共同实验工作台 hero: name: EmbedBox - text: 嵌入式通用工具链教程 - tagline: 不管走哪条嵌入式航线,都要先会用的工具——终端 / Git / Markdown / GCC / Make / CMake / GDB / 交叉编译 / 串口 / Docker / QEMU。 + text: 一个程序的一生 + tagline: 从 clean clone 到一份 CI 背书的串口运行证据——终端 / Git / GCC / Make / CMake / GDB / 交叉编译 / QEMU / 串口,在一条真实旅程里逐个学会。 actions: - theme: brand - text: 开始阅读 - link: /getting-started/toolchain-first + text: 走主线(推荐) + link: /journey/ - theme: alt - text: Git 完全指南 - link: /collaboration/git/ + text: 从第一拍开始 + link: /journey/00-env-check features: - - title: 前置认知 - details: 为什么先学工具、再碰芯片——工具链全景图与同组织各仓库的分工。 - link: /getting-started/ - - title: 开发环境 - details: WSL2 / Linux / 终端与 Shell 进阶(PATH、管道、权限、烧写)/ VS Code。 + - title: 主线 · 一个程序的一生 + details: 首刷推荐:一个会打招呼的小程序,被解剖、生病、长大、搬家、进入无屏机器、开口说话——十拍走通「构建→调试→交叉→QEMU→串口证据」全链条。 + link: /journey/ + - title: 环境与终端 + details: WSL2 / 终端与 PATH / VS Code 接线(旧域,待并入参考篇)。 link: /environment/ - title: 协作与文档 - details: Git 团队协作 + 内核 patch 邮件视角、Markdown 写 README / Kconfig / 设备树。 + details: Git 完全指南与 Markdown(旧域,待并入参考篇)。 link: /collaboration/ - title: 构建系统 - details: GCC 编译链接全流程到 objcopy 裸 .bin、Makefile、CMake 工具链文件。 + details: GCC / Make / CMake(旧域,待并入参考篇)。 link: /build-system/ - title: 调试 - details: GDB 从段错误到远程调试(target remote / openocd)、串口即嵌入式 stdout。 + details: GDB 与串口(旧域,待并入参考篇)。 link: /debugging/ - - title: 交叉编译与复现 - details: 两前缀与硬浮点 ABI、Docker 钉死工具链、QEMU 无硬件开发、硬件工具速查。 + - title: 模拟与交叉 + details: 交叉编译 / Docker / QEMU(旧域,待并入参考篇)。 link: /cross-compile/ --- -> EmbedBox 是 [Awesome-Embedded-Learning-Studio](https://github.com/Awesome-Embedded-Learning-Studio) 的通用工具教程仓库:只负责把工具教透,不替中心站做导航。 +> EmbedBox 是 [Awesome-Embedded-Learning-Studio](https://github.com/Awesome-Embedded-Learning-Studio) 的"嵌入式 CSAPP"与共同实验工作台:承担所有路线共同需要、恰好够用的基础嵌入式开发知识。每一拍的正文命令都被 `scripts/journey/` 的配对脚本在 CI 中逐字重放——你看到的输出是真跑出来的。 diff --git a/tutorial/journey/00-env-check.md b/tutorial/journey/00-env-check.md new file mode 100644 index 0000000..be05722 --- /dev/null +++ b/tutorial/journey/00-env-check.md @@ -0,0 +1,99 @@ +--- +title: 拍 00 · 环境体检:先确认机器活着 +order: 0 +verify: scripts/journey/00-env-check.sh +tier: ci-matrix +verified-on: WSL2(Arch)/ bash 5.3 / git 2.55 / gcc 16.1.1 / make 4.4.1;CI 矩阵 ubuntu-latest + windows-latest +--- + +# 拍 00 · 环境体检:先确认机器活着 + +欢迎来到主线第一拍。咱们刚把这个仓库 clone 下来,接下来十拍,咱们会陪一个会打招呼的小程序走过它的一生——出生、生病、长大、搬家、进入一台没有屏幕的机器。但在那之前,有一件更朴素的事:**确认咱们手上这台机器,干得了这些活。** + +这一拍没有任何新知识要背,目标只有一个:跑一份体检报告,读懂它,把缺的东西补上。 + +## 先得有一个能跑命令的地方 + +「终端」就是敲命令的地方。Linux 和 macOS 用户已经有了;Windows 用户请注意——嵌入式开发的主体生态在 Linux 侧,咱们不打算从第一天起就打游击,所以先给自己装一台 Linux:WSL2,Windows 官方的 Linux 子系统,开箱即用。在**管理员权限的 PowerShell** 里: + +```bash +wsl --install -d Ubuntu +``` + +装完重启,从开始菜单打开 Ubuntu,咱们会得到一个真正的 bash。此后本书说的「终端」,对 Windows 用户而言默认指 WSL 里的这扇窗;裸装 Linux 的朋友,开终端模拟器就行。 + +然后在终端里,先熟悉三条最原始的口令——「我是谁、我在哪、这里有什么」: + +```console +$ pwd +/home/you +$ ls +EmbedBox +$ cd EmbedBox +``` + +`pwd` 打印当前目录,`ls` 列出下面有什么,`cd` 走进去。就这三条,够咱们起步了。这一拍先不解释 shell 的更多花样,用到的时候咱们再学——工具永远是被问题逼出来的,这是全书的方法论。 + +## 跑体检 + +笔者给这一拍准备的「实验」不是代码,而是一份体检脚本,它就是本章的配对验证脚本: + +```bash +bash scripts/journey/00-env-check.sh +``` + +在咱们刚 clone 下来的仓库根目录跑它。下面是笔者这台机器的真实输出(注意第一行——笔者自己也是在 WSL2 里干活的): + +```text +──────── 机器与系统 ──────── +Linux DESKTOP-65DBAA7 6.18.33.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux +bash 5.3.15(1)-release + +──────── 必需工具(缺任何一个,体检就是红) ──────── + [ok] git -> /usr/sbin/git + [ok] gcc -> /usr/sbin/gcc + [ok] make -> /usr/sbin/make + +──────── 工具版本 ──────── +git version 2.55.0 +gcc (GCC) 16.1.1 20260728 +GNU Make 4.4.1 + +──────── 建议工具(现在缺不要紧,后面的拍会用到再装) ──────── + [ok] gdb + [ok] cmake + [ok] arm-none-eabi-gcc + [ok] qemu-system-arm +``` + +报告分三层,值得逐层读一遍。**机器与系统**告诉你内核和架构——后面拍 05 交叉编译时,「x86_64」这个字眼会变成故事的另一半。**必需工具**是全书的硬门槛:git(拉代码、记录旅程)、gcc(编译)、make(构建),缺任何一个,这一拍的体检就是红的。**建议工具**是后场的队员:gdb 拍 02 上场,cmake 拍 04,arm-none-eabi-gcc 和 qemu 拍 05/06——现在缺了完全不用慌。 + +缺什么就补什么。Ubuntu/Debian 用户一把梭: + +```bash +sudo apt install build-essential gdb cmake +``` + +Arch 用户对号入座 `sudo pacman -S base-devel gdb cmake`;交叉工具链和模拟器到拍 05 前再装也来得及(Ubuntu:`sudo apt install gcc-arm-none-eabi qemu-system-arm`)。这里先不展开每个包是什么——它们各自的章节会亲自介绍自己。 + +## 顺便学会一件救命的小事:command not found + +总有一天(大概率是今天晚上),咱们会敲出一个命令,终端冷冷回一句 `command not found`。别慌,三板斧: + +第一斧,**它装了吗**: + +```bash +which gcc +``` + +`which` 在 PATH 里找这个命令,找到了就打印它的位置,找不到就一声不吭。第二斧,**它在的地方 shell 知道吗**: + +```bash +echo "$PATH" +``` + +PATH 是 shell 的寻人启事列表,冒号分隔的一串目录。命令明明装了却报 not found,九成是它所在的目录不在这串列表里——拍 05 装完交叉工具链、拍 08 配编辑器时,你还会再遇到这个局面。第三斧,**名字对吗**:拼写、大小写、连字符,以及「我以为我装了」的自我怀疑。这三斧会陪咱们穿过全书,也会陪咱们穿过之后所有的嵌入式生涯。 + +## 下一站 + +机器活了,工具在位,咱们现在两手空空——正好,下一拍咱们从一行代码开始,亲眼看着它变成一个能跑的程序,再把这个程序拆开,看看「可执行文件」的肚子里到底装了什么。 diff --git a/tutorial/journey/01-elf.md b/tutorial/journey/01-elf.md new file mode 100644 index 0000000..59cdb6a --- /dev/null +++ b/tutorial/journey/01-elf.md @@ -0,0 +1,226 @@ +--- +title: 拍 01 · 源码→程序:看着它变,再拆开看 +order: 1 +verify: scripts/journey/01-elf.sh +tier: ci-matrix +verified-on: WSL2(Arch)/ gcc 16.1.1;CI 矩阵 ubuntu-latest + windows-latest +--- + +# 拍 01 · 源码→程序:看着它变,再拆开看 + +主角出场了。它现在是这个样子,一行 `hello.c`,住在 [src/journey/01-elf/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/01-elf/): + +```c +/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 + * 对应教程:tutorial/journey/01-elf.md + */ +#include + +int main(void) +{ + printf("hello, EmbedBox!\n"); + return 0; +} +``` + +一行命令就能让它跑起来: + +```bash +gcc hello.c -o hello +./hello +``` + +```text +hello, EmbedBox! +``` + +跑起来了,然后呢?如果咱们此刻的心情是「能跑就行」,那这一拍就是为咱们准备的——因为**`gcc` 这一个命令里,其实住着四个工具**,它们接力把文本变成了机器码。接下来咱们把这四棒拆开,一棒一棒亲眼看。 + +## 四棒接力:预处理器、编译器、汇编器、链接器 + +### 第一棒:预处理器 + +`-E` 让 gcc 在预处理之后立刻停下,把结果吐成 `.i` 文件: + +```bash +gcc -E hello.c -o hello.i +wc -l hello.i +``` + +```text +848 hello.i +``` + +一行 `#include` 变成了八百多行。看看开头: + +```bash +head -12 hello.i +``` + +```text +# 0 "hello.c" +# 0 "" +# 0 "" +# 1 "/usr/include/stdc-predef.h" 1 3 +# 0 "" 2 +# 1 "hello.c" + + + +# 1 "/usr/include/stdio.h" 1 3 +# 28 "/usr/include/stdio.h" 3 +# 1 "/usr/include/bits/libc-header-start.h" 1 3 +``` + +预处理器干的事朴素得可爱:**把 `#include` 的文件原样抄进来,把 `#define` 的名字换成值**。那些 `# 1 "..."` 行是行号标记,告诉编译器「接下来这段来自哪个文件第几行」——以后咱们看到编译报错指向头文件深处,靠的就是它们指的路。咱们的 hello.c 本体,在这八百多行的最末尾。 + +### 第二棒:编译器 + +`-S` 停在汇编之后,产出 `.s`: + +```bash +gcc -S hello.c +``` + +看看 `main` 部分(咱们用 `grep` 先定位它在第几行): + +```bash +grep -n 'main:' hello.s +``` + +```text +9:main: +``` + +```text +main: +.LFB0: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + leaq .LC0(%rip), %rax + movq %rax, %rdi + call puts@PLT + movl $0, %eax + popq %rbp + .cfi_def_cfa 7, 8 + ret +``` + +停一下,这里有个彩蛋:**咱们明明写的是 `printf`,汇编里却是 `call puts@PLT`。** 这是编译器干的好事——`printf("...\n")` 这种单参数、以换行结尾的调用,输出效果和 `puts` 一模一样,而 `puts` 更快(不用解析格式串)。编译器在 `-O0` 下也会做这类小替换。这个细节顺便提醒咱们:汇编层看到的才是真相,源码只是愿望。那些 `.cfi_*` 是调试 unwind 信息的骨架,现在可以无视。 + +### 第三棒:汇编器 + +`-c` 停在汇编之后,产出目标文件 `.o`: + +```bash +gcc -c hello.c +objdump -f hello.o +``` + +```text + +hello.o: file format elf64-x86-64 +architecture: i386:x86-64, flags 0x00000011: +HAS_RELOC, HAS_SYMS +start address 0x0000000000000000 +``` + +现在它已经是货真价实的机器码了,但注意 flags 里那个 **`HAS_RELOC`**:「含有待重定位项」。翻译成人话:这份机器码里还有一堆空位,等着链接器把最终地址填进去。start address 是 0——它自己都不知道自己将来会被放到内存的哪里。 + +再看看它随身带的账本,符号表: + +```bash +nm hello.o +``` + +```text +0000000000000000 T main + U puts +``` + +两行,但信息量巨大。`T main`:我定义了函数 `main`,它在代码段(Text)。`U puts`:我**用了** `puts`,但它的实现不在我这——`U` 是 Undefined,一张借条。这个借条/欠条的意象请记牢,两拍之后它会变成一次真实的爆炸。 + +### 第四棒:链接器 + +```bash +gcc hello.o -o hello +objdump -f hello +``` + +```text + +hello: file format elf64-x86-64 +architecture: i386:x86-64, flags 0x00000150: +HAS_SYMS, DYNAMIC, D_PAGED +start address 0x0000000000001040 +``` + +对比 `.o`:flags 变了——`HAS_RELOC` 没了,换来 `DYNAMIC`(动态链接)和 `D_PAGED`(按页布局);start address 从 0 变成了 `0x1040`,链接器已经决定好它住哪了。链接器做的事,就是把 `hello.o` 的借条和 C 库的欠条对上账,把那些待重定位的空位填成真地址。跑一下,它活着: + +```bash +./hello +``` + +```text +hello, EmbedBox! +``` + +## 拆开看:可执行文件是一个数据结构 + +「可执行文件」听起来高深,其实它就是一个格式约定的数据结构——ELF(Executable and Linkable Format)。`readelf` 能把它掀开: + +```bash +readelf -S hello +``` + +```text + [12] .text PROGBITS 0000000000001040 00001040 + [14] .rodata PROGBITS 0000000000002000 00002000 + [25] .data PROGBITS 0000000000004008 00003008 + [26] .bss NOBITS 0000000000004018 00003018 +``` + +这里节选了最要紧的四段。`.text` 是代码,只读;`.rodata` 是只读数据——咱们那句 `"hello, EmbedBox!\n"` 字符串就住在这里;`.data` 是有初值的全局/静态变量;`.bss` 最有意思,类型是 **NOBITS**——不占文件一字节,因为「初值为 0 的变量」没必要存,程序启动时内存里划一块零就行。这四个名字,`.text`/`.data`/`.bss`,是嵌入式的通行证:将来咱们在链接脚本里亲手给它们安排地址时(拍 06),今天的这一眼就是全部前置知识。 + +还能反汇编看自己程序的机器码: + +```bash +objdump -d hello +``` + +```text +0000000000001139
: + 1139: 55 push %rbp + 113a: 48 89 e5 mov %rsp,%rbp + 113d: 48 8d 05 c0 0e 00 00 lea 0xec0(%rip),%rax # 2004 <_IO_stdin_used+0x4> + 1144: 48 89 c7 mov %rax,%rdi + 1147: e8 e4 fe ff ff call 1030 + 114c: b8 00 00 00 00 mov $0x0,%eax + 1151: 5d pop %rbp + 1152: c3 ret +``` + +左列是地址,中间是机器码字节,右列是反汇编。和刚才 `.s` 里的 `main` 长得像——本来就是同一段逻辑,只是现在每条指令有了确定的门牌号。最后看个体积报表: + +```bash +size hello +``` + +```text + text data bss dec hex filename + 1411 584 8 2003 7d3 hello +``` + +`.text` 加上 `.rodata` 等,一共 1411 字节——在宿主机上这点体积无人在意;但请记住这个看体积的习惯,等咱们搬去只有几十 KB 内存的小板子,每一行这个报表都是钱。 + +## 这一拍咱们带走了什么 + +四棒接力:预处理器(抄写员)→ 编译器(翻译官)→ 汇编器(打包员)→ 链接器(对账人)。三件随身工具:`objdump -f` 看格式与架构,`nm` 看符号账本,`readelf -S` 看段落布局。四个段名:`.text`/`.rodata`/`.data`/`.bss`。还有两个伏笔:符号表里的 `U`(借条)会在拍 03 炸出 `undefined reference`;段布局会在拍 06 被咱们亲手写进链接脚本。 + +## 下一站 + +程序健康地活着,只会说一句话。下一拍,咱们把它弄坏——认真地、蓄意地弄坏——然后请出嵌入式生涯里最重要的搭档之一:GDB。 diff --git a/tutorial/journey/02-gdb.md b/tutorial/journey/02-gdb.md new file mode 100644 index 0000000..5e97ac7 --- /dev/null +++ b/tutorial/journey/02-gdb.md @@ -0,0 +1,177 @@ +--- +title: 拍 02 · 程序病了:printf 够不到的地方 +order: 2 +verify: scripts/journey/02-gdb.sh +tier: ci-matrix +verified-on: WSL2(Arch)/ gcc 16.1.1 / gdb 17.2;CI 矩阵 ubuntu-latest + windows-latest +--- + +# 拍 02 · 程序病了:printf 够不到的地方 + +这一拍的病,是笔者亲手埋的。病人在 [src/journey/02-gdb/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/02-gdb/),先睹为快: + +```c +/* 拍 02 的病号:越界读一颗,答案就歪了 + * 对应教程:tutorial/journey/02-gdb.md + */ +#include + +static int scale(int v, int factor) +{ + return v * factor; +} + +int main(void) +{ + int data[4] = {1, 2, 3, 4}; + int total = 0; + + for (int i = 0; i <= 4; i++) { /* 病根:<=,data[4] 不是我们的 */ + total += scale(data[i], 2); + } + printf("total = %d\n", total); + return 0; +} +``` + +`data` 只有 4 个元素,循环却跑 5 次——`data[4]` 越界读了隔壁邻居的内存。数学好的朋友心算一下:正确答案应该是 `(1+2+3+4)×2 = 20`。那编译运行看看: + +```bash +gcc -g -O0 -o buggy buggy.c +./buggy +``` + +```text +total = 20 +``` + +**答案是对的。** 在笔者这台机器上,这次越界读到的恰好是个 0,乘什么都不影响总分——病得悄无声息。咱们那边可能是 42,可能是 -8,甚至直接崩:越界读没有任何合同保证,读到什么全凭内存布局的运气。这正是它比崩溃更可怕的地方:崩溃至少诚实。 + +现在问题来了:怎么**证明**第五次调用真的发生了、`v` 拿到的不是数组里的数?printf 无能为力——咱们不能在一个不存在的变量上插桩,而且插桩本身会改变程序。咱们需要的是:让程序停在任何一行,掀开它的现场。这就是 GDB。 + +顺带解释刚才编译命令里的两个选择:`-g` 让 gcc 把「行号、变量名、类型」这些调试信息织进二进制——没有它,gdb 看到的是一串无名地址;`-O0` 关掉优化,让机器码老老实实按源码顺序走。为什么优化是调试的大敌,这一拍结尾咱们会亲眼看到。 + +## 会话一:断点、现场、回溯 + +真实使用时,`gdb ./buggy` 进入交互式对话。为了让整个会话可以被 CI 逐字重放,这里用 `-batch` 加一串 `-ex`(把要敲的命令提前排队),效果完全一致: + +```bash +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ + -ex 'break scale' \ + -ex 'run' \ + -ex 'info args' \ + -ex 'bt' +``` + +```text +Breakpoint 1 at 0x1153: file buggy.c, line 8. +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/usr/lib/libthread_db.so.1". + +Breakpoint 1, scale (v=1, factor=2) at buggy.c:8 +8 return v * factor; +v = 1 +factor = 2 +#0 scale (v=1, factor=2) at buggy.c:8 +#1 0x00005555555551b4 in main () at buggy.c:17 +``` + +逐行读这份成绩单。`Breakpoint 1 at 0x1153` 是 gdb 在 `scale` 入口放了哨兵;程序跑起来,第一次撞上哨兵,它把**整个现场**摆给咱们:`scale (v=1, factor=2)`——函数名、两个参数的值,一目了然,一行 printf 都不用加。`info args` 再把参数单独列一遍。最后的 `bt`(backtrace)是调用栈回溯:`#0` 是现在所处的 `scale`,`#1` 是谁叫它来的——`main` 的 `buggy.c:17`。栈帧从下往上读,就是「案发现场 ← 谁报的案」。 + +## 会话二:一路 continue,逼出第五次 + +断点只告诉咱们「第一次调用长这样」。现在连续放行四次,守到第五次: + +```bash +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ + -ex 'break scale' \ + -ex 'run' \ + -ex 'info args' \ + -ex 'continue' \ + -ex 'continue' \ + -ex 'continue' \ + -ex 'continue' +``` + +```text +Breakpoint 1, scale (v=1, factor=2) at buggy.c:8 +... + +Breakpoint 1, scale (v=2, factor=2) at buggy.c:8 +... + +Breakpoint 1, scale (v=3, factor=2) at buggy.c:8 +... + +Breakpoint 1, scale (v=4, factor=2) at buggy.c:8 +... + +Breakpoint 1, scale (v=0, factor=2) at buggy.c:8 +``` + +第五次来了:**`v=0`**。可数组里只有 1、2、3、4——这个 0 不属于这个数组,它是边界外那位未知邻居的值。病根确诊:`i <= 4` 里的等号。把循环条件改回 `i < 4`,第五次调用就不会发生。顺便说一句,交互模式下咱们的日常三件套是 `next`(下一行,不进函数)、`step`(走进函数)、`print 变量名`(看任意表达式的值)——这三个词加上今天的 `break`/`continue`/`bt`,足够应付大多数现场。 + +## 会话三:watch,让数据变化自己举手 + +还有一招值得入袋:盯梢。`watch total` 给变量装上门铃,谁改它谁触发: + +```bash +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ + -ex 'break main' \ + -ex 'run' \ + -ex 'watch total' \ + -ex 'continue' +``` + +```text +Breakpoint 1, main () at buggy.c:12 +12 { +Hardware watchpoint 2: total + +Hardware watchpoint 2: total + +Old value = 0 +New value = 2 +main () at buggy.c:16 +16 for (int i = 0; i <= 4; i++) { +``` + +`Old value = 0 → New value = 2`——第一圈循环把 total 从 0 写成了 2(1×2),连改动的位置都指给咱们看。怀疑某个变量被「神秘之手」改坏时,watch 是终审证据。(它叫 **Hardware** watchpoint,因为靠的是 CPU 的调试寄存器——将来在真板上调试,这个细节会再次出现。) + +## 会话四:-O2,编译器和调试器打架 + +最后兑现开头的伏笔。用 `-O2` 编译同一个文件: + +```bash +gcc -O2 -g -o buggy-o2 buggy.c +gdb -q -batch -iex 'set debuginfod enabled off' ./buggy-o2 \ + -ex 'break main' \ + -ex 'run' \ + -ex 'print total' \ + -ex 'print data' +``` + +```text +buggy.c: In function 'main': +buggy.c:17:18: warning: iteration 4 invokes undefined behavior [-Waggressive-loop-optimizations] + 17 | total += scale(data[i], 2); + | ^~~~~~~~~~~~~~~~~ +buggy.c:16:23: note: within this loop + 16 | for (int i = 0; i <= 4; i++) { + | ~~^~~ +... +$1 = +$2 = +``` + +两个惊喜。其一,编译器自己拉响了警报:`iteration 4 invokes undefined behavior`——「第 4 次迭代(即 i=4 那次)行为未定义」。越界读属于未定义行为(UB),编译器有权做任何假设,-O2 下它看得更远,直接警告咱们。这也是拍 03 会把 `-Wall -Wextra` 写进 Makefile 的原因:警告是免费的第一道防线。其二,进了 gdb,`print total` 和 `print data` 都回一句 ``——优化器认为这些变量没必要在内存里留位置,直接扔进了寄存器或者干脆重排了。**不是 gdb 坏了,是它要观察的对象被优化掉了。** 所以业界的节奏是:调试期 `-O0 -g`,复现并修完,再换 `-O2` 验证——而不是对着一份优化过的二进制抱怨调试器不灵。 + +## 这一拍咱们带走了什么 + +gdb 五件套:`break`、`run`/`continue`、`info args`/`print`、`bt`、`watch`;两枚心法:现场比猜测值钱、调试用 `-O0`。还有一个正式登场的词:**undefined behavior**——它不是「崩一下」的意思,是「从此没有任何保证」的意思。 + +最后留个伏笔:这一整套断点、单步、观察,都发生在「本机进程」上。将来在拍 06,程序会住进另一台(虚拟的)机器,那时 gdb 只需要一句 `target remote`,就能隔着一条串口线把这一切原样搬过去——咱们在真板上调试 STM32 时用的 OpenOCD,本质就是那根线另一头的接线员。 + +## 下一站 + +病好了,但主角还是只会说一句话、只有一个文件。下一拍,让它长大——然后咱们会发现,长大本身会带来新的事故。 diff --git a/tutorial/journey/03-make.md b/tutorial/journey/03-make.md new file mode 100644 index 0000000..90e9f77 --- /dev/null +++ b/tutorial/journey/03-make.md @@ -0,0 +1,289 @@ +--- +title: 拍 03 · 程序长大:让 make 记住你记不住的 +order: 3 +verify: scripts/journey/03-make.sh +tier: ci-matrix +verified-on: WSL2(Arch)/ gcc 16.1.1 / GNU Make 4.4.1;CI 矩阵 ubuntu-latest + windows-latest +--- + +# 拍 03 · 程序长大:让 make 记住你记不住的 + +上一拍结束时,咱们的程序刚被 GDB 救回来,健康,但它只会说一句话,而且所有家当挤在一个 `main.c` 里。这一拍,咱们让它长大——从"一个文件"长成"一个小工程"。长大的代价马上会来:文件一多,「哪些东西需要重新编译」就成了人脑不该背的负担。这一拍的主角就是 make:一个替咱们记住依赖关系的工具。 + +动手地点是 [src/journey/03-make/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/03-make/)。本拍的所有命令都被 [scripts/journey/03-make.sh](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/blob/main/scripts/journey/03-make.sh) 在 CI 里逐字重放,咱们在正文里看到的每一段输出,都是真跑出来的。 + +## 第一幕:手工时代 + +先回到起点。主角目前长这样: + +```c +/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 */ +#include + +int main(void) +{ + printf("hello, EmbedBox!\n"); + return 0; +} +``` + +一个文件的时候,生活很简单: + +```bash +gcc main.c -o hello +./hello +``` + +```text +hello, EmbedBox! +``` + +然后程序长大了。它学会的问候,值得从 `main.c` 里搬出去,单独住一个家——于是 `greet` 搬进了 `util`,`main.c` 只负责开场: + +```c +#include +#include "util.h" + +int main(void) +{ + greet("EmbedBox"); + return 0; +} +``` + +```c +#ifndef UTIL_H +#define UTIL_H + +/* greet 从 main.c 搬了出来,住进自己的家 */ +void greet(const char *who); + +#endif /* UTIL_H */ +``` + +```c +#include +#include "util.h" + +void greet(const char *who) +{ + printf("hello, %s!\n", who); +} +``` + +现在编译要分两步走了:先把每个 `.c` 编成目标文件(拍 01 的词汇:`-c` 停在汇编之后、链接之前),再把目标文件拼成可执行文件: + +```bash +gcc -c main.c +gcc -c util.c +gcc main.o util.o -o hello +./hello +``` + +```text +hello, EmbedBox! +``` + +值得停下来看一眼刚才发生了什么:`main.o` 里有一个**未决符号** `greet`——`main.c` 只给了借条(调用了它),欠条(它的实现)在 `util.o` 里。链接器的工作就是把借条和欠条对上账。记住这个画面,第二幕它就要出事。 + +## 第二幕:长大的痛 + +程序继续长。这次它想知道自己的版本号,于是三处同时改动:`util.h` 长出 `version` 的声明,`util.c` 长出实现,`main.c` 用上了它: + +```c +#ifndef UTIL_H +#define UTIL_H + +/* greet 与 version 从 main.c 里搬了出来,住进自己的家 */ +void greet(const char *who); +const char *version(void); + +#endif /* UTIL_H */ +``` + +```c +#include +#include "util.h" + +void greet(const char *who) +{ + printf("hello, %s!\n", who); +} + +const char *version(void) +{ + return "v0.3.0"; +} +``` + +```c +/* 主线拍 03 · 程序长大 —— 主角长成三个文件后的入口 + * 对应教程:tutorial/journey/03-make.md + */ +#include +#include "util.h" + +int main(void) +{ + greet("EmbedBox"); + printf("journey beat 03: %s\n", version()); + return 0; +} +``` + +改完三个文件,要重新编译。咱们只记得自己刚动过 `main.c`,于是: + +```bash +gcc -c main.c +gcc main.o util.o -o hello +``` + +```text +/usr/bin/ld: main.o: in function `main': +main.c:(.text+0x14): undefined reference to `version' +collect2: error: ld returned 1 exit status +``` + +这个报错值得逐行读,因为它会陪咱们很多年。第一行说话的是 `/usr/bin/ld`——链接器本身;`main.o: in function main'` 是说账对不上发生在 `main.o` 的 `main` 函数里,`(.text+0x14)` 是这条借条在代码段里的地址(拍 01 讲过的 `.text`,在这里兑现)。第二行是正题:`undefined reference to version'`——`main.o` 拿着 `version` 的借条,但所有目标文件的欠条里都找不到它。因为 `version` 的实现住在新版 `util.c` 里,而手边的 `util.o` 还是旧版编译出来的,里面没有它。第三行的 `collect2` 是 gcc 的链接包装进程,它在替真正的 `ld` 报告退出状态。 + +修法就是补上忘掉的那一步: + +```bash +gcc -c util.c +gcc main.o util.o -o hello +./hello +``` + +```text +hello, EmbedBox! +journey beat 03: v0.3.0 +``` + +事情解决了,但不知道咱们有没有后背发凉:这次靠报错兜住了,是因为签名对不上炸得响。换一种改法——比如只改了函数内部的行为——旧目标文件会**安静地**混进最终程序,链接一句怨言都没有,拿到手的是一份用旧零件拼的「新」程序。三个文件时咱们还能靠记性,等工程长到三十个文件、头文件一层套一层,「改了什么、谁要重编」就不是人脑该干的活了。咱们需要一个替咱们记账的:它知道每个目标文件从哪来、依赖谁,谁变了就重编谁,没变的绝对不碰。这个记账员就是 make。 + +## 第三幕:make 接管 + +先把手工时代的残骸清掉,从一张白纸开始: + +```bash +rm main.o util.o hello +``` + +然后写下这一拍的 Makefile(完整文件就在 `src/journey/03-make/Makefile`): + +```make +# 主线拍 03 · 程序长大 —— 最终 Makefile:变量 + 模式规则 + 头文件依赖 +# 对应教程:tutorial/journey/03-make.md + +CC := gcc +CFLAGS := -Wall -Wextra -g +TARGET := hello +OBJS := main.o util.o + +.PHONY: all clean +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) -o $@ $^ + +# 模式规则:任何 .o 都从同名 .c 编出来,并且都依赖头文件 +%.o: %.c util.h + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + rm -f $(TARGET) $(OBJS) +``` + +逐块看它在说什么。开头四个变量是「一处声明、处处引用」:`CC` 是编译器,`CFLAGS` 是编译选项——`-Wall -Wextra` 把警告开足(第二幕那种安静的事故,警告常常是第一道警报),`-g` 留下调试信息——这个习惯拍 02 就教过咱们。`all` 是默认目标,它只是站在前台指着真正的产物 `hello`;`hello` 依赖两个目标文件,配方里的 `$@` 代表目标本身,`$^` 代表全部依赖——所以那行展开就是 `gcc -o hello main.o util.o`,和手工时代一模一样,只是换了套更耐用的写法。注意链接这一行没有放 `CFLAGS`:链接器只对符号感兴趣,警告和调试选项是编译期的事。 + +最有味道的是 `%.o: %.c util.h` 这条**模式规则**:任意一个 `.o` 都从同名的 `.c` 编出来,并且额外依赖 `util.h`。`$<` 代表第一个依赖,即那个 `.c` 文件。这一行就是第二幕事故的解药——`util.h` 变了,两个 `.o` 都会被判定过期,谁也漏不掉。至于 `.PHONY`,它声明 `all` 和 `clean` 是「动作」不是文件;少了它,哪天目录里恰好出现一个叫 `clean` 的文件,`make clean` 就会报告无事可做——这个坑的原理在 [GNU Make 手册的 PHONY 一节](https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html)写得很清楚。 + +好了,让它干活: + +```bash +make +``` + +```text +gcc -Wall -Wextra -g -c -o main.o main.c +gcc -Wall -Wextra -g -c -o util.o util.c +gcc -o hello main.o util.o +``` + +```bash +./hello +``` + +```text +hello, EmbedBox! +journey beat 03: v0.3.0 +``` + +每一行都是 make 替咱们敲的命令——它先回显命令本身,再执行。现在验证记账员是不是真的在记账。先动头文件: + +```bash +touch util.h +make +``` + +```text +gcc -Wall -Wextra -g -c -o main.o main.c +gcc -Wall -Wextra -g -c -o util.o util.c +gcc -o hello main.o util.o +``` + +`util.h` 的时间戳变了,两个目标文件都被判过期,双双重编——第二幕那种「忘了哪一个」的事故,从机制上不存在了。反过来,什么都不动,make 就什么都不做: + +```bash +make +``` + +```text +make: Nothing to be done for 'all'. +``` + +再单独动 `util.c`: + +```bash +touch util.c +make +``` + +```text +gcc -Wall -Wextra -g -c -o util.o util.c +gcc -o hello main.o util.o +``` + +只有 `util.o` 重编,`main.o` 原封不动,然后重新链接。这就是「最小重编」:三十个文件的工程里,这个差别是从「泡杯咖啡等全量」到「回车即完成」的差别——以后咱们编译内核和 BSP 的时候,会对这一行感恩戴德。 + +最后是打扫和重来,验证这套账本从零开始也成立: + +```bash +make clean +make +``` + +```text +rm -f hello main.o util.o +gcc -Wall -Wextra -g -c -o main.o main.c +gcc -Wall -Wextra -g -c -o util.o util.c +gcc -o hello main.o util.o +``` + +## 几个咱们大概率会撞上的坑 + +**Tab,不是空格。** Makefile 的配方行必须以真正的 Tab 开头。用空格缩进,咱们会收获: + +```text +Makefile:16: *** missing separator. Stop. +``` + +报错行号指向的正是那条配方。规则依据:[GNU Make 手册的 Recipe Syntax](https://www.gnu.org/software/make/manual/html_node/Recipe-Syntax.html)。编辑器里建议直接把 Makefile 的缩进硬性设为 Tab。 + +**`Nothing to be done` 不是报错。** 它是 make 在说「依赖没变,我什么都没干」。如果咱们明明改了代码却看到这句话,先怀疑自己是不是改错了地方、或者目录不对——make 只看时间戳,它不会撒谎。 + +**头文件依赖会长大。** 咱们手写的 `util.h` 依赖在两个文件时刚好够用;等头文件多起来,「谁 include 了谁」也该交给机器记——`gcc -MMD` 能自动生成依赖文件。这属于把 make 用到深处的手艺,这些放到参考篇再展开,主线先记着这个口子存在。 + +## 下一站 + +程序长大了,也学会了记账。但等它再长一点——分出目录、分出库、还要在宿主机和目标机两套工具链之间切换——手写 Makefile 就会从「耐用」变成「手工地毯」。下一拍,咱们把工程交给 CMake,顺便产出一枚 `compile_commands.json`,它之后会被咱们的编辑器吃掉。先记住此刻的感觉:咱们亲手写过、也亲手修过一份 Makefile,以后在任何 SDK 里再看到它,那不是天书,是一份账本。 diff --git a/tutorial/journey/04-cmake.md b/tutorial/journey/04-cmake.md new file mode 100644 index 0000000..16e3c5b --- /dev/null +++ b/tutorial/journey/04-cmake.md @@ -0,0 +1,128 @@ +--- +title: 拍 04 · 工程化:CMake 与那枚给编辑器的接口 +order: 4 +verify: scripts/journey/04-cmake.sh +tier: ci-matrix +verified-on: WSL2(Arch)/ cmake 4.4.2 / gcc 16.1.1;CI 矩阵 ubuntu-latest + windows-latest +--- + +# 拍 04 · 工程化:CMake 与那枚给编辑器的接口 + +三个文件的工程用 CMake,确实有点杀鸡用牛刀——上一拍的 Makefile 十几行,清清爽爽。但程序的结构变了:`util` 不再是「顺带编的两个文件」,它是一个有名字、有接口的**库**,值得用库的方式被声明和管理。更硬的理由在下一拍等着:咱们要搬家,同一份源码要在「宿主机工具链」和「ARM 工具链」两套规则之间切换——手写 Makefile 管一套是清爽,管两套就是手工地毯。趁现在把壳子换好,搬家时才不心疼。 + +动手地点:[src/journey/04-cmake/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/04-cmake/)。程序还是那个程序,只是住进了新户型:`src/` 目录下 `main.c`、`util.c`、`util.h`,版本号跳到 v0.4.0。 + +## CMakeLists.txt:用声明代替记账 + +整个工程的新账本只有十几行: + +```cmake +# 主线拍 04 · 工程化 —— 同一个程序,搬进 CMake 工程 +# 对应教程:tutorial/journey/04-cmake.md +cmake_minimum_required(VERSION 3.16) + +project(journey_box C) + +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# util 从「几个文件」升格为库:接口(include)随库走,消费者自动可见 +add_library(util STATIC src/util.c) +target_include_directories(util PUBLIC src) + +add_executable(hello src/main.c) +target_link_libraries(hello PRIVATE util) +``` + +和上一拍最大的区别在姿势:Makefile 记的是**过程**(哪个文件先编、命令行怎么拼),CMakeLists 声明的是**事实**(存在一个库叫 util、一个可执行文件叫 hello、后者链接前者)。`add_library(util STATIC src/util.c)` 一行,「编目标文件、打包成 libutil.a」的流水线自动成立。`target_include_directories(util PUBLIC src)` 里那个 `PUBLIC` 是全段最值钱的关键词:`src` 是 util 的接口目录,声明成 PUBLIC 意味着**谁链接 util,谁就自动获得这个 include 路径**——main.c 里 `#include "util.h"` 不需要任何额外配置。库的接口随库走,而不是靠每个消费者自己记得,这是工程化和你上拍手写 `-I` 的本质区别。`PRIVATE` 则相反:链接关系只属于 hello 自己,不外传。 + +## 配置与构建:两步走 + +```bash +cmake -S . -B build +``` + +```text +-- Detecting C compile features - done +-- Configuring done (0.1s) +-- Generating done (0.0s) +-- Build files have been written to: /tmp/.../build +``` + +注意这条命令**没有编译任何东西**。`-S .` 指源码目录,`-B build` 指输出目录,CMake 此刻干的是「考察环境、生成构建系统」——它探测了咱们的编译器,然后在 `build/` 里生成了一套现成的构建脚本(默认就是 Makefile)。换句话说,CMake 是构建系统的生成器,不是构建系统本身;「我该用哪个编译器、平台是什么」这类问题,由它在配置期一次性回答,不散落在构建规则里。这也是它将来能优雅切换工具链的底气:换一个工具链文件,重新配置,同一份 CMakeLists 纹丝不动。 + +然后才是构建: + +```bash +cmake --build build +``` + +```text +[ 25%] Building C object CMakeFiles/util.dir/src/util.c.o +[ 50%] Linking C static library libutil.a +[ 50%] Built target util +[ 75%] Building C object CMakeFiles/hello.dir/src/main.c.o +[100%] Linking C executable hello +[100%] Built target hello +``` + +看这份进度条式的输出:先编 `util.c`、打成 `libutil.a`,再编 `main.c`、链接成 `hello`——上一拍咱们手写的依赖关系,这里由目标(target)之间的关系自动推导。运行: + +```bash +./build/hello +``` + +```text +hello, EmbedBox! +journey beat 04: v0.4.0 +``` + +## 那枚给编辑器的接口 + +配置时埋的一行 `set(CMAKE_EXPORT_COMPILE_COMMANDS ON)`,让 `build/` 里多出一个文件: + +```bash +ls -l build/compile_commands.json +``` + +```text +-rw-r--r-- 1 charliechen charliechen 558 Aug 23 14:41 build/compile_commands.json +``` + +打开看,里面是每个源文件**完整编译命令**的 JSON 清单——用哪个编译器、什么标准、哪些 include 路径。它不是给 CMake 自己用的,是给工具生态的通用接口:编辑器拿到它,就知道每个文件「真实的编译视角」。拍 08 给 VS Code 接线时,IntelliSense 吃的就是这份文件。现在咱们只需要记住:它在 `build/` 里,是构建系统递给编辑器的名片。 + +## 账还记着吗? + +换了大管家,拍 03 用血换来的增量构建语义可不能丢。验证: + +```bash +touch src/util.h +cmake --build build +``` + +```text +[ 25%] Building C object CMakeFiles/util.dir/src/util.c.o +[ 50%] Linking C static library libutil.a +[ 50%] Built target util +[ 75%] Building C object CMakeFiles/hello.dir/src/main.c.o +[100%] Linking C executable hello +[100%] Built target hello +``` + +头文件一变,库和应用双双重编——而且这次不用咱们在规则里手写 `util.h` 依赖,CMake 生成 Makefile 时顺带查了每个文件的 `#include` 关系。什么都不改再构建一次: + +```bash +cmake --build build +``` + +```text +[ 50%] Built target util +[100%] Built target hello +``` + +只报「已就绪」,一个字都没重编。账本还在,管家换了,服务升级。 + +## 下一站 + +工程壳子就位:库与应用分离、声明式账本、还有一枚递给编辑器的名片。现在,搬家——下一拍咱们把同一份源码交给 ARM 工具链,亲眼看看「可执行文件」这个词在另一套架构下的含义——以及为什么宿主机上好好的程序,到了目标机上连运行的机会都没有。 diff --git a/tutorial/journey/05-cross.md b/tutorial/journey/05-cross.md new file mode 100644 index 0000000..dad7cfe --- /dev/null +++ b/tutorial/journey/05-cross.md @@ -0,0 +1,122 @@ +--- +title: 拍 05 · 搬家:交叉编译 +order: 5 +verify: scripts/journey/05-cross.sh +tier: ci-linux +verified-on: WSL2(Arch)/ gcc 16.1.1 + Arm GNU Toolchain arm-none-eabi-gcc;CI:ubuntu-latest(apt 装 gcc-arm-none-eabi) +--- + +# 拍 05 · 搬家:交叉编译 + +程序在宿主机上活得很滋润,但它的命运是住进一台小板子。这一拍咱们给它搬家——结果会是一颗造好却暂时无处安放的心脏,以及一个重要的世界观:**「可执行文件」从来不是一种通用货币,它是特定架构的方言。** + +动手地点:[src/journey/05-cross/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/05-cross/)。源码和上一拍几乎一样(greet + version,版本跳到 v0.5.0)——**搬家不该惊动住户**。需要新工具:`arm-none-eabi-gcc`(拍 00 体检里「建议工具」的那位,Ubuntu 用户 `sudo apt install gcc-arm-none-eabi`,Arch 用户 `sudo pacman -S arm-none-eabi-gcc`)。 + +## 先认清编译器的身世 + +咱们马上要拥有两个长得一模一样的 gcc,先问清它们各自为谁工作: + +```bash +gcc -dumpmachine +``` + +```text +x86_64-pc-linux-gnu +``` + +```bash +arm-none-eabi-gcc -dumpmachine +``` + +```text +arm-none-eabi +``` + +这串叫**目标三元组**(target triplet),是编译器出厂时就烙好的身份:「我生成的代码,给这类机器用」。宿主机 gcc 面向 x86_64 Linux;而 `arm-none-eabi` 拆开读就是一份自我介绍:**arm** 是 ARM 架构,**none** 是「没有操作系统」(裸机),**eabi** 是 ARM 的调用约定变体。编译器本身都是跑在咱们桌面上的 x86 程序——区别只在它**吐出的代码给谁跑**。给别的架构生成代码,这就叫交叉编译;干这活的工具链,叫交叉工具链。 + +## 搬家实操 + +流程和拍 01 的四棒接力完全同构,只是每一棒都换了人: + +```bash +arm-none-eabi-gcc -c main.c -o main.o +arm-none-eabi-gcc -c util.c -o util.o +``` + +```bash +arm-none-eabi-gcc main.o util.o --specs=rdimon.specs -o hello.elf +``` + +链接这行多出的 `--specs=rdimon.specs` 值得一句解释。咱们的程序用了 `printf`,而 printf 是 C 库的函数——宿主机上它背后站着整个 Linux(glibc 调内核的 write 系统调用)。可裸机的世界里没有操作系统,`arm-none-eabi` 工具链配的是面向裸机的精简 C 库 **newlib**,它把「往哪输出」这个问题留了空位。`rdimon`(半主机,semihosting)是一种补位方案:让调试器或模拟器**替**目标机代劳这些请求。它是权宜之计,不是归宿——拍 06 咱们会让程序真正自己开口。 + +现在验证搬家是否成功。用拍 01 的老朋友 `objdump -f`,同一份 `main.c`,两个世界: + +```bash +gcc -c main.c -o main-host.o +objdump -f main-host.o +``` + +```text + +main-host.o: file format elf64-x86-64 +architecture: i386:x86-64, flags 0x00000011: +HAS_RELOC, HAS_SYMS +start address 0x0000000000000000 +``` + +```bash +arm-none-eabi-objdump -f main.o +``` + +```text + +main.o: file format elf32-littlearm +architecture: armv4t, flags 0x00000011: +HAS_RELOC, HAS_SYMS +start address 0x00000000 +``` + +同一份源码,一份是 `elf64-x86-64`,一份是 `elf32-littlearm`——32 位、小端、ARM 指令集。再看最终产物的「户口本」: + +```bash +arm-none-eabi-readelf -h hello.elf | grep -E 'Class|Machine' +``` + +```text + Class: ELF32 + Machine: ARM +``` + +顺带一提,`armv4t` 是工具链不指定时的默认底档;下一拍咱们会用 `-mcpu=cortex-m3` 精确点名 CPU,拿到 Thumb-2 这类现代指令集。 + +## 裸字节:从 ELF 里抠出 .bin + +拍 01 说过,ELF 是给**工具**看的容器——里面有段表、符号表、调试信息。但板子上的烧录器只认一样东西:从某个地址开始,一字节一字节的裸机器码。`objcopy` 负责把容器拆掉,只取干货: + +```bash +arm-none-eabi-objcopy -O binary hello.elf hello.bin +ls -l hello.elf hello.bin +``` + +```text +-rwxr-xr-x 1 charliechen charliechen 62048 Aug 23 14:43 hello.bin +-rwxr-xr-x 1 charliechen charliechen 377580 Aug 23 14:43 hello.elf +``` + +`.bin` 比 `.elf` 小了一个数量级——容器确实占地方。不过 62KB 对将来的小板子来说仍然太富态:那是半主机后端拖家带口的结果。等下一拍程序亲自负责输出,镜像会轻装得多。 + +## 现在试试跑它 + +```text +scripts/journey/05-cross.sh: line 74: ./hello.elf: cannot execute binary file: Exec format error +``` + +这是宿主机 shell 的原话:`Exec format error`——**格式不符,拒绝执行**。x86 的内核读不懂 ARM 的 ELF,这不是 bug,是架构的巴别塔。心脏造好了,检验合格,但它还没有身体。 + +## 这一拍你带走了什么 + +交叉编译的完整动作:换一套同构的工具链(`arm-none-eabi-` 前缀家族:gcc/objdump/readelf/objcopy 一应俱全),流程不变,产物换了方言。验证工具:`-dumpmachine`、`objdump -f`、`readelf -h`。以及两个概念:newlib(裸机世界的精简 C 库)和 semihosting(借调试器之口的权宜之计)。还欠一句 `sysroot`——交叉工具链自带一套为目标机准备的头文件和库,和宿主机的 `/usr/include` 井水不犯河水;等咱们链接第三方库遇到「找到了头文件却链不上」时,会再想起它(那时去参考篇)。 + +## 下一站 + +没有板子?咱们造一台。下一拍,QEMU 给这颗 ARM 心脏一副身体;它将第一次在没有操作系统的地方运行——自己开机、自己初始化、通过一根串口线,亲口向世界问好。 diff --git a/tutorial/journey/06-qemu-uart.md b/tutorial/journey/06-qemu-uart.md new file mode 100644 index 0000000..5e8b4a1 --- /dev/null +++ b/tutorial/journey/06-qemu-uart.md @@ -0,0 +1,297 @@ +--- +title: 拍 06 · 没有屏幕的机器:它亲口向你问好 +order: 6 +verify: scripts/journey/06-qemu-uart.sh +tier: ci-linux +verified-on: WSL2(Arch)/ arm-none-eabi-gcc(Arm GNU Toolchain 14.2.1)/ QEMU 11.0.3 / gdb 17.2;CI:ubuntu-latest +--- + +# 拍 06 · 没有屏幕的机器:它亲口向你问好 + +这是全书的高潮。上一拍结束时,咱们手里是一颗造好却无处安放的 ARM 心脏;这一拍,QEMU 给它一副身体——一块虚拟的、没有操作系统的、**没有屏幕的**板子。程序将在上面自己开机、自己初始化,然后通过一根串口线,亲口向世界问好。咱们将拿到这本书的签名产物:一份 CI 背书的串口运行证据。 + +咱们的虚拟板叫 `mps2-an385`,CPU 是 Cortex-M3——**和 STM32 主流型号同一个家族**。这不是随手挑的:咱们在这一拍写的每一行启动代码,将来搬到真 STM32 上,骨架几乎不变。 + +动手地点:[src/journey/06-qemu-uart/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/06-qemu-uart/)。需要的工具这回齐了:`arm-none-eabi-gcc`、`qemu-system-arm`(拍 00 的建议工具全部到岗)。 + +## 先解决一个哲学问题:谁叫醒 main? + +在宿主机上,`./hello` 之前有一整个操作系统在铺床:加载 ELF、设好栈、把环境变量摆好,然后才跳到 main。裸机上**没有这位管家**——CPU 上电后只做一件事:从地址 0 读两个数,第一个当栈顶,第二个当入口。所以裸机程序的第一份文件不是 main,是**出生证明**: + +```c +/* 主线拍 06 · 出生证明:向量表 + 复位流程 + * 对应教程:tutorial/journey/06-qemu-uart.md + * 目标板:QEMU mps2-an385(Cortex-M3) + */ +#include +#include + +/* gcc 会把「抄写循环」识别成 memcpy 调用、把「清零循环」识别成 memset 调用; + * -nostdlib 的世界里没有 libc,所以裸机工程自带这两个最小实现。 */ +void *memcpy(void *dst, const void *src, size_t n) +{ + unsigned char *d = dst; + const unsigned char *s = src; + while (n--) *d++ = *s++; + return dst; +} + +void *memset(void *dst, int c, size_t n) +{ + unsigned char *d = dst; + while (n--) *d++ = (unsigned char)c; + return dst; +} + +/* 这些地址全部由链接脚本(linker.ld)定义 */ +extern uint32_t _estack; /* 初始栈顶 */ +extern uint32_t _sidata; /* .data 的行李在 flash 里的位置 */ +extern uint32_t _sdata; /* .data 在 RAM 里的家 */ +extern uint32_t _edata; +extern uint32_t _sbss; /* .bss 在 RAM 里的家 */ +extern uint32_t _ebss; + +int main(void); + +void Reset_Handler(void) +{ + uint32_t *src = &_sidata; + uint32_t *dst = &_sdata; + while (dst < &_edata) /* .data:把行李从 flash 搬进 RAM */ + *dst++ = *src++; + + for (dst = &_sbss; dst < &_ebss; dst++) /* .bss:按合同清零 */ + *dst = 0; + + (void)main(); + for (;;) { } /* main 不该回来;回来了就原地罚站 */ +} + +/* Cortex-M 的向量表:第 0 项是初始栈顶,第 项是复位入口。 + * 硬件复位时自己读这张表,不需要咱们写一行汇编。 */ +__attribute__((section(".isr_vector"), used)) +const uintptr_t vector_table[] = { + (uintptr_t)&_estack, + (uintptr_t)Reset_Handler, +}; +``` + +开头那对 `memcpy`/`memset` 不是炫技,是**笔者真实的踩坑**:第一版笔者只写了两个裸的 while 循环,链接器当场罢工——`undefined reference to memcpy`。原因是 gcc 的「循环模式识别」会把抄写循环悄悄换成 `memcpy` 调用,而 `-nostdlib` 的世界里没有 libc。咱们以为在写循环,编译器译成了函数调用——汇编层看到的才是真相,这句话在拍 01 就说过了。 + +然后是这张表的读法。`vector_table` 用 `__attribute__((section(".isr_vector")))` 放进一个专门的段,链接脚本保证它是 flash 的**第一块**——因为硬件复位时无条件从地址 0 读它:第 0 项 `_estack` 是初始栈顶(栈从 RAM 顶端向下长),第 1 项 `Reset_Handler` 是入口。这就是「谁叫醒 main」的完整答案:**硬件读表,跳进 Reset_Handler,它搬完家,再叫 main。** + +而 `Reset_Handler` 干的两件事,正是拍 01 埋的伏笔全部兑现:`.data` 段的变量「初值在 flash、生活在 RAM」,所以要把行李从 flash 抄进 RAM;`.bss` 段按合同是全零(NOBITS,不占文件一字节),所以上电第一件事是把那块 RAM 刷干净。当时说「程序启动时内存里划一块零就行」——划零的人,就是这里。 + +## 住址由这张纸决定 + +出生证明里那些 `_estack`、`_sdata`,不是变量,是链接脚本签发的地址。裸机世界里没有操作系统替咱们选加载地址,**每个段住在哪,你自己说了算**: + +```ld +/* 主线拍 06 · 没有屏幕的机器 —— 程序的住址由这张纸决定 + * 对应教程:tutorial/journey/06-qemu-uart.md + * 目标:QEMU mps2-an385 —— 代码区在 0x00000000,RAM 在 0x20000000 + */ +ENTRY(Reset_Handler) + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 512K +} + +_estack = ORIGIN(RAM) + LENGTH(RAM); /* 栈从 RAM 顶端向下长 */ + +SECTIONS +{ + .isr_vector : { + KEEP(*(.isr_vector)) /* 向量表必须是第一块 */ + } > FLASH + + .text : { + *(.text*) + *(.rodata*) + } > FLASH + + _sidata = LOADADDR(.data); /* .data:行李在 flash,人在 RAM */ + + .data : { + _sdata = .; + *(.data*) + _edata = .; + } > RAM AT > FLASH + + .bss : { + _sbss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > RAM +} +``` + +`MEMORY` 块声明这块板的两片地:flash 从 0 开始(向量表必须住在 0),RAM 从 0x20000000 开始——这两个地址来自板子的手册,QEMU 照着真实硬件建模。`SECTIONS` 里每一行都是拍 01 `readelf -S` 看过的老朋友,只是这次它们的位置**由咱们分配**。最有意思的是 `.data : > RAM AT > FLASH`:两个地址——运行地址在 RAM(`> RAM`),存储地址在 flash(`AT > FLASH`),`LOADADDR` 取的正是行李的存身处。Startup 里那趟搬家,搬的就是这两地址之间的差。 + +## 串口:这台机器唯一的嘴 + +没有屏幕、没有 printf、没有操作系统——输出靠什么?靠 **UART**:一块外设寄存器,你往特定地址写一个字节,它就把这个字节变成电平波形发出去。这就是嵌入式世界的老话:**串口就是板子的 stdout**。 + +```c +/* 主线拍 06 · 没有屏幕的机器:串口是我们唯一的嘴 + * 对应教程:tutorial/journey/06-qemu-uart.md + * 目标板:QEMU mps2-an385(Cortex-M3),UART0 = CMSDK APB UART + */ +#include + +#define UART0_BASE 0x40004000UL +#define UART_DATA (*(volatile uint32_t *)(UART0_BASE + 0x00)) +#define UART_STATE (*(volatile uint32_t *)(UART0_BASE + 0x04)) +#define UART_CTRL (*(volatile uint32_t *)(UART0_BASE + 0x08)) +#define UART_BAUDDIV (*(volatile uint32_t *)(UART0_BASE + 0x0C)) + +#define UART_STATE_TXBF (1u << 0) /* 发送缓冲满:满了就等 */ +#define UART_CTRL_TXEN (1u << 0) /* 打开发送 */ + +static void uart_init(void) +{ + UART_BAUDDIV = 16; /* QEMU 不仿真波特率时序;真板按 PCLK/baud 算 */ + UART_CTRL = UART_CTRL_TXEN; /* 我们只需要说话,不需要听 */ +} + +static void uart_putc(char c) +{ + while (UART_STATE & UART_STATE_TXBF) { } + UART_DATA = (uint32_t)c; +} + +static void uart_puts(const char *s) +{ + while (*s) { + if (*s == '\n') + uart_putc('\r'); /* 串口世界的礼貌:\n 前面补一个 \r */ + uart_putc(*s++); + } +} + +int main(void) +{ + uart_init(); + uart_puts("hello, EmbedBox!\n"); + uart_puts("journey beat 06: no OS, just UART (v0.6.0)\n"); + for (;;) { } /* 裸机主循环:永远不许返回 */ +} +``` + +这段代码每个字都值得初学者看三遍。`0x40004000` 是这块板 UART0 的基地址(来自板子手册),`+0x00/0x04/0x08` 的偏移是 CMSDK UART 的寄存器排布:DATA 是数据口,STATE 是状态,CTRL 是开关,BAUDDIV 是波特率分频。最外层那圈 `(*(volatile uint32_t *)...)` 是嵌入式的心跳:不加 `volatile`,编译器看程序循环读一个「没改过的地址」,会好心地把读操作优化掉——于是 CPU 永远等不到缓冲区变空,程序死在等待里。真板和 QEMU 都会如实扮演这个坑。 + +`uart_putc` 的逻辑是所有外设驱动的母版:**等硬件准备好,再动手**。TXBF(发送缓冲满)是 UART 在说「上一个字节我还没发完」,咱们就等。`uart_puts` 里补 `\r` 是串口世界的礼貌:很多终端把 `\n` 只当「下移一行」不当「回到行首」,`hello` 会变成阶梯——补一个 `\r` 才是干净的换行。 + +## 上电 + +构建流程和拍 05 同构,三个新面孔:`-mcpu=cortex-m3 -mthumb` 精确点名 CPU 和指令集(Thumb-2),`-nostdlib` 宣布谁都不借,`-T linker.ld` 递上咱们自己签发的住址纸: + +```bash +arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2 startup.c -o startup.o +arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2 main.c -o main.o +``` + +```bash +arm-none-eabi-gcc -nostdlib -T linker.ld startup.o main.o -o hello.elf +``` + +先验货。`objdump -f` 这次有三处新看点: + +```bash +arm-none-eabi-objdump -f hello.elf +``` + +```text + +hello.elf: file format elf32-littlearm +architecture: armv7, flags 0x00000112: +EXEC_P, HAS_SYMS, D_PAGED +start address 0x00000009 +``` + +flags 里 `HAS_RELOC` 没了,换来 **`EXEC_P`**——拍 01 讲过,目标文件「有待重定位项」,链接完成后地址全部落定,这回是在咱们自己的链接脚本上落定的。架构栏的 `armv7` 替代了拍 05 的默认档 `armv4t`,这是点名 CPU 的效果。还有一个悬案:start address 是 `0x9`,可 Reset_Handler 明明在地址 0x8?这是 Cortex-M 的 Thumb bit:入口地址的 bit0 置 1 表示「这是 Thumb 指令」,CPU 取指前自动把它抹掉——这个 bit0,在后面的反汇编和链接脚本里还会反复露面。 + +再出裸二进制,看体重: + +```bash +arm-none-eabi-objcopy -O binary hello.elf hello.bin +ls -l hello.elf hello.bin +``` + +```text +-rwxr-xr-x 1 charliechen charliechen 268 Aug 23 14:49 hello.bin +-rwxr-xr-x 1 charliechen charliechen 9388 Aug 23 14:49 hello.elf +``` + +**268 字节。** 上一拍拖着半主机后端的 `.bin` 是 62KB——这回没有 newlib、没有 rdimon、没有别人的家具,向量表、启动代码、两个驱动函数、两句话,全部家当 268 字节。这就是裸机的体重。 + +然后,上电: + +```bash +timeout 5 qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none \ + -kernel hello.elf +``` + +五个参数逐个读:`-M mps2-an385` 指定机器型号(板子);`-cpu cortex-m3` 指定 CPU;`-nographic` 关掉图形界面,**把串口直接接到咱们的终端**;`-monitor none` 关掉 QEMU 自带的控制台,免得它和串口抢 stdin;`-kernel hello.elf` 把镜像塞进板子并按下复位键。`timeout 5` 是因为咱们这位主角说完话就进死循环,不打算退休,5 秒后替它关机。终端上出现的是: + +```text +hello, EmbedBox! +journey beat 06: no OS, just UART (v0.6.0) +``` + +**它开口了。** 从一行 `hello.c` 走到这里:被解剖、生过病、长成三个文件、住进 CMake 工程、搬过家——现在它住在一块没有操作系统的板子上,用一根(虚拟)串口线向你问好。这就是 community 计划书里那句「在 QEMU 中运行,并保存一次可追溯的串口或运行结果」的前半句。 + +## 证据落袋 + +后半句「可追溯」现在完成。把串口输出捕获成文件,和仓库里预存的期望值逐字节比对: + +```bash +diff -u expected-serial.txt serial.txt +``` + +```text +两份逐字节一致 +``` + +仓库里的 [expected-serial.txt](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/blob/main/src/journey/06-qemu-uart/expected-serial.txt) 不是手写的——它是首次真跑的原始捕获,连 `\r\n` 都是程序亲手发的。从今往后,CI 每次重放这一拍,都会重新上电、重新捕获、重新 diff——**程序的行为从此对这份文件负责**。哪天有人改坏了驱动,CI 会指着差异告诉咱们「它说的话变了」。这就是「可验证」三个字的物理形态——不是承诺,是字节。 + +## 兑现一个伏笔:target remote + +拍 02 结尾说过:这一切终将隔着一条线搬过去。现在程序在另一台机器里,咱们隔着 TCP 隔空调试: + +```bash +gdb -q -batch -iex 'set debuginfod enabled off' \ + -ex 'target remote localhost:12345' \ + -ex 'break main' \ + -ex 'continue' \ + -ex 'bt' \ + hello.elf +``` + +(先把 QEMU 用 `-S -gdb tcp::12345` 起在后台——`-S` 让它开机即停,`-gdb` 打开一个 gdbstub 服务口。) + +```text +Reset_Handler () at startup.c:39 +39 while (dst < &_edata) /* .data:把行李从 flash 搬进 RAM */ +Breakpoint 1 at 0xa8: file main.c, line 18. + +Breakpoint 1, main () at main.c:18 +18 UART_BAUDDIV = 16; /* QEMU 不仿真波特率时序;真板按 PCLK/baud 算 */ +#0 main () at main.c:18 +[Inferior 1 (process 1) detached] +``` + +读这份成绩单:一接上,程序正停在 `Reset_Handler` 搬 `.data` 的行——开机即停的效果;`break main` 之后 `continue`,断点隔着一条 TCP 线**精准命中另一台机器里的 main**,`bt` 递上调用栈。命令还是拍 02 那五件套,一个字没变,变的只是被调试者住在本机进程还是板子里。将来咱们调试真 STM32,用的 OpenOCD 干的就是 QEMU 这个 `-gdb` 的活:把芯片的调试口翻译成同一套 gdb 协议。今天这堂课,直接复用。 + +## 这一拍咱们带走了什么 + +一份出生证明(向量表 + 复位流程,`.data`/`.bss` 的搬家与清零)、一张住址纸(链接脚本,MEMORY 与 SECTIONS)、一个驱动母版(volatile MMIO + 等硬件准备好)、一枚指纹(expected-serial.txt)——还有 `target remote`,和一根永远通向真板的线。268 字节,无借贷,全部家当你自己签名。 + +到这里,**「从 clean clone 到可追溯的串口证据」的完整链条咱们已经亲手走通了一次**。这也是本书主线的技术终点——剩下的几拍,讲的是怎么和这位新朋友共同生活:怎么记录它、怎么让编辑器认识它、以及怎么把它送上真正的硬件。 + +## 下一站 + +机器开口说话了。但如果这段旅程丢了——代码没处放、改动没法回溯、成果没法交给人——一切等于没发生。下一拍,把旅程记下来:Git 的深度,和一份像样的 README。 diff --git a/tutorial/journey/07-git.md b/tutorial/journey/07-git.md new file mode 100644 index 0000000..724706b --- /dev/null +++ b/tutorial/journey/07-git.md @@ -0,0 +1,222 @@ +--- +title: 拍 07 · 记录旅程:Git 的深度与一份像样的 README +order: 7 +verify: scripts/journey/07-git.sh +tier: ci-matrix +verified-on: WSL2(Arch)/ git 2.55.0;CI 矩阵 ubuntu-latest + windows-latest +--- + +# 拍 07 · 记录旅程:Git 的深度与一份像样的 README + +咱们在拍 00 就用过 git 了——`git clone` 那条命令,当时说「先照抄,这一拍解释」。现在兑现。机器开口说话了(拍 06),但如果这段旅程没有记录:代码没处放、改动没法回溯、成果没法交给人——一切等于没发生。这一拍咱们把「记录」这件事做扎实:在临时目录里从零建一个小仓,亲手走完 git 的日常闭环,包括一次真实的合并冲突。 + +本章没有 `src/` 实验——实验对象就是一个即建即弃的小仓库,配对脚本会替咱们把它完整重放一遍。 + +## 建仓:第一份家业 + +```bash +git init -b main box +``` + +`git init` 建仓,`-b main` 顺便指定主分支名(不指定的话,新版 git 会友好地提示它打算叫什么)。进到 `box/` 里,放两件家当:咱们的老主角 `hello.c`(单文件时代的那位),和一份 README。然后问 git:「你看到什么了?」 + +```bash +git status +``` + +```text +On branch main + +No commits yet + +Untracked files: + (use "git add ..." to include in what will be committed) + README.md + hello.c + +nothing added to commit but untracked files present (use "git add" to track) +``` + +git 的世界观是一台**户口登记机**:工作目录里的一切,它先当「无户口」(Untracked)看待。`git status` 是咱们和它对账的窗口,这个命令咱们之后每天要敲几十遍。登记,然后落第一笔户口: + +```bash +git add README.md hello.c +git commit -m "hello: journey starts" +``` + +```text +[main (root-commit) 7ad7635] hello: journey starts + 2 files changed, 14 insertions(+) + create mode 100644 README.md + create mode 1006 +``` + +(那串 `7ad7635` 是提交的指纹——每次提交都不同,咱们跑出来的必然是另一串,这很正常。) + +## 改动、差异与户口本 + +程序长大了一行,加了句 `printf("journey: v0.2\n");`。改完先别急着提交,看看 git 怎么描述这次改动: + +```bash +git diff +``` + +```text +diff --git a/hello.c b/hello.c +index df3d6b5..02323af 100644 +--- a/hello.c ++++ b/hello.c +@@ -3,5 +3,6 @@ + int main(void) + { + printf("hello, EmbedBox!\n"); ++ printf("journey: v0.2\n"); + return 0; + } +``` + +`diff` 是 git 的显微镜:加了哪行、在哪个上下文里,一清二楚。将来咱们 review 别人的代码、或者排查「到底是哪次改动引入了问题」,读的都是这种格式。确认无误,再登记、落笔: + +```bash +git add hello.c +git commit -m "hello: add version line" +``` + +```bash +git log --oneline +``` + +```text +51424d7 hello: add version line +7ad7635 hello: journey starts +``` + +户口本(`git log`)从新到旧列着每笔提交。`--oneline` 是紧凑模式;想看每笔的完整改动,`git log -p` 连 diff 一起端上来。 + +## 改坏了?历史来救 + +现在演示这一拍真正的卖点。手滑了——假设咱们把 `main` 函数整个删了,文件一保存,心里一凉。先看事故报告: + +```bash +git diff --stat +``` + +```text + hello.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) +``` + +工作目录和户口本对不上了。但注意:**户口本里的那笔提交完好无损**——git 的提交是不可变的历史,咱们在工作目录里怎么折腾都伤不到它。所以救回是一行命令的事: + +```bash +git restore hello.c +``` + +```text +hello.c 已恢复,文件内容和最近一次提交一致 +``` + +`git restore` 把文件恢复到最近一次提交的样子(配对脚本随后 grep 验证了 `journey: v0.2` 那行确实回来了)。这就是「记录」的含金量:拍 02 咱们靠 gdb 救回了程序的逻辑,这一拍咱们多了第二重保险——**任何提交过的状态,永远可以回去**。`git log` 里任何一个指纹,都是一台时光机。 + +## 分支:在不打扰主线的地方折腾 + +想改 README,又怕改坏主线?开条分支: + +```bash +git checkout -b polish-readme +``` + +```text +Switched to a new branch 'polish-readme' +``` + +分支不是「复制一份代码」,只是一个**可以移动的书签**:咱们现在在 `polish-readme` 这枚书签上提交,主线那边风平浪静。在这里把 README 的状态行改成「串口输出已验证 diff 一致」,提交;然后切回主线: + +```bash +git checkout main +``` + +在主线上,**同一个位置**,把那行改成另一个说法——「串口输出已捕获,连 `\r\n` 都是亲手发的」,提交。好了,炸药埋好了:两边动了同一行。 + +## 合并:冲突,以及它的解法 + +```bash +git merge polish-readme +``` + +```text +Auto-merging README.md +CONFLICT (content): Merge conflict in README.md +Automatic merge failed; fix conflicts and then commit the result. +``` + +**CONFLICT**——这是新手最怕的字眼,但请把它重新理解为一件好事:git 把能自动合并的都合并了,唯独「两边对同一行给出了不同意见」的地方,它**不敢替你做主**,于是把裁决权连同现场一起交给咱们。看现场: + +```bash +git status +``` + +```text +On branch main +You have unmerged paths. + (fix conflicts and run "git commit") + (use "git merge --abort" to abort the merge) + +Unmerged paths: + (use "git add ..." to mark resolution) + both modified: README.md +``` + +打开 README.md,git 在冲突处留了标记: + +```text +<<<<<<< HEAD +- 拍 06:串口输出已捕获,连 \r\n 都是亲手发的 +======= +- 拍 06:串口输出已验证 diff 一致 +>>>>>>> polish-readme +``` + +`<<<<<<<` 到 `=======` 是你这边的(HEAD 即当前分支),`=======` 到 `>>>>>>>` 是对方的。解法永远是同一个:**动手编辑,留下咱们认为对的最终样子,删掉所有标记**。咱们裁决成一句更准确的: + +```markdown +# box —— 一个程序的一生 + +主线实验仓:EmbedBox journey 的动手记录。 + +## 状态 + +- 拍 06:串口输出已捕获,且与 expected-serial.txt 逐字节一致 +``` + +然后告诉 git 裁决完毕,收尾: + +```bash +git add README.md +git commit -m "merge polish-readme: pick the precise wording" +``` + +顺手打个里程碑——tag 是牢牢锚在历史上的刻度,以后 `git checkout v0.1-journey` 可以随时回到这个精确时刻,发版、留档、交作业都靠它: + +```bash +git tag v0.1-journey +git tag +``` + +```text +v0.1-journey +``` + +## README:协作的门面 + +这一拍的另一半主角是 README 本身。咱们大概注意到,这份 README 用的是 Markdown——`#` 是标题、`-` 是列表、反引号是行内代码。为什么值得学?因为**开源世界的门面全是它写的**:GitHub 的项目首页、Issue、Pull Request、代码里的文档,全是 Markdown。一份好 README 至少回答四件事:这是什么、怎么跑、依赖什么、结果在哪。上面那份小 README 已经是个最小样板。 + +至于「交作业」的完整形态——把本地仓库推上 GitHub、开分支、发 Pull Request——流程就是今天这套动作加一个 `git push` 和网页上的两次点击,GitHub 的官方文档([Hello World 教程](https://docs.github.com/zh/get-started/start-your-journey/hello-world))二十分钟能走完。等咱们在真实仓库提第一个 PR 时,会发现冲突解决这一步,咱们已经亲手做过。 + +## 这一拍咱们带走了什么 + +日常闭环七件套:`status` / `add` / `commit` / `diff` / `log` / `checkout -b` / `merge`;两道保险:提交不可变(`restore` 随时可回)与 tag(锚定里程碑);以及一份不再恐惧 CONFLICT 的心态——那不是事故,是 git 在请咱们签字。 + +## 下一站 + +记录有了,证据有了。但日常工作的椅子还不舒服:编辑器看不懂咱们的代码,满屏红线,跳转失灵。最后一拍,把前面所有工具接进 VS Code——顺便咱们会发现,那枚拍 04 埋下的 `compile_commands.json`,就是为这一刻准备的。 diff --git a/tutorial/journey/08-vscode.md b/tutorial/journey/08-vscode.md new file mode 100644 index 0000000..67fce47 --- /dev/null +++ b/tutorial/journey/08-vscode.md @@ -0,0 +1,101 @@ +--- +title: 拍 08 · 编辑器接线:让 VS Code 认识你的工具链 +order: 8 +verify: scripts/journey/08-vscode.sh +tier: manual +verified-on: 机械部分(配置存在性/JSON 合法性/任务链解析)由脚本验证;编辑器交互项见正文清单,待首次人工走查后回填 +--- + +# 拍 08 · 编辑器接线:让 VS Code 认识你的工具链 + +这一拍**不教编辑器**。VS Code 的教程满山遍野,不缺这一本。它教的是一件小得多也重要得多的事:**把前八拍学会的工具——gcc、CMake、gdb——接进编辑器**,让「按一个键」背后跑的还是咱们认识的那几条命令。工具永远比 IDE 重要,这是咱们在拍 00 就立下的世界观;这一拍只是让世界观过得舒服点。 + +编辑器交互没法无人值守重放,所以本拍是全书唯一 `tier: manual` 的一拍——配对脚本负责机械部分(配置文件存在、JSON 合法、任务链完整),真正的「红线消失、断点命中」需要咱们亲手走一遍,正文末有一张清单。 + +## 病症:满屏红线 + +拿拍 04 的 CMake 工程用 VS Code 打开(Windows 用户走 Remote-WSL,在 WSL 里 `code .`),多半会看到熟悉的病症:代码能编译,编辑器却满屏红线,`#include "util.h"` 报「找不到头文件」,跳转到定义时灵时不灵。原因一句话就能说清:**IntelliSense 不是编译器,它只是在一遍遍猜咱们的编译视角**——猜错了视角,猜出来的世界自然是错的。而猜,本可以不必猜。 + +## 第一根线:compile_commands.json + +还记得拍 04 里那句 `set(CMAKE_EXPORT_COMPILE_COMMANDS ON)` 吗?当时说它在 `build/` 里留了一枚「给编辑器的名片」。现在把名片递过去——在工程根目录的 `.vscode/settings.json` 里: + +```json +{ + "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json", + "files.associations": { + "*.h": "c" + }, + "editor.insertSpaces": true, + "editor.tabSize": 4 +} +``` + +关键的只有第一行:告诉 C/C++ 扩展,**每个文件怎么编译,以这份 JSON 清单为准**——哪个编译器、什么标准、哪些 include 路径,全部来自构建系统的真实视角,不再靠猜。红线通常在这一行落笔后当场消退;`greet` 跳到定义、悬停看签名,也都顺了。其余三行是舒适度配置(把 `.h` 识破成 C 而不是 C++,空格缩进四格)。 + +需要装的东西就一件:C/C++ 扩展(ms-vscode.cpptools,扩展面板搜 `ms-vscode.cpptools` 装第一个就是)。Windows 用户在 Remote-WSL 模式下,扩展要装在 **WSL 侧**(扩展面板会分区提示),这一点装错了是经典坑。 + +## 第二根线:一键构建 + +编辑器的「运行」按钮背后应该是咱们自己的构建命令。`.vscode/tasks.json`: + +```json +{ + "version": "2.0.0", + "tasks": [ + { + "label": "cmake-build", + "type": "shell", + "command": "cmake --build build", + "group": { "kind": "build", "isDefault": true }, + "problemMatcher": ["$gcc"] + } + ] +} +``` + +`command` 一栏就是咱们在拍 04 敲过的那条 `cmake --build build`,一个字没改——现在它绑在了 `Ctrl+Shift+B` 上。`problemMatcher` 让 gcc 的报错变成编辑器里可点击跳转的条目。**IDE 的构建按钮不是魔法,是咱们自己那条命令的马甲**;理解这一点的人,换任何 IDE 都能在五分钟内配好构建。 + +## 第三根线:F5 就是 gdb + +最后把拍 02 的 gdb 接到 F5 上。`.vscode/launch.json`: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) hello", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/hello", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "preLaunchTask": "cmake-build" + } + ] +} +``` + +逐行认亲:`MIMode: gdb`——调试器就是拍 02 那位,断点、单步、变量窗,底下全是同一套 gdb;`preLaunchTask` 指回上一节的 `cmake-build`,F5 = 先构建、再调试;`program` 指向拍 04 的产物 `build/hello`。在 `main.c` 里点一下行号左侧设断点,按 F5——构建日志滚过,程序停在断点上,左边变量窗里 `total`、`data` 排排坐。**咱们在拍 02 用命令行做过的一切,现在有了图形界面,但没有一层魔法。** + +再往前看一步:`launch.json` 里再配一个 `target remote`(或装上 Cortex-Debug 扩展指向 OpenOCD),F5 就能调试拍 06 那样的板子——接线方式和咱们已经会的完全一致。 + +## 收束全书:体检,然后出发 + +三根线接完,编辑器认识的不再是「一堆文本」,而是**咱们的**工具链。这也是全书的收束时刻。回望一遍咱们走过来的路:确认机器活着(拍 00),看程序出生、拆开它的肚子(拍 01),治好一场 printf 够不到的病(拍 02),让它长大并学会记账(拍 03/04),搬去另一个架构(拍 05),在没有操作系统、没有屏幕的机器上亲口说话、留下证据(拍 06),把旅程记录成可回溯的历史(拍 07),最后把这一切接进日常的椅子(拍 08)。 + +**从 clean clone 到可追溯的串口证据——这条 community 计划书里的主线,咱们已经完整走通。** 剩下的问题只有一个:接下来去哪。分流口就在眼前:想把语言基本功打深,去 [C-Journey](https://github.com/Awesome-Embedded-Learning-Studio/C-Journey)(C 语言承重墙)和 [Tutorial_AwesomeModernCPP](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP)(现代 C++);想理解程序之上的系统,去 [PenguinLab](https://github.com/Awesome-Embedded-Learning-Studio/PenguinLab)(Linux 内核实验)和 [Tutorial_FreeRTOS](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_FreeRTOS);想上真硬件,去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge)(STM32 主教学线——咱们的 Cortex-M 经验直接复用)和 [imx-forge](https://github.com/Awesome-Embedded-Learning-Studio/imx-forge)(Embedded Linux 入口)。 + +无论去哪,第一件事仍然是拍 00 那份体检——工具永远比 IDE 重要,旅程永远从确认机器活着开始。 + +## 人工走查清单 + +- 在拍 04 的工程根目录放入本拍的 [.vscode/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/08-vscode/.vscode/),`code .` 打开 +- IntelliSense 生效:`src/util.c` 里 `greet` 跳转可用,无红线 +- F5 触发 `cmake-build` 并启动 gdb 会话,断点可命中 +- Remote-WSL(Windows 用户):左下角绿色角标显示 WSL 发行版 diff --git a/tutorial/journey/90-physical-serial.md b/tutorial/journey/90-physical-serial.md new file mode 100644 index 0000000..fefb205 --- /dev/null +++ b/tutorial/journey/90-physical-serial.md @@ -0,0 +1,58 @@ +--- +title: 尾声 A · 物理串口:接上真线的那天 +order: 90 +tier: manual +verified-on: 待人工回填(需 USB-TTL 转接器与目标板;本章命令不在 CI 重放范围) +--- + +# 尾声 A · 物理串口:接上真线的那天 + +拍 06 里,串口是 QEMU 递到咱们终端上的一行行文字。真硬件上,串口是一根**真实的线**:三根杜邦线、一块几十块的 USB-TTL 转接器,和咱们从数据手册里查出来的引脚。这一篇是拿到第一块板子那天的操作指南——命令都不复杂,但每一条都需要真硬件在场,所以它是 `manual` 级:CI 不重放,断言换成人眼和终端本身。 + +## 行前准备 + +买一块 USB-TTL 串口转接器(CH340、CP2102、FT232 方案的都行,几块到几十块钱),注意选**3.3V 电平**或带电平跳线的型号。然后查目标板的引脚图,找到三个脚:TX(发送)、RX(接收)、GND(地)。接线只有一条纪律加一个口诀:纪律是 **GND 必须接**——没有共同的地,电平无从谈起;口诀是**TX 接 RX,交叉相接**——这边的嘴对那边的耳朵,那边的嘴对这边的耳朵,接成环就谁也听不见谁。 + +## 把线插进系统 + +转接器插上电脑的 USB 口。Linux(含 WSL2——USB 串口设备默认不进 WSL,需要在 Windows 侧用 `usbipd` 转发,或直接在 Windows 里用)上,先问内核「你看到新东西了吗」: + +```bash +dmesg | tail +``` + +```text +[12345.678901] ch341-uart ttyUSB0: break control not supported, using simulated break +[12345.678912] usb 1-2: ch341 adapter now disconnected from ttyUSB0 +``` + +(示意输出;看到 `ttyUSB0` 字样就是它。)设备节点在 `/dev/ttyUSB0`——拍 00 讲过的「一切皆文件」,串口也是一个。确认一下: + +```bash +ls /dev/ttyUSB* +``` + +第一次打开它,咱们多半会撞上 `Permission denied`:串口设备属于 `dialout` 组,咱们不在组里。把自己加进去(一次性动作,重新登录生效): + +```bash +sudo usermod -aG dialout $USER +``` + +这是 Linux 嵌入式的第一道成人礼,几乎每个人都撞过一次。 + +## 听它说话 + +最朴素的听法,连工具都不用装: + +```bash +stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -echo +cat /dev/ttyUSB0 +``` + +`stty` 把这根线配置成嵌入式最典型的参数:115200 波特、8 数据位、1 停止位、无校验(这句口诀咱们会在无数板子的文档里再见到)。然后 `cat`——把设备当文件读,板子说的每个字节都会滚上咱们的终端。按板子的复位键,启动日志哗哗流出来的那一刻,和拍 06 里 QEMU 上电的那一幕,是同一个瞬间。 + +日常顺手的工具是 `picocom` 或 `minicom`(以 picocom 为例,`picocom -b 115200 /dev/ttyUSB0`,退出是 `Ctrl-A` 再 `Ctrl-X`);Windows 侧则是设备管理器里认领一个 COM 口号,用 PuTTY 的 Serial 模式连它。 + +## 从这里出发 + +物理串口一通,咱们就有了板子的「stdout + stderr + 救命稻草」:启动日志、panic 栈、bootloader 交互,全从这根线来。接下来去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge),那里有真板、真烧录、真调试的完整路线;想看这根线上跑的电平波形长什么样,去 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware) 的示波器与逻辑分析仪章节——那是硬件深水区,与本篇的边界就在这里。 diff --git a/tutorial/journey/91-lab-safety.md b/tutorial/journey/91-lab-safety.md new file mode 100644 index 0000000..55e62b9 --- /dev/null +++ b/tutorial/journey/91-lab-safety.md @@ -0,0 +1,38 @@ +--- +title: 尾声 B · 实验安全:别把板子和自己搞坏 +order: 91 +tier: manual +verified-on: 常识性内容;具体器件的容忍值以数据手册为准 +--- + +# 尾声 B · 实验安全:别把板子和自己搞坏 + +这是全书最短、也最不该跳过的一篇。前面十拍,坏掉的程序可以 `git restore`,坏掉的虚拟机可以重开;真硬件坏了就是坏了,烧的是钱,少数情况下还会咬人。这一篇只讲「恰好够用」的安全底线——想深入电路与测量的原理,去 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware),那是硬件承重墙,这里只发安全帽。 + +## 电压:3.3 与 5 的恩怨 + +嵌入式小板的常见逻辑电平是 3.3V,传感器模块五块钱的和五十块钱的区别常在「是否容忍 5V」。**把 5V 接进只认 3.3V 的引脚,是最常见的烧板方式**,而且死状安静——没有火花,没有烟,只是那个引脚从此再也不响应。底线三条:接任何引脚前,确认双方电平(查数据手册,不是查记忆);电平不匹配就用电平转换模块,几毛钱的事;不确定时,先用下一节的万用表量,而不是用引脚试。 + +## 共地:回路的地基 + +拍 06 咱们给程序分配了住址;电路的世界里,**所有参与通信的设备必须共享同一个地**(GND 连 GND)——电流要有回路,「地」就是那条回程路。USB-TTL 和板子之间只接 TX/RX 不接 GND,收到的会是乱码或寂静,这是新手第二大经典事故(第一大见上节)。测量同理:万用表、示波器的地线夹,夹的都是和被测电路共地的点。 + +## 静电:看不见的那一掌 + +秋冬干燥,咱们摸门把手会被电一下——那一下的量级,足够 MCS 级芯片的栅极记住一辈子。拿板子前,摸一下接地的金属(暖气片、机箱裸露金属)放掉身上的静电;有条件,防静电手环和防静电垫当然更好。板子不用时放进防静电袋,而不是随手放在化纤桌布上。 + +## 万用表:三招防身 + +一块几十块的万用表,新手期只需要三招。**电压档**:并联着量,量之前确认档位和量程——量 3.3V 引脚读数 5V,说明供电就有问题,先断电查电源。**通断档**(蜂鸣档):**断电后**用来验证「这两点到底通没通」——查虚焊、查短路,接线和上电前的最后检查全靠它。**电流档**:必须**串联**进回路,而且用完立刻换回电压档——电流档内阻近零,下次直接并联到电源上就是一支一次性保险丝熔断器(运气差时是笔更贵的学费)。 + +## 上电前三问 + +接好线、手放在电源开关上时,过一遍: + +一,**电压对吗?**——供电是 5V 还是 3.3V,板子上有没有稳压,引脚容忍范围是多少。二,**极性对吗?**——VCC 和 GND 有没有接反(接反是第三大烧板原因;很多板子的反接是直接短路)。三,**共地了吗?**——所有要通信的设备,GND 连在一起了吗。 + +三问都过,再上电。这三秒钟,是嵌入式最便宜的保险。 + +## 出发 + +安全帽发完了。带上它,去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge) 和 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware)——前者带你把拍 06 的骨架搬上真 STM32,后者带你理解每一根线背后的电气世界。一路顺风,注意安全。 diff --git a/tutorial/journey/index.md b/tutorial/journey/index.md new file mode 100644 index 0000000..2be1830 --- /dev/null +++ b/tutorial/journey/index.md @@ -0,0 +1,26 @@ +--- +title: 主线 · 一个程序的一生 +order: 1 +--- + +# 主线 · 一个程序的一生 + +这是 EmbedBox 的**首刷推荐路线**。全书只有一个主角——一个会打招呼的小程序:它从一行 `hello.c` 开始,被解剖、生病、长大、工程化、搬家、进入一台没有屏幕的机器、开口说话、被记录、被编辑器认领。每一拍,都是被一个具体的事故逼着学会一件新工具。 + +补课与查用的朋友,各工具的系统内容在参考篇(建设中);从零开始的朋友,**从这里走**。 + +| 拍 | 故事 | 状态 | +|---|---|---| +| [00 造机器](./00-env-check.md) | 环境体检:clone 下来先确认机器活着 | 完成 | +| [01 造程序](./01-elf.md) | 看着源码一步步变成 ELF,再把它拆开看 | 完成 | +| [02 治病](./02-gdb.md) | 程序被(笔者)弄坏了,printf 够不到病灶,GDB 出场 | 完成 | +| [03 程序长大](./03-make.md) | 改了头文件忘重编,炸出 undefined reference;让 make 接管记账 | 完成 | +| [04 工程化](./04-cmake.md) | 库与应用分离,CMake 产出 compile_commands.json | 完成 | +| [05 搬家](./05-cross.md) | 宿主机二进制目标机跑不了,交叉编译 | 完成 | +| [06 没有屏幕的机器](./06-qemu-uart.md) | QEMU 给身体,串口开口说话,证据落袋 | 完成 | +| [07 记录旅程](./07-git.md) | Git 与 Markdown:让旅程可复现、可交付 | 完成 | +| [08 编辑器接线](./08-vscode.md) | 把工具链接进 VS Code | 完成 | +| [尾声 A 物理串口](./90-physical-serial.md) | USB-TTL、dialout、听真板说话(需硬件) | 完成 | +| [尾声 B 实验安全](./91-lab-safety.md) | 3.3V/5V、共地、静电、万用表三招(需硬件场景) | 完成 | + +> 这一卷的每章正文命令,都被 `scripts/journey/` 里的配对脚本在 CI 中逐字重放——咱们看到的输出是真跑出来的,不是编的。尾声两拍为 manual 级(需硬件/编辑器交互),由人工走查声明背书。 From 65debfd00b7b87a5ee78e3f9fbb68abe8f0a127c Mon Sep 17 00:00:00 2001 From: Charliechen114514 <725610365@qq.com> Date: Sun, 23 Aug 2026 23:20:03 +0800 Subject: [PATCH 2/4] site update --- .github/workflows/build-check.yml | 10 +- .gitignore | 1 + assets/brand/embedbox-mark-green.png | Bin 0 -> 37135 bytes assets/brand/embedbox-mark-inverse.png | Bin 0 -> 38523 bytes examples/instructions.md | 16 - project.config.ts | 2 +- scripts/journey/00-env-check.sh | 17 +- scripts/journey/01-elf.sh | 9 +- scripts/journey/02-gdb.sh | 8 +- scripts/journey/03-make.sh | 6 +- scripts/journey/04-cmake.sh | 8 +- scripts/journey/05-cross.sh | 6 +- scripts/journey/06-qemu-uart.sh | 36 +- scripts/journey/07-git.sh | 12 +- scripts/journey/08-vscode.sh | 6 +- scripts/lint.sh | 9 +- scripts/run-all.sh | 19 + site/.vitepress/config/index.ts | 3 +- site/.vitepress/public/embedbox-mark.svg | 8 + .../theme/components/brand/EbMark.vue | 23 ++ .../theme/components/home/EbAfterword.vue | 118 ++++++ .../theme/components/home/EbColophon.vue | 54 +++ .../components/home/EbEvidenceTerminal.vue | 149 +++++++ .../theme/components/home/EbHero.vue | 146 +++++++ .../theme/components/home/EbJourneyLedger.vue | 158 ++++++++ .../theme/components/home/journey-data.ts | 57 +++ site/.vitepress/theme/custom.css | 383 +++--------------- site/.vitepress/theme/index.ts | 10 +- src/journey/01-elf/hello.c | 2 +- src/journey/02-gdb/buggy.c | 2 +- src/journey/03-make/Makefile | 2 +- src/journey/03-make/main.c | 2 +- src/journey/04-cmake/CMakeLists.txt | 2 +- src/journey/04-cmake/src/main.c | 2 +- src/journey/04-cmake/src/util.h | 2 +- src/journey/05-cross/main.c | 2 +- src/journey/06-qemu-uart/CMakeLists.txt | 12 + src/journey/06-qemu-uart/arm-none-eabi.cmake | 8 + src/journey/06-qemu-uart/linker.ld | 2 +- src/journey/06-qemu-uart/main.c | 2 +- src/journey/06-qemu-uart/startup.c | 2 +- tutorial/index.md | 36 +- tutorial/journey/00-env-check.md | 150 +++++-- tutorial/journey/01-elf.md | 66 ++- tutorial/journey/02-gdb.md | 37 +- tutorial/journey/03-make.md | 56 ++- tutorial/journey/04-cmake.md | 34 +- tutorial/journey/05-cross.md | 48 ++- tutorial/journey/06-qemu-uart.md | 133 ++++-- tutorial/journey/07-git.md | 34 +- tutorial/journey/08-vscode.md | 39 +- tutorial/journey/90-physical-serial.md | 58 --- tutorial/journey/91-lab-safety.md | 14 +- tutorial/journey/assets/00/cmd.png | Bin 0 -> 39163 bytes tutorial/journey/assets/00/powershell.png | Bin 0 -> 32317 bytes tutorial/journey/assets/00/vscode-cmdline.png | Bin 0 -> 580757 bytes tutorial/journey/assets/06/real_output.png | Bin 0 -> 30254 bytes tutorial/journey/index.md | 27 +- 58 files changed, 1352 insertions(+), 696 deletions(-) create mode 100644 assets/brand/embedbox-mark-green.png create mode 100644 assets/brand/embedbox-mark-inverse.png delete mode 100644 examples/instructions.md create mode 100644 site/.vitepress/public/embedbox-mark.svg create mode 100644 site/.vitepress/theme/components/brand/EbMark.vue create mode 100644 site/.vitepress/theme/components/home/EbAfterword.vue create mode 100644 site/.vitepress/theme/components/home/EbColophon.vue create mode 100644 site/.vitepress/theme/components/home/EbEvidenceTerminal.vue create mode 100644 site/.vitepress/theme/components/home/EbHero.vue create mode 100644 site/.vitepress/theme/components/home/EbJourneyLedger.vue create mode 100644 site/.vitepress/theme/components/home/journey-data.ts create mode 100644 src/journey/06-qemu-uart/CMakeLists.txt create mode 100644 src/journey/06-qemu-uart/arm-none-eabi.cmake delete mode 100644 tutorial/journey/90-physical-serial.md create mode 100644 tutorial/journey/assets/00/cmd.png create mode 100644 tutorial/journey/assets/00/powershell.png create mode 100644 tutorial/journey/assets/00/vscode-cmdline.png create mode 100644 tutorial/journey/assets/06/real_output.png diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index 3796f65..befbef7 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -1,8 +1,10 @@ name: Build Check on: - pull_request: + push: branches: [main] + pull_request: + workflow_dispatch: jobs: verify: @@ -22,8 +24,14 @@ jobs: shell: pwsh run: choco install -y make + - name: Install cross toolchain & emulator (Linux) + if: runner.os == 'Linux' + run: sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi qemu-system-arm gdb + - name: Lint (commands vs scripts) shell: bash + env: + LINT_STRICT: '1' run: bash scripts/lint.sh - name: Replay all journey scripts diff --git a/.gitignore b/.gitignore index b6c5631..2ed3a48 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ site/.vitepress/.build-tmp/ *.tgz .pnpm-store/ +build/ \ No newline at end of file diff --git a/assets/brand/embedbox-mark-green.png b/assets/brand/embedbox-mark-green.png new file mode 100644 index 0000000000000000000000000000000000000000..86c7fc0bcde5d78c0eb7cc7ac1085aec8b7b985b GIT binary patch literal 37135 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 literal 0 HcmV?d00001 diff --git a/examples/instructions.md b/examples/instructions.md deleted file mode 100644 index 7829ab8..0000000 --- a/examples/instructions.md +++ /dev/null @@ -1,16 +0,0 @@ -# examples — 配套资产说明 - -本目录存放教程正文中引用的配套资产:示例代码、硬件电路图、PCB 文件、数据手册片段等。 - -## 命名约定 - -- 一个教程章节对应的资产,放在以该章命名的子目录里(如 `git/`、`wsl/`)。 -- 文件名用英文小写 + 连字符(`kebab-case`),避免中文 / 空格——与站点「目录全英文」约定一致。 -- 代码文件带语言后缀(`.c`、`.py`、`.dts`);图片用 `.png` / `.svg`。 - -## 与教程正文的关系 - -- 正文 Markdown 在 `tutorial/`,通过相对路径引用本目录的资产。 -- 本目录的文件**不**进 VitePress 的 `srcDir`(不会被渲染成页面),只作为被引用的静态资源。 - -> 本目录原名 `codes_and_assets/`,已改名 `examples/` 并修正文件名拼写(原 `instractions.md` → `instructions.md`)。 diff --git a/project.config.ts b/project.config.ts index 6982971..8776cdd 100644 --- a/project.config.ts +++ b/project.config.ts @@ -51,5 +51,5 @@ export default defineProject({ mermaid: true, }, - favicon: '/EmbedBox/Awesome-Embedded.ico', + favicon: '/EmbedBox/embedbox-mark.svg', }) diff --git a/scripts/journey/00-env-check.sh b/scripts/journey/00-env-check.sh index f570244..7c803ae 100755 --- a/scripts/journey/00-env-check.sh +++ b/scripts/journey/00-env-check.sh @@ -1,17 +1,20 @@ #!/usr/bin/env bash -# ── 拍 00 · 环境体检 ──────────────────────────────────────────── -# 本拍比较特殊:验证脚本本身就是教具——教程教你读懂它输出的体检报告。 +# ── 第 1 个历程 · 环境体检 ──────────────────────────────────────────── +# 本历程比较特殊:验证脚本本身就是教具——教程教你读懂它输出的体检报告。 # 必需工具(git/gcc/make)缺失 → 红;建议工具缺失只提示,不算失败。 # tier: ci-matrix # -# 本脚本的运行方式:bash scripts/journey/00-env-check.sh +# 本脚本的运行方式:./scripts/journey/00-env-check.sh +# +# 正文示例命令(逐字收录,供 lint 对账;脚本自己不会去装): +# sudo apt install git # # 装齐工具的手工指引(不同平台各取所需;脚本自己不会去装): # Ubuntu/Debian: sudo apt install build-essential gdb cmake # Arch: sudo pacman -S base-devel gdb cmake # Windows 先装 WSL2(PowerShell 管理员): # wsl --install -d Ubuntu -# 交叉工具链与模拟器(拍 05/06 才需要,现在可以先不装): +# 交叉工具链与模拟器(第 6/7 个历程 才需要,现在可以先不装): # Ubuntu/Debian: sudo apt install gcc-arm-none-eabi qemu-system-arm # Arch: sudo pacman -S arm-none-eabi-gcc qemu-arm set -euo pipefail @@ -39,12 +42,12 @@ git --version gcc --version | head -1 make --version | head -1 -banner "建议工具(现在缺不要紧,后面的拍会用到再装)" +banner "建议工具(现在缺不要紧,后面的历程会用到再装)" for tool in gdb cmake arm-none-eabi-gcc qemu-system-arm; do if command -v "$tool" >/dev/null 2>&1; then printf ' [ok] %s\n' "$tool" else - printf ' [未装] %s —— 后面的拍会用到,到时候再装也来得及\n' "$tool" + printf ' [未装] %s —— 后面的历程会用到,到时候再装也来得及\n' "$tool" fi done @@ -57,4 +60,4 @@ echo " 2) 它在哪: echo \"\$PATH\" 里有没有那个目录" echo " 3) 名字对吗: 拼写、大小写、别名" echo -echo "✅ 拍 00 · 环境体检 —— 必需项全部就绪" +echo "✅ 第 1 个历程 · 环境体检 —— 必需项全部就绪" diff --git a/scripts/journey/01-elf.sh b/scripts/journey/01-elf.sh index ce790ba..6a83a01 100755 --- a/scripts/journey/01-elf.sh +++ b/scripts/journey/01-elf.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ── 拍 01 · 源码→程序 ─────────────────────────────────────────── +# ── 第 2 个历程 · 源码→程序 ─────────────────────────────────────────── # 重放 tutorial/journey/01-elf.md 的全部命令:把一行 hello.c # 逐步变成可执行文件,并把每一段的中间产物拆开看。 # tier: ci-matrix @@ -8,7 +8,7 @@ set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" SRC="$REPO_ROOT/src/journey/01-elf" -command -v gcc >/dev/null 2>&1 || { echo "FATAL: 没有 gcc,请先完成拍 00 体检" >&2; exit 1; } +command -v gcc >/dev/null 2>&1 || { echo "FATAL: 没有 gcc,请先完成第 1 个历程 体检" >&2; exit 1; } WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT @@ -19,8 +19,7 @@ banner() { printf '\n──────── %s ────────\n' "$* # ═══ 开场:一行命令,先跑起来 ═══ banner "一行命令,先跑起来" -gcc hello.c -o hello -./hello +gcc hello.c -o hello && ./hello ./hello | grep -q 'hello, EmbedBox!' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } # ═══ 第一步:只跑预处理器 ═══ @@ -77,4 +76,4 @@ banner "size:三个段各占多少" size hello echo -echo "✅ 拍 01 · 源码→程序 —— 全部断言通过" +echo "✅ 第 2 个历程 · 源码→程序 —— 全部断言通过" diff --git a/scripts/journey/02-gdb.sh b/scripts/journey/02-gdb.sh index f3d8339..95d3d35 100755 --- a/scripts/journey/02-gdb.sh +++ b/scripts/journey/02-gdb.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ── 拍 02 · 程序病了 ──────────────────────────────────────────── +# ── 第 3 个历程 · 程序病了 ──────────────────────────────────────────── # 重放 tutorial/journey/02-gdb.md 的全部命令:用 gdb 脚本化会话 # 揪出 buggy.c 里故意埋的越界读。 # tier: ci-matrix @@ -9,7 +9,7 @@ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" SRC="$REPO_ROOT/src/journey/02-gdb" command -v gcc >/dev/null 2>&1 || { echo "FATAL: 没有 gcc" >&2; exit 1; } -command -v gdb >/dev/null 2>&1 || { echo "FATAL: 没有 gdb,请回拍 00 补装" >&2; exit 1; } +command -v gdb >/dev/null 2>&1 || { echo "FATAL: 没有 gdb,请回第 1 个历程 补装" >&2; exit 1; } WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT @@ -39,7 +39,7 @@ grep -Eq '#0 +scale' gdb1.log || { echo "FATAL: 回溯缺 scale 帧" >&2; exit 1 grep -Eq '#1 .*main' gdb1.log || { echo "FATAL: 回溯缺 main 帧" >&2; exit 1; } # ═══ 会话二:一路 continue 到第五次调用,看越界值 ═══ -banner "gdb 会话二:continue 到 data[4] 那一拍" +banner "gdb 会话二:continue 到 data[4] 那一步" gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ -ex 'break scale' \ -ex 'run' \ @@ -82,4 +82,4 @@ gdb -q -batch -iex 'set debuginfod enabled off' ./buggy-o2 \ grep -q 'optimized out' gdb4.log || { echo "FATAL: 应观察到 optimized out" >&2; exit 1; } echo -echo "✅ 拍 02 · 程序病了 —— 全部断言通过" +echo "✅ 第 3 个历程 · 程序病了 —— 全部断言通过" diff --git a/scripts/journey/03-make.sh b/scripts/journey/03-make.sh index cf65418..5191738 100755 --- a/scripts/journey/03-make.sh +++ b/scripts/journey/03-make.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ── 拍 03 · 程序长大 ──────────────────────────────────────────── +# ── 第 4 个历程 · 程序长大 ──────────────────────────────────────────── # 重放 tutorial/journey/03-make.md 的全部命令,并断言关键结果。 # tier: ci-matrix(ubuntu / windows git-bash) # @@ -36,7 +36,7 @@ banner() { printf '\n──────── %s ────────\n' "$* banner "第一幕:单文件时代" cat > main.c <<'EOF' -/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 */ +/* 第 2 个历程 出生、第 3 个历程 病愈的主角,目前只有一个文件 */ #include int main(void) @@ -155,4 +155,4 @@ make ./hello | grep -q 'journey beat 03: v0.3.0' || { echo "FATAL: 输出不符合预期" >&2; exit 1; } echo -echo "✅ 拍 03 · 程序长大 —— 全部断言通过" +echo "✅ 第 4 个历程 · 程序长大 —— 全部断言通过" diff --git a/scripts/journey/04-cmake.sh b/scripts/journey/04-cmake.sh index 7f11c71..09df44a 100755 --- a/scripts/journey/04-cmake.sh +++ b/scripts/journey/04-cmake.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ── 拍 04 · 工程化 ────────────────────────────────────────────── +# ── 第 5 个历程 · 工程化 ────────────────────────────────────────────── # 重放 tutorial/journey/04-cmake.md 的全部命令:CMake 配置、构建、 # 运行,验证 compile_commands.json,并复验增量构建语义。 # tier: ci-matrix(产物名在 Windows 上可能带 .exe,脚本做了兼容) @@ -8,7 +8,7 @@ set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" SRC="$REPO_ROOT/src/journey/04-cmake" -command -v cmake >/dev/null 2>&1 || { echo "FATAL: 没有 cmake,请回拍 00 补装" >&2; exit 1; } +command -v cmake >/dev/null 2>&1 || { echo "FATAL: 没有 cmake,请回第 1 个历程 补装" >&2; exit 1; } WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT @@ -46,7 +46,7 @@ ls -l build/compile_commands.json grep -q 'util\.c' build/compile_commands.json \ || { echo "FATAL: compile_commands.json 里没有 util.c" >&2; exit 1; } -# ═══ 增量构建:CMake 记着拍 03 那本账 ═══ +# ═══ 增量构建:CMake 记着第 4 个历程 那本账 ═══ banner "touch src/util.h 之后再构建" touch src/util.h out="$(cmake --build build 2>&1)" @@ -65,4 +65,4 @@ if printf '%s\n' "$out" | grep -q 'Building C object'; then fi echo -echo "✅ 拍 04 · 工程化 —— 全部断言通过" +echo "✅ 第 5 个历程 · 工程化 —— 全部断言通过" diff --git a/scripts/journey/05-cross.sh b/scripts/journey/05-cross.sh index 278686e..1bdf58c 100755 --- a/scripts/journey/05-cross.sh +++ b/scripts/journey/05-cross.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -# ── 拍 05 · 搬家:交叉编译 ────────────────────────────────────── +# ── 第 6 个历程 · 搬家:交叉编译 ────────────────────────────────────── # 重放 tutorial/journey/05-cross.md 的全部命令:同一份源码交给 # arm-none-eabi 工具链,对比架构产物,并验证「宿主机跑不了」。 # tier: ci-linux 起步(ubuntu runner 可 apt 装 gcc-arm-none-eabi) # -# 工具链安装指引(拍 00 体检的建议工具,现在该装了): +# 工具链安装指引(第 1 个历程 体检的建议工具,现在该装了): # Ubuntu/Debian: sudo apt install gcc-arm-none-eabi # Arch: sudo pacman -S arm-none-eabi-gcc set -euo pipefail @@ -81,4 +81,4 @@ if [ "$rc" -eq 0 ]; then fi echo -echo "✅ 拍 05 · 搬家 —— 全部断言通过(心脏造好了,还差身体)" +echo "✅ 第 6 个历程 · 搬家 —— 全部断言通过(心脏造好了,还差身体)" diff --git a/scripts/journey/06-qemu-uart.sh b/scripts/journey/06-qemu-uart.sh index 5305805..fce4186 100755 --- a/scripts/journey/06-qemu-uart.sh +++ b/scripts/journey/06-qemu-uart.sh @@ -1,24 +1,27 @@ #!/usr/bin/env bash -# ── 拍 06 · 没有屏幕的机器 ────────────────────────────────────── +# ── 第 7 个历程 · 没有屏幕的机器 ────────────────────────────────────── # 重放 tutorial/journey/06-qemu-uart.md 的全部命令:裸机构建、 -# QEMU 运行、串口证据与 expected-serial.txt 全量比对、gdbstub 远程调试。 +# QEMU 运行、串口证据与 expected-serial.txt 全量比对、CMake 工具链文件收编、 +# gdbstub 远程调试。 # tier: ci-linux(ubuntu:apt 装 gcc-arm-none-eabi + qemu-system-arm) # # 工具安装指引(Ubuntu): -# sudo apt install gcc-arm-none-eabi qemu-system-arm gdb +# sudo apt install gcc-arm-none-eabi qemu-system-arm gdb cmake set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" SRC="$REPO_ROOT/src/journey/06-qemu-uart" -command -v arm-none-eabi-gcc >/dev/null 2>&1 || { echo "FATAL: 缺 arm-none-eabi-gcc(拍 05 已装过)" >&2; exit 1; } +command -v arm-none-eabi-gcc >/dev/null 2>&1 || { echo "FATAL: 缺 arm-none-eabi-gcc(第 6 个历程 已装过)" >&2; exit 1; } command -v qemu-system-arm >/dev/null 2>&1 || { echo "FATAL: 缺 qemu-system-arm,安装指引见本文件头部注释" >&2; exit 1; } command -v gdb >/dev/null 2>&1 || { echo "FATAL: 缺 gdb" >&2; exit 1; } +command -v cmake >/dev/null 2>&1 || { echo "FATAL: 缺 cmake" >&2; exit 1; } WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT cd "$WORK" cp "$SRC/startup.c" "$SRC/main.c" "$SRC/linker.ld" "$SRC/expected-serial.txt" . +cp "$SRC/CMakeLists.txt" "$SRC/arm-none-eabi.cmake" . banner() { printf '\n──────── %s ────────\n' "$*"; } @@ -66,7 +69,28 @@ else exit 1 fi -# ═══ 远程调试:拍 02 的伏笔在此兑现 ═══ +# ═══ 兑现第 5 个历程:换一个工具链文件,重新配置 ═══ +banner "CMake:换一个工具链文件,重新配置" +cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake +cmake --build build + +arm-none-eabi-objcopy -O binary build/hello.elf hello-cmake.bin +cmp hello.bin hello-cmake.bin \ + || { echo "FATAL: CMake 产物与手敲产物不一致" >&2; exit 1; } +echo "── CMake 产物与手敲产物逐字节一致 ──" + +set +e +timeout 5 qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none \ + -kernel build/hello.elf > serial-cmake.txt 2> qemu-cmake.err +rc=$? +set -e +if [ "$rc" -ne 124 ] && [ "$rc" -ne 0 ]; then + echo "FATAL: QEMU(CMake 产物)异常退出(rc=$rc)" >&2; cat qemu-cmake.err >&2; exit 1 +fi +diff -u expected-serial.txt serial-cmake.txt \ + || { echo "FATAL: CMake 产物的串口输出与期望不符" >&2; exit 1; } + +# ═══ 远程调试:第 3 个历程 的伏笔在此兑现 ═══ banner "gdbstub:target remote,隔空断点" GDB_PORT=12345 # 固定端口,正文命令逐字可核 qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none \ @@ -96,4 +120,4 @@ grep -Eq '#0 +main' gdb.log || { echo "FATAL: 回溯缺 main 帧" >&2; exit 1; } grep -q 'Reset_Handler' gdb.log || { echo "FATAL: 连接时应先停在复位入口" >&2; exit 1; } echo -echo "✅ 拍 06 · 没有屏幕的机器 —— 全部断言通过(终点事件完成)" +echo "✅ 第 7 个历程 · 没有屏幕的机器 —— 全部断言通过(终点事件完成)" diff --git a/scripts/journey/07-git.sh b/scripts/journey/07-git.sh index 3cb5829..8bdf425 100755 --- a/scripts/journey/07-git.sh +++ b/scripts/journey/07-git.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ── 拍 07 · 记录旅程 ──────────────────────────────────────────── +# ── 第 8 个历程 · 记录旅程 ──────────────────────────────────────────── # 重放 tutorial/journey/07-git.md 的全部命令:在临时目录里 # 从零建仓、改坏再救回、制造并解决冲突、打上里程碑 tag。 # tier: ci-matrix @@ -27,7 +27,7 @@ cat > README.md <<'EOF' ## 状态 -- 拍 06:串口输出已捕获(证据在 expected-serial.txt) +- 第 7 个历程:串口输出已捕获(证据在 expected-serial.txt) EOF cat > hello.c <<'EOF' @@ -101,7 +101,7 @@ cat > README.md <<'EOF' ## 状态 -- 拍 06:串口输出已验证 diff 一致 +- 第 7 个历程:串口输出已验证 diff 一致 EOF git add README.md git commit -m "readme: sharpen beat-06 note" @@ -115,7 +115,7 @@ cat > README.md <<'EOF' ## 状态 -- 拍 06:串口输出已捕获,连 \r\n 都是亲手发的 +- 第 7 个历程:串口输出已捕获,连 \r\n 都是亲手发的 EOF git add README.md git commit -m "readme: enrich beat-06 note" @@ -145,7 +145,7 @@ cat > README.md <<'EOF' ## 状态 -- 拍 06:串口输出已捕获,且与 expected-serial.txt 逐字节一致 +- 第 7 个历程:串口输出已捕获,且与 expected-serial.txt 逐字节一致 EOF git add README.md git commit -m "merge polish-readme: pick the precise wording" @@ -159,4 +159,4 @@ git tag | grep -q 'v0.1-journey' || { echo "FATAL: tag 缺失" >&2; exit 1; } git log --oneline echo -echo "✅ 拍 07 · 记录旅程 —— 全部断言通过" +echo "✅ 第 8 个历程 · 记录旅程 —— 全部断言通过" diff --git a/scripts/journey/08-vscode.sh b/scripts/journey/08-vscode.sh index 8488328..e433b90 100755 --- a/scripts/journey/08-vscode.sh +++ b/scripts/journey/08-vscode.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ── 拍 08 · 编辑器接线 ────────────────────────────────────────── +# ── 第 9 个历程 · 编辑器接线 ────────────────────────────────────────── # tier: manual —— 编辑器交互无法无人值守重放,本脚本只做机械部分: # 配置文件存在性 + JSON 合法性;其余为人工走查清单(见正文末)。 # 用 VS Code 打开工程:code . @@ -27,11 +27,11 @@ echo " [ok] preLaunchTask '$task_label' 可解析" banner "人工走查清单(编辑器交互,需真人执行)" cat <<'EOF' - [ ] 在拍 04 的工程根目录放入本目录的 .vscode/,code . 打开 + [ ] 在第 5 个历程 的工程根目录放入本目录的 .vscode/,code . 打开 [ ] IntelliSense 生效:src/util.c 里 greet 跳转定义可用,无红线 [ ] F5 触发 cmake-build 并启动 gdb 会话,断点可命中 [ ] Remote-WSL(Windows 用户):左下角绿色角标显示 WSL 发行版 EOF echo -echo "✅ 拍 08 · 编辑器接线 —— 机械部分通过;人工部分见清单" +echo "✅ 第 9 个历程 · 编辑器接线 —— 机械部分通过;人工部分见清单" diff --git a/scripts/lint.sh b/scripts/lint.sh index 5417caf..fa27d8f 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -1,10 +1,11 @@ #!/usr/bin/env bash # 正文命令与配对脚本的一致性检查(铁律 2:命令即引用)。 # -# 规则:tutorial/journey/NN-x.md 的 ```bash 围栏里,每条非注释命令行 +# 规则:tutorial/journey/NN-x.md 的 ```bash/```sh 围栏里,每条非注释命令行 # 必须逐字出现在 scripts/journey/NN-x.sh 中(containment 匹配)。 -# 约定:命令放 ```bash 围栏;输出/文件内容放无语言或 ```c/```text 围栏, -# 本脚本只检查 bash/sh/shell 围栏。 +# 约定:命令放 ```bash 围栏;输出/文件内容放无语言或 ```c/```text 围栏; +# ```shell 围栏是「终端实录」——提示符、命令、输出混排的教学演示, +# 不承诺 CI 重放,不参与对账。 # 模式:默认 warn(只报告);LINT_STRICT=1 时有告警即红。 set -euo pipefail @@ -43,7 +44,7 @@ for md in "${docs[@]}"; do cmds_tmp="$(mktemp)" trap 'rm -f "$cmds_tmp"' EXIT awk ' - /^```(bash|sh|shell)[[:space:]]*$/ { inblock = 1; next } + /^```(bash|sh)[[:space:]]*$/ { inblock = 1; next } /^```/ { inblock = 0; next } inblock { line = $0 diff --git a/scripts/run-all.sh b/scripts/run-all.sh index 294fa15..edf5ad0 100755 --- a/scripts/run-all.sh +++ b/scripts/run-all.sh @@ -1,10 +1,23 @@ #!/usr/bin/env bash # EmbedBox 验证总入口:顺序重放全部主线脚本。CI 与本地共用。 # 任何一个脚本红,总出口码为红。 +# tier 感知:配对正文 frontmatter 声明 tier: ci-linux 的脚本, +# 只在 Linux runner 上重放(交叉工具链/模拟器只装在 Linux 侧); +# 其余 tier(含未声明)照常全平台重放。 set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +is_linux() { case "$(uname -s)" in Linux*) return 0 ;; *) return 1 ;; esac; } + +tier_of() { + local md="$REPO_ROOT/tutorial/journey/$1.md" + if [ -f "$md" ]; then + sed -n 's/^tier:[[:space:]]*//p' "$md" | head -n1 + fi + return 0 +} + shopt -s nullglob scripts=("$REPO_ROOT"/scripts/journey/*.sh) shopt -u nullglob @@ -16,7 +29,13 @@ fi fail=0 for script in "${scripts[@]}"; do + base="$(basename "$script" .sh)" + tier="$(tier_of "$base")" echo + if [ "$tier" = "ci-linux" ] && ! is_linux; then + echo ">>> 跳过 $base.sh(tier: ci-linux,非 Linux runner)" + continue + fi echo ">>> 重放 $(basename "$script")" if bash "$script"; then echo "<<< $(basename "$script") 绿" diff --git a/site/.vitepress/config/index.ts b/site/.vitepress/config/index.ts index 2aa52ff..a845a8a 100644 --- a/site/.vitepress/config/index.ts +++ b/site/.vitepress/config/index.ts @@ -71,7 +71,7 @@ export default defineConfig({ locales: buildLocales(), head: [ - ['link', { rel: 'icon', href: projectConfig.favicon || `${projectConfig.base}favicon.ico` }], + ['link', { rel: 'icon', type: 'image/svg+xml', href: projectConfig.favicon || `${projectConfig.base}favicon.ico` }], ], markdown: { @@ -94,6 +94,7 @@ export default defineConfig({ }, themeConfig: { + logo: `${projectConfig.base}embedbox-mark.svg`, nav: projectConfig.nav[primaryLocale.code] || [], sidebar: buildSidebar(docsRoot, projectConfig), diff --git a/site/.vitepress/public/embedbox-mark.svg b/site/.vitepress/public/embedbox-mark.svg new file mode 100644 index 0000000..61f0d90 --- /dev/null +++ b/site/.vitepress/public/embedbox-mark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/site/.vitepress/theme/components/brand/EbMark.vue b/site/.vitepress/theme/components/brand/EbMark.vue new file mode 100644 index 0000000..df58733 --- /dev/null +++ b/site/.vitepress/theme/components/brand/EbMark.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/site/.vitepress/theme/components/home/EbAfterword.vue b/site/.vitepress/theme/components/home/EbAfterword.vue new file mode 100644 index 0000000..ef6394b --- /dev/null +++ b/site/.vitepress/theme/components/home/EbAfterword.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/site/.vitepress/theme/components/home/EbColophon.vue b/site/.vitepress/theme/components/home/EbColophon.vue new file mode 100644 index 0000000..95bf82d --- /dev/null +++ b/site/.vitepress/theme/components/home/EbColophon.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/site/.vitepress/theme/components/home/EbEvidenceTerminal.vue b/site/.vitepress/theme/components/home/EbEvidenceTerminal.vue new file mode 100644 index 0000000..2be0665 --- /dev/null +++ b/site/.vitepress/theme/components/home/EbEvidenceTerminal.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/site/.vitepress/theme/components/home/EbHero.vue b/site/.vitepress/theme/components/home/EbHero.vue new file mode 100644 index 0000000..903449f --- /dev/null +++ b/site/.vitepress/theme/components/home/EbHero.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/site/.vitepress/theme/components/home/EbJourneyLedger.vue b/site/.vitepress/theme/components/home/EbJourneyLedger.vue new file mode 100644 index 0000000..5166b2c --- /dev/null +++ b/site/.vitepress/theme/components/home/EbJourneyLedger.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/site/.vitepress/theme/components/home/journey-data.ts b/site/.vitepress/theme/components/home/journey-data.ts new file mode 100644 index 0000000..01d4d2c --- /dev/null +++ b/site/.vitepress/theme/components/home/journey-data.ts @@ -0,0 +1,57 @@ +// 首页数据源(卷宗终端版) +// 暂为手工快照;蓝图第 4 步落地后,由 scripts/journey 生成 journey.json +// 并在 CI 中校验与本文件一致,防止「改了脚本、首页还在展示旧输出」。 +// 会话行的真实性约束:每一行都必须能在 src/journey/06-qemu-uart/ 或 +// scripts/journey/06-qemu-uart.sh 中找到出处,不许手写编造。 +// 术语:首页一律用「历程」(第几个历程),不再用「拍」。 + +export interface Stage { + label: string + title: string + story: string + link: string + tier: 'ci' | 'manual' +} + +export const STAGES: Stage[] = [ + { label: '第 1 个历程', title: '造机器', story: 'clone 下来先确认机器活着', link: '/journey/00-env-check', tier: 'ci' }, + { label: '第 2 个历程', title: '造程序', story: '看着源码一步步变成 ELF,再把它拆开看', link: '/journey/01-elf', tier: 'ci' }, + { label: '第 3 个历程', title: '治病', story: '程序被笔者弄坏了,printf 够不到病灶,GDB 出场', link: '/journey/02-gdb', tier: 'ci' }, + { label: '第 4 个历程', title: '程序长大', story: '改了头文件忘重编炸出 undefined reference,make 接管记账', link: '/journey/03-make', tier: 'ci' }, + { label: '第 5 个历程', title: '工程化', story: '库与应用分离,CMake 产出 compile_commands.json', link: '/journey/04-cmake', tier: 'ci' }, + { label: '第 6 个历程', title: '搬家', story: '宿主机二进制目标机跑不了,交叉编译', link: '/journey/05-cross', tier: 'ci' }, + { label: '第 7 个历程', title: '没有屏幕的机器', story: 'QEMU 给身体,串口开口说话,证据落袋', link: '/journey/06-qemu-uart', tier: 'ci' }, + { label: '第 8 个历程', title: '记录旅程', story: 'Git 与 Markdown,让旅程可复现、可交付', link: '/journey/07-git', tier: 'ci' }, + { label: '第 9 个历程', title: '编辑器接线', story: '把工具链接进 VS Code', link: '/journey/08-vscode', tier: 'ci' }, + { label: '尾声', title: '实验安全', story: '3.3V/5V、共地、静电、万用表三招', link: '/journey/91-lab-safety', tier: 'manual' }, +] + +// hero 终端会话 — 出处:scripts/journey/06-qemu-uart.sh + expected-serial.txt +// 注意:「journey beat 06: …」是真实串口输出的原文,不随首页术语调整而改。 +export type SessionLine = { + kind: 'cmd' | 'out' | 'dim' | 'stamp' + text: string + cont?: boolean // 上一条命令的续行 +} + +export const SESSION: SessionLine[] = [ + { kind: 'cmd', text: 'arm-none-eabi-gcc -nostdlib -T linker.ld startup.o main.o -o hello.elf' }, + { kind: 'cmd', text: 'timeout 5 qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic \\' }, + { kind: 'cmd', text: ' -monitor none -kernel hello.elf', cont: true }, + { kind: 'out', text: 'hello, EmbedBox!' }, + { kind: 'out', text: 'journey beat 06: no OS, just UART (v0.6.0)' }, + { kind: 'cmd', text: 'diff -u expected-serial.txt serial.txt' }, + { kind: 'dim', text: '# 无输出 —— 串口捕获与仓库预存期望逐字节一致' }, + { kind: 'stamp', text: '[CI VERIFIED] scripts/journey/06-qemu-uart.sh · PASS' }, +] + +export const LEGACY_LINKS = [ + { text: '环境与终端', link: '/environment/' }, + { text: '协作与文档', link: '/collaboration/' }, + { text: '构建系统', link: '/build-system/' }, + { text: '调试', link: '/debugging/' }, + { text: '模拟与交叉', link: '/cross-compile/' }, +] + +export const ACTIONS_URL = + 'https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/actions' diff --git a/site/.vitepress/theme/custom.css b/site/.vitepress/theme/custom.css index 90652d2..dd63bee 100644 --- a/site/.vitepress/theme/custom.css +++ b/site/.vitepress/theme/custom.css @@ -1,3 +1,61 @@ +/* ================================================================ + EmbedBox Design Tokens — 卷宗终端(2026-08 首页重设计) + 冷灰蓝纸面 + 信号绿;终端 = 卷宗实物,明暗模式同一块深色面板。 + 信号绿纪律:视觉层只属于「程序开口说话」的时刻(prompt / 串口输出 / + 落章);按钮用墨色,不用品牌绿。 + 全站组件只引用变量,不硬编码色值。 + ================================================================ */ + +:root { + /* brand = 信号绿(#047857 对冷灰白底 ≈4.8:1,AA) */ + --vp-c-brand-1: #047857; + --vp-c-brand-2: #065f46; + --vp-c-brand-3: #059669; + --vp-c-brand-soft: rgba(4, 120, 87, 0.09); + + /* 中性 = 冷灰蓝纸面(告别默认蓝白) */ + --vp-c-bg: #f7f8fa; + --vp-c-bg-alt: #eef1f4; + --vp-c-bg-soft: #f0f3f6; + --vp-c-bg-elv: #ffffff; + --vp-c-bg-mute: #e6eaef; + --vp-c-border: #d8dee5; + --vp-c-divider: #e2e7ed; + --vp-c-gutter: #e2e7ed; + --vp-c-text-1: #262b33; + --vp-c-text-2: #5a6270; + --vp-c-text-3: #8b93a1; + + /* 卷宗终端:不随主题反转的深色实物 */ + --eb-term-bg: #0a0f16; + --eb-term-border: #1e2937; + --eb-term-text: #d3dae4; + --eb-term-dim: #7e8a9c; + --eb-term-green: #4ade80; + + --eb-mono: ui-monospace, 'JetBrains Mono', SFMono-Regular, Menlo, + Consolas, monospace; +} + +.dark { + --vp-c-brand-1: #4ade80; + --vp-c-brand-2: #34d399; + --vp-c-brand-3: #86efac; + --vp-c-brand-soft: rgba(74, 222, 128, 0.1); + + --vp-c-bg: #0c1118; + --vp-c-bg-alt: #0f141d; + --vp-c-bg-soft: #121824; + --vp-c-bg-elv: #151c27; + --vp-c-bg-mute: #1b2331; + --vp-c-border: #232d3c; + --vp-c-divider: #1c2432; + --vp-c-gutter: #1c2432; + --vp-c-text-1: #d3d8e0; + --vp-c-text-2: #9aa3b2; + --vp-c-text-3: #6b7484; +} + /* ── Content Typography ──────────────────────────────────────── */ .vp-doc { @@ -56,12 +114,16 @@ background-color: rgba(0, 0, 0, 0.02); } +.dark .vp-doc table tr:nth-child(even) { + background-color: rgba(255, 255, 255, 0.03); +} + /* ── Blockquotes ─────────────────────────────────────────────── */ .vp-doc blockquote { border-left: 4px solid var(--vp-c-brand-1); border-radius: 0 4px 4px 0; - background: rgba(81, 107, 232, 0.04); + background: var(--vp-c-brand-soft); } /* ── Links ───────────────────────────────────────────────────── */ @@ -84,6 +146,10 @@ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); } +.dark .vp-doc img { + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.25); +} + /* ── Print ───────────────────────────────────────────────────── */ @media print { @@ -93,212 +159,6 @@ } } -/* ================================================================ - Home Layout — Hero & Feature Cards - ================================================================ */ - -.VPHero { - padding-bottom: 48px !important; -} - -@media (min-width: 960px) { - .VPHero { - padding-bottom: 64px !important; - } -} - -.VPHome .VPHero::before { - content: ''; - position: absolute; - inset: 0; - z-index: -1; - background: linear-gradient( - 135deg, - var(--vp-c-brand-soft) 0%, - transparent 50%, - var(--vp-c-indigo-soft) 100% - ); - opacity: 0.5; - pointer-events: none; -} - -.VPHero .name.clip { - background: linear-gradient( - 135deg, - var(--vp-c-brand-1) 0%, - var(--vp-c-indigo-1) 50%, - var(--vp-c-purple-1) 100% - ); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; -} - -.VPHero .tagline { - font-weight: 400 !important; - color: var(--vp-c-text-2) !important; -} - -/* ── Feature Card Animation ──────────────────────────────────── */ - -@keyframes feature-fade-up { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.VPFeatures .item { animation: feature-fade-up 0.65s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; } -.VPFeatures .item:nth-child(1) { animation-delay: 0ms; } -.VPFeatures .item:nth-child(2) { animation-delay: 78ms; } -.VPFeatures .item:nth-child(3) { animation-delay: 156ms; } -.VPFeatures .item:nth-child(4) { animation-delay: 234ms; } -.VPFeatures .item:nth-child(5) { animation-delay: 312ms; } -.VPFeatures .item:nth-child(6) { animation-delay: 390ms; } -.VPFeatures .item:nth-child(7) { animation-delay: 468ms; } -.VPFeatures .item:nth-child(8) { animation-delay: 546ms; } -.VPFeatures .item:nth-child(9) { animation-delay: 624ms; } -.VPFeatures .item:nth-child(10) { animation-delay: 702ms; } -.VPFeatures .item:nth-child(11) { animation-delay: 780ms; } -.VPFeatures .item:nth-child(12) { animation-delay: 858ms; } - -@media (prefers-reduced-motion: reduce) { - .VPFeatures .item { - animation: none; - } -} - -/* ── Features Grid ───────────────────────────────────────────── */ - -.VPFeatures { - padding-top: 16px; - padding-bottom: 48px; -} - -/* ── Feature Card ────────────────────────────────────────────── */ - -.VPFeature { - border: 1px solid var(--vp-c-divider) !important; - border-radius: 14px !important; - background-color: var(--vp-c-bg) !important; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04), - 0 1px 2px rgba(0, 0, 0, 0.06); - transition: border-color 0.39s ease, - box-shadow 0.39s ease, - transform 0.39s ease; -} - -.VPFeature.link:hover { - border-color: var(--vp-c-brand-1) !important; - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.1), - 0 4px 8px rgba(0, 0, 0, 0.06); - transform: translateY(-4px); -} - -.VPFeature .box { - padding: 28px 24px !important; -} - -.VPFeature .icon { - width: 48px !important; - height: 48px !important; - border-radius: 12px !important; - background: linear-gradient( - 135deg, - var(--vp-c-brand-soft) 0%, - var(--vp-c-indigo-soft) 100% - ) !important; - color: var(--vp-c-brand-1) !important; - font-size: 22px !important; - transition: background 0.39s ease, - color 0.39s ease, - transform 0.39s ease; -} - -.VPFeature.link:hover .icon { - transform: scale(1.1); -} - -.VPFeature .title { - font-size: 15px !important; - font-weight: 600 !important; - line-height: 1.5 !important; - color: var(--vp-c-text-1) !important; - transition: color 0.39s ease; -} - -.VPFeature.link:hover .title { - color: var(--vp-c-brand-1) !important; -} - -.VPFeature .details { - font-size: 13px !important; - line-height: 1.7 !important; - color: var(--vp-c-text-2) !important; - font-weight: 400 !important; -} - -.VPFeature .link-text-icon { - transition: transform 0.39s ease; -} - -.VPFeature.link:hover .link-text-icon { - transform: translateX(4px); -} - -/* ── Dark Mode ───────────────────────────────────────────────── */ - -.dark .VPFeature { - background-color: var(--vp-c-bg-elv) !important; - border-color: var(--vp-c-border) !important; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), - 0 1px 2px rgba(0, 0, 0, 0.15); -} - -.dark .VPFeature.link:hover { - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.3), - 0 4px 8px rgba(0, 0, 0, 0.2); -} - -.dark .vp-doc blockquote { - background: rgba(81, 107, 232, 0.08); -} - -.dark .vp-doc table tr:nth-child(even) { - background-color: rgba(255, 255, 255, 0.03); -} - -.dark .vp-doc img { - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.25); -} - -/* ── Responsive ──────────────────────────────────────────────── */ - -@media (max-width: 639px) { - .VPFeature .box { - padding: 20px 18px !important; - } - - .VPFeature .icon { - width: 40px !important; - height: 40px !important; - border-radius: 10px !important; - font-size: 18px !important; - } - - .VPFeature .title { - font-size: 14px !important; - } - - .VPFeature .details { - font-size: 12.5px !important; - } -} - /* ── Content Page Enhancements ───────────────────────────────── */ .vp-doc hr { @@ -312,112 +172,3 @@ border-radius: 8px; margin: 1.2em 0; } - -/* ── Contributor Card Grid ───────────────────────────────────── */ - -.contributor-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); - gap: 16px; - margin: 1.5em 0; -} - -.contributor-card { - display: flex; - align-items: flex-start; - gap: 16px; - padding: 24px; - border: 1px solid var(--vp-c-divider); - border-radius: 14px; - background-color: var(--vp-c-bg); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06); - transition: border-color 0.39s ease, box-shadow 0.39s ease, transform 0.39s ease; - text-decoration: none !important; - color: inherit; -} - -.contributor-card:hover { - border-color: var(--vp-c-brand-1); - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.06); - transform: translateY(-4px); -} - -.dark .contributor-card { - background-color: var(--vp-c-bg-elv); - border-color: var(--vp-c-border); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.15); -} - -.dark .contributor-card:hover { - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.2); -} - -.contributor-card .card-avatar { - width: 56px; - height: 56px; - aspect-ratio: 1; - border-radius: 50%; - object-fit: cover; - border: 2px solid var(--vp-c-divider); - flex-shrink: 0; - transition: border-color 0.39s ease; -} - -.contributor-card:hover .card-avatar { - border-color: var(--vp-c-brand-1); -} - -.contributor-card .card-body { - min-width: 0; - display: flex; - flex-direction: column; - gap: 4px; -} - -.contributor-card .card-name { - font-size: 16px; - font-weight: 600; - color: var(--vp-c-text-1); - text-decoration: none !important; - transition: color 0.39s ease; -} - -.contributor-card .card-name:hover { - color: var(--vp-c-brand-1) !important; -} - -.contributor-card .card-role { - margin: 0; - font-size: 13px; - color: var(--vp-c-text-2); - line-height: 1.5; -} - -.contributor-card .card-types { - margin: 0; - font-size: 15px; - letter-spacing: 2px; -} - -.contributor-card .card-desc { - margin: 0; - font-size: 13px; - color: var(--vp-c-text-3); - line-height: 1.6; -} - -@media (max-width: 639px) { - .contributor-grid { - grid-template-columns: 1fr; - } - - .contributor-card { - padding: 18px; - gap: 12px; - } - - .contributor-card .card-avatar { - width: 44px; - height: 44px; - } -} diff --git a/site/.vitepress/theme/index.ts b/site/.vitepress/theme/index.ts index 2e7e0c6..2e61391 100644 --- a/site/.vitepress/theme/index.ts +++ b/site/.vitepress/theme/index.ts @@ -4,6 +4,10 @@ import type { Theme } from 'vitepress' import HomeTipBanner from './components/HomeTipBanner.vue' import ChapterNav from './components/ChapterNav.vue' import ChapterLink from './components/ChapterLink.vue' +import EbHero from './components/home/EbHero.vue' +import EbJourneyLedger from './components/home/EbJourneyLedger.vue' +import EbAfterword from './components/home/EbAfterword.vue' +import EbColophon from './components/home/EbColophon.vue' import { setupMermaid } from './mermaid-client' import './custom.css' @@ -11,7 +15,11 @@ export default { extends: DefaultTheme, Layout() { return h(DefaultTheme.Layout, null, { - 'home-features-before': () => h(HomeTipBanner) + // 首页门面(卷宗终端):自绘 hero → 图签 → 历程目录 → 跋 → 补课索引。 + // index.md 不写 hero/features frontmatter,VPHero/VPFeatures 不渲染,零覆盖战。 + 'home-hero-before': () => h(EbHero), + 'home-features-before': () => [h(EbJourneyLedger), h(EbAfterword)], + 'home-features-after': () => [h(HomeTipBanner), h(EbColophon)], }) }, enhanceApp({ app }) { diff --git a/src/journey/01-elf/hello.c b/src/journey/01-elf/hello.c index 7529703..43a7af5 100644 --- a/src/journey/01-elf/hello.c +++ b/src/journey/01-elf/hello.c @@ -1,4 +1,4 @@ -/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 +/* 第 2 个历程 出生、第 3 个历程 病愈的主角,目前只有一个文件 * 对应教程:tutorial/journey/01-elf.md */ #include diff --git a/src/journey/02-gdb/buggy.c b/src/journey/02-gdb/buggy.c index 73c4b26..51d02f3 100644 --- a/src/journey/02-gdb/buggy.c +++ b/src/journey/02-gdb/buggy.c @@ -1,4 +1,4 @@ -/* 拍 02 的病号:越界读一颗,答案就歪了 +/* 第 3 个历程 的病号:越界读一颗,答案就歪了 * 对应教程:tutorial/journey/02-gdb.md */ #include diff --git a/src/journey/03-make/Makefile b/src/journey/03-make/Makefile index be1d6b5..0685b96 100644 --- a/src/journey/03-make/Makefile +++ b/src/journey/03-make/Makefile @@ -1,4 +1,4 @@ -# 主线拍 03 · 程序长大 —— 最终 Makefile:变量 + 模式规则 + 头文件依赖 +# 主线第 4 个历程 · 程序长大 —— 最终 Makefile:变量 + 模式规则 + 头文件依赖 # 对应教程:tutorial/journey/03-make.md CC := gcc diff --git a/src/journey/03-make/main.c b/src/journey/03-make/main.c index fc994b8..6a55b91 100644 --- a/src/journey/03-make/main.c +++ b/src/journey/03-make/main.c @@ -1,4 +1,4 @@ -/* 主线拍 03 · 程序长大 —— 主角长成三个文件后的入口 +/* 主线第 4 个历程 · 程序长大 —— 主角长成三个文件后的入口 * 对应教程:tutorial/journey/03-make.md */ #include diff --git a/src/journey/04-cmake/CMakeLists.txt b/src/journey/04-cmake/CMakeLists.txt index e0a45b8..8f63772 100644 --- a/src/journey/04-cmake/CMakeLists.txt +++ b/src/journey/04-cmake/CMakeLists.txt @@ -1,4 +1,4 @@ -# 主线拍 04 · 工程化 —— 同一个程序,搬进 CMake 工程 +# 主线第 5 个历程 · 工程化 —— 同一个程序,搬进 CMake 工程 # 对应教程:tutorial/journey/04-cmake.md cmake_minimum_required(VERSION 3.16) diff --git a/src/journey/04-cmake/src/main.c b/src/journey/04-cmake/src/main.c index c619ebc..e6ed9b9 100644 --- a/src/journey/04-cmake/src/main.c +++ b/src/journey/04-cmake/src/main.c @@ -1,4 +1,4 @@ -/* 主线拍 04 · 工程化 —— 库与应用分离后的入口 +/* 主线第 5 个历程 · 工程化 —— 库与应用分离后的入口 * 对应教程:tutorial/journey/04-cmake.md */ #include diff --git a/src/journey/04-cmake/src/util.h b/src/journey/04-cmake/src/util.h index aee68be..de295f1 100644 --- a/src/journey/04-cmake/src/util.h +++ b/src/journey/04-cmake/src/util.h @@ -1,7 +1,7 @@ #ifndef UTIL_H #define UTIL_H -/* 拍 04:util 升格为静态库,接口不变 */ +/* 第 5 个历程:util 升格为静态库,接口不变 */ void greet(const char *who); const char *version(void); diff --git a/src/journey/05-cross/main.c b/src/journey/05-cross/main.c index 8bc593c..eda2d24 100644 --- a/src/journey/05-cross/main.c +++ b/src/journey/05-cross/main.c @@ -1,4 +1,4 @@ -/* 主线拍 05 · 搬家 —— 同一份源码,换个目标机 +/* 主线第 6 个历程 · 搬家 —— 同一份源码,换个目标机 * 对应教程:tutorial/journey/05-cross.md */ #include diff --git a/src/journey/06-qemu-uart/CMakeLists.txt b/src/journey/06-qemu-uart/CMakeLists.txt new file mode 100644 index 0000000..d0513ab --- /dev/null +++ b/src/journey/06-qemu-uart/CMakeLists.txt @@ -0,0 +1,12 @@ +# 主线第 7 个历程 · 没有屏幕的机器 —— 裸机构建交给 CMake 收编 +# 对应教程:tutorial/journey/06-qemu-uart.md +# 配合 arm-none-eabi.cmake(工具链文件)使用,见上文件头的用法 +cmake_minimum_required(VERSION 3.16) + +project(journey_baremetal C) + +add_executable(hello.elf startup.c main.c) +target_compile_options(hello.elf PRIVATE + -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2) +target_link_options(hello.elf PRIVATE + -mcpu=cortex-m3 -mthumb -nostdlib -T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld) diff --git a/src/journey/06-qemu-uart/arm-none-eabi.cmake b/src/journey/06-qemu-uart/arm-none-eabi.cmake new file mode 100644 index 0000000..c4ceca8 --- /dev/null +++ b/src/journey/06-qemu-uart/arm-none-eabi.cmake @@ -0,0 +1,8 @@ +# 主线第 7 个历程 · 没有屏幕的机器 —— 工具链文件:CMake 的「这单活用哪套工具」 +# 对应教程:tutorial/journey/06-qemu-uart.md +# 用法:cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake +set(CMAKE_SYSTEM_NAME Generic) # 裸机:没有操作系统 +set(CMAKE_SYSTEM_PROCESSOR arm) # 目标机是 ARM +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +# 裸机上链不出可执行文件,探测编译器时只编译、不链接 +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) diff --git a/src/journey/06-qemu-uart/linker.ld b/src/journey/06-qemu-uart/linker.ld index 9eee2e1..efdc9df 100644 --- a/src/journey/06-qemu-uart/linker.ld +++ b/src/journey/06-qemu-uart/linker.ld @@ -1,4 +1,4 @@ -/* 主线拍 06 · 没有屏幕的机器 —— 程序的住址由这张纸决定 +/* 主线第 7 个历程 · 没有屏幕的机器 —— 程序的住址由这张纸决定 * 对应教程:tutorial/journey/06-qemu-uart.md * 目标:QEMU mps2-an385 —— 代码区在 0x00000000,RAM 在 0x20000000 */ diff --git a/src/journey/06-qemu-uart/main.c b/src/journey/06-qemu-uart/main.c index 517ed5a..29f7299 100644 --- a/src/journey/06-qemu-uart/main.c +++ b/src/journey/06-qemu-uart/main.c @@ -1,4 +1,4 @@ -/* 主线拍 06 · 没有屏幕的机器:串口是我们唯一的嘴 +/* 主线第 7 个历程 · 没有屏幕的机器:串口是我们唯一的嘴 * 对应教程:tutorial/journey/06-qemu-uart.md * 目标板:QEMU mps2-an385(Cortex-M3),UART0 = CMSDK APB UART */ diff --git a/src/journey/06-qemu-uart/startup.c b/src/journey/06-qemu-uart/startup.c index be90816..a35fb82 100644 --- a/src/journey/06-qemu-uart/startup.c +++ b/src/journey/06-qemu-uart/startup.c @@ -1,4 +1,4 @@ -/* 主线拍 06 · 出生证明:向量表 + 复位流程 +/* 主线第 7 个历程 · 出生证明:向量表 + 复位流程 * 对应教程:tutorial/journey/06-qemu-uart.md * 目标板:QEMU mps2-an385(Cortex-M3) */ diff --git a/tutorial/index.md b/tutorial/index.md index 0ee3a5d..fd70d2e 100644 --- a/tutorial/index.md +++ b/tutorial/index.md @@ -2,39 +2,5 @@ layout: home title: EmbedBox titleTemplate: 嵌入式中的 CSAPP · 共同实验工作台 - -hero: - name: EmbedBox - text: 一个程序的一生 - tagline: 从 clean clone 到一份 CI 背书的串口运行证据——终端 / Git / GCC / Make / CMake / GDB / 交叉编译 / QEMU / 串口,在一条真实旅程里逐个学会。 - actions: - - theme: brand - text: 走主线(推荐) - link: /journey/ - - theme: alt - text: 从第一拍开始 - link: /journey/00-env-check - -features: - - title: 主线 · 一个程序的一生 - details: 首刷推荐:一个会打招呼的小程序,被解剖、生病、长大、搬家、进入无屏机器、开口说话——十拍走通「构建→调试→交叉→QEMU→串口证据」全链条。 - link: /journey/ - - title: 环境与终端 - details: WSL2 / 终端与 PATH / VS Code 接线(旧域,待并入参考篇)。 - link: /environment/ - - title: 协作与文档 - details: Git 完全指南与 Markdown(旧域,待并入参考篇)。 - link: /collaboration/ - - title: 构建系统 - details: GCC / Make / CMake(旧域,待并入参考篇)。 - link: /build-system/ - - title: 调试 - details: GDB 与串口(旧域,待并入参考篇)。 - link: /debugging/ - - title: 模拟与交叉 - details: 交叉编译 / Docker / QEMU(旧域,待并入参考篇)。 - link: /cross-compile/ - +description: 嵌入式开发通用工具链教程(终端 / Git / Markdown / GCC / Make / CMake / GDB / 交叉编译 / 串口 / Docker / QEMU)——从一行 hello.c 到一份 CI 背书的串口运行证据。 --- - -> EmbedBox 是 [Awesome-Embedded-Learning-Studio](https://github.com/Awesome-Embedded-Learning-Studio) 的"嵌入式 CSAPP"与共同实验工作台:承担所有路线共同需要、恰好够用的基础嵌入式开发知识。每一拍的正文命令都被 `scripts/journey/` 的配对脚本在 CI 中逐字重放——你看到的输出是真跑出来的。 diff --git a/tutorial/journey/00-env-check.md b/tutorial/journey/00-env-check.md index be05722..6999596 100644 --- a/tutorial/journey/00-env-check.md +++ b/tutorial/journey/00-env-check.md @@ -1,48 +1,146 @@ --- -title: 拍 00 · 环境体检:先确认机器活着 +title: 第 1 个历程 · 环境体检:先确认机器活着 order: 0 verify: scripts/journey/00-env-check.sh tier: ci-matrix verified-on: WSL2(Arch)/ bash 5.3 / git 2.55 / gcc 16.1.1 / make 4.4.1;CI 矩阵 ubuntu-latest + windows-latest --- -# 拍 00 · 环境体检:先确认机器活着 +# 第 1 个历程 · 环境体检:先确认机器活着 -欢迎来到主线第一拍。咱们刚把这个仓库 clone 下来,接下来十拍,咱们会陪一个会打招呼的小程序走过它的一生——出生、生病、长大、搬家、进入一台没有屏幕的机器。但在那之前,有一件更朴素的事:**确认咱们手上这台机器,干得了这些活。** +嘿!大伙好!咱们这里是EmbededBox,也就是所有嵌入式软件开发旅途的第一站 -这一拍没有任何新知识要背,目标只有一个:跑一份体检报告,读懂它,把缺的东西补上。 +> 硬件呢?嗯。。。这个版本还闲不考虑硬件。笔者不会,就这么简单。 + +我相信大伙是在以观看网页的方式来阅读我们的教程。不过从这里开始,如果您是多屏用户,请把这里的教程丢到侧屏。如果不是,我建议您以窗口模式放到一边。至少不要让咱们的教程占据您的屏幕。您的核心是动手,跟笔者一起来做。 + +我们开始的方式非常简单——那就是继续阅读我们的教程。至少现在,您什么都不用做! ## 先得有一个能跑命令的地方 -「终端」就是敲命令的地方。Linux 和 macOS 用户已经有了;Windows 用户请注意——嵌入式开发的主体生态在 Linux 侧,咱们不打算从第一天起就打游击,所以先给自己装一台 Linux:WSL2,Windows 官方的 Linux 子系统,开箱即用。在**管理员权限的 PowerShell** 里: +好了,咱们偷懒的日子结束了。什么叫能跑命令的地方呢?笔者现在在的就是一个。 -```bash -wsl --install -d Ubuntu +![I am working in VSCode](assets/00/vscode-cmdline.png) + +没看到?您可以稍微花费一些时间琢磨一下,您认为哪里是一个“能跑命令的地方”。如果您觉得这个太难了,那么这个也是,这个是大名鼎鼎的Windows cmd在Windows11的模样,如果感到陌生,您的确应该抛弃掉您的老电脑了(当然不会!) + +![CMD的截图](assets/00/cmd.png) + +当然如果您是一个潮流的人,您可能听说过Powershell。 + +![Powershell的截图](assets/00/powershell.png) + +这些乱七八糟的东西,就是「终端」,您看到那些电视剧中,一些自称程序员的人在一个黑乎乎的窗口里敲击键盘输入命令?恭喜,马上你也要了。 + +好了收回来,我们说的「终端」就是敲命令的地方。Linux 和 macOS 用户已经有了(我没有用过MacOS,这里表示歉意,上述陈述是我使用MacOS的同事说的)。我也相信当您使用这两款操作系统的时候,恐怕不至于看本教程了。如果不知道,请您发挥您的Hacker精神,去查查维基,或者是问问您喜欢的AI。 + +Windows用户是我们这里需要详细讲述的。一个图形的操作系统的习惯使用者可能会对终端这个概念比较陌生,这并不奇怪,但不代表这是应该的。所以,请您务必安装WSL,尽快的熟悉Linux开发环境。 + +WSL的安装,您可以考虑到[安装你的WSL](https://zhuanlan.zhihu.com/p/2017602632177427017)这篇文章进行阅读。或者是站内的[WSL安装教程](../environment/wsl.md)下阅读。取决于你。 + +笔者的终端贴过来是这样的: + +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ + +``` + +哈?看起来啥都没有在动?没关系,您在这个窗口输入一些东西,比如说我是这样做的。 + +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ echo hello +hello +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ pwd +/home/charliechen/EmbedBox +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ + +``` + +当然,这里的话,请您提起精神,您看到了咱们输入一些东西,它能够给你一些回应,对吧。不是所有的输入都是会给你回应的 + +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ echo hello(如果有光标,他停留在这里,因为你没有按下回车) +``` + +这是一种,还有一种他看起来回车了,但是我可以说,压根计算机不认识 + +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ imcharliechen +bash: imcharliechen: command not found +``` + +他说 `command not found`。人话就是大哥我没找到命令。就像你跟你的朋友说去吃海底捞,他说什么是海底捞一样,回应了,但是跟没回应一样。 + +所以,只有终端看得懂的的东西,才能够被执行。比如说人生的一个哲学问题——我是谁? + +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ whoami +charliechen +``` + +他说我叫charliechen。 + +比如说我在哪? + +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ whoami +charliechen +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ pwd +/home/charliechen/EmbedBox +``` + +他说我在目录 `/home/charliechen/EmbedBox`。你几乎肯定跟我这个不一样。输出一个一大堆/串起的路径,就是对的。 + +好了,`whoami` 打印你叫啥, `pwd` 是显示当前你在哪个路径。不错,请记住他。 + +下一步是使用git拉取代码。什么?不会git?或者说您甚至不知道什么是git?没关系,我们来用如下的命令来安装Git: + +```shell +# 这一句话的意思是——安装git。之后咱们用 +sudo apt install git ``` -装完重启,从开始菜单打开 Ubuntu,咱们会得到一个真正的 bash。此后本书说的「终端」,对 Windows 用户而言默认指 WSL 里的这扇窗;裸装 Linux 的朋友,开终端模拟器就行。 +然后您会开始安装git,很有可能会让你确认是否下载,请您输入 'y' 后勇敢的回车。您检验git的方式非常的简单。就是像下面这样 -然后在终端里,先熟悉三条最原始的口令——「我是谁、我在哪、这里有什么」: +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ git --version +git version 2.55.0 +``` +`--verison` 是一种参数的表达形式,就像你问你的同事——嘿,你点个荤菜吧!你会说——好,点一个水煮牛肉。你完成了点的动作,同时带上了水煮牛肉这个菜品。`git --version`的含义一样,就是说明我要用git,用的方式是告诉我他的版本是多少,一个道理。 + +你第一次使用git的方式非常,非常的简单。麻烦您动动小手。输入一下: + +```shell +[charliechen@DESKTOP-65DBAA7 tmp]$ git clone https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox +Cloning into 'EmbedBox'... +remote: Enumerating objects: 193, done. +remote: Counting objects: 100% (193/193), done. +remote: Compressing objects: 100% (135/135), done. +remote: Total 193 (delta 45), reused 179 (delta 32), pack-reused 0 (from 0) +Receiving objects: 100% (193/193), 1.56 MiB | 2.27 MiB/s, done. +Resolving deltas: 100% (45/45), done. +``` + +当然,如果你发现git迟迟没有输出,请学会使用科学上网,这里出于法律考虑,请自行寻找教程。完成之后,请输入 `cd EmbedBox/`,这个的意思是——进入EmbedBox目录,就像您点击文件管理器的文件夹一样。 -```console -$ pwd -/home/you -$ ls -EmbedBox -$ cd EmbedBox +```shell +[charliechen@DESKTOP-65DBAA7 tmp]$ cd EmbedBox/ +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ ``` -`pwd` 打印当前目录,`ls` 列出下面有什么,`cd` 走进去。就这三条,够咱们起步了。这一拍先不解释 shell 的更多花样,用到的时候咱们再学——工具永远是被问题逼出来的,这是全书的方法论。 +好了现在在EmbedBox了,跑个脚本玩玩。 -## 跑体检 +## 下面跑体检 -笔者给这一拍准备的「实验」不是代码,而是一份体检脚本,它就是本章的配对验证脚本: +笔者给这个历程准备的「实验」不是代码,而是一份体检脚本,它就是本章的配对验证脚本: ```bash -bash scripts/journey/00-env-check.sh +./scripts/journey/00-env-check.sh ``` -在咱们刚 clone 下来的仓库根目录跑它。下面是笔者这台机器的真实输出(注意第一行——笔者自己也是在 WSL2 里干活的): +您可能已经犯迷糊了,这是啥?嗯,就是我写的一些命令,您看不懂,没关系,我保证他不会出问题。 + +下面是笔者这台机器的真实输出(注意第一行——笔者自己也是在 WSL2 里干活的): ```text ──────── 机器与系统 ──────── @@ -59,14 +157,14 @@ git version 2.55.0 gcc (GCC) 16.1.1 20260728 GNU Make 4.4.1 -──────── 建议工具(现在缺不要紧,后面的拍会用到再装) ──────── +──────── 建议工具(现在缺不要紧,后面的历程会用到再装) ──────── [ok] gdb [ok] cmake [ok] arm-none-eabi-gcc [ok] qemu-system-arm ``` -报告分三层,值得逐层读一遍。**机器与系统**告诉你内核和架构——后面拍 05 交叉编译时,「x86_64」这个字眼会变成故事的另一半。**必需工具**是全书的硬门槛:git(拉代码、记录旅程)、gcc(编译)、make(构建),缺任何一个,这一拍的体检就是红的。**建议工具**是后场的队员:gdb 拍 02 上场,cmake 拍 04,arm-none-eabi-gcc 和 qemu 拍 05/06——现在缺了完全不用慌。 +报告分三层,值得逐层读一遍。**机器与系统**告诉你内核和架构——后面第 6 个历程交叉编译时,「x86_64」这个字眼会变成故事的另一半。**必需工具**是全书的硬门槛:git(拉代码、记录旅程)、gcc(编译)、make(构建),缺任何一个,这个历程的体检就是红的。**建议工具**是后场的队员:gdb 在第 3 个历程上场,cmake 在第 5 个,arm-none-eabi-gcc 和 qemu 要到第 6/7 个——现在缺了完全不用慌。 缺什么就补什么。Ubuntu/Debian 用户一把梭: @@ -74,7 +172,7 @@ GNU Make 4.4.1 sudo apt install build-essential gdb cmake ``` -Arch 用户对号入座 `sudo pacman -S base-devel gdb cmake`;交叉工具链和模拟器到拍 05 前再装也来得及(Ubuntu:`sudo apt install gcc-arm-none-eabi qemu-system-arm`)。这里先不展开每个包是什么——它们各自的章节会亲自介绍自己。 +Arch 用户对号入座 `sudo pacman -S base-devel gdb cmake`;交叉工具链和模拟器到第 6 个历程前再装也来得及(Ubuntu:`sudo apt install gcc-arm-none-eabi qemu-system-arm`)。这里先不展开每个包是什么——它们各自的章节会亲自介绍自己。 ## 顺便学会一件救命的小事:command not found @@ -92,8 +190,4 @@ which gcc echo "$PATH" ``` -PATH 是 shell 的寻人启事列表,冒号分隔的一串目录。命令明明装了却报 not found,九成是它所在的目录不在这串列表里——拍 05 装完交叉工具链、拍 08 配编辑器时,你还会再遇到这个局面。第三斧,**名字对吗**:拼写、大小写、连字符,以及「我以为我装了」的自我怀疑。这三斧会陪咱们穿过全书,也会陪咱们穿过之后所有的嵌入式生涯。 - -## 下一站 - -机器活了,工具在位,咱们现在两手空空——正好,下一拍咱们从一行代码开始,亲眼看着它变成一个能跑的程序,再把这个程序拆开,看看「可执行文件」的肚子里到底装了什么。 +PATH 是 shell 的寻人启事列表,冒号分隔的一串目录。命令明明装了却报 not found,九成是它所在的目录不在这串列表里——第 6 个历程 装完交叉工具链、第 9 个历程 配编辑器时,你还会再遇到这个局面。第三斧,**名字对吗**:拼写、大小写、连字符,以及「我以为我装了」的自我怀疑。这三斧会陪咱们穿过全书,也会陪咱们穿过之后所有的嵌入式,甚至可以说是自己计算机程序员的生涯! diff --git a/tutorial/journey/01-elf.md b/tutorial/journey/01-elf.md index 59cdb6a..610d0cb 100644 --- a/tutorial/journey/01-elf.md +++ b/tutorial/journey/01-elf.md @@ -1,17 +1,30 @@ --- -title: 拍 01 · 源码→程序:看着它变,再拆开看 +title: 第 2 个历程 · 源码→程序:看着它变,再拆开看 order: 1 verify: scripts/journey/01-elf.sh tier: ci-matrix verified-on: WSL2(Arch)/ gcc 16.1.1;CI 矩阵 ubuntu-latest + windows-latest --- -# 拍 01 · 源码→程序:看着它变,再拆开看 +# 第 2 个历程 · 源码→程序:看着它变,再拆开看 -主角出场了。它现在是这个样子,一行 `hello.c`,住在 [src/journey/01-elf/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/01-elf/): +主角出场了。它现在是这个样子,一行 `hello.c`。您找到的方式是这样的,请回到当时克隆的EmbedBox上,然后 +```shell +[charliechen@DESKTOP-65DBAA7 EmbedBox]$ cd src/journey/01-elf +[charliechen@DESKTOP-65DBAA7 01-elf]$ ls +hello.c +``` + +`ls` 的意思很简单,就是列出来有什么,咱们这个目录就是一个hello.c。下一步是打开这个文件看看——终端里的「打开」不弹新窗口,用的命令叫 `cat`,它把文件内容整个倒在屏幕上,像把一张纸摊开在咱们面前: + +```shell +[charliechen@DESKTOP-65DBAA7 01-elf]$ cat hello.c +``` + +得到的是。 ```c -/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 +/* 第 2 个历程 出生、第 3 个历程 病愈的主角,目前只有一个文件 * 对应教程:tutorial/journey/01-elf.md */ #include @@ -23,24 +36,27 @@ int main(void) } ``` -一行命令就能让它跑起来: +这里笔者得先立个假设:咱们学过最简单的C语言。真的没有的话,把上面这段代码丢给喜欢的AI问一嘴,一分钟的事。然后,一行命令就能让它跑起来: ```bash -gcc hello.c -o hello -./hello +gcc hello.c -o hello && ./hello ``` ```text hello, EmbedBox! ``` -跑起来了,然后呢?如果咱们此刻的心情是「能跑就行」,那这一拍就是为咱们准备的——因为**`gcc` 这一个命令里,其实住着四个工具**,它们接力把文本变成了机器码。接下来咱们把这四棒拆开,一棒一棒亲眼看。 +跑起来了。先别急着往下一屏冲,这行命令本身就值得拆一拆——全书咱们都要跟它打交道。`gcc hello.c` 是主体:把源文件交给 gcc;`-o hello` 给产物起名字,`o` 就是 output,不写的话 gcc 默认管它叫 `a.out`,一个来历不明的名字。 + +中间的 `&&` 是「成了再跑」:左边成功,右边才执行——编译要是失败,`./hello` 压根不会跑,免得咱们捧着上次留下的旧文件空欢喜。至于 `./hello` 的 `./`,第 1 个历程里那串 PATH 咱们还有印象:shell 找命令只翻那串目录,当前目录不在名单上,想运行「就在脚边」的这个程序,就得指名道姓,`./` 的意思就是「当前目录下的这个」。 + +拆完这行命令,然后呢?如果咱们此刻的心情是「能跑就行」,那这个历程就是为咱们准备的——因为 **`gcc` 这一个命令里,其实住着四个工具**, 它们接力把文本变成了机器码——CPU 唯一肯吃的东西。接下来咱们把这四棒拆开,一棒一棒亲眼看。 ## 四棒接力:预处理器、编译器、汇编器、链接器 ### 第一棒:预处理器 -`-E` 让 gcc 在预处理之后立刻停下,把结果吐成 `.i` 文件: +`-E` 让 gcc 在预处理之后立刻停下,把结果吐成 `.i` 文件。顺手用 `wc -l` 数一数行数——`wc` 是 word count,`-l` 让它数行: ```bash gcc -E hello.c -o hello.i @@ -51,7 +67,7 @@ wc -l hello.i 848 hello.i ``` -一行 `#include` 变成了八百多行。看看开头: +一行 `#include` 变成了八百多行。看看开头——`head -12` 就是「只取头 12 行」,八百多行没必要全看: ```bash head -12 hello.i @@ -72,11 +88,13 @@ head -12 hello.i # 1 "/usr/include/bits/libc-header-start.h" 1 3 ``` -预处理器干的事朴素得可爱:**把 `#include` 的文件原样抄进来,把 `#define` 的名字换成值**。那些 `# 1 "..."` 行是行号标记,告诉编译器「接下来这段来自哪个文件第几行」——以后咱们看到编译报错指向头文件深处,靠的就是它们指的路。咱们的 hello.c 本体,在这八百多行的最末尾。 +预处理器干的事朴素到令人感到好玩和可爱:**把 `#include` 的文件原样抄进来,把 `#define` 的名字换成值**。那些 `# 1 "..."` 行是行号标记,告诉编译器「接下来这段来自哪个文件第几行」——以后咱们看到编译报错指向头文件深处,靠的就是它们指的路。咱们的 hello.c 本体,在这八百多行的最末尾。 ### 第二棒:编译器 -`-S` 停在汇编之后,产出 `.s`: +看汇编之前,得先垫一句话,不然下一屏对咱们就是纯天书。CPU 不认识 C,它只吃机器码——每条指令在它眼里就是几个二进制字节,后面咱们会亲眼看到,这段 `main` 的开头四个字节是 `55 48 89 e5`。**汇编**就是机器码的人话版:一条汇编指令几乎一比一地对应一段机器码字节,给二进制起了名字——`mov` 是搬,`call` 是喊人。第二棒干的就是「C → 汇编」这一跳,产出的 `hello.s`,是离 C 很远、离 CPU 很近的文字。咱们不需要全读懂,认得它就够了。 + +`-S` 停在汇编之后,产出 `.s`。这次没写 `-o`,`hello.s` 也会自己落在当前目录——`.s` 和 `.o` 这两棒都有默认产物名,而 `-E` 的默认是把结果直接吐到屏幕上,所以第一棒咱们老老实实写了 `-o hello.i`: ```bash gcc -S hello.c @@ -110,7 +128,11 @@ main: ret ``` -停一下,这里有个彩蛋:**咱们明明写的是 `printf`,汇编里却是 `call puts@PLT`。** 这是编译器干的好事——`printf("...\n")` 这种单参数、以换行结尾的调用,输出效果和 `puts` 一模一样,而 `puts` 更快(不用解析格式串)。编译器在 `-O0` 下也会做这类小替换。这个细节顺便提醒咱们:汇编层看到的才是真相,源码只是愿望。那些 `.cfi_*` 是调试 unwind 信息的骨架,现在可以无视。 +这一屏允许咱们看不懂大半——笔者第一次正经读汇编,也是头皮发麻。抓住两样东西就够:`%rbp` `%rsp` `%rax` `%rdi` 这些带 `%` 的名字是**寄存器**,CPU 肚子里屈指可数的几个超高速小格,变量想参与运算,得先搬进这些格子;`pushq` `movq` `leaq` `call` 这些打头的是**指令**,即动作本身——存一下、搬一下、算个地址、跳过去喊人。写 C 不需要会写汇编,但混个脸熟很值:嵌入式调到深处,经常只剩汇编肯跟咱们说话。 + +停一下,这里有个彩蛋:**咱们明明写的是 `printf`,汇编里却是 `call puts@PLT`。** 这是编译器干的好事——`printf("...\n")` 这种单参数、以换行结尾的调用,输出效果和 `puts` 一模一样,而 `puts` 更快(不用解析格式串)。`-O0` 是 gcc 的优化档位,数字越大,编译器越敢自作主张地改写咱们的代码;`-O0` 是「一个字都别动」的最低档——连最低档它都要做这类小替换,往后走进 `-O2` 的世界,咱们心里要有数。 + +这个细节顺便提醒咱们:汇编层看到的才是真相,源码只是愿望。那些 `.cfi_*` 是调试 unwind 信息的骨架,现在可以无视;`@PLT` 这个后缀也先按下不表,第四棒它会自己现身。 ### 第三棒:汇编器 @@ -129,7 +151,7 @@ HAS_RELOC, HAS_SYMS start address 0x0000000000000000 ``` -现在它已经是货真价实的机器码了,但注意 flags 里那个 **`HAS_RELOC`**:「含有待重定位项」。翻译成人话:这份机器码里还有一堆空位,等着链接器把最终地址填进去。start address 是 0——它自己都不知道自己将来会被放到内存的哪里。 +现在它已经是货真价实的机器码了,但注意 flags 里那个 **`HAS_RELOC`**:「含有待重定位项」。翻译成人话:这份机器码里还有一堆空位,等着链接器(您可以叫他代码的整合器)把最终地址填进去。start address 是 0——它自己都不知道自己将来会被放到内存的哪里。 再看看它随身带的账本,符号表: @@ -142,7 +164,7 @@ nm hello.o U puts ``` -两行,但信息量巨大。`T main`:我定义了函数 `main`,它在代码段(Text)。`U puts`:我**用了** `puts`,但它的实现不在我这——`U` 是 Undefined,一张借条。这个借条/欠条的意象请记牢,两拍之后它会变成一次真实的爆炸。 +两行,但信息量巨大。`T main`:我定义了函数 `main`,它在代码段(Text)。`U puts`:我**用了** `puts`,但它的实现不在我这——`U` 是 Undefined,一张借条。这个借条/欠条的意象请记牢,两个历程之后它会变成一次真实的爆炸。 ### 第四棒:链接器 @@ -159,7 +181,11 @@ HAS_SYMS, DYNAMIC, D_PAGED start address 0x0000000000001040 ``` -对比 `.o`:flags 变了——`HAS_RELOC` 没了,换来 `DYNAMIC`(动态链接)和 `D_PAGED`(按页布局);start address 从 0 变成了 `0x1040`,链接器已经决定好它住哪了。链接器做的事,就是把 `hello.o` 的借条和 C 库的欠条对上账,把那些待重定位的空位填成真地址。跑一下,它活着: +对比 `.o`:flags 变了——`HAS_RELOC` 没了,换来 `DYNAMIC`(动态链接)和 `D_PAGED`(按页布局);start address 从 0 变成了 `0x1040`,链接器已经决定好它住哪了。 + +「C 库」和「动态链接」这两个词,笔者前面都是一带而过,这里兑现。**C 库**(常叫 libc)是操作系统自带的零件库,`printf`、`puts` 这些常用函数的实现全住在里面——`#include ` 抄进来的只是说明书,实现本体从来不在咱们的文件里。于是那张 `U puts` 的借条怎么还,链接器有两种还法:把用到的实现整段抄进 `hello`,文件变大,但从此独立生活,这叫静态链接;或者只在 `hello` 里登记一个门牌,运行时再去系统里的 libc 搭伙,这叫动态链接。gcc 在 Linux 上默认走后者,这就是 `DYNAMIC` 的来历——`hello` 里其实**没有** `puts` 的机器码,`call puts@PLT` 里那个前面按下不表的 `@PLT`,就是门牌本身:一小段跳板代码,程序跑到这里,先顺藤摸瓜找到 libc 里的真身,再跳过去。等到第 7 个历程 上裸机、没有 libc 可搭伙,咱们会亲手体会这两种还法的差别。 + +链接器做的事,就是把 `hello.o` 的借条和 C 库的欠条对上账,把那些待重定位的空位填成真地址。跑一下,它活着: ```bash ./hello @@ -184,7 +210,7 @@ readelf -S hello [26] .bss NOBITS 0000000000004018 00003018 ``` -这里节选了最要紧的四段。`.text` 是代码,只读;`.rodata` 是只读数据——咱们那句 `"hello, EmbedBox!\n"` 字符串就住在这里;`.data` 是有初值的全局/静态变量;`.bss` 最有意思,类型是 **NOBITS**——不占文件一字节,因为「初值为 0 的变量」没必要存,程序启动时内存里划一块零就行。这四个名字,`.text`/`.data`/`.bss`,是嵌入式的通行证:将来咱们在链接脚本里亲手给它们安排地址时(拍 06),今天的这一眼就是全部前置知识。 +这里节选了最要紧的四段。`.text` 是代码,只读;`.rodata` 是只读数据——咱们那句 `"hello, EmbedBox!\n"` 字符串就住在这里;`.data` 是有初值的全局/静态变量;`.bss` 最有意思,类型是 **NOBITS**——不占文件一字节,因为「初值为 0 的变量」没必要存,程序启动时内存里划一块零就行。这四个名字,`.text`/`.data`/`.bss`,是嵌入式的通行证:将来咱们在链接脚本里亲手给它们安排地址时(第 7 个历程),今天的这一眼就是全部前置知识。 还能反汇编看自己程序的机器码: @@ -217,10 +243,10 @@ size hello `.text` 加上 `.rodata` 等,一共 1411 字节——在宿主机上这点体积无人在意;但请记住这个看体积的习惯,等咱们搬去只有几十 KB 内存的小板子,每一行这个报表都是钱。 -## 这一拍咱们带走了什么 +## 这个历程咱们带走了什么 -四棒接力:预处理器(抄写员)→ 编译器(翻译官)→ 汇编器(打包员)→ 链接器(对账人)。三件随身工具:`objdump -f` 看格式与架构,`nm` 看符号账本,`readelf -S` 看段落布局。四个段名:`.text`/`.rodata`/`.data`/`.bss`。还有两个伏笔:符号表里的 `U`(借条)会在拍 03 炸出 `undefined reference`;段布局会在拍 06 被咱们亲手写进链接脚本。 +四棒接力:预处理器(抄写员)→ 编译器(翻译官)→ 汇编器(打包员)→ 链接器(对账人)。三件随身工具:`objdump -f` 看格式与架构,`nm` 看符号账本,`readelf -S` 看段落布局。四个段名:`.text`/`.rodata`/`.data`/`.bss`。还有两个伏笔:符号表里的 `U`(借条)会在第 4 个历程 炸出 `undefined reference`;到了第 7 个历程 上裸机,没有 libc 可搭伙,段布局也得咱们亲手写进链接脚本——今天记下的每一样,那天都要用上。 ## 下一站 -程序健康地活着,只会说一句话。下一拍,咱们把它弄坏——认真地、蓄意地弄坏——然后请出嵌入式生涯里最重要的搭档之一:GDB。 +程序健康地活着,只会说一句话。下一个历程,咱们把它弄坏——认真地、蓄意地弄坏——然后请出嵌入式生涯里最重要的搭档之一:GDB。 diff --git a/tutorial/journey/02-gdb.md b/tutorial/journey/02-gdb.md index 5e97ac7..cc0a759 100644 --- a/tutorial/journey/02-gdb.md +++ b/tutorial/journey/02-gdb.md @@ -1,17 +1,17 @@ --- -title: 拍 02 · 程序病了:printf 够不到的地方 +title: 第 3 个历程 · 程序病了:printf 够不到的地方 order: 2 verify: scripts/journey/02-gdb.sh tier: ci-matrix verified-on: WSL2(Arch)/ gcc 16.1.1 / gdb 17.2;CI 矩阵 ubuntu-latest + windows-latest --- -# 拍 02 · 程序病了:printf 够不到的地方 +# 第 3 个历程 · 程序病了:printf 够不到的地方 -这一拍的病,是笔者亲手埋的。病人在 [src/journey/02-gdb/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/02-gdb/),先睹为快: +这个历程的病,是笔者亲手埋的。病人在src/journey/02-gdb/,先睹为快: ```c -/* 拍 02 的病号:越界读一颗,答案就歪了 +/* 第 3 个历程 的病号:越界读一颗,答案就歪了 * 对应教程:tutorial/journey/02-gdb.md */ #include @@ -26,7 +26,7 @@ int main(void) int data[4] = {1, 2, 3, 4}; int total = 0; - for (int i = 0; i <= 4; i++) { /* 病根:<=,data[4] 不是我们的 */ + for (int i = 0; i <= 4; i++) { total += scale(data[i], 2); } printf("total = %d\n", total); @@ -34,7 +34,9 @@ int main(void) } ``` -`data` 只有 4 个元素,循环却跑 5 次——`data[4]` 越界读了隔壁邻居的内存。数学好的朋友心算一下:正确答案应该是 `(1+2+3+4)×2 = 20`。那编译运行看看: +🤫!您是C语言的老手的话,还请安静一些,对于还在犯猛的朋友,不要怕,您可能只是知道这个代码是存在问题的。 + +代码里只有一处新面孔:`scale` 前面的 `static`,意思是这个函数只在本文件里可见、不怕别的文件撞名——跟本章的病无关,只是个好习惯。 ```bash gcc -g -O0 -o buggy buggy.c @@ -47,13 +49,13 @@ total = 20 **答案是对的。** 在笔者这台机器上,这次越界读到的恰好是个 0,乘什么都不影响总分——病得悄无声息。咱们那边可能是 42,可能是 -8,甚至直接崩:越界读没有任何合同保证,读到什么全凭内存布局的运气。这正是它比崩溃更可怕的地方:崩溃至少诚实。 -现在问题来了:怎么**证明**第五次调用真的发生了、`v` 拿到的不是数组里的数?printf 无能为力——咱们不能在一个不存在的变量上插桩,而且插桩本身会改变程序。咱们需要的是:让程序停在任何一行,掀开它的现场。这就是 GDB。 +现在问题来了:怎么**证明**第五次调用真的发生了、`v` 拿到的不是数组里的数?最直觉的办法是往源码里塞 printf 再重新编译——行话叫「插桩」,好比为了量个体温先给病人开一刀。它天生吃亏:每加一句都得整个重新编译,而且本章开头刚见过,越界读到什么全凭内存布局的运气——多塞一句 printf,布局就可能挪动,隔壁邻居换个值,病象当场变样。咱们真正需要的是一行代码都不加,让程序停在任何一行,掀开它的现场。干这一行的工具叫调试器,本书用的是 GNU Debugger——GDB,第 1 个历程体检报告里候场的那位,现在上场。 -顺带解释刚才编译命令里的两个选择:`-g` 让 gcc 把「行号、变量名、类型」这些调试信息织进二进制——没有它,gdb 看到的是一串无名地址;`-O0` 关掉优化,让机器码老老实实按源码顺序走。为什么优化是调试的大敌,这一拍结尾咱们会亲眼看到。 +顺带解释刚才编译命令里的两个选择:`-g` 让 gcc 把「行号、变量名、类型」这些调试信息织进二进制——没有它,gdb 看到的是一串无名地址;`-O0` 关掉优化,让机器码老老实实按源码顺序走。为什么优化是调试的大敌,这个历程结尾咱们会亲眼看到。 ## 会话一:断点、现场、回溯 -真实使用时,`gdb ./buggy` 进入交互式对话。为了让整个会话可以被 CI 逐字重放,这里用 `-batch` 加一串 `-ex`(把要敲的命令提前排队),效果完全一致: +真实使用时,敲 `gdb ./buggy` 进入的是一场交互式对话——咱们敲一句,它答一句。本书为了每场会话都能被 CI 逐字重放,统一改用 `-batch` 加一串 `-ex` 的写法:把要敲的命令提前排好队,让 gdb 一口气执行完,效果与手敲完全一致。CI(持续集成)是仓库自带的自动验证流程——每章都配了一个验证脚本(第 1 个历程跑的那种体检脚本),它们会在云端机器上原样重跑,咱们贴的每份输出敢说「真实」,靠的就是它。命令里还有三处小机关顺带交代:行尾的 `\` 是换行续写,纯为屏幕上好读,并成一行也照跑;`-q` 让 gdb 少打开场广告;`-iex 'set debuginfod enabled off'` 是句咒语,叫它别联网下载调试信息,现在照抄即可,不影响咱们要看的任何东西: ```bash gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ @@ -76,7 +78,11 @@ factor = 2 #1 0x00005555555551b4 in main () at buggy.c:17 ``` -逐行读这份成绩单。`Breakpoint 1 at 0x1153` 是 gdb 在 `scale` 入口放了哨兵;程序跑起来,第一次撞上哨兵,它把**整个现场**摆给咱们:`scale (v=1, factor=2)`——函数名、两个参数的值,一目了然,一行 printf 都不用加。`info args` 再把参数单独列一遍。最后的 `bt`(backtrace)是调用栈回溯:`#0` 是现在所处的 `scale`,`#1` 是谁叫它来的——`main` 的 `buggy.c:17`。栈帧从下往上读,就是「案发现场 ← 谁报的案」。 +逐行读这份成绩单(例外只有两行:`Thread debugging using libthread_db` 是 gdb 关于多线程的自言自语,与咱们无关,跳过)。 + +`Breakpoint 1 at 0x1153` 是 gdb 在 `scale` 入口放了哨兵;程序跑起来,第一次撞上哨兵,它把**整个现场**摆给咱们:`scale (v=1, factor=2)`——函数名、两个参数的值,一目了然,一行 printf 都不用加。 + +`info args` 再把参数单独列一遍。最后的 `bt`(backtrace)回溯的是调用栈:程序每调用一层函数,就在一块专属内存里记一页账,一页叫一个栈帧——第 2 个历程汇编里那条 `pushq %rbp`,存的就是这叠账本的当前页。`#0` 是现在所处的 `scale`,`#1` 是谁叫它来的——`main` 的 `buggy.c:17`。 ## 会话二:一路 continue,逼出第五次 @@ -113,7 +119,7 @@ Breakpoint 1, scale (v=0, factor=2) at buggy.c:8 ## 会话三:watch,让数据变化自己举手 -还有一招值得入袋:盯梢。`watch total` 给变量装上门铃,谁改它谁触发: +还有一招值得入袋:盯梢。`watch total` 给变量装上门铃,谁改它谁触发。装门铃有个前提:`total` 得先存在——它是 `main` 里的局部变量,程序还没跑进 `main` 时,这个名字无处安放,所以得先在 `main` 门口停一脚: ```bash gdb -q -batch -iex 'set debuginfod enabled off' ./buggy \ @@ -164,14 +170,11 @@ $1 = $2 = ``` -两个惊喜。其一,编译器自己拉响了警报:`iteration 4 invokes undefined behavior`——「第 4 次迭代(即 i=4 那次)行为未定义」。越界读属于未定义行为(UB),编译器有权做任何假设,-O2 下它看得更远,直接警告咱们。这也是拍 03 会把 `-Wall -Wextra` 写进 Makefile 的原因:警告是免费的第一道防线。其二,进了 gdb,`print total` 和 `print data` 都回一句 ``——优化器认为这些变量没必要在内存里留位置,直接扔进了寄存器或者干脆重排了。**不是 gdb 坏了,是它要观察的对象被优化掉了。** 所以业界的节奏是:调试期 `-O0 -g`,复现并修完,再换 `-O2` 验证——而不是对着一份优化过的二进制抱怨调试器不灵。 +两个惊喜。其一,编译器自己拉响了警报:`iteration 4 invokes undefined behavior`——「第 4 次迭代(即 i=4 那次)行为未定义」。越界读属于未定义行为(UB),编译器有权做任何假设,-O2 下它看得更远,直接警告咱们。这也是第 4 个历程 会把 `-Wall -Wextra` 写进 Makefile 的原因:警告是免费的第一道防线。其二,进了 gdb,`print total` 和 `print data` 都回一句 ``(前面的 `$1`、`$2` 只是 gdb 给咱们看过的值编的号,之后能用 `$1` 回头引用,与病无关)——优化器认为这些变量没必要在内存里留位置,直接扔进了寄存器或者干脆重排了。**不是 gdb 坏了,是它要观察的对象被优化掉了。** 所以业界的节奏是:调试期 `-O0 -g`,复现并修完,再换 `-O2` 验证——而不是对着一份优化过的二进制抱怨调试器不灵。 -## 这一拍咱们带走了什么 +## 这个历程咱们带走了什么 gdb 五件套:`break`、`run`/`continue`、`info args`/`print`、`bt`、`watch`;两枚心法:现场比猜测值钱、调试用 `-O0`。还有一个正式登场的词:**undefined behavior**——它不是「崩一下」的意思,是「从此没有任何保证」的意思。 -最后留个伏笔:这一整套断点、单步、观察,都发生在「本机进程」上。将来在拍 06,程序会住进另一台(虚拟的)机器,那时 gdb 只需要一句 `target remote`,就能隔着一条串口线把这一切原样搬过去——咱们在真板上调试 STM32 时用的 OpenOCD,本质就是那根线另一头的接线员。 - -## 下一站 +这一整套断点、单步、观察,都发生在「本机进程」上——进程就是正在运行中的程序,`./buggy` 敲下回车那一刻,文件里的程序才活成一个进程。将来在第 7 个历程,程序会住进另一台(虚拟的)机器,那时 gdb 只需要一句 `target remote`,就能隔着一条串口线把这一切原样搬过去——咱们在真板上调试 STM32 时用的 OpenOCD(Keil的朋友可能犯猛,这啥,别着急,您理解为调试单片机的就好。),本质就是那根线另一头的接线员。 -病好了,但主角还是只会说一句话、只有一个文件。下一拍,让它长大——然后咱们会发现,长大本身会带来新的事故。 diff --git a/tutorial/journey/03-make.md b/tutorial/journey/03-make.md index 90e9f77..4d0ab6e 100644 --- a/tutorial/journey/03-make.md +++ b/tutorial/journey/03-make.md @@ -1,23 +1,23 @@ --- -title: 拍 03 · 程序长大:让 make 记住你记不住的 +title: 第 4 个历程 · 程序长大:让 make 记住咱们记不住的 order: 3 verify: scripts/journey/03-make.sh tier: ci-matrix verified-on: WSL2(Arch)/ gcc 16.1.1 / GNU Make 4.4.1;CI 矩阵 ubuntu-latest + windows-latest --- -# 拍 03 · 程序长大:让 make 记住你记不住的 +# 第 4 个历程 · 程序长大:让 make 记住咱们记不住的 -上一拍结束时,咱们的程序刚被 GDB 救回来,健康,但它只会说一句话,而且所有家当挤在一个 `main.c` 里。这一拍,咱们让它长大——从"一个文件"长成"一个小工程"。长大的代价马上会来:文件一多,「哪些东西需要重新编译」就成了人脑不该背的负担。这一拍的主角就是 make:一个替咱们记住依赖关系的工具。 +上一个历程结束时,咱们的程序刚被 GDB 救回来,健康,但它只会说一句话,而且所有家当挤在一个 `main.c` 里。这个历程,咱们让它长大——从"一个文件"长成"一个小工程"。长大的代价马上会来:文件一多,「哪些东西需要重新编译」就成了人脑不该背的负担。这个历程的主角就是 make:一个替咱们记住依赖关系的工具。 -动手地点是 [src/journey/03-make/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/03-make/)。本拍的所有命令都被 [scripts/journey/03-make.sh](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/blob/main/scripts/journey/03-make.sh) 在 CI 里逐字重放,咱们在正文里看到的每一段输出,都是真跑出来的。 +动手地点是 src/journey/03-make/。您收拾一下,准备开始干活了! ## 第一幕:手工时代 -先回到起点。主角目前长这样: +主角目前长这样: ```c -/* 拍 01 出生、拍 02 病愈的主角,目前只有一个文件 */ +/* 第 2 个历程 出生、第 3 个历程 病愈的主角,目前只有一个文件 */ #include int main(void) @@ -38,7 +38,7 @@ gcc main.c -o hello hello, EmbedBox! ``` -然后程序长大了。它学会的问候,值得从 `main.c` 里搬出去,单独住一个家——于是 `greet` 搬进了 `util`,`main.c` 只负责开场: +然后程序长大了。它学会的问候,值得从 `main.c` 里搬出去,单独住一个家——于是 `greet` 搬进了 `util`,`main.c` 只负责,额,用它! ```c #include @@ -52,6 +52,7 @@ int main(void) ``` ```c +// 老手说pragma once呢?不着急,一些嵌入式的老编译器恐怕看了犯迷糊。 #ifndef UTIL_H #define UTIL_H @@ -71,7 +72,11 @@ void greet(const char *who) } ``` -现在编译要分两步走了:先把每个 `.c` 编成目标文件(拍 01 的词汇:`-c` 停在汇编之后、链接之前),再把目标文件拼成可执行文件: +三个文件各司其职。`util.h` 是**声明**——只宣布「有这么个函数,长这个样子」。味道是——我说了有这个东西,是不是真的,我也不知道(后面链接器就会狠狠的惩罚你,就是这个意思) + +像餐厅的菜单;`util.c` 是**实现**,厨房本体;`main.c` 照着菜单点菜。两处新长相顺带交代:`#include "util.h"` 用引号、`` 用尖括号,是在告诉第一棒的抄写员「一个在咱们自己目录里,一个是系统标配」;`util.h` 开头结尾那圈 `#ifndef UTIL_H ... #endif` 叫**包含守卫**,防止同一个头文件被抄两遍——原理是第一次抄时做个记号,再遇到就跳过。至于 `greet` 参数里的 `const char *`,是「字符串参数」的惯用写法,现在照认即可,指针有它自己的大课,不记在本历程账上。 + +现在编译要分两步走了:先把每个 `.c` 编成目标文件(第 2 个历程 的词汇:`-c` 停在汇编之后、链接之前),再把目标文件拼成可执行文件: ```bash gcc -c main.c @@ -117,7 +122,7 @@ const char *version(void) ``` ```c -/* 主线拍 03 · 程序长大 —— 主角长成三个文件后的入口 +/* 主线第 4 个历程 · 程序长大 —— 主角长成三个文件后的入口 * 对应教程:tutorial/journey/03-make.md */ #include @@ -144,7 +149,7 @@ main.c:(.text+0x14): undefined reference to `version' collect2: error: ld returned 1 exit status ``` -这个报错值得逐行读,因为它会陪咱们很多年。第一行说话的是 `/usr/bin/ld`——链接器本身;`main.o: in function main'` 是说账对不上发生在 `main.o` 的 `main` 函数里,`(.text+0x14)` 是这条借条在代码段里的地址(拍 01 讲过的 `.text`,在这里兑现)。第二行是正题:`undefined reference to version'`——`main.o` 拿着 `version` 的借条,但所有目标文件的欠条里都找不到它。因为 `version` 的实现住在新版 `util.c` 里,而手边的 `util.o` 还是旧版编译出来的,里面没有它。第三行的 `collect2` 是 gcc 的链接包装进程,它在替真正的 `ld` 报告退出状态。 +这个报错值得逐行读,因为它会陪咱们很多年。第一行说话的是 `/usr/bin/ld`——链接器本身;`main.o: in function main'` 是说账对不上发生在 `main.o` 的 `main` 函数里,`(.text+0x14)` 是这条借条在代码段里的地址(第 2 个历程 讲过的 `.text`,在这里兑现)。第二行是正题:`undefined reference to version'`——`main.o` 拿着 `version` 的借条,但所有目标文件的欠条里都找不到它。因为 `version` 的实现住在新版 `util.c` 里,而手边的 `util.o` 还是旧版编译出来的,里面没有它。第三行的 `collect2` 是 gcc 的链接包装进程,它在替真正的 `ld` 报告退出状态。 修法就是补上忘掉的那一步: @@ -163,16 +168,16 @@ journey beat 03: v0.3.0 ## 第三幕:make 接管 -先把手工时代的残骸清掉,从一张白纸开始: +先把手工时代的残骸清掉,从一张白纸开始。`rm` 就是删除(remove)——它不进回收站,删了就是删了,拿它点名文件时看清楚再回车: ```bash rm main.o util.o hello ``` -然后写下这一拍的 Makefile(完整文件就在 `src/journey/03-make/Makefile`): +然后写下这个历程的 Makefile(完整文件就在 `src/journey/03-make/Makefile`): ```make -# 主线拍 03 · 程序长大 —— 最终 Makefile:变量 + 模式规则 + 头文件依赖 +# 主线第 4 个历程 · 程序长大 —— 最终 Makefile:变量 + 模式规则 + 头文件依赖 # 对应教程:tutorial/journey/03-make.md CC := gcc @@ -194,7 +199,7 @@ clean: rm -f $(TARGET) $(OBJS) ``` -逐块看它在说什么。开头四个变量是「一处声明、处处引用」:`CC` 是编译器,`CFLAGS` 是编译选项——`-Wall -Wextra` 把警告开足(第二幕那种安静的事故,警告常常是第一道警报),`-g` 留下调试信息——这个习惯拍 02 就教过咱们。`all` 是默认目标,它只是站在前台指着真正的产物 `hello`;`hello` 依赖两个目标文件,配方里的 `$@` 代表目标本身,`$^` 代表全部依赖——所以那行展开就是 `gcc -o hello main.o util.o`,和手工时代一模一样,只是换了套更耐用的写法。注意链接这一行没有放 `CFLAGS`:链接器只对符号感兴趣,警告和调试选项是编译期的事。 +逐块看它在说什么。开头几行的 `:=` 是 make 的赋值写法,暂时当成 `=` 用即可——两者的细微差别是 make 的深水区,不拦咱们的路。这些变量是「一处声明、处处引用」:`CC` 是编译器,`CFLAGS` 是编译选项——`-Wall -Wextra` 把警告开足(第二幕那种安静的事故,警告常常是第一道警报),`-g` 留下调试信息——这个习惯第 3 个历程 就教过咱们。`all` 是默认目标,它只是站在前台指着真正的产物 `hello`;`hello` 依赖两个目标文件,配方里的 `$@` 代表目标本身,`$^` 代表全部依赖——所以那行展开就是 `gcc -o hello main.o util.o`,和手工时代一模一样,只是换了套更耐用的写法。注意链接这一行没有放 `CFLAGS`:链接器只对符号感兴趣,警告和调试选项是编译期的事。 最有味道的是 `%.o: %.c util.h` 这条**模式规则**:任意一个 `.o` 都从同名的 `.c` 编出来,并且额外依赖 `util.h`。`$<` 代表第一个依赖,即那个 `.c` 文件。这一行就是第二幕事故的解药——`util.h` 变了,两个 `.o` 都会被判定过期,谁也漏不掉。至于 `.PHONY`,它声明 `all` 和 `clean` 是「动作」不是文件;少了它,哪天目录里恰好出现一个叫 `clean` 的文件,`make clean` 就会报告无事可做——这个坑的原理在 [GNU Make 手册的 PHONY 一节](https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html)写得很清楚。 @@ -204,22 +209,28 @@ clean: make ``` +我们的屏幕中依次出现: + ```text gcc -Wall -Wextra -g -c -o main.o main.c gcc -Wall -Wextra -g -c -o util.o util.c gcc -o hello main.o util.o ``` +OK了,这就是完事了,跑一下? + ```bash ./hello ``` +马上拿到了我们的输出: + ```text hello, EmbedBox! journey beat 03: v0.3.0 ``` -每一行都是 make 替咱们敲的命令——它先回显命令本身,再执行。现在验证记账员是不是真的在记账。先动头文件: +每一行都是 make 替咱们敲的命令——它先回显命令本身,再执行。现在验证记账员是不是真的在记账。先动头文件——`touch` 的作用是把文件的修改时间戳改成「现在」(文件不存在时顺手创建个空的),内容一个字都不改,正好用来模拟「文件被动过了」: ```bash touch util.h @@ -254,7 +265,7 @@ gcc -Wall -Wextra -g -c -o util.o util.c gcc -o hello main.o util.o ``` -只有 `util.o` 重编,`main.o` 原封不动,然后重新链接。这就是「最小重编」:三十个文件的工程里,这个差别是从「泡杯咖啡等全量」到「回车即完成」的差别——以后咱们编译内核和 BSP 的时候,会对这一行感恩戴德。 +只有 `util.o` 重编,`main.o` 原封不动,然后重新链接。这就是「最小重编」:三十个文件的工程里,这个差别是从「泡杯咖啡等全量」到「回车即完成」的差别——以后咱们编译内核和 BSP(板级支持包——厂商为某块板子备好的那沓驱动与配置)的时候,会对这一行感恩戴德。 最后是打扫和重来,验证这套账本从零开始也成立: @@ -263,14 +274,21 @@ make clean make ``` +这两个命令依次对应的是 + ```text rm -f hello main.o util.o +``` + +和: + +```text gcc -Wall -Wextra -g -c -o main.o main.c gcc -Wall -Wextra -g -c -o util.o util.c gcc -o hello main.o util.o ``` -## 几个咱们大概率会撞上的坑 +## 看我,我说个事! **Tab,不是空格。** Makefile 的配方行必须以真正的 Tab 开头。用空格缩进,咱们会收获: @@ -283,7 +301,3 @@ Makefile:16: *** missing separator. Stop. **`Nothing to be done` 不是报错。** 它是 make 在说「依赖没变,我什么都没干」。如果咱们明明改了代码却看到这句话,先怀疑自己是不是改错了地方、或者目录不对——make 只看时间戳,它不会撒谎。 **头文件依赖会长大。** 咱们手写的 `util.h` 依赖在两个文件时刚好够用;等头文件多起来,「谁 include 了谁」也该交给机器记——`gcc -MMD` 能自动生成依赖文件。这属于把 make 用到深处的手艺,这些放到参考篇再展开,主线先记着这个口子存在。 - -## 下一站 - -程序长大了,也学会了记账。但等它再长一点——分出目录、分出库、还要在宿主机和目标机两套工具链之间切换——手写 Makefile 就会从「耐用」变成「手工地毯」。下一拍,咱们把工程交给 CMake,顺便产出一枚 `compile_commands.json`,它之后会被咱们的编辑器吃掉。先记住此刻的感觉:咱们亲手写过、也亲手修过一份 Makefile,以后在任何 SDK 里再看到它,那不是天书,是一份账本。 diff --git a/tutorial/journey/04-cmake.md b/tutorial/journey/04-cmake.md index 16e3c5b..96b7bec 100644 --- a/tutorial/journey/04-cmake.md +++ b/tutorial/journey/04-cmake.md @@ -1,23 +1,23 @@ --- -title: 拍 04 · 工程化:CMake 与那枚给编辑器的接口 +title: 第 5 个历程 · 工程化:CMake 与那枚给编辑器的接口 order: 4 verify: scripts/journey/04-cmake.sh tier: ci-matrix verified-on: WSL2(Arch)/ cmake 4.4.2 / gcc 16.1.1;CI 矩阵 ubuntu-latest + windows-latest --- -# 拍 04 · 工程化:CMake 与那枚给编辑器的接口 +# 第 5 个历程 · 工程化:CMake 与那枚给编辑器的接口 -三个文件的工程用 CMake,确实有点杀鸡用牛刀——上一拍的 Makefile 十几行,清清爽爽。但程序的结构变了:`util` 不再是「顺带编的两个文件」,它是一个有名字、有接口的**库**,值得用库的方式被声明和管理。更硬的理由在下一拍等着:咱们要搬家,同一份源码要在「宿主机工具链」和「ARM 工具链」两套规则之间切换——手写 Makefile 管一套是清爽,管两套就是手工地毯。趁现在把壳子换好,搬家时才不心疼。 +三个文件的工程用 CMake,确实有点杀鸡用牛刀——上一个历程的 Makefile 十几行,清清爽爽。但程序的结构变了:`util` 不再是「顺带编的两个文件」,它是一个有名字、有接口的**库**,值得用库的方式被声明和管理。更硬的理由在下一个历程等着:咱们要搬家。宿主机(就是咱们敲命令的这台电脑)和目标机(将来真正跑咱们程序的那台小板子)这对词,是嵌入式世界的地基,下一个历程正式开工——同一份源码要在宿主机工具链和 ARM 工具链两套规则之间切换,手写 Makefile 管一套是清爽,管两套就是手工地毯。趁现在把壳子换好,搬家时才不心疼。 -动手地点:[src/journey/04-cmake/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/04-cmake/)。程序还是那个程序,只是住进了新户型:`src/` 目录下 `main.c`、`util.c`、`util.h`,版本号跳到 v0.4.0。 +动手地点是 src/journey/04-cmake/。程序还是那个程序,只是住进了新户型:`src/` 目录下 `main.c`、`util.c`、`util.h`,版本号跳到 v0.4.0。您 cd 过去,咱们开工。 ## CMakeLists.txt:用声明代替记账 整个工程的新账本只有十几行: ```cmake -# 主线拍 04 · 工程化 —— 同一个程序,搬进 CMake 工程 +# 主线第 5 个历程 · 工程化 —— 同一个程序,搬进 CMake 工程 # 对应教程:tutorial/journey/04-cmake.md cmake_minimum_required(VERSION 3.16) @@ -35,7 +35,13 @@ add_executable(hello src/main.c) target_link_libraries(hello PRIVATE util) ``` -和上一拍最大的区别在姿势:Makefile 记的是**过程**(哪个文件先编、命令行怎么拼),CMakeLists 声明的是**事实**(存在一个库叫 util、一个可执行文件叫 hello、后者链接前者)。`add_library(util STATIC src/util.c)` 一行,「编目标文件、打包成 libutil.a」的流水线自动成立。`target_include_directories(util PUBLIC src)` 里那个 `PUBLIC` 是全段最值钱的关键词:`src` 是 util 的接口目录,声明成 PUBLIC 意味着**谁链接 util,谁就自动获得这个 include 路径**——main.c 里 `#include "util.h"` 不需要任何额外配置。库的接口随库走,而不是靠每个消费者自己记得,这是工程化和你上拍手写 `-I` 的本质区别。`PRIVATE` 则相反:链接关系只属于 hello 自己,不外传。 +头几行是例行报到:`cmake_minimum_required` 声明本书要的最低 CMake 版本,`project(journey_box C)` 给工程上户口——名字、语言;两个 `set` 把 C 标准定在 99,第 3 个历程 病号循环里那句 `for (int i = 0; ...)`,在循环里声明变量,就是 C99 才有的写法。 + +和上一个历程最大的区别在姿势:Makefile 记的是**过程**(哪个文件先编、命令行怎么拼),CMakeLists 声明的是**事实**(存在一个库叫 util、一个可执行文件叫 hello、后者链接前者)。 + +`add_library(util STATIC src/util.c)` 一行,「编目标文件、打包成静态库 `libutil.a`」的流水线自动成立——STATIC 就是静态库,第 2 个历程 说过的「把用到的实现整段抄进可执行文件」的那种零件包。 + +> `target_include_directories(util PUBLIC src)` 里那个 `PUBLIC` 是全段最需要注意的关键词。编译器默认只在「源文件自己的目录」和系统目录里找头文件,想让它去别处翻,得用 `-I 路径` 明说——上个历程全家同住一层,这个问题藏得深;工程一大、头文件分了家,它立刻冒头。而把 `src` 声明成 PUBLIC 意味着**谁链接 util,谁就自动获得这个 include 路径**——main.c 里 `#include "util.h"` 不需要任何额外配置。库的接口随库走,而不是靠每个消费者自己记得,这是工程化最值钱的一步。`PRIVATE` 则相反:链接关系只属于 hello 自己,不外传。 ## 配置与构建:两步走 @@ -67,7 +73,7 @@ cmake --build build [100%] Built target hello ``` -看这份进度条式的输出:先编 `util.c`、打成 `libutil.a`,再编 `main.c`、链接成 `hello`——上一拍咱们手写的依赖关系,这里由目标(target)之间的关系自动推导。运行: +看这份进度条式的输出:先编 `util.c`、打成 `libutil.a`,再编 `main.c`、链接成 `hello`——上一个历程咱们手写的依赖关系,这里由目标(target)之间的关系自动推导。运行: ```bash ./build/hello @@ -90,11 +96,15 @@ ls -l build/compile_commands.json -rw-r--r-- 1 charliechen charliechen 558 Aug 23 14:41 build/compile_commands.json ``` -打开看,里面是每个源文件**完整编译命令**的 JSON 清单——用哪个编译器、什么标准、哪些 include 路径。它不是给 CMake 自己用的,是给工具生态的通用接口:编辑器拿到它,就知道每个文件「真实的编译视角」。拍 08 给 VS Code 接线时,IntelliSense 吃的就是这份文件。现在咱们只需要记住:它在 `build/` 里,是构建系统递给编辑器的名片。 +`ls` 的 `-l` 是长格式:权限、属主、大小、修改时间一次摊开——开头那串 `-rw-r--r--` 是权限位,属于另一门叫做操作系统这门课程的内容,先跳过,您还犯不着非要跟这个搏斗。 + +这一眼只看两件事,文件在,558 字节,不是空壳。打开看,里面是每个源文件**完整编译命令**的 JSON 清单(JSON 是一种人和程序都能读的结构化文本格式,工具世界的通用语)——用哪个编译器、什么标准、哪些 include 路径。 + +它不是给 CMake 自己用的,是给工具生态的通用接口:编辑器拿到它,就知道每个文件「真实的编译视角」。第 9 个历程 给 VS Code 接线时,IntelliSense 吃的就是这份文件。现在咱们只需要记住:它在 `build/` 里,是构建系统递给编辑器的名片。 ## 账还记着吗? -换了大管家,拍 03 用血换来的增量构建语义可不能丢。验证: +换了大管家,第 4 个历程 用血换来的增量构建语义可不能丢。验证: ```bash touch src/util.h @@ -110,7 +120,7 @@ cmake --build build [100%] Built target hello ``` -头文件一变,库和应用双双重编——而且这次不用咱们在规则里手写 `util.h` 依赖,CMake 生成 Makefile 时顺带查了每个文件的 `#include` 关系。什么都不改再构建一次: +头文件一变,库和应用双双重编——而且这次不用咱们在规则里手写 `util.h` 依赖,CMake 生成 Makefile 时顺带查了每个文件的 `#include` 关系,第 4 个历程 坑里留的那个 `-MMD` 口子,大管家默认就给封上了。什么都不改再构建一次: ```bash cmake --build build @@ -122,7 +132,3 @@ cmake --build build ``` 只报「已就绪」,一个字都没重编。账本还在,管家换了,服务升级。 - -## 下一站 - -工程壳子就位:库与应用分离、声明式账本、还有一枚递给编辑器的名片。现在,搬家——下一拍咱们把同一份源码交给 ARM 工具链,亲眼看看「可执行文件」这个词在另一套架构下的含义——以及为什么宿主机上好好的程序,到了目标机上连运行的机会都没有。 diff --git a/tutorial/journey/05-cross.md b/tutorial/journey/05-cross.md index dad7cfe..9223168 100644 --- a/tutorial/journey/05-cross.md +++ b/tutorial/journey/05-cross.md @@ -1,16 +1,16 @@ --- -title: 拍 05 · 搬家:交叉编译 +title: 第 6 个历程 · 搬家:交叉编译 order: 5 verify: scripts/journey/05-cross.sh tier: ci-linux verified-on: WSL2(Arch)/ gcc 16.1.1 + Arm GNU Toolchain arm-none-eabi-gcc;CI:ubuntu-latest(apt 装 gcc-arm-none-eabi) --- -# 拍 05 · 搬家:交叉编译 +# 第 6 个历程 · 搬家:交叉编译 -程序在宿主机上活得很滋润,但它的命运是住进一台小板子。这一拍咱们给它搬家——结果会是一颗造好却暂时无处安放的心脏,以及一个重要的世界观:**「可执行文件」从来不是一种通用货币,它是特定架构的方言。** +程序在宿主机上活得很滋润,但它的命运是住进一台小板子。这个历程咱们给它搬家——结果会是一颗造好却暂时无处安放的心脏,以及一个重要的世界观:**「可执行文件」从来不是一种通用货币,它是特定架构的方言。** -动手地点:[src/journey/05-cross/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/05-cross/)。源码和上一拍几乎一样(greet + version,版本跳到 v0.5.0)——**搬家不该惊动住户**。需要新工具:`arm-none-eabi-gcc`(拍 00 体检里「建议工具」的那位,Ubuntu 用户 `sudo apt install gcc-arm-none-eabi`,Arch 用户 `sudo pacman -S arm-none-eabi-gcc`)。 +动手地点是 src/journey/05-cross/。源码和上一个历程几乎一样(greet + version,版本跳到 v0.5.0)——**搬家不该惊动住户**。需要新工具:`arm-none-eabi-gcc`(第 1 个历程 体检里「建议工具」的那位,Ubuntu 用户 `sudo apt install gcc-arm-none-eabi`,Arch 用户 `sudo pacman -S arm-none-eabi-gcc`)。您把工具装好,咱们就发车。 ## 先认清编译器的身世 @@ -20,23 +20,33 @@ verified-on: WSL2(Arch)/ gcc 16.1.1 + Arm GNU Toolchain arm-none-eabi-gcc;CI:ubu gcc -dumpmachine ``` +得到的是—— + ```text x86_64-pc-linux-gnu ``` +我们再走: + ```bash arm-none-eabi-gcc -dumpmachine ``` +继续拿到: + ```text arm-none-eabi ``` -这串叫**目标三元组**(target triplet),是编译器出厂时就烙好的身份:「我生成的代码,给这类机器用」。宿主机 gcc 面向 x86_64 Linux;而 `arm-none-eabi` 拆开读就是一份自我介绍:**arm** 是 ARM 架构,**none** 是「没有操作系统」(裸机),**eabi** 是 ARM 的调用约定变体。编译器本身都是跑在咱们桌面上的 x86 程序——区别只在它**吐出的代码给谁跑**。给别的架构生成代码,这就叫交叉编译;干这活的工具链,叫交叉工具链。 +这串叫**目标三元组**(target triplet),是编译器出厂时就烙好的身份:「我生成的代码,给这类机器用」。宿主机 gcc 面向 x86_64 Linux。 + +`arm-none-eabi` 拆开读就是一份自我介绍:**arm** 是 ARM 架构——所谓架构,就是一套 CPU 认识的指令方言,第 2 个历程 咱们看过的 `pushq`、`%rbp` 那些拼写是 x86 的方言,ARM 是另一套,同一段 C 翻过去,拼出来完全两样;**none** 是「没有操作系统」(裸机),**eabi** 是 ARM 家调用约定的一个版本(调用约定就是「参数从哪递、返回值放哪」的家规)。 + +编译器本身都是跑在咱们桌面上的 x86 程序——区别只在它**吐出的代码给谁跑**,理解这个,你就理解了交叉编译的概念。给别的架构生成代码,这就叫交叉编译。干这活的工具链,叫交叉工具链。 ## 搬家实操 -流程和拍 01 的四棒接力完全同构,只是每一棒都换了人: +流程和第 2 个历程 的四棒接力完全同构,只是每一棒都换了人: ```bash arm-none-eabi-gcc -c main.c -o main.o @@ -47,9 +57,11 @@ arm-none-eabi-gcc -c util.c -o util.o arm-none-eabi-gcc main.o util.o --specs=rdimon.specs -o hello.elf ``` -链接这行多出的 `--specs=rdimon.specs` 值得一句解释。咱们的程序用了 `printf`,而 printf 是 C 库的函数——宿主机上它背后站着整个 Linux(glibc 调内核的 write 系统调用)。可裸机的世界里没有操作系统,`arm-none-eabi` 工具链配的是面向裸机的精简 C 库 **newlib**,它把「往哪输出」这个问题留了空位。`rdimon`(半主机,semihosting)是一种补位方案:让调试器或模拟器**替**目标机代劳这些请求。它是权宜之计,不是归宿——拍 06 咱们会让程序真正自己开口。 +链接这行多出的 `--specs=rdimon.specs` 值得一句解释。咱们的程序用了 `printf`,而 printf 是 C 库的函数——宿主机上,这个 C 库是 glibc,它收下咱们要打的字之后,还得亲自去请 Linux 内核把字写到屏幕上(这趟「请内核办事」的申请,行话叫系统调用,syscall)。 + +可裸机的世界里没有操作系统,`arm-none-eabi` 工具链配的是面向裸机的精简 C 库 **newlib**,它把「往哪输出」这个问题留了空位。`rdimon`(半主机,semihosting)是一种补位方案:让调试器或模拟器**替**目标机代劳这些请求。它是权宜之计,不是归宿——第 7 个历程 咱们会让程序真正自己开口。 -现在验证搬家是否成功。用拍 01 的老朋友 `objdump -f`,同一份 `main.c`,两个世界: +现在验证搬家是否成功。用第 2 个历程 的老朋友 `objdump -f`,同一份 `main.c`,两个世界: ```bash gcc -c main.c -o main-host.o @@ -76,7 +88,11 @@ HAS_RELOC, HAS_SYMS start address 0x00000000 ``` -同一份源码,一份是 `elf64-x86-64`,一份是 `elf32-littlearm`——32 位、小端、ARM 指令集。再看最终产物的「户口本」: +同一份源码,一份是 `elf64-x86-64`,一份是 `elf32-littlearm`——32 位(CPU 一次能啃的字宽,比宿主机的 64 位窄一半)、小端、ARM 指令集。 + +小端(little-endian)是「多字节数据在内存里低位字节排在前」的排法,它的反面叫大端;好在这套工具链和 x86 一样默认小端,咱们暂时不用换脑子——知道世上存在另一种排法就行。再看最终产物的「户口本」。 + +这行命令里有两样新机关:竖线 `|` 叫管道,把左边命令的输出直接接到右边命令的输入上——`readelf` 吐出的长篇户口,整卷递给 `grep` 过筛;而 `grep -E` 表示按正则表达式匹配,`Class|Machine` 里的竖线是「或」,只放行带这两个词的行: ```bash arm-none-eabi-readelf -h hello.elf | grep -E 'Class|Machine' @@ -87,11 +103,11 @@ arm-none-eabi-readelf -h hello.elf | grep -E 'Class|Machine' Machine: ARM ``` -顺带一提,`armv4t` 是工具链不指定时的默认底档;下一拍咱们会用 `-mcpu=cortex-m3` 精确点名 CPU,拿到 Thumb-2 这类现代指令集。 +顺带一提,`armv4t` 是工具链不指定时的默认底档;下一个历程咱们会用 `-mcpu=cortex-m3` 精确点名 CPU,拿到 Thumb-2 这类现代指令集。 ## 裸字节:从 ELF 里抠出 .bin -拍 01 说过,ELF 是给**工具**看的容器——里面有段表、符号表、调试信息。但板子上的烧录器只认一样东西:从某个地址开始,一字节一字节的裸机器码。`objcopy` 负责把容器拆掉,只取干货: +第 2 个历程 说过,ELF 是给**工具**看的容器——里面有段表、符号表、调试信息。但板子上的烧录器(把字节写进板子闪存的那支笔)只认一样东西:从某个地址开始,一字节一字节的裸机器码。`objcopy` 负责把容器拆掉,只取干货: ```bash arm-none-eabi-objcopy -O binary hello.elf hello.bin @@ -103,7 +119,7 @@ ls -l hello.elf hello.bin -rwxr-xr-x 1 charliechen charliechen 377580 Aug 23 14:43 hello.elf ``` -`.bin` 比 `.elf` 小了一个数量级——容器确实占地方。不过 62KB 对将来的小板子来说仍然太富态:那是半主机后端拖家带口的结果。等下一拍程序亲自负责输出,镜像会轻装得多。 +`.bin` 比 `.elf` 小了一个数量级——容器确实占地方。不过 62KB 对将来的小板子来说仍然太富态:那是半主机后端拖家带口的结果。等下一个历程程序亲自负责输出,镜像会轻装得多。 ## 现在试试跑它 @@ -112,11 +128,3 @@ scripts/journey/05-cross.sh: line 74: ./hello.elf: cannot execute binary file: E ``` 这是宿主机 shell 的原话:`Exec format error`——**格式不符,拒绝执行**。x86 的内核读不懂 ARM 的 ELF,这不是 bug,是架构的巴别塔。心脏造好了,检验合格,但它还没有身体。 - -## 这一拍你带走了什么 - -交叉编译的完整动作:换一套同构的工具链(`arm-none-eabi-` 前缀家族:gcc/objdump/readelf/objcopy 一应俱全),流程不变,产物换了方言。验证工具:`-dumpmachine`、`objdump -f`、`readelf -h`。以及两个概念:newlib(裸机世界的精简 C 库)和 semihosting(借调试器之口的权宜之计)。还欠一句 `sysroot`——交叉工具链自带一套为目标机准备的头文件和库,和宿主机的 `/usr/include` 井水不犯河水;等咱们链接第三方库遇到「找到了头文件却链不上」时,会再想起它(那时去参考篇)。 - -## 下一站 - -没有板子?咱们造一台。下一拍,QEMU 给这颗 ARM 心脏一副身体;它将第一次在没有操作系统的地方运行——自己开机、自己初始化、通过一根串口线,亲口向世界问好。 diff --git a/tutorial/journey/06-qemu-uart.md b/tutorial/journey/06-qemu-uart.md index 5e8b4a1..d23cf3f 100644 --- a/tutorial/journey/06-qemu-uart.md +++ b/tutorial/journey/06-qemu-uart.md @@ -1,25 +1,25 @@ --- -title: 拍 06 · 没有屏幕的机器:它亲口向你问好 +title: 第 7 个历程 · 没有屏幕的机器:它亲口向咱们问好 order: 6 verify: scripts/journey/06-qemu-uart.sh tier: ci-linux -verified-on: WSL2(Arch)/ arm-none-eabi-gcc(Arm GNU Toolchain 14.2.1)/ QEMU 11.0.3 / gdb 17.2;CI:ubuntu-latest +verified-on: WSL2(Arch)/ arm-none-eabi-gcc(Arm GNU Toolchain 14.2.1)/ QEMU 11.0.3 / gdb 17.2 / cmake 4.4.2;CI:ubuntu-latest --- -# 拍 06 · 没有屏幕的机器:它亲口向你问好 +# 第 7 个历程 · 没有屏幕的机器:它亲口向咱们问好 -这是全书的高潮。上一拍结束时,咱们手里是一颗造好却无处安放的 ARM 心脏;这一拍,QEMU 给它一副身体——一块虚拟的、没有操作系统的、**没有屏幕的**板子。程序将在上面自己开机、自己初始化,然后通过一根串口线,亲口向世界问好。咱们将拿到这本书的签名产物:一份 CI 背书的串口运行证据。 +这是全书的高潮。上一个历程结束时,咱们手里是一颗造好却无处安放的 ARM 心脏;这个历程,QEMU 给它一副身体——一块虚拟的、没有操作系统的、**没有屏幕的**板子。程序将在上面自己开机、自己初始化,然后通过一根串口线,亲口向世界问好。咱们将拿到这本书的签名产物:一份 CI 背书的串口运行证据。 -咱们的虚拟板叫 `mps2-an385`,CPU 是 Cortex-M3——**和 STM32 主流型号同一个家族**。这不是随手挑的:咱们在这一拍写的每一行启动代码,将来搬到真 STM32 上,骨架几乎不变。 +咱们的虚拟板叫 `mps2-an385`,CPU 是 Cortex-M3——**和 STM32 主流型号同一个家族**。这不是随手挑的:咱们在这个历程写的每一行启动代码,将来搬到真 STM32 上,骨架几乎不变。 -动手地点:[src/journey/06-qemu-uart/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/06-qemu-uart/)。需要的工具这回齐了:`arm-none-eabi-gcc`、`qemu-system-arm`(拍 00 的建议工具全部到岗)。 +动手地点是 src/journey/06-qemu-uart/。需要的工具这回齐了:`arm-none-eabi-gcc`、`qemu-system-arm`(第 1 个历程 的建议工具全部到岗)。您 cd 过去,咱们上电。 ## 先解决一个哲学问题:谁叫醒 main? 在宿主机上,`./hello` 之前有一整个操作系统在铺床:加载 ELF、设好栈、把环境变量摆好,然后才跳到 main。裸机上**没有这位管家**——CPU 上电后只做一件事:从地址 0 读两个数,第一个当栈顶,第二个当入口。所以裸机程序的第一份文件不是 main,是**出生证明**: ```c -/* 主线拍 06 · 出生证明:向量表 + 复位流程 +/* 主线第 7 个历程 · 出生证明:向量表 + 复位流程 * 对应教程:tutorial/journey/06-qemu-uart.md * 目标板:QEMU mps2-an385(Cortex-M3) */ @@ -67,7 +67,7 @@ void Reset_Handler(void) for (;;) { } /* main 不该回来;回来了就原地罚站 */ } -/* Cortex-M 的向量表:第 0 项是初始栈顶,第 项是复位入口。 +/* Cortex-M 的向量表:第 0 项是初始栈顶,第 1 项是复位入口。 * 硬件复位时自己读这张表,不需要咱们写一行汇编。 */ __attribute__((section(".isr_vector"), used)) const uintptr_t vector_table[] = { @@ -76,18 +76,24 @@ const uintptr_t vector_table[] = { }; ``` -开头那对 `memcpy`/`memset` 不是炫技,是**笔者真实的踩坑**:第一版笔者只写了两个裸的 while 循环,链接器当场罢工——`undefined reference to memcpy`。原因是 gcc 的「循环模式识别」会把抄写循环悄悄换成 `memcpy` 调用,而 `-nostdlib` 的世界里没有 libc。咱们以为在写循环,编译器译成了函数调用——汇编层看到的才是真相,这句话在拍 01 就说过了。 +开头那对 `memcpy`/`memset` 不是炫技,是**笔者真实的踩坑**:第一版笔者只写了两个裸的 while 循环,链接器当场罢工——`undefined reference to memcpy`。原因是 gcc 的「循环模式识别」会把抄写循环悄悄换成 `memcpy` 调用,而 `-nostdlib` 的世界里没有 libc。咱们以为在写循环,编译器译成了函数调用——汇编层看到的才是真相,这句话在第 2 个历程 就说过了。 -然后是这张表的读法。`vector_table` 用 `__attribute__((section(".isr_vector")))` 放进一个专门的段,链接脚本保证它是 flash 的**第一块**——因为硬件复位时无条件从地址 0 读它:第 0 项 `_estack` 是初始栈顶(栈从 RAM 顶端向下长),第 1 项 `Reset_Handler` 是入口。这就是「谁叫醒 main」的完整答案:**硬件读表,跳进 Reset_Handler,它搬完家,再叫 main。** +两样随身小物先认一下:`stdint.h` 里的 `uint32_t` 是「正好 32 位的无符号整数」——把宽度说死,不看 `int` 在不同机器上的脸色,在两套架构之间搬家的路上,这是保命的习惯;`size_t` 则是「能装下任何对象大小」的无符号类型,标准数数用的就是它。然后是这张表的读法。`vector_table` 用 `__attribute__((section(".isr_vector")))` 放进一个专门的段,链接脚本保证它是 flash 的**第一块**——因为硬件复位时无条件从地址 0 读它:第 0 项 `_estack` 是初始栈顶(栈从 RAM 顶端向下长),第 1 项 `Reset_Handler` 是入口。这就是「谁叫醒 main」的完整答案:**硬件读表,跳进 Reset_Handler,它搬完家,再叫 main。** -而 `Reset_Handler` 干的两件事,正是拍 01 埋的伏笔全部兑现:`.data` 段的变量「初值在 flash、生活在 RAM」,所以要把行李从 flash 抄进 RAM;`.bss` 段按合同是全零(NOBITS,不占文件一字节),所以上电第一件事是把那块 RAM 刷干净。当时说「程序启动时内存里划一块零就行」——划零的人,就是这里。 +而 `Reset_Handler` 干的两件事,正是第 2 个历程 埋的伏笔全部兑现。 + +`.data` 段的变量「初值在 flash、生活在 RAM」,所以要把行李从 flash 抄进 RAM`.bss` 段按合同是全零(NOBITS,不占文件一字节),所以上电第一件事是把那块 RAM 刷干净。当时说「程序启动时内存里划一块零就行」——划零的人,就是这里。 + +对了,`(void)main()` 那个 `(void)` 不是装饰:main 返回 int,咱们把返回值故意扔掉,写明是告诉 `-Wall`「故意的,别念叨」。 ## 住址由这张纸决定 -出生证明里那些 `_estack`、`_sdata`,不是变量,是链接脚本签发的地址。裸机世界里没有操作系统替咱们选加载地址,**每个段住在哪,你自己说了算**: +出生证明里那些 `_estack`、`_sdata`,不是变量,是链接脚本签发的地址——`extern` 在这里只是「先报个户口,本体在别处」的声明(第 4 个历程 菜单与厨房的分工),妙就妙在「别处」居然是一份链接脚本。裸机世界里没有操作系统替咱们选加载地址,**每个段住在哪,咱们自己说了算**: + +还是看不懂?没关系,我们之后会有专门的仓库仔细的盘算“链接脚本”这个课程。 ```ld -/* 主线拍 06 · 没有屏幕的机器 —— 程序的住址由这张纸决定 +/* 主线第 7 个历程 · 没有屏幕的机器 —— 程序的住址由这张纸决定 * 对应教程:tutorial/journey/06-qemu-uart.md * 目标:QEMU mps2-an385 —— 代码区在 0x00000000,RAM 在 0x20000000 */ @@ -129,14 +135,18 @@ SECTIONS } ``` -`MEMORY` 块声明这块板的两片地:flash 从 0 开始(向量表必须住在 0),RAM 从 0x20000000 开始——这两个地址来自板子的手册,QEMU 照着真实硬件建模。`SECTIONS` 里每一行都是拍 01 `readelf -S` 看过的老朋友,只是这次它们的位置**由咱们分配**。最有意思的是 `.data : > RAM AT > FLASH`:两个地址——运行地址在 RAM(`> RAM`),存储地址在 flash(`AT > FLASH`),`LOADADDR` 取的正是行李的存身处。Startup 里那趟搬家,搬的就是这两地址之间的差。 +`MEMORY` 块声明这块板的两片地:flash 从 0 开始(向量表必须住在 0),RAM 从 0x20000000 开始——这两个地址来自板子的手册,QEMU 照着真实硬件建模。 + +`SECTIONS` 里每一行都是第 2 个历程 `readelf -S` 看过的老朋友,只是这次它们的位置**由咱们分配**。分配时手里捏着一支游标:脚本里那个孤零零的点 `.` 表示「当前位置」,`_sdata = .` 就是把游标此刻的读数记下来当书签。`KEEP(*(.isr_vector))` 里的 KEEP 是保险——向量表没有任何代码显式引用它(来读它的是硬件,链接器不知道这层关系),开裁剪时可能被当垃圾扔掉,KEEP 明确说不许。 + +`*(COMMON)` 收的是「无初值全局变量」的老式合并区,跟 `.bss` 一个待遇,顺手一起清零。最有意思的是 `.data : > RAM AT > FLASH`:两个地址——运行地址在 RAM(`> RAM`),存储地址在 flash(`AT > FLASH`),`LOADADDR` 取的正是行李的存身处。Startup 里那趟搬家,搬的就是这两地址之间的差。 ## 串口:这台机器唯一的嘴 -没有屏幕、没有 printf、没有操作系统——输出靠什么?靠 **UART**:一块外设寄存器,你往特定地址写一个字节,它就把这个字节变成电平波形发出去。这就是嵌入式世界的老话:**串口就是板子的 stdout**。 +没有屏幕、没有 printf、没有操作系统——输出靠什么?靠 **UART**(通用异步收发器,串口这门手艺的主力)。它是一块**外设**:所谓外设,就是 CPU 之外、挂在总线上替 CPU 干活的功能块——串口、定时器、GPIO 都是。咱们往特定地址写一个字节,它就把这个字节变成电平波形发出去。这就是嵌入式世界的老话:**串口就是板子的 stdout**。 ```c -/* 主线拍 06 · 没有屏幕的机器:串口是我们唯一的嘴 +/* 主线第 7 个历程 · 没有屏幕的机器:串口是我们唯一的嘴 * 对应教程:tutorial/journey/06-qemu-uart.md * 目标板:QEMU mps2-an385(Cortex-M3),UART0 = CMSDK APB UART */ @@ -167,7 +177,10 @@ static void uart_puts(const char *s) { while (*s) { if (*s == '\n') - uart_putc('\r'); /* 串口世界的礼貌:\n 前面补一个 \r */ + { + /* 串口世界的礼貌:\n 前面补一个 \r */ + uart_putc('\r'); + } uart_putc(*s++); } } @@ -181,13 +194,13 @@ int main(void) } ``` -这段代码每个字都值得初学者看三遍。`0x40004000` 是这块板 UART0 的基地址(来自板子手册),`+0x00/0x04/0x08` 的偏移是 CMSDK UART 的寄存器排布:DATA 是数据口,STATE 是状态,CTRL 是开关,BAUDDIV 是波特率分频。最外层那圈 `(*(volatile uint32_t *)...)` 是嵌入式的心跳:不加 `volatile`,编译器看程序循环读一个「没改过的地址」,会好心地把读操作优化掉——于是 CPU 永远等不到缓冲区变空,程序死在等待里。真板和 QEMU 都会如实扮演这个坑。 +这段代码每个字都值得初学者看三遍。`0x40004000` 是这块板 UART0 的基地址(来自板子手册),`+0x00/0x04/0x08` 的偏移是 CMSDK UART 的寄存器排布:DATA 是数据口,STATE 是状态,CTRL 是开关,BAUDDIV 是波特率分频——波特率就是双方约好的「每秒发多少位」的语速,分频值决定它。寄存器里的开关按「位」居住:`1u << 0` 造出一个只有第 0 位是 1 的数,而 `UART_STATE & UART_STATE_TXBF` 只看第 0 位、其余一概不理——位的移与与,是嵌入式每天的算术。最外层那圈 `(*(volatile uint32_t *)...)` 是嵌入式的心跳:不加 `volatile`,编译器看程序循环读一个「没改过的地址」,会好心地把读操作优化掉——于是 CPU 永远等不到缓冲区变空,程序死在等待里。真板和 QEMU 都会如实扮演这个坑。这套「寄存器就是内存里的地址,读写地址就是操作硬件」的打法,行话叫内存映射 IO(MMIO)——CPU 眼里没有什么「外设」分类,只有一批带副作用的地址。 `uart_putc` 的逻辑是所有外设驱动的母版:**等硬件准备好,再动手**。TXBF(发送缓冲满)是 UART 在说「上一个字节我还没发完」,咱们就等。`uart_puts` 里补 `\r` 是串口世界的礼貌:很多终端把 `\n` 只当「下移一行」不当「回到行首」,`hello` 会变成阶梯——补一个 `\r` 才是干净的换行。 ## 上电 -构建流程和拍 05 同构,三个新面孔:`-mcpu=cortex-m3 -mthumb` 精确点名 CPU 和指令集(Thumb-2),`-nostdlib` 宣布谁都不借,`-T linker.ld` 递上咱们自己签发的住址纸: +构建流程和第 6 个历程 同构,几个新面孔:`-mcpu=cortex-m3` 精确点名 CPU,`-mthumb` 选 Thumb 指令集(它的现代形态 Thumb-2,第 6 个历程 提过一嘴),`-nostdlib` 宣布谁都不借,`-T linker.ld` 递上咱们自己签发的住址纸: ```bash arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2 startup.c -o startup.o @@ -212,7 +225,7 @@ EXEC_P, HAS_SYMS, D_PAGED start address 0x00000009 ``` -flags 里 `HAS_RELOC` 没了,换来 **`EXEC_P`**——拍 01 讲过,目标文件「有待重定位项」,链接完成后地址全部落定,这回是在咱们自己的链接脚本上落定的。架构栏的 `armv7` 替代了拍 05 的默认档 `armv4t`,这是点名 CPU 的效果。还有一个悬案:start address 是 `0x9`,可 Reset_Handler 明明在地址 0x8?这是 Cortex-M 的 Thumb bit:入口地址的 bit0 置 1 表示「这是 Thumb 指令」,CPU 取指前自动把它抹掉——这个 bit0,在后面的反汇编和链接脚本里还会反复露面。 +flags 里 `HAS_RELOC` 没了,换来 **`EXEC_P`**——第 2 个历程 讲过,目标文件「有待重定位项」,链接完成后地址全部落定,这回是在咱们自己的链接脚本上落定的。架构栏的 `armv7` 替代了第 6 个历程 的默认档 `armv4t`,这是点名 CPU 的效果。还有一个悬案:start address 是 `0x9`,可 Reset_Handler 明明在地址 0x8?这是 Cortex-M 的 Thumb bit:入口地址的 bit0 置 1 表示「这是 Thumb 指令」,CPU 取指前自动把它抹掉——这个 bit0,在后面的反汇编和链接脚本里还会反复露面。 再出裸二进制,看体重: @@ -226,7 +239,7 @@ ls -l hello.elf hello.bin -rwxr-xr-x 1 charliechen charliechen 9388 Aug 23 14:49 hello.elf ``` -**268 字节。** 上一拍拖着半主机后端的 `.bin` 是 62KB——这回没有 newlib、没有 rdimon、没有别人的家具,向量表、启动代码、两个驱动函数、两句话,全部家当 268 字节。这就是裸机的体重。 +**268 字节。** 上一个历程拖着半主机后端的 `.bin` 是 62KB——这回没有 newlib、没有 rdimon、没有别人的家具,向量表、启动代码、两个驱动函数、两句话,全部家当 268 字节。这就是裸机的体重。 然后,上电: @@ -235,32 +248,86 @@ timeout 5 qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none -kernel hello.elf ``` -五个参数逐个读:`-M mps2-an385` 指定机器型号(板子);`-cpu cortex-m3` 指定 CPU;`-nographic` 关掉图形界面,**把串口直接接到咱们的终端**;`-monitor none` 关掉 QEMU 自带的控制台,免得它和串口抢 stdin;`-kernel hello.elf` 把镜像塞进板子并按下复位键。`timeout 5` 是因为咱们这位主角说完话就进死循环,不打算退休,5 秒后替它关机。终端上出现的是: +五个参数逐个读:`-M mps2-an385` 指定机器型号(板子);`-cpu cortex-m3` 指定 CPU;`-nographic` 关掉图形界面,**把串口直接接到咱们的终端**;`-monitor none` 关掉 QEMU 自带的控制台,免得它和串口抢 stdin(程序的标准输入,就是咱们在终端敲的字);`-kernel hello.elf` 把镜像塞进板子并按下复位键。`timeout 5` 是因为咱们这位主角说完话就进死循环,不打算退休,5 秒后替它关机。终端上出现的是: ```text hello, EmbedBox! journey beat 06: no OS, just UART (v0.6.0) ``` -**它开口了。** 从一行 `hello.c` 走到这里:被解剖、生过病、长成三个文件、住进 CMake 工程、搬过家——现在它住在一块没有操作系统的板子上,用一根(虚拟)串口线向你问好。这就是 community 计划书里那句「在 QEMU 中运行,并保存一次可追溯的串口或运行结果」的前半句。 +不够带劲,我们来看看实际的样子! + +![实际的输出](assets/06/real_output.png) + +**它开口了。** 从一行 `hello.c` 走到这里:被解剖、生过病、长成三个文件、住进 CMake 工程、搬过家——现在它住在一块没有操作系统的板子上,用一根(虚拟)串口线向咱们问好。这就是 community 计划书里那句「在 QEMU 中运行,并保存一次可追溯的串口或运行结果」的前半句。 ## 证据落袋 -后半句「可追溯」现在完成。把串口输出捕获成文件,和仓库里预存的期望值逐字节比对: +后半句「可追溯」现在完成。先把串口输出捕获成文件——在运行命令后面接 `> serial.txt`,这叫重定向:把本该打到屏幕上的字,引进文件里存着。然后和仓库里预存的期望值用 `diff` 比对(`-u` 是把差异连同上下文一起摊开的显示格式)。diff 的规矩很有性格:**一致时它一个字都不说**——沉默即通过。您可以试试看用一下。 + +## 把搬家也交给管家:工具链文件 + +手敲上面那三条命令,为的是把每一棒的新面孔看真切。但第 5 个历程 吹过的牛不能烂账——「换一个工具链文件,重新配置」,CMake 在两套工具链之间切换的底气,现在当场兑现。两个新文件,先看小的: + +```cmake +# 主线第 7 个历程 · 没有屏幕的机器 —— 工具链文件:CMake 的「这单活用哪套工具」 +# 对应教程:tutorial/journey/06-qemu-uart.md +# 用法:cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake +set(CMAKE_SYSTEM_NAME Generic) # 裸机:没有操作系统 +set(CMAKE_SYSTEM_PROCESSOR arm) # 目标机是 ARM +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +# 裸机上链不出可执行文件,探测编译器时只编译、不链接 +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +``` + +工具链文件(toolchain file)就是一张委派书:配置期递给 CMake,告诉它这单活请哪套工具、干给哪种机器。`Generic` 是 CMake 的行话,「没有操作系统」的意思;最后那行是裸机的暗门——CMake 探测编译器时默认要试着链一个可执行文件,而裸机链不出,得让它只编译、不链接。再看工程本体: + +```cmake +# 主线第 7 个历程 · 没有屏幕的机器 —— 裸机构建交给 CMake 收编 +# 对应教程:tutorial/journey/06-qemu-uart.md +# 配合 arm-none-eabi.cmake(工具链文件)使用,见上文件头的用法 +cmake_minimum_required(VERSION 3.16) + +project(journey_baremetal C) + +add_executable(hello.elf startup.c main.c) +target_compile_options(hello.elf PRIVATE + -mcpu=cortex-m3 -mthumb -Wall -Wextra -g -O2) +target_link_options(hello.elf PRIVATE + -mcpu=cortex-m3 -mthumb -nostdlib -T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld) +``` + +认一认熟人:三条手敲命令一个字没丢,只是换了住处——`-mcpu`/`-mthumb`/警告/`-g`/`-O2` 住进 `target_compile_options`,`-nostdlib` 和 `-T linker.ld` 住进 `target_link_options`(`${CMAKE_CURRENT_SOURCE_DIR}` 是「CMakeLists 所在目录」,防止从别处配置时找不到链接脚本)。还是第 5 个历程 那句话:命令照跑,但咱们维护的是**声明**,不是过程。然后,老两步——注意委派书是配置期递的: ```bash -diff -u expected-serial.txt serial.txt +cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake +cmake --build build ``` ```text -两份逐字节一致 +-- The C compiler identification is GNU 16.1.0 +-- Check for working C compiler: /usr/sbin/arm-none-eabi-gcc - skipped +-- Configuring done (0.1s) +-- Generating done (0.0s) +-- Build files have been written to: /tmp/.../build +[ 33%] Building C object CMakeFiles/hello.elf.dir/startup.c.obj +[ 66%] Building C object CMakeFiles/hello.elf.dir/main.c.obj +[100%] Linking C executable hello.elf +[100%] Built target hello.elf +``` + +配置日志里那行 `Check for working C compiler ... - skipped`,就是暗门生效的样子。最后验货,两条生产线对撞——`cmp` 比对二进制文件,diff 的表亲,一致时同样一言不发: + +```bash +arm-none-eabi-objcopy -O binary build/hello.elf hello-cmake.bin +cmp hello.bin hello-cmake.bin ``` -仓库里的 [expected-serial.txt](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/blob/main/src/journey/06-qemu-uart/expected-serial.txt) 不是手写的——它是首次真跑的原始捕获,连 `\r\n` 都是程序亲手发的。从今往后,CI 每次重放这一拍,都会重新上电、重新捕获、重新 diff——**程序的行为从此对这份文件负责**。哪天有人改坏了驱动,CI 会指着差异告诉咱们「它说的话变了」。这就是「可验证」三个字的物理形态——不是承诺,是字节。 +沉默,即逐字节一致。`build/hello.elf` 再进一次 QEMU,串口输出与 expected-serial.txt 依然分毫不差(配对脚本把这整套也纳入了断言)。管家上岗,誓言兑现——往后工程要在宿主机和目标机两边同时构建,就是多一份委派书的事。 ## 兑现一个伏笔:target remote -拍 02 结尾说过:这一切终将隔着一条线搬过去。现在程序在另一台机器里,咱们隔着 TCP 隔空调试: +第 3 个历程 结尾说过:这一切终将隔着一条线搬过去。现在程序在另一台机器里,咱们隔着 TCP 隔空调试。动手前交代一处看起来像「自相矛盾」的地方:第 3 个历程 立过「调试用 `-O0`」的规矩,这次却编了 `-O2`——裸机寸土寸金是一层理由,更实在的是今天的断点都落在函数入口,`-O2` 不碍事;真要逐行追变量,把构建里的 `-O2` 换回 `-O0` 重来即可。规矩是活的,取舍要明说: ```bash gdb -q -batch -iex 'set debuginfod enabled off' \ @@ -284,14 +351,14 @@ Breakpoint 1, main () at main.c:18 [Inferior 1 (process 1) detached] ``` -读这份成绩单:一接上,程序正停在 `Reset_Handler` 搬 `.data` 的行——开机即停的效果;`break main` 之后 `continue`,断点隔着一条 TCP 线**精准命中另一台机器里的 main**,`bt` 递上调用栈。命令还是拍 02 那五件套,一个字没变,变的只是被调试者住在本机进程还是板子里。将来咱们调试真 STM32,用的 OpenOCD 干的就是 QEMU 这个 `-gdb` 的活:把芯片的调试口翻译成同一套 gdb 协议。今天这堂课,直接复用。 +读这份成绩单:一接上,程序正停在 `Reset_Handler` 搬 `.data` 的行——开机即停的效果;`break main` 之后 `continue`,断点隔着一条 TCP 线**精准命中另一台机器里的 main**,`bt` 递上调用栈(末尾那行 `[Inferior 1 ... detached]` 是 `-batch` 收工时自动松手告辞——inferior 是 gdb 给「被调试者」起的学名)。命令还是第 3 个历程 那五件套,一个字没变,变的只是被调试者住在本机进程还是板子里。将来咱们调试真 STM32,用的 OpenOCD 干的就是 QEMU 这个 `-gdb` 的活:把芯片的调试口翻译成同一套 gdb 协议。今天这堂课,直接复用。 -## 这一拍咱们带走了什么 +## 这个历程咱们带走了什么 -一份出生证明(向量表 + 复位流程,`.data`/`.bss` 的搬家与清零)、一张住址纸(链接脚本,MEMORY 与 SECTIONS)、一个驱动母版(volatile MMIO + 等硬件准备好)、一枚指纹(expected-serial.txt)——还有 `target remote`,和一根永远通向真板的线。268 字节,无借贷,全部家当你自己签名。 +一份出生证明(向量表 + 复位流程,`.data`/`.bss` 的搬家与清零)、一张住址纸(链接脚本,MEMORY 与 SECTIONS)、一个驱动母版(volatile MMIO + 等硬件准备好)、一枚指纹(expected-serial.txt)、一张委派书(工具链文件,CMake 收编裸机构建——第 5 个历程 的承诺兑现)——还有 `target remote`,和一根永远通向真板的线。268 字节,无借贷,全部家当由咱们自己签名。 -到这里,**「从 clean clone 到可追溯的串口证据」的完整链条咱们已经亲手走通了一次**。这也是本书主线的技术终点——剩下的几拍,讲的是怎么和这位新朋友共同生活:怎么记录它、怎么让编辑器认识它、以及怎么把它送上真正的硬件。 +到这里,**「从 clean clone 到可追溯的串口证据」的完整链条咱们已经亲手走通了一次**。这也是本书主线的技术终点——剩下的几个历程,讲的是怎么和这位新朋友共同生活:怎么记录它、怎么让编辑器认识它、以及怎么把它送上真正的硬件。 ## 下一站 -机器开口说话了。但如果这段旅程丢了——代码没处放、改动没法回溯、成果没法交给人——一切等于没发生。下一拍,把旅程记下来:Git 的深度,和一份像样的 README。 +机器开口说话了。但如果这段旅程丢了——代码没处放、改动没法回溯、成果没法交给人——一切等于没发生。下一个历程,把旅程记下来:Git 的深度,和一份像样的 README。 diff --git a/tutorial/journey/07-git.md b/tutorial/journey/07-git.md index 724706b..349adce 100644 --- a/tutorial/journey/07-git.md +++ b/tutorial/journey/07-git.md @@ -1,14 +1,14 @@ --- -title: 拍 07 · 记录旅程:Git 的深度与一份像样的 README +title: 第 8 个历程 · 记录旅程:Git 的深度与一份像样的 README order: 7 verify: scripts/journey/07-git.sh tier: ci-matrix verified-on: WSL2(Arch)/ git 2.55.0;CI 矩阵 ubuntu-latest + windows-latest --- -# 拍 07 · 记录旅程:Git 的深度与一份像样的 README +# 第 8 个历程 · 记录旅程:Git 的深度与一份像样的 README -咱们在拍 00 就用过 git 了——`git clone` 那条命令,当时说「先照抄,这一拍解释」。现在兑现。机器开口说话了(拍 06),但如果这段旅程没有记录:代码没处放、改动没法回溯、成果没法交给人——一切等于没发生。这一拍咱们把「记录」这件事做扎实:在临时目录里从零建一个小仓,亲手走完 git 的日常闭环,包括一次真实的合并冲突。 +咱们在第 1 个历程 就用过 git 了——`git clone` 那条命令,当时说「先照抄,这个历程解释」。现在兑现。机器开口说话了(第 7 个历程),但如果这段旅程没有记录:代码没处放、改动没法回溯、成果没法交给人——一切等于没发生。这个历程咱们把「记录」这件事做扎实:在临时目录里从零建一个小仓,亲手走完 git 的日常闭环,包括一次真实的合并冲突。 本章没有 `src/` 实验——实验对象就是一个即建即弃的小仓库,配对脚本会替咱们把它完整重放一遍。 @@ -48,7 +48,7 @@ git commit -m "hello: journey starts" [main (root-commit) 7ad7635] hello: journey starts 2 files changed, 14 insertions(+) create mode 100644 README.md - create mode 1006 + create mode 100644 hello.c ``` (那串 `7ad7635` 是提交的指纹——每次提交都不同,咱们跑出来的必然是另一串,这很正常。) @@ -75,7 +75,7 @@ index df3d6b5..02323af 100644 } ``` -`diff` 是 git 的显微镜:加了哪行、在哪个上下文里,一清二楚。将来咱们 review 别人的代码、或者排查「到底是哪次改动引入了问题」,读的都是这种格式。确认无误,再登记、落笔: +`diff` 是 git 的显微镜:加了哪行、在哪个上下文里,一清二楚。读法认三个记号:`a/hello.c` 和 `b/hello.c` 是改动前、后两版;`@@ -3,5 +3,6 @@` 是路段牌——旧文件第 3 行起的 5 行,换成了新文件第 3 行起的 6 行;行前的 `+` 是新增、`-` 是删除。这正是第 7 个历程 那个 `diff -u` 的格式——连老朋友都不换衣服。将来咱们 review 别人的代码、或者排查「到底是哪次改动引入了问题」,读的都是这种格式。确认无误,再登记、落笔: ```bash git add hello.c @@ -95,7 +95,7 @@ git log --oneline ## 改坏了?历史来救 -现在演示这一拍真正的卖点。手滑了——假设咱们把 `main` 函数整个删了,文件一保存,心里一凉。先看事故报告: +现在演示这个历程真正的卖点。手滑了——假设咱们把 `main` 函数整个删了,文件一保存,心里一凉。先看事故报告(`--stat` 只看汇总账目:动了哪个文件、几行增减,那串 `+--` 是增删行的条形图,一行对一行): ```bash git diff --stat @@ -112,11 +112,9 @@ git diff --stat git restore hello.c ``` -```text -hello.c 已恢复,文件内容和最近一次提交一致 -``` +它成功时和 diff 一样,一言不发——沉默即恢复。配对脚本会用 `grep` 验证 `journey: v0.2` 那行确实回来了,再替它补一句「hello.c 已恢复,文件内容和最近一次提交一致」。 -`git restore` 把文件恢复到最近一次提交的样子(配对脚本随后 grep 验证了 `journey: v0.2` 那行确实回来了)。这就是「记录」的含金量:拍 02 咱们靠 gdb 救回了程序的逻辑,这一拍咱们多了第二重保险——**任何提交过的状态,永远可以回去**。`git log` 里任何一个指纹,都是一台时光机。 +`git restore` 把文件恢复到最近一次提交的样子。这就是「记录」的含金量:第 3 个历程 咱们靠 gdb 救回了程序的逻辑,这个历程咱们多了第二重保险——**任何提交过的状态,永远可以回去**。`git log` 里任何一个指纹,都是一台时光机。 ## 分支:在不打扰主线的地方折腾 @@ -150,7 +148,7 @@ CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result. ``` -**CONFLICT**——这是新手最怕的字眼,但请把它重新理解为一件好事:git 把能自动合并的都合并了,唯独「两边对同一行给出了不同意见」的地方,它**不敢替你做主**,于是把裁决权连同现场一起交给咱们。看现场: +**CONFLICT**——这是新手最怕的字眼,但请把它重新理解为一件好事:git 把能自动合并的都合并了,唯独「两边对同一行给出了不同意见」的地方,它**不敢替咱们做主**,于是把裁决权连同现场一起交给咱们。看现场: ```bash git status @@ -171,13 +169,13 @@ Unmerged paths: ```text <<<<<<< HEAD -- 拍 06:串口输出已捕获,连 \r\n 都是亲手发的 +- 第 7 个历程:串口输出已捕获,连 \r\n 都是亲手发的 ======= -- 拍 06:串口输出已验证 diff 一致 +- 第 7 个历程:串口输出已验证 diff 一致 >>>>>>> polish-readme ``` -`<<<<<<<` 到 `=======` 是你这边的(HEAD 即当前分支),`=======` 到 `>>>>>>>` 是对方的。解法永远是同一个:**动手编辑,留下咱们认为对的最终样子,删掉所有标记**。咱们裁决成一句更准确的: +`<<<<<<<` 到 `=======` 是咱们这边的(HEAD 是 git 给「咱们此刻站在哪」起的名字,现在指着当前分支),`=======` 到 `>>>>>>>` 是对方的。解法永远是同一个:**动手编辑,留下咱们认为对的最终样子,删掉所有标记**。咱们裁决成一句更准确的: ```markdown # box —— 一个程序的一生 @@ -186,7 +184,7 @@ Unmerged paths: ## 状态 -- 拍 06:串口输出已捕获,且与 expected-serial.txt 逐字节一致 +- 第 7 个历程:串口输出已捕获,且与 expected-serial.txt 逐字节一致 ``` 然后告诉 git 裁决完毕,收尾: @@ -209,14 +207,14 @@ v0.1-journey ## README:协作的门面 -这一拍的另一半主角是 README 本身。咱们大概注意到,这份 README 用的是 Markdown——`#` 是标题、`-` 是列表、反引号是行内代码。为什么值得学?因为**开源世界的门面全是它写的**:GitHub 的项目首页、Issue、Pull Request、代码里的文档,全是 Markdown。一份好 README 至少回答四件事:这是什么、怎么跑、依赖什么、结果在哪。上面那份小 README 已经是个最小样板。 +这个历程的另一半主角是 README 本身。咱们大概注意到,这份 README 用的是 Markdown——`#` 是标题、`-` 是列表、反引号是行内代码。为什么值得学?因为**开源世界的门面全是它写的**:GitHub 的项目首页、Issue、Pull Request、代码里的文档,全是 Markdown。一份好 README 至少回答四件事:这是什么、怎么跑、依赖什么、结果在哪。上面那份小 README 已经是个最小样板。 至于「交作业」的完整形态——把本地仓库推上 GitHub、开分支、发 Pull Request——流程就是今天这套动作加一个 `git push` 和网页上的两次点击,GitHub 的官方文档([Hello World 教程](https://docs.github.com/zh/get-started/start-your-journey/hello-world))二十分钟能走完。等咱们在真实仓库提第一个 PR 时,会发现冲突解决这一步,咱们已经亲手做过。 -## 这一拍咱们带走了什么 +## 这个历程咱们带走了什么 日常闭环七件套:`status` / `add` / `commit` / `diff` / `log` / `checkout -b` / `merge`;两道保险:提交不可变(`restore` 随时可回)与 tag(锚定里程碑);以及一份不再恐惧 CONFLICT 的心态——那不是事故,是 git 在请咱们签字。 ## 下一站 -记录有了,证据有了。但日常工作的椅子还不舒服:编辑器看不懂咱们的代码,满屏红线,跳转失灵。最后一拍,把前面所有工具接进 VS Code——顺便咱们会发现,那枚拍 04 埋下的 `compile_commands.json`,就是为这一刻准备的。 +记录有了,证据有了。但日常工作的椅子还不舒服:编辑器看不懂咱们的代码,满屏红线,跳转失灵。最后一个历程,把前面所有工具接进 VS Code——顺便咱们会发现,那枚第 5 个历程 埋下的 `compile_commands.json`,就是为这一刻准备的。 diff --git a/tutorial/journey/08-vscode.md b/tutorial/journey/08-vscode.md index 67fce47..9fea7ba 100644 --- a/tutorial/journey/08-vscode.md +++ b/tutorial/journey/08-vscode.md @@ -1,24 +1,24 @@ --- -title: 拍 08 · 编辑器接线:让 VS Code 认识你的工具链 +title: 第 9 个历程 · 编辑器接线:让 VS Code 认识咱们的工具链 order: 8 verify: scripts/journey/08-vscode.sh tier: manual verified-on: 机械部分(配置存在性/JSON 合法性/任务链解析)由脚本验证;编辑器交互项见正文清单,待首次人工走查后回填 --- -# 拍 08 · 编辑器接线:让 VS Code 认识你的工具链 +# 第 9 个历程 · 编辑器接线:让 VS Code 认识咱们的工具链 -这一拍**不教编辑器**。VS Code 的教程满山遍野,不缺这一本。它教的是一件小得多也重要得多的事:**把前八拍学会的工具——gcc、CMake、gdb——接进编辑器**,让「按一个键」背后跑的还是咱们认识的那几条命令。工具永远比 IDE 重要,这是咱们在拍 00 就立下的世界观;这一拍只是让世界观过得舒服点。 +这个历程**不教编辑器**。VS Code 的教程满山遍野,不缺这一本。它教的是一件小得多也重要得多的事:**把前八个历程学会的工具——gcc、CMake、gdb——接进编辑器**,让「按一个键」背后跑的还是咱们认识的那几条命令。工具永远比 IDE(集成开发环境——把编辑器、构建、调试装进同一个壳的软件,VS Code、Keil、STM32CubeIDE 都是)重要,这是咱们在第 1 个历程 就立下的世界观;这个历程只是让世界观过得舒服点。 -编辑器交互没法无人值守重放,所以本拍是全书唯一 `tier: manual` 的一拍——配对脚本负责机械部分(配置文件存在、JSON 合法、任务链完整),真正的「红线消失、断点命中」需要咱们亲手走一遍,正文末有一张清单。 +编辑器交互没法无人值守重放,所以本历程是全书唯一 `tier: manual` 的一个历程——配对脚本负责机械部分(配置文件存在、JSON 合法、任务链完整),真正的「红线消失、断点命中」需要咱们亲手走一遍,正文末有一张清单。 ## 病症:满屏红线 -拿拍 04 的 CMake 工程用 VS Code 打开(Windows 用户走 Remote-WSL,在 WSL 里 `code .`),多半会看到熟悉的病症:代码能编译,编辑器却满屏红线,`#include "util.h"` 报「找不到头文件」,跳转到定义时灵时不灵。原因一句话就能说清:**IntelliSense 不是编译器,它只是在一遍遍猜咱们的编译视角**——猜错了视角,猜出来的世界自然是错的。而猜,本可以不必猜。 +拿第 5 个历程 的 CMake 工程用 VS Code 打开——命令是在 WSL 里敲 `code .`(用 VS Code 打开当前目录;Windows 用户先装 Remote-WSL 扩展,让 Windows 上的 VS Code 隔着一条缝操作 WSL 里的文件与终端)——多半会看到熟悉的病症:代码能编译,编辑器却满屏红线,`#include "util.h"` 报「找不到头文件」,跳转到定义时灵时不灵。原因一句话就能说清:**IntelliSense 不是编译器,它只是在一遍遍猜咱们的编译视角**——猜错了视角,猜出来的世界自然是错的。而猜,本可以不必猜。 ## 第一根线:compile_commands.json -还记得拍 04 里那句 `set(CMAKE_EXPORT_COMPILE_COMMANDS ON)` 吗?当时说它在 `build/` 里留了一枚「给编辑器的名片」。现在把名片递过去——在工程根目录的 `.vscode/settings.json` 里: +还记得第 5 个历程 里那句 `set(CMAKE_EXPORT_COMPILE_COMMANDS ON)` 吗?当时说它在 `build/` 里留了一枚「给编辑器的名片」。现在把名片递过去——在工程根目录的 `.vscode/settings.json` 里: ```json { @@ -31,7 +31,7 @@ verified-on: 机械部分(配置存在性/JSON 合法性/任务链解析)由脚 } ``` -关键的只有第一行:告诉 C/C++ 扩展,**每个文件怎么编译,以这份 JSON 清单为准**——哪个编译器、什么标准、哪些 include 路径,全部来自构建系统的真实视角,不再靠猜。红线通常在这一行落笔后当场消退;`greet` 跳到定义、悬停看签名,也都顺了。其余三行是舒适度配置(把 `.h` 识破成 C 而不是 C++,空格缩进四格)。 +关键的只有第一行:告诉 C/C++ 扩展,**每个文件怎么编译,以这份 JSON 清单为准**——哪个编译器、什么标准、哪些 include 路径,全部来自构建系统的真实视角,不再靠猜。`${workspaceFolder}` 是个占位符,展开成「当前打开的工程根目录」,和 shell 里 `./` 指脚边是同一种亲切。红线通常在这一行落笔后当场消退;`greet` 跳到定义、悬停看签名,也都顺了。其余三行是舒适度配置(把 `.h` 识破成 C 而不是 C++,空格缩进四格)。 需要装的东西就一件:C/C++ 扩展(ms-vscode.cpptools,扩展面板搜 `ms-vscode.cpptools` 装第一个就是)。Windows 用户在 Remote-WSL 模式下,扩展要装在 **WSL 侧**(扩展面板会分区提示),这一点装错了是经典坑。 @@ -54,11 +54,11 @@ verified-on: 机械部分(配置存在性/JSON 合法性/任务链解析)由脚 } ``` -`command` 一栏就是咱们在拍 04 敲过的那条 `cmake --build build`,一个字没改——现在它绑在了 `Ctrl+Shift+B` 上。`problemMatcher` 让 gcc 的报错变成编辑器里可点击跳转的条目。**IDE 的构建按钮不是魔法,是咱们自己那条命令的马甲**;理解这一点的人,换任何 IDE 都能在五分钟内配好构建。 +`command` 一栏就是咱们在第 5 个历程 敲过的那条 `cmake --build build`,一个字没改——现在它绑在了 `Ctrl+Shift+B` 上。`problemMatcher` 让 gcc 的报错变成编辑器里可点击跳转的条目。**IDE 的构建按钮不是魔法,是咱们自己那条命令的马甲**;理解这一点的人,换任何 IDE 都能在五分钟内配好构建。 ## 第三根线:F5 就是 gdb -最后把拍 02 的 gdb 接到 F5 上。`.vscode/launch.json`: +最后把第 3 个历程 的 gdb 接到 F5 上。`.vscode/launch.json`: ```json { @@ -81,21 +81,22 @@ verified-on: 机械部分(配置存在性/JSON 合法性/任务链解析)由脚 } ``` -逐行认亲:`MIMode: gdb`——调试器就是拍 02 那位,断点、单步、变量窗,底下全是同一套 gdb;`preLaunchTask` 指回上一节的 `cmake-build`,F5 = 先构建、再调试;`program` 指向拍 04 的产物 `build/hello`。在 `main.c` 里点一下行号左侧设断点,按 F5——构建日志滚过,程序停在断点上,左边变量窗里 `total`、`data` 排排坐。**咱们在拍 02 用命令行做过的一切,现在有了图形界面,但没有一层魔法。** +逐行认亲:`MIMode: gdb`——调试器就是第 3 个历程 那位,断点、单步、变量窗,底下全是同一套 gdb;`preLaunchTask` 指回上一节的 `cmake-build`,F5 = 先构建、再调试;`program` 指向第 5 个历程 的产物 `build/hello`;`cwd` 是程序启动时所在的目录,相当于先替它 `cd` 过去。在 `main.c` 的 `greet("EmbedBox")` 那行点一下行号左侧设断点,按 F5——构建日志滚过,程序停在断点上,单步走进 `greet`,参数 `who` 的值在变量窗里排排坐。**咱们在第 3 个历程 用命令行做过的一切,现在有了图形界面,但没有一层魔法。** -再往前看一步:`launch.json` 里再配一个 `target remote`(或装上 Cortex-Debug 扩展指向 OpenOCD),F5 就能调试拍 06 那样的板子——接线方式和咱们已经会的完全一致。 +再往前看一步:`launch.json` 里再配一个 `target remote`(或装上 Cortex-Debug 扩展指向 OpenOCD),F5 就能调试第 7 个历程 那样的板子——接线方式和咱们已经会的完全一致。 ## 收束全书:体检,然后出发 -三根线接完,编辑器认识的不再是「一堆文本」,而是**咱们的**工具链。这也是全书的收束时刻。回望一遍咱们走过来的路:确认机器活着(拍 00),看程序出生、拆开它的肚子(拍 01),治好一场 printf 够不到的病(拍 02),让它长大并学会记账(拍 03/04),搬去另一个架构(拍 05),在没有操作系统、没有屏幕的机器上亲口说话、留下证据(拍 06),把旅程记录成可回溯的历史(拍 07),最后把这一切接进日常的椅子(拍 08)。 +三根线接完,编辑器认识的不再是「一堆文本」,而是**咱们的**工具链。这也是全书的收束时刻。回望一遍咱们走过来的路:确认机器活着(第 1 个历程),看程序出生、拆开它的肚子(第 2 个历程),治好一场 printf 够不到的病(第 3 个历程),让它长大并学会记账(第 4/5 个历程),搬去另一个架构(第 6 个历程),在没有操作系统、没有屏幕的机器上亲口说话、留下证据(第 7 个历程),把旅程记录成可回溯的历史(第 8 个历程),最后把这一切接进日常的椅子(第 9 个历程)。 -**从 clean clone 到可追溯的串口证据——这条 community 计划书里的主线,咱们已经完整走通。** 剩下的问题只有一个:接下来去哪。分流口就在眼前:想把语言基本功打深,去 [C-Journey](https://github.com/Awesome-Embedded-Learning-Studio/C-Journey)(C 语言承重墙)和 [Tutorial_AwesomeModernCPP](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP)(现代 C++);想理解程序之上的系统,去 [PenguinLab](https://github.com/Awesome-Embedded-Learning-Studio/PenguinLab)(Linux 内核实验)和 [Tutorial_FreeRTOS](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_FreeRTOS);想上真硬件,去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge)(STM32 主教学线——咱们的 Cortex-M 经验直接复用)和 [imx-forge](https://github.com/Awesome-Embedded-Learning-Studio/imx-forge)(Embedded Linux 入口)。 +**从 clean clone 到可追溯的串口证据——这条 community 计划书里的主线,咱们已经完整走通。** 剩下的问题只有一个:接下来去哪。 -无论去哪,第一件事仍然是拍 00 那份体检——工具永远比 IDE 重要,旅程永远从确认机器活着开始。 +分流口就在眼前:想把语言基本功打深, -## 人工走查清单 +去 [C-Journey](https://github.com/Awesome-Embedded-Learning-Studio/C-Journey)(C 语言承重墙)和 [Tutorial_AwesomeModernCPP](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP)(现代 C++) -- 在拍 04 的工程根目录放入本拍的 [.vscode/](https://github.com/Awesome-Embedded-Learning-Studio/EmbedBox/tree/main/src/journey/08-vscode/.vscode/),`code .` 打开 -- IntelliSense 生效:`src/util.c` 里 `greet` 跳转可用,无红线 -- F5 触发 `cmake-build` 并启动 gdb 会话,断点可命中 -- Remote-WSL(Windows 用户):左下角绿色角标显示 WSL 发行版 +想理解程序之上的系统,去 [PenguinLab](https://github.com/Awesome-Embedded-Learning-Studio/PenguinLab)(Linux 内核实验)和 [Tutorial_FreeRTOS](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_FreeRTOS) + +想上真硬件,去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge)(STM32 主教学线——咱们的 Cortex-M 经验直接复用)和 [imx-forge](https://github.com/Awesome-Embedded-Learning-Studio/imx-forge)(Embedded Linux 入口)。 + +无论去哪,第一件事仍然是第 1 个历程 那份体检——工具永远比 IDE 重要,旅程永远从确认机器活着开始。 diff --git a/tutorial/journey/90-physical-serial.md b/tutorial/journey/90-physical-serial.md deleted file mode 100644 index fefb205..0000000 --- a/tutorial/journey/90-physical-serial.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 尾声 A · 物理串口:接上真线的那天 -order: 90 -tier: manual -verified-on: 待人工回填(需 USB-TTL 转接器与目标板;本章命令不在 CI 重放范围) ---- - -# 尾声 A · 物理串口:接上真线的那天 - -拍 06 里,串口是 QEMU 递到咱们终端上的一行行文字。真硬件上,串口是一根**真实的线**:三根杜邦线、一块几十块的 USB-TTL 转接器,和咱们从数据手册里查出来的引脚。这一篇是拿到第一块板子那天的操作指南——命令都不复杂,但每一条都需要真硬件在场,所以它是 `manual` 级:CI 不重放,断言换成人眼和终端本身。 - -## 行前准备 - -买一块 USB-TTL 串口转接器(CH340、CP2102、FT232 方案的都行,几块到几十块钱),注意选**3.3V 电平**或带电平跳线的型号。然后查目标板的引脚图,找到三个脚:TX(发送)、RX(接收)、GND(地)。接线只有一条纪律加一个口诀:纪律是 **GND 必须接**——没有共同的地,电平无从谈起;口诀是**TX 接 RX,交叉相接**——这边的嘴对那边的耳朵,那边的嘴对这边的耳朵,接成环就谁也听不见谁。 - -## 把线插进系统 - -转接器插上电脑的 USB 口。Linux(含 WSL2——USB 串口设备默认不进 WSL,需要在 Windows 侧用 `usbipd` 转发,或直接在 Windows 里用)上,先问内核「你看到新东西了吗」: - -```bash -dmesg | tail -``` - -```text -[12345.678901] ch341-uart ttyUSB0: break control not supported, using simulated break -[12345.678912] usb 1-2: ch341 adapter now disconnected from ttyUSB0 -``` - -(示意输出;看到 `ttyUSB0` 字样就是它。)设备节点在 `/dev/ttyUSB0`——拍 00 讲过的「一切皆文件」,串口也是一个。确认一下: - -```bash -ls /dev/ttyUSB* -``` - -第一次打开它,咱们多半会撞上 `Permission denied`:串口设备属于 `dialout` 组,咱们不在组里。把自己加进去(一次性动作,重新登录生效): - -```bash -sudo usermod -aG dialout $USER -``` - -这是 Linux 嵌入式的第一道成人礼,几乎每个人都撞过一次。 - -## 听它说话 - -最朴素的听法,连工具都不用装: - -```bash -stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -echo -cat /dev/ttyUSB0 -``` - -`stty` 把这根线配置成嵌入式最典型的参数:115200 波特、8 数据位、1 停止位、无校验(这句口诀咱们会在无数板子的文档里再见到)。然后 `cat`——把设备当文件读,板子说的每个字节都会滚上咱们的终端。按板子的复位键,启动日志哗哗流出来的那一刻,和拍 06 里 QEMU 上电的那一幕,是同一个瞬间。 - -日常顺手的工具是 `picocom` 或 `minicom`(以 picocom 为例,`picocom -b 115200 /dev/ttyUSB0`,退出是 `Ctrl-A` 再 `Ctrl-X`);Windows 侧则是设备管理器里认领一个 COM 口号,用 PuTTY 的 Serial 模式连它。 - -## 从这里出发 - -物理串口一通,咱们就有了板子的「stdout + stderr + 救命稻草」:启动日志、panic 栈、bootloader 交互,全从这根线来。接下来去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge),那里有真板、真烧录、真调试的完整路线;想看这根线上跑的电平波形长什么样,去 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware) 的示波器与逻辑分析仪章节——那是硬件深水区,与本篇的边界就在这里。 diff --git a/tutorial/journey/91-lab-safety.md b/tutorial/journey/91-lab-safety.md index 55e62b9..061629b 100644 --- a/tutorial/journey/91-lab-safety.md +++ b/tutorial/journey/91-lab-safety.md @@ -1,13 +1,13 @@ --- -title: 尾声 B · 实验安全:别把板子和自己搞坏 +title: 尾声 · 实验安全:别把板子和自己搞坏 order: 91 tier: manual verified-on: 常识性内容;具体器件的容忍值以数据手册为准 --- -# 尾声 B · 实验安全:别把板子和自己搞坏 +# 尾声 · 实验安全:别把板子和自己搞坏 -这是全书最短、也最不该跳过的一篇。前面十拍,坏掉的程序可以 `git restore`,坏掉的虚拟机可以重开;真硬件坏了就是坏了,烧的是钱,少数情况下还会咬人。这一篇只讲「恰好够用」的安全底线——想深入电路与测量的原理,去 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware),那是硬件承重墙,这里只发安全帽。 +这是全书最短、也最不该跳过的一篇。前面九个历程,坏掉的程序可以 `git restore`,坏掉的虚拟机可以重开;真硬件坏了就是坏了,烧的是钱,少数情况下还会咬人。这一篇只讲「恰好够用」的安全底线——想深入电路与测量的原理,去 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware),那是硬件承重墙,这里只发安全帽。 ## 电压:3.3 与 5 的恩怨 @@ -15,11 +15,11 @@ verified-on: 常识性内容;具体器件的容忍值以数据手册为准 ## 共地:回路的地基 -拍 06 咱们给程序分配了住址;电路的世界里,**所有参与通信的设备必须共享同一个地**(GND 连 GND)——电流要有回路,「地」就是那条回程路。USB-TTL 和板子之间只接 TX/RX 不接 GND,收到的会是乱码或寂静,这是新手第二大经典事故(第一大见上节)。测量同理:万用表、示波器的地线夹,夹的都是和被测电路共地的点。 +第 7 个历程 咱们给程序分配了住址;电路的世界里,**所有参与通信的设备必须共享同一个地**(GND 连 GND)——电流要有回路,「地」就是那条回程路。USB-TTL 和板子之间只接 TX/RX 不接 GND,收到的会是乱码或寂静,这是新手第二大经典事故(第一大见上节)。测量同理:万用表、示波器的地线夹,夹的都是和被测电路共地的点。 ## 静电:看不见的那一掌 -秋冬干燥,咱们摸门把手会被电一下——那一下的量级,足够 MCS 级芯片的栅极记住一辈子。拿板子前,摸一下接地的金属(暖气片、机箱裸露金属)放掉身上的静电;有条件,防静电手环和防静电垫当然更好。板子不用时放进防静电袋,而不是随手放在化纤桌布上。 +秋冬干燥,咱们摸门把手会被电一下——那一下的量级,足够 CMOS 芯片的栅极记住一辈子(栅极是 CMOS 晶体管上那层极薄的「门」,静电压一穿,门就废了)。拿板子前,摸一下接地的金属(暖气片、机箱裸露金属)放掉身上的静电;有条件,防静电手环和防静电垫当然更好。板子不用时放进防静电袋,而不是随手放在化纤桌布上。 ## 万用表:三招防身 @@ -29,10 +29,10 @@ verified-on: 常识性内容;具体器件的容忍值以数据手册为准 接好线、手放在电源开关上时,过一遍: -一,**电压对吗?**——供电是 5V 还是 3.3V,板子上有没有稳压,引脚容忍范围是多少。二,**极性对吗?**——VCC 和 GND 有没有接反(接反是第三大烧板原因;很多板子的反接是直接短路)。三,**共地了吗?**——所有要通信的设备,GND 连在一起了吗。 +一,**电压对吗?**——供电是 5V 还是 3.3V,板子上有没有稳压,引脚容忍范围是多少。二,**极性对吗?**——VCC(供电正极的名字)和 GND 有没有接反(接反是第三大烧板原因;很多板子的反接是直接短路)。三,**共地了吗?**——所有要通信的设备,GND 连在一起了吗。 三问都过,再上电。这三秒钟,是嵌入式最便宜的保险。 ## 出发 -安全帽发完了。带上它,去 [ST-Forge](https://github.com/Awesome-Embedded-Learning-Studio/ST-Forge) 和 [Tutorial_AwesomeHardware](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeHardware)——前者带你把拍 06 的骨架搬上真 STM32,后者带你理解每一根线背后的电气世界。一路顺风,注意安全。 +安全帽发完了。好了!我说,祝各位的嵌入式学习之旅一帆风顺! diff --git a/tutorial/journey/assets/00/cmd.png b/tutorial/journey/assets/00/cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..87fc236df1ed9c65a2fb90574be31ebd90b6d94c GIT binary patch literal 39163 zcma%jXIN8N7q0Vpm6<_7M2fVGAfnPlq?e2%f{Mr>Qj`)U0wPU7Y6!7>N~lo~P!J+8 z0@5PACn|wRjeztLN$7!u1V|z6o;ctAfAc&(dd^AqUVD{yy=(1#O#1tp-NE0Le&4fa z&%w)=Y_9LwvwvjIp1mHw?g#FiX}Mhs{Pj!3b-TazR1d1G0vG?s|GdNbJ$q_UlKeaS zfa~8LT)G*tXOC2;_|Gqd(6YOG_Pl;^+2;I>81MC2*jpFh4)CTv<>2O%Zzuor`>&?y z$xjp>+SCkPKl;7$pR@L7&*IHT>95V4Z@S+9YpSdA&vWO@mtSd>L*>5>*g7b7U2i`k zm2;?*YFc)($a9P??HA0hoP>p(LGC8tys7)PECVruO8=@3f8y@?^3B=(2NYk}{BrsF z$L2RXuyqBZnwzYqvUl1Xn~3yMlJ|Fug>J7XOS}Rdkx-5MTjksX(#mwH9e&q{@!k30 z5C@N=td?eXTd^$_3Gr(dPA$t|3Jx27fp4Ymvk4<_DY)9AOGQe!x7-R2Z)@_P!mx?; z_Trl9`l={dpTuD=x!A$aR$KbJ2gR(ti3x*ml_Qa=unkoh9Sg0D;|$k$qrGQ&;}FHiLrm)t;tqa`5BUhb1~5*m?42r)#rf zrBIIX8*df2Cq#I+&{nX=WQf%u2f;{_-Ng?>;6~Mu7gYlzQ1^EBlL+W0E<^%qAo^;m`MDXCiEpA=&`jSMgw(-%Uvbf#(3Eq%0 z8P=qe7CE{0^cvDodPP-6#$xB_p}nk$Q$7T>q0(p+a!1C3Hf$9&W8gEprd1TSp*_@0 zUX5WaYLQ=NRX{fk?I}qLwaP&O3$YNCv~;{q0xRu}Q)O1LIiJF4sOu|cRIhOoN;+HV zM(6gg^B?MX>|EbU{(c9PW)BX(w~qA->&GsYxK9+xny=M!*1yXZ5v;(eA8@zcRLunS zYf+L%61$%J;?hnT((X^vk8Z@0(odqK-4K?xtedjZBDNf3M51oTV`vqf@&Ou0AbVit zO$30y{QZ{I;@JJ0Kto9+?0X$&?+-yF5(v1ss8_fL{x=}Jwjf`dZKM+jd!~Cm#_cL^ z^~)Dbi>1|Eb`(tncN#L*Q|ZWWJ~3Y!#7}%uJad~q5nPIltUxDqFBc>c3S!j@I6Qb5Y0kgP z7i4)xNwnM5OpBJ0u_BkDypH%Eya_@H7jwewH)@S}C#7~T#m9cxoCxE-<%}JSUaZ1J zr}Fv{_}6gnv_yZ%QIXfe3zq2`zRcZA0daF|$}la3=xKB!ZpOk2yF(qIKhae|B*atd z3u|gFT1*AreH*=+=<|)zgdZ10Ur1G{)lrMNOE;yGd&0h3j1hXL=-u@sOnRX|jo6$jYvWHfS4|AE;1Ey#WU;y$|FUOw00vRnj zC#QL%;6JG8>~x+@yr8}iBPv*lh=05F`Q?y*;(Br(SUVDuBjTP?Z)K+o=_@iaf#e}b zf=L3i>5CQ(8G$L>_aaWepSXQuKh5kp7rua zJrQs6)11{QOQ?{=2toilDO9b=tx`BG>K?`Euu{}XOTm#4Q>$uWdYA4(CA76m3)b*+3S~S2>H{BP8;QNc84UfMJraPcU$iWI899UeB5NF6)Ew#iiK$ z&j2tTZWnKfWfh)hxYI&c#`9S%AHx2^bTPIhZyEtBI}>bXZVCh|{gXALktB=f zs_tqMQu-*SU_XAYqs=ZT=2SuKZi~BMp*&{ygKy1)`A&niC*qmyAUIp2O+d(fS~lp? zWr9esFxHGy9d9vKK9Yz^Z5BQL3$YiZCaWLV>YX#5Wc3`R)|ovEl9o$oS==_Af5IUj z?erlKmbwBunC49*IbOeF!30`4|)S8ABo9 zfMg4Eu)$l?(^9|)&vgc>e`oYOC{-W6v@)?;C`!kaPV2lQltp(95&34cll4>?nXrfP zjvmxE#b*B^c zl3Z4)wRXPoYxWefDoS9GAS5ADHDmMhrqM!)?#F?kG`p>>Lg@s}s0k>_3Y+bAWT29oFs2m;I5e0N(Ziw2tT$4A4rcz{HRwnxQkw?TV3TWgGEQ#{T>QW zuc;i-pWEqbURr{Y>Cz%YH7~})_V!~%B z=5z>-G0s4_<$<>&30<%`6U!)%NPj+ug}69}{tW|LZCOF!S5`od-6YZO-{%%i$Ki)S ze4A7n7sVmS?gLGh*FpjPMaLSewHALsG=BQ66bqJ`3HI&BF;F#?e>?B0s%1&Alb1o& zX*|h&&o`Jiwn2<)#n+Wc@NC_2k2n5kMSvNs?C>u*wUuRASuFH(7A8x(83Yws!V&j$ z&=j~e+5?2y2y;(8{Wqe2C@+UHXJ#&?Giw$#P5*Y1T60$3YD!VJb`+~Y$xm$8P*QM6 zAuU&HR3)ovfDg-FvpVAqUk_!tKZf8XRJLe}&C@A0WK`rn{iO~j9!Dk}bnF5z6O+Jm zP70CibGlS%WVG6_cEKA2lrjyvu$w5|W{8xFD82NqKDUdM zh_srL{LrJkRMTTplN4@DjQt=1Zi}~&rpX3^c+NAKlcTHK4Vx z?v}yzJSKm$OHX%}uvW%(2-Ayr5$kQ&Quao}%;ovp3Jjt#DP^kSST;*hi6G^!oDw4N zs64qHmx_E0wU$BeZr-VxpTEeU7ttMq6^&0{n+naj7qc)p!M_eWmaP+~yFcx8N`j_- z_pJ07;rV}vBv`*0qsDOVC_xSWP{r%P(ZlqK4*&J~5n9-{LOcAB9Z0pPPHS} zjFoQ?{UX%5Mbtqdwxj%HZV~b3To|R?K zw8c(BIY~8aLtI)#D96Eh@<}sQACU|etX9YTAnm&qe%B>_^Yv4oPjhYfTwhdoF=|Fm zn`L@diiXumFx%N}-Vi2|hj!%{_}p>z0+NYs`q4wmZgXmqIkq-ING*9Qc`GSZxkS~d zyDBw~7x+7cV;HHN4qmfCghz_M-Q;or-el`uHJS+x+0kvE1a$?ykpeRpSQH?X zhll$X>p)WU`kY48dW~DECF`}K5fiCsdHaFNNBSV+JH)>mwG^DN1ns`jm4LBQ5%CCJ zHO6h9;}2?6&?z(&jNYP6;{phXcpBB146t(p}Z>WIo0~Q_n$kSCZvf@Vg+cz^_GnQlCDi_RzE6J>5vk}rXW@M_7N(=K zUGwgPunQq*d;m8%7zjnb)F@h}G=xz*_d)nFG5|}dc8cPAGrs5JQWJBljL&pm+eMjf zeKKM+Nucj>-@NPjR(u*ty6ZbrU=<)1oOhyz$$Iui@@5{$d3Pb$fa2ISEr+R28m)kY z2(c5r#u~fbNI<+f>hJaM58A0jUs-Rv6ToK-+9f9hRIYEc@k4D^Y7Hi$Q?Au0q@tpR z6jjdAYPOp(``lJ7I()rNIK&ZvQs{*2lW~!rdP?qLQ8Dw7S9)*FikgNmPE0ZtDB0dPLvU zD=e|e($%apJ-HX&Mu-rd}N%mc$>vOvU`H(mV3R7{8|0ZUD3 z7+1%dwRTW8{TA~OZaH1TMZ2yaY0_PLQF2_b4qeMR6RGMMlPFk1>`a)5B7><+)znrZ zf3Tw=NhAX>%_}B!q}G@PX1$x(V34|+5b@L0MM+vJSi~hVfYf9pZ*`NO<3j4}#-E3K zCuJdSDvGSh+ltenzTdSZ2(Ov5WCl?GDu)J6d9ON!b)Ubile^o=L66(1AhpCt9)o<_qRvl(}c@u8zp) zE-yrfHm#YW&&X*TUY^q}Xr(-F-l11OBVoesud%vg=c?0lB1*&9G0T&5)KfOnUE~9` ztnrDpbX(z1i&C3!Uw27eX)#y3#S98UB0Hp2WhLmscuVH^#eHljCbPTyvH+5d6Rbx& ziI^XOinoI@Y34>qCAACLy;f|ROsC_FRsoKx#UNxU7cti*$=|$OyL+|9yPr=OJ_o@b ztZ(A!DOd?9i#7a&er)Aen5W0{E~nL+)3t)&rOlzR-t%pQOt#>-kcA0abp1&DYC8YU ziu?>Pvc%a?wuB1&`g&7e1Y2yo==hm>YkKgV>8ijbY(fYxW|#Pr zhwKyxU%-_q=d+&r49r53=)#A0W<+1fWr+1R1LLox&Gn>0T5Wgk+TbO3YF3`XDb2~9 z(7RoqYqr3*yq#%VgAo*p|BddI66!O83jC_d)*zHJQH)A{8hukf(gJ5_%`J4Ma6ARy zVhCygA5?=83N>tvvQ!na0KQ?`8fx_MDoT zo^?1Yf$^zm0P-THr3RtmGz5<87<=88JtcS@-F1q$ldNiDE!(GdOTI!bqyxwx?(81`zBr`-+N^2`OjDQv$LbO<5tPwZsBMu<^W4B}0u+6;3zKm_> zeRIpwmR5R}^bUiij~6JL#o9$hMIC*wO=BL=V+fDn#do>CqJ_QAraM~1m(V6&6)(F z06MGD)TL1YbPQ3ZOK^HhVIU|;j%cUC7&P?3hoI~>9BC;_kgZjjMEDQBY3z6+<+BTy zSZD2hKVHwfpBDrBmS}yLK85i=PAy0$P(dj!7*XxODr@*RgH?}Z!sVwX-4wP!+ttoS zCH^mbtO6gm0L`?{xyo5s&iHK^Va)xMlz2kGV}~|wQ^zqs4lfHVSGhFN)!iLx&bDg& z?d#!#{qodyMxR#Z2e2UEY~=OEcF6UeuA@Db0g!9uxmk2{{7Nlwb<;4j4?M**c$U3Y z+JD6_zNY+QEN%q*w*R$}_8VqTHfnVo1G(-J0Y4i!m2;MezG)p7%cR@{U&TJSj$2re z#O8YL3{?ECM`}xOWm2eT7fHK!fai4?H^D-0Cc2c4UauostKKTVU!n!(4k=`o|0h!Q z7E9#L+))m>Rs!b=bg9F>GYXjjCXV)4)9OFHB(fdjx0V)`0!R+n*hQ1fP;c(QLa%nU z&c~|`)p=pgXRG3ZQV9Mzd($oT%*daz7kM{EkB@}pzVzfKb$aVhiykdJ5=d4~7rZY& z!5!*<)02h%I+maNoqyZ!Y(#ff&p$)DsCm4${|Q5X?>ATbLoijoWVxRHH>7LUF#ghV z88*a^*{T0F7dDtuEsSC=qR_bq`mFr6%-yc)e5^9g8S3%JaKo6CK>EFkqYy|z)@4c(5pHKqJqo;R+qKOWCqDOB^VTy{h3hUo ziy-j!POFo@CP=BNC1fkymH8et`07XuBau=Os_dAQz&Ox4Bnm3t1Fc;>|43EEVRVB=uVL6RxP*K6`)`&J_-ytivy)8s18 zFFavn3uI2~U-;*xWt&Ovw!8KrH+mz zK#x^EGT&P&4#J$Y*SFW>-4E@fnrF5v&j1?-3ozZpI`j=5HyXRQ0ic%!W+XVAKQ z(ReF|?VaIi0$g8&N`7BlE7f#^w-)(&*<~k3WTar@Czn{hIeoXX;n20np89~1jDV49 zd%e8B<3WQRLATCs)JAx`V&^}&c{X^;x2I*2Swe_sgGsYR?E~+#f>|3p+CovNLV$fm zA1}kcdZ2#!YqXY&+*5B+>^I;B7Uso#FTIqtqx$NGV0pA>Q~~99dcSWI*H*`+=OU>f z+tW>e^;;yM1&q7#t@?JZM?$IZ%J1?y$#?&5v|)4fN@o-OOlfn{Da=JW$K zFSys)jcEl4N;GpE?zPO$oSm<|J5^6Vp^$(5U3J5FJPF$}euw8x zT0W8E5J+#u=r4N%c3^F!WB`aZ9c51ZT5;zPO9(yF(`L(t znHlBs7y>jiLb%m8kbv_{7?93b9l_;X<*vP2fQ^)DjUXO6Fegz6Ywp}OT@y_N+k)D3 z-dGE2{czKcLLyyr#DZzT19W#ilEt3(?HSkO-C{Oi;K5rsZlBBeiE#)59xm7!*CJud z$~ioO*vCjiMAZ#$JHwS1AGOxi(_n}#h}ZG(UN;OEhR=p3R9HMrw|5O0#H9Kvxu%l+8S{Oqr} zj9|Vh!CjDcumxFEc2R~GR~XBULiWyteFkX8RF^yFGKm|~cdQnEPU}ekAb_!!+!z*Px{JwJ zNPhDS^DH00@)L%bib2m}rMIcL?L;6^7-nGdN0;o)Rr zW@m1-mXyWz$Gf7L-8{^1!j+8exLK;Np&swgxwx*J&T9w=ljb*m8f7mencUB);esKC zx-H>k>bMDbGwW!Ng9%)VyZtqLx=+^yz>l`ol7*7I5=|qQ*hMWNZovYK)%y@YHQ!Fk z1A#Y^FZZn4seP+WK*KZOtfP6~`9FZKYil)@DSKGywyc&M1(Kg-wJ-QB!iAZM<{xia z640AayWPdJypo zsWT1aav~%@p3+Xq6x5AxZRLbPu2iFqv|GwAS^pjX;R^O#uxmKn;c@@5x&?m~9y-j4 zxhUCvE^vhF?59~*Z4RazENeOY4O}UCOA7bMhZy^xF~pv$j^(~^&Olwo9_O-9{>RFYz{N*jcnN%s>mbOM4s<+lvd8OalN>L;=i^RnnZNiDqbv->vWwgusmn zsVmVOr60Zi4(`xrpm2hO1$4$!K)*S#I@HPaz&UDa(grP;PM+U8+Y|Y8l-{$Tmc3-B0|M2O-kXebjhq1^NL(6NHA(!yUxNeBr=^2kURJ>bz-~&7^L=>TOn$^%M zNKYF{pV1!E5jxCF1~q=m_bJUEvx7aMB9Zf2Sd-^n!yFv0-q^P*A#A-_qu7x`B1cDF zWLL_;eeiARC_!|Lx;#*YjN@eLNi|_pGH{<+XM4(Lm|7Y+bMeSW@x7OD%Hn&GLc^O9 z`onL(8L&QC*K}4m65tVe=!#Bll5!_2-a1eXgj?!a;Pqx<}X|vo&LcZpSk?>ZpPpD_ z5lt+GZqXlJx{S*8zE316TI8flHnDVG7DQjL`BCQU(&g^m>0!UlXbCs z)m@?hNlvqhvu$s046ym@@EtHkA-ndm1-TNAKL9zNL@Dt}cGA>2sFuvXZV! z9>>L){gH0AgPh=H`G!sBi|(;re3pY!UeFx7_eQ4pxM+vI+MBMXY`5*LiVz8`YEEO~ zo1Qu%qow9f6~wO$a(EP~hEM59u<(`X?Ixodav_Xd=n@MN&9Gl9!eZ$6+7aF})9X2x z2&(a4Rt+|@c+j~o{IQ_Mk%UglrigR_Q8Anku8me@>fLIsftImsG}I~XEl{vEKV_vh5cN_L>0TKo>a8z; zhQO&r!W=c55L$O|g1w?>QF{*PDxEU+^_Fd0Z}eEN?W|z*7fm&@89Oy2j|p8p65Gi; z`W;6wekIgFW_V?M@_%g)(PeWmA^KJNE(p=V?aPB+Bh~00nrSr)s4dD+He_n8-Yc#{BPzCm+l0@h zg6z=oHrok8I)nF2b^Xm#0)F*ET(==xWK9d^4&N`Q%TduZe52vi3`ziW*6r3+19ONe zKtB*GWqGfE)!JPYh=1cfm`Q^za!U50mBtd|0-m1X_%vg)M*31mpHK?0K!Omu+C#$Y|?!ZeD^}2j!iC zoIyQLvIfY$-NnQP46!ji8vnRhDzzi}GGe@828GO6!SZM|_G0%auprN4q2%qyvs>0C z?RtXzj-{G5N_yh&g4)1EcWG1eYgX}ecaI+(#iBB23ew80Nmx+BJ8!Vm45y5CkNeO& zOga+cqi6Kft!pfO7!dLt0Yaa?Bd109l%WOfDe7Wy`jpjungEQgshP&nQ(70FO&5$- zM>RAOtEM#fgTg#jn%(egz9~LE*CYr-ypUA6XM-5>mXE_FHIg!aw?67w1-I z$?hyr znGPToL)X7r4{`qN!zn~f(Kk&)aBk2cKH_eIg#5>mgs|Ps*j=rk*Hx` z%$VOd0Pa(W86+dLY-~uy1O z`TzoVAZdF`umqhDkh*xxAF_kU!k1iL6$~R@kK{fQR2nJs)H@kr$-i5PdP?Cq?{?=R z_?q&;^CU0T(TE>k70sI6Ldxqi)Y`ge79mKZKxV=+ea0|uXXcbQoK@Hy_&G3aWkREv z7^sh*lGkSspif2JA{|2Y=Y#rcM_&pD=CqVV)+V%`b?PyCyyJll#zTIv_ZIGshE!5C z*8iSOsb~;|%zxgsk|~|kaYdBtA58pOsZj`txiXS zvH3K=+R*Ye$wH^-Q$s6U`&vqIoJnKzwegpMy*yQCIlJuYq(sr?xcjY-L`g5))jnW% z12SXCio5T`FRs$+ReZSqTg`Z_1qJJ0YgEHEv>P27LQrrN8hFNSVQMKM?BVEq4Rvj~ zc-gwmjzUUMkW@pJP~Q`5(f;!1+HBj$U(%C{S)Q^eEB9 zcD8H9z#*p|rUUT{oiAEe6Z>j)xKbpBZWM4@c&Wv3e1E8tZ{ zF?#B)gai#c0#X3$x&~}Y_@j5-EO&_n$}>0bK;z*`p0xx)Ch=ejwvBd38R8{-P#cuS z1F(DXUVZ#tJHo0RE3Kibq4b@=XFI^|BD$MLZW@R><1>EV4nKc^m71TIFjq*R)$p!S zp#!-NLvUh2jdM`ya*i(YqN7dw%x2Jfi|EC~Hhqy1R9(ljAz}3iBaS#Fi=Al`)_qR2 zrPGf;w=I9XR%{3*4vf>2SL9dkeN`>uskITVQOEJQZcN0@P(3>Kf(?E*hK7zNsEUHj z!BJCIQKT@3%2?m6uxXX~8MTXT0Voaf_h`CY+7<#Nxn)b2Dl^qRy}vSL7b0xoKsD5h z98=@jzZu-#*vm-dYUfsKOQ%!jBL9A+<8dfLD2!?6Gy53B_WBp`FiHj;eMGYXo%R72 zGDWDvD*im1DLJC99yRHkb5d6~O*MMPz&K>)wTE$VuQ1?O;4CTd3ANU=pdA+MveT?B zFsLj?tRmGo2>JYZF}cp!F*PKbkK>GC@=E@;qNX@yfd1K`&04T#qe+)Cj(aC?7u}me zyec6$?-%0Jt9$l*^5`x(i0LlR(xw!?ckGtb$Eg6MmPhkAjH&Wc&dV*TJAPR`!vTXD zrUJxvy@sGx<2R5Sv(exxq4l5tH-a{%Lq2d!Csj@wtU|SqTkg#~KB-c&QQN0CRO*P1 zSfFaHSkA1R4se0s8vab;Lbyv%`Tmk(=d6)+1-=kd`5soB5&pJ3BteSu^6 zz4nl#;o;$deLW>7FSl+S(#N$ME1?m`+N^($x2L^I2f=KZ2qUOMn`Wa@E~#G;azF87 z_zbOD>M#GwH$B{)rVJhTicUK|c|@~qz1BV`W~Xc2{NDjK8|%X;-2-d~`;3#5cM?^7 zDBWq3k^esX5gY(q)pSZ(1Y!NBq%77CcSl^;Ff(i@ zxc|4T9!a8!A9Z?T)D4p6Ul4o38@ADaM6Qfgc|^%Q(tCOQvW?9{`kWPODiAXfyPRKF z@pFtnOSjiXwX(4&njz>y&`uy$l5b*?j@GjLQ^91DG+^nzDL-+`PKX}&L=d5IzBT~b0!$D4TIUI@1OEZqeb9&b(%w-v2V&xqrbag zexxKAn0O2WLF?|HptbL=RoD*wblA|NMn*Nl*@q83A!LU_jbKOK zKNXS6hJII>UnKSK_IUt71L$AD(VBa=@%P(pBUK(vD?o#L9dPZ?R+uFVQ2o>v_JCNn zcKA#L(aH$|0Yxki4!Ab_?cyTm>+2iVZ$P+P(Fg-3Wz0(>OcPjj=&o0%oNGtTHoQXZ ze;QBcrux;rbFDx#UI7R)g_56Z2#rgT*G>N5T-q(-6Ge9`ZkaB>jVNkuHMdPwd|4Ie zd{6siU`0aU<<5F3hpqoXgI7TBt5b|Rv_Qw2KQG<%ni=M?FM!+n@a|MkX=+-;pdcn_ zs{WM6X!$ZE{#4Y)q*Vc&_AG|gvaAui!{rF0F$p7SdcVxM+x|}kxzN&=0Uv@MWD8m< zf-?iuh&&FL@mM+?buTVH;~%5T$MZ5SsjFW$zL;V2>LFErNH@tLPu)0p>PVh(NNSq0 ziS6ObIv!YctmoDii77-6BfcJD-3nO*g;`V)Um1*>G&UeC&?Rg(*{>l z+W*}6ECEUtM_t~&fSRf=^^OV5FYefOYrshX8+ScFsO$rEzLYIQ2zGaB?sPt%Au0n1 z2smI@AAny(uqa;abc5U#0(lHVOc?Pxl-Shvc&|ivZcVHrN z+=~){=6N=jkNh`4Y{zd2t46J?IPPK&#U8SIy)mYZ9d!`ET3bTie9fG5s3_)!?}8759&~&sRglA_1W3Q32=p0c|vsg>>qOBUrVG zlmI)RVtU36&4Nv7iDjO7(0NcM_^rqE6_(}teL!oWw`NJ=1%iZ|iSn3ElgxB}#!owp1~!UMFkLB`vQQIBHkIc{cR9j)+bz zq6NLZU!&DF?sLLSa~Pvn8-ssq7U47a)=UgmrrX~x60 zeTbU)WKdox*31n7V6WZ9ix2HUM}@LkrgZ#V`_+Cvo3PspP$LMb@iV_zDbGDS9T% zuF|{1Jb{q{!2=18GUgGQCK8ZDX$^tn-Lj6BGLDuE8_S*V&WwITBHkV-SH;OJq}Ca* zAsGMYm%Zd&Dh9=5GC9Cr;}OvAw?vEl7iWd^4bQO({WHbs=4F{3upYHGa z@=Ox?z07Gq4Y4&~vdl7>C1hSRKQ+h3vb&}l0x5=Q?p3ktC2;#7w!o0$&C1D$1FGid zl$4c={fPwwwzaB2nAJpWOuaS^z6Dqpl2l*?>jt7&!T)WTZM8$dA-78Dw%*P8&SE>1 z+9bJ3ZT|Pyf0$;MHzclvkePwd| zZ|d+F-G+dXk_q1&FQ5L`1~LwxzW~Hb)eQoVj9)TDCn-SU4ZPtyqkt0a)?2C7Lv7LY zm61}S>l^D0fD)$tvUk7O?~}djK~`}OLwd1DBpo5*$;jx^9&cAb1gDEmHD6W*^gaYA zS8UF@m!1JJ8R^2)CDqk>;@ALkcu3vqf2OJJTZ1Wp;g@VJ4g&hLO;eKV%hnC7!EG%Q zQQ{`4coCd+f3UKQjQD|kt~iQzw^wDw=w{h2G9o&0LJVRrRW2kJMy;_FjELlz?wPoN>X0u>ofONN=VCMcJoH# zbog}pQf?r*vTm@~p@It>4KgrNp{^o0o=#aND zcMC&Uf%K9tw%C)-hyToW0!(`7$nQqR#@&Rk(8667aRMzl&TVY4i-8@5YVE51K@fs$JN!v&XMC8 ze%TWsl`;+*hk0x|$hq`dnwVd_ICjBjssByOhMo6HEU+hJXM^9T;CaZ+JJ#27ccs|C zfAB5frH-Dli&+C|vJSy*^UsxifL^!(jI|yVISBAo;GHBCSQulYEjaA3p=xyhh9&c> zMi?*@;iB8=Vd*ho%*}u*^K>sfKad1KaQ#U~VrTH3x%SvF_G~l(m9Skb|9EOX5u^s*9YT?5ZS)Ys z840o78zEvoQC?myrb|D>udRAx5|tVLjDS{yA_fQq~M>-1t@F$*mf!X zm#XUq&9&oL>qpr$5sozVNTn+~)Ny^21D$N1c> zJi%MlU=wk!Xt?iE2|x~zD+(l~Mn33{2s~TDeN&Gbo)Ej1__ur^8;1h+7Id3tPYx#r znASg-|00Gy&v-^x%LilX+FFq#+PdY>v#M6n0H!LyX8@7|ovIIzaR@ywmI3fug3-9A z?B4wckN}%Dt_Bi|IJXpuGui>gZ$aB*Vr7UCIz=CAO6y?HA(7%F7LwcT+n2paOUk(g z(1@QFWlj1MhzQ|U5u4Wv#Ix9#HTOr${XRPtCS0Dj035}1^`A^KIYmF+aL`nvDRd~Q z(e=g+adt>mF*_@s+7y^6`FZ8b@%_ovm3xy_jAxHn6U|}J8*Xk*zkX*vtp~hYe9bBp zTk}&M9)l22PikwY0QZe^YHMpbI~YX%EI#iG4@euXPwQ_em37eJ^gh?%NFdUy5E~6* zcGJ!wr%aXy>sf@C>#kn@LU>HAUQeg83G30!!Pols6#*hno=bbSyBUq+c~t_H(jagcL(J+tBL<9G0%S&BT7vjLBsA2? z&6M;MF(xhQBPQ1mT*+z-XU1L$hQ9pEsHG0zM#^}PB8 zxPkK80D5cY!o~nuOn6g#xy;3ycrH_Z5zU)fCiiHe`$LNQ?(S_s#V=?)IVV-cJJcrKR4+gZ?@}f$^xm=uNft|8eF{scAAR7h%BULnicu(wNGO>^Q zfMP!9W<(tuClbiS0*F$aCr(T`-f;mT|9CB=-BPxQ3OaD~>_01)+JJ1^_4TDjMDcg# z-nJl6H88R`*NIPSiqpSXISaP+186W9AcXQ7w!k59fVKjbix`n=WHpb8iJD%^LWWZJz(=+6A6^HD;m0m(0IfF+0E@UcKe+QYy!X_;3%DTMKecRknD*B> z4P8Vp!36rQ(W+1SJ22AW^GZMc*7e)_J5#J5Jd!9u>;nM7$aA2NtF4|aeAxQ=-tUpa zFFiXGrHN_ez!mOuHs^JpB#Xgj z(26|+5Sbw3joV5E@aW~BQSg#02*Q-iYCFMX$H^EojYf9x1_O;HU9~C(QdIf zi_znlaCZMer6U!tRrecl2q52xL7b6=iPuzD4{2R3iL%nuRy_zX99TDS@FQ3E*_Wz8 zaUG<=WO0FVIMu1xR!rb105Lwj>p2NTd>)NG7XIlMiE}(IKn8+X5!h56~P1O-Bc$l)f zJA8W$Aj6@qSRmYHI^Hwsdvnqkl+N7#Q^%uG$88Qc#{a#v_Ts=l!8m|i_{@KKW^nt{ zqh{eQHE&v)HWZP!ve8Vh0e`p^FNO!Hk_vU@!NV0o$pIBlp@KLPi8B zNT5_w&fQrAHc!>Eva)_cT5u0*UYyy))sSb*{If8ifD%^_#XxVRDM2Zr0PqCHW~cNr zjWISx5z|u$EXyV60~G8pZlk4rwmzGN6@7sKxvtuFjgbhwUSH z?Lm{ZGuDo;&m3zCnKBWVdnunzPV0+DIQRe3KTxEJWoSWIXm{AnJlQ8n7SqLjlJfP< ziR0w16bjInOSyOdf;oI)jG0H`mt1_2-3$0*$M$fLk;iRuqXaMO`0KFPHTN_=X^MX> z@1TJN@?U!lXFgF}&xjp-Mo@P@FtDxyDCb`FqPz7))-G&-pjvomvr7ZeDr*Lsx9@6XwPKj59@ zPc2X9g#dC~2HIrLf?_3su2yR#@MbQ6v95BFEVJeAG{X|#6pQt@s05u5!Opt4&DVH8 zPuvHf%)#hs;`Hfp(IWC6X%JBFhuobn&yqIfdzB zH;ngC0o(WI?5)=@-W@(Y8Jb?oB|95!j_cru?yu@2kF|L;O%(ofJOg>jI5_$EZx~Hf@Q%5Ys%)Zn#oitYK#-G%2e0wh*Hdc> zjs16Eu^s@)%G_kjb0?ABVr-@LF zvghHL@xhTjbH9H1nPm2uYablBQY-gU@I9aW{&#oJ$-iFz+oarc@mJtKTo8ZW{d(so zyzbd^WQcY~_j1P14y)qrHgVYn^y)m?XJPZt6lyR2{C4~K{|0>W7z5fxbFcpQyJ=L^ zvw+nVG12y`*wg3%bZdw6q8|P`=yalSXZ`kH+W-wx#9(*t1FhS(owW)~x40n*P^lVV zlK*vX>px5b$u#5n^XEaaHa0;s%?3cHQUB83x$okhw)oYzpZ(s9i~-WIGr_^j8$hm~ zR2NJ2sOc@x&j$Ea&(fI2f--$_TWFjYFwo8Uw_$t%HL@W4VL4LHo>)+XojqsRTQAQ!zFAMj<>nkf&;fDEb<4gi8F2Di2HV zN>Nz$&fMAAnY=Gv)@_S#g=ch0Z~O};*N9#JC`f5J3((#`rvk6!XHxkuuffgkeEDyX z%X#2=+UiKDe+m=;MGxQa{%#@QgYmxy1oHsBIypJL)D1ECy~c2wz9NizC`iw>f<=9X z>oy9~3&2BDtyU>H|ElB@!qJdgm6eoksU-SnC|lGD(rKY~ z<8)+_td?y+K!A<&$1J@%zk%eFz>@;7>MF4YN{|n7^mSfwy>;u>nIAtRrZH4gA9FKP zH_$maIQUg|_L6PhKMIGo^sD^`3ar{DFJ-Z=?z?&K?$sK}m#g=l)?4$M*Y8#EPyOHa zzBH<-b8VYrkM&fmlvbglfE5rF0hu)nX%#_ckx6D{o}8c^*!fZ?|07o%iyH~k0M!R?KRtTEtwp#|>2>-Q?3?Y$DN?+!w z05@|t?8rUrFeYYCo7kdS@YHLF1OZC=Jv`#tp!m+oR+f4>NyMI%O%}N18Jd&^zB0XJ z8f@;O+mRWw;J(7W_%7tK@S%;KhnA#?=Ilj$k&%pLQ6tI#ei*=cfzDU2z5yk@qlD(E zMBRmr1zd{OHs(K2VgSKBo+v7$}$F(gf)n= zR#a59eItztSF-S7*SFvDy{zA*NtsJlK9mYX8~|PS9@G@vexnorAUV0=m#@A{+x|V| z4^eW}kE!8(HwDCXw6$LVD4L!)P9o%t2f7C?vTPG#B<#za&XyeaHLIaZ;?lmPyxfj}`oV@Df*KMIH(HQe%qc8vtQOKB4$A#na@*Vcw4*}VU z3fdX{L@%$R)e&AZV6IEZ9CSWTLX>Cea_f8b5{`^EcU_l44>WJfHl)cAJqCgLcN-hk z4?F-^;(pB#rpHy@A!Ou(j@kRYVW1V2S5#DFy_O?>=CIN}up;{s4M*J-IFq#c>V%94 zr5xZ!J8RwcTg>mxv+Ea~XhR<)F=B#06u1Ntw$i}d6Nk_kR5>e_El|o?WXj+}Q zaEgnrA{Y&pdW6aLgW)(#y)$RdOmFkg)Ivd*z22hz21HF}Kk)%xJBxc%dEgQ)>9pBx zL7EQm0ZsR=-%b$!mH}UMwn;|I1&>^NZAnIADS}lYw$(GsKUsx$;8;)~Mjeu%gDU3? zT0N#_W;pv_zl6#M*aN|5Q$1u#pGj`RWzaG_o0(TvS7-esT{OM%z&;y8Bwh^jnjTX^ z7gcg^ZzYP2#%@bLarv~I20i|X9A%ITx%>cI5iQ{>TxSHXx#pVhdO0bc3``LW%icDZ z_q6WkZZ|pCz!{L&Dr8||Qj%cpeNhn&vBAH2rX+sZ3YFLV83|##;dd<7oSnmCu`i zAQv`s0J5d^a%p`tmTl-4%?w#6W1Qb3hjkKuv5AV*LSv)s8lnW%F5uxl2fyz5cmN83yui>DT7l1dNsr7ZnuT zJ%Fe!qpny(4hnSB+t@fn{kEjjUS3{K)BRPzdh@@=yl#O94>!ajER(+!i`2nk*%@;6 zgHhGt?EFBNOWr?Oxj2xlJ)hc1e~p-7fd^}e*uyEE+@m=K1;-vSxEUDmORLzOWQ)h^ z_z_xk5MiL)74iE*hB@fZ%gQ}62JN6D#t&Z?6^WB~6@psbhEEvmkV0d+r>MAe&OsyQ zxi8XJ4`nO$(J$DN#jHKw$H$QMWq~LGHZ8pvC!2G*9jaH6=4M#KCfms%upi1NzX!Df zAQaUDcame?+JGA6$9Xrj{E8C3G;I%1$HH4wH9Sg4zCGHwu&~fuMfpzc`?B(KML~Io zgP;hvZHoc>0absnkAkDn{y?fdXbL|nD45v2t9z_1J$W*7H2@2S143$PO0d$DlEH|P z=&yZDeoNJ|vbMIyX~_fZ`PFwvv`2{83nJ7_EUS~XL<$rmEJS1gA76<2lDbs5x)>E5 z2tBk82|H>ZhiiA$H%-+qb%V?mASCJS<&{>P>~Mdo2ms&)2C~RYBSvZFR~9;fUGSk2XJAf8fXHm!HqA&728iuh zC%nFA<{b+NIBJxhr0Ge}1_*FnUX$M|7nB>={PY@>wSayW!$J$|k1e?h7wy|w01MX& zOkB`HL}CXFC+BWPF027{%GAnA=({6^9s&<)_qC;~l@2W{hRu!0M#$gseFES;R@*|`nE4A*4?fY79iLUCB?in~1qiV1@@S7^;1Y53`v z2N3rFh)4nT#V|vos(!&A>PrE{1@+6L@|n;U^IdPd$78l%i}S>Q-Twwo{2B|fSir0l zuD*TYv#wD*4bF2pNBx0XzNfIHWN<=AC(khTTj&!2qxOGT;DyD(oe$NL2`!V7Y^@a3?usM3lXj*8FbiROYwMMR&@q7qFSuy!OH>o`@}^;d z^-j*z&VzfX57+1evz&r*QKvH52cR{o#odD9;(>zk7hsGD`b6(EVBNZaxCK|RxDtX*C&yMn8&)quVUGRPg^G%9SAg{^I$6AD_`P}?w&Poa2~wsu%Mhc7t;RaY?L zve;vbv#>1!gcRgdTh16-Hz!+YXLOD<038(Hs7^_Qg~)zcC9uOcgyslIs{*PFMbLns z@~SYi5-U~1f#$ld%is=(W`KnGPBCPF;xL%}xp096k(8Wb;7C76z;K2Dku1b)f9Y(lF};_4aM4 zjL^gE_qVaAW-aXf)d*-|e1mED4;h}Icz{pSC585Ob#9B)IqQ=T@Gp*%8D$N6K|qV} zs}$IWkOW(AYGXrtyDd1&RLtHN1mSkwDRXo4zz=_DV3vZzh=HT*OO^oO+XZ%>1rt)n zStpL|=FoNu;|$z&f+2ju1Q`ct5-YX$DoxL9`Bc0GH)Y83=R*X^?E>T2M5W*}z( z6fdh2?|TQl0`(Pf7*TQxWk{6D9P!zn+066F?JdEFIBq8FZ0*Zg^pr(6TsnVk2|En~4F6uFjb= z&sD$raXka55oC9Ek)JwoSC^>;H+CAaDLs2*Jf9{SXX8~sU4V%Hw9~@tGG{39Q=;C0 zeB;+M4M;pSjstMIpJgV>j&(HZAho{TZ=tqUO7S!H{l4r90)fJ`^C?PxWme3ocw1sZFZN-ioTmpfG#Xy&gDzoN0! zk+rauaL*Yo7M0>BzZM2ltbf<@AjZpghCP&Yj&64Na65c$)h;aSlC-8Am|XHHDN2EG zG>`xkCLb%04BCi)0ABC^L)bAOiNR3AL(gu`i!N3J7qq;&w)#ZQ{?R$d4f^COX&axn z`+(~4N0_C1kfsK71D7c0KYsaYyL?(6dDkOG)Ncu{d0z7RNqd zbos0$cl#TVE^nB9ZwxW>AI;X8`3*BsL0gEIOL@{k_!Is{zDp%@d?!P5$xjq4fc$Xc z$-49g@>t*qUx!lsVz;1`S z1%+bN&xhefEn<{3X5s1yekd|Ry^r0QX1lb|ih+&oh3ut_A6^Wk5dqY8wL%=h;EO7e z^uU*Z*auu5dTg3atNljv?-=;&c#g;>@7}Q!giciy8R!CDWyVmc*!7B0&s|-_^%(^P zvKg9XbL=BXc+M&kYm}yZ)G8we*6K(A*06u$qrgDj2mQdL;$x4q+3A#?S^eCl?q-%n zaCMz;XGX3;GXC9sGxo~~VeK7#K?ThJmo%oa4< zqvJs~V<8gY$11L#t|b60^-MSF9of?39P3~d4 z)HTfpDYGRL>OR2=pVvhxOZ@(abG+q8p|h6hq!j1p8Wk@3Pq)F zop}q5cLkM~cc=qc|43*^9k9=zKx0dscB<0eCzs>P3>|F&_m;e^uX=h2{`G4?=22xQ z#WbCM?KsmQdshRN8X7(h5a$8c3fVq5=(*f*lm?{kIISZez*1FpRwUG;6Z+BBkp%Vx zA_$N^0Ork<4=c&KgOF@ZQz^Xk8X$#pgMk3CAq4Nac2r%fG!mEGwb<2j|4T~e-bPCc zi_vYBpf=pdKGB7A!4nWPVWW*P+secRYVmxR2HpyGqxk&O_c~BM?e6V`qWzX!0lpz= z3SlcgLVhAm41I_Ilu{sUG6#&eeAlUraj*qkTMZ{WK*z^e6})0~nJO&*G>i8#$wGqe zBw}T0CexnS5*Uo$RZIfIfj*|m1wbJHs3&+S%pH{5N{{o2gOgXGQnFOK8uv@&w%>ha zcauRa0d2vu0W%H3G#2hYBx8caI&B~V*z>)rfN>pgY4<=?bZdXOAE-TTe>@3PzU*zL z;g&0|B|ekkS&vQr>w4h`*AH$@sxU+9-V1X1tL+cAD<67tgv|QXB`+a;Jdu6skB$+O z?S7y-EB+mk9%#9fSl17?O-q(>*nq2Iinm4{Lx$Bt`PttAnylcy$924{@Ib@2<6Mjn=h5Gu_>hy zKoP!y13Vri$G@)27w1JdsSp(fs@r!o=zg3UdTwwSLAThqT)NLxVx5-HnrRCVPzeWWSDR-*(69`$?gG038xA2NxV zPTU9giZM0Csmh)gYFLFha@^06r^_}(J2cprfUXs6c2FObq#+#blQRoW@TjE3__uZ0 z2l1WctpE6oGcJ%pzFoVkygnxjtOte_qV6)9#1m=p9A5+2T*0fxN04?|5l~$dHa~V2 z)y4T`E|%Uy;~tR2z{-H!XU`!Ovk0$PphGGW_Z4{RjizT~iil~VBSAK3kz3bEj=Riw zjCJHpSV4iMN>?IOPBlIS$Z!0{6OhY`Vc{X(N0k+yq(Jco%9DTBir~(nolyHjJC6Nz zPj@$@4L(G3mp7*5hGY-x#oxXy9X4Cle#;Y7<6pPc=VbHkL`9(ixNnFz$6atnd51{e`NkVH#c zGL(Uq50ql*rM0P9X}1maJ#JU`&iwrRb&MRPJ`xSv$geCJ&ufyl-4P4|8z`XV7HtqR z6smQd+27rBw(IWQyHKxY>12b z*BXFV+~|sn7K7JOHSb^8Ah+HV-TC&xKA_)aenkw-XZF1n4eRqlyXiv=m zeqZSUdMf}-q<0++rp!(>b3}liG~I8Kr)W6y{IvxTaz#MGG=*q?j{X;wknIl~tty7F zyP%w1ifoLBu*gLKMzh#az9yUW3@Ut3hcH#i{UxMMa0Yv%pQNRw3C`@Z?K^NaVx8rR z^fEsT$C`+Oj=E1+O(N(mfU$yIzwWg?hRJx6O=kfqePsnGYkhAo-Hrj|E(SzUibk0K zJun-qW>a*rk+Po=09u@qYR420#K&y#94DZk%Id&C(@7mnf!JysN%SKr*&rP=0KqEc z013?YisNBKGx>B-ec*@!q@_f^_KKZaf#4Se4jn@(jk1-anCKq>Q!HkA)-9wESljRV zZeBA+&3~j38pnI!A_F^y!4`vSYD27qtdp;b3T40A*_S^1eyoAWAjrW`Q*fP=1H&b6 z-v`<~w*i9*jy${kGFFUU(y%vetgJFumeHLNx#A429CRLDl?40lhIA(EUm&f-XpL%G zX|xny2x_`;4w#W?1@NpMY*hL{#}xz6{>`SE=K}9Nd$Z#8%W)~lb6$nnYAEiOZg1S^ z=Z6N+ym%yisJMCaRldd(itAz{A0O=ykIet~+teQ?0Y207)^56Aex}?Nx;8$(AGII& z^gmIs-5e&+)^2ic5#lwt`IdN>^7b&V}JOdfI%qZ^w%SpE$X> zQ#+4Z*Nuo#6*tcMRFn7RlUs8TpIQBX)$!lE00wZ~qSlW& z+DqjYh?JvdSZ$zF<8q0E?>J%EnPThbc&%u=7YhdM%g#0`tP^#Sc)vWL4A@$n7p^b_ zimPp+H$4gOi6nP&n|k*(Ofn78>)Z9z*0JgS7kk>1DqFw_oIvfRz6HJ7+kpT0T&>By z`~uttmt5?$YbCERrWb$S%COV zLxiV2Xof<78DzrFz0)~A>4Jm=WHYsz@LR2*TLsZrAZ^&5m15_~#P;^Zao3G~oe&$J zmuZ&)y3Qa)X`9_Y0YJ1{(B>qys*C}Y2Gm3b0gc5`P5}*Hz$oji)lucMj~FsJn&3DxQ=lhuTjwN`NNWtS<(|X zTmyt0ab{ERAQMa)YkCdPH=L7}`}{HuqB`rh5P6@04%u-EG*M6Y+$AUBlU7lS!PES8DYyLYq9 z3GS2!a<0;y?PwN!u8|)y~*MKR4qL_+Mrvd&JPs1K>C7~^ZaT@KMh>mG$*EGOnZ~Is9glS2L;4cvl!G{Ngn2yYF4V!XeQsJ7i|C z?Z(~qUoR{#2y3&fcv=(A0ULg8^XuPPl_49B)|O)k!Y zOih8?qiV^XU*VQC0W3fLzU?<+1EG+uL>XlH+yS&{>_#8JJYcM@(HE{>FR^~QTKmL> zej*ZIWC0Ch--c@D9+T~A0Co1)vsqfI#8@ycJ`AwiUg4t;k}BO7XzShOeo)@Wo0GxR zuYdp;1#Y*kncU}XVrk34Nj4N}lFu_B4umf-_#&@oB}W_}$Dy>FH4hZgKl?b}3oFPCx)~w~k72xU#get9?ZJye=c>Cp|B42?_wh-QLDd zTl-zs!l#DH+Do=s(-smdUGKh~P(s%L36trC)ZG_e=kxt3-~o2_;i3-`6IHw&h0TM; zJ_Ng>gRz<-P)>)sx_~Tg-T-`k8*Cr;thOQ0T|zqHbg(M{Z`ymhY3~YqXcwfFp$Qg{ zqk!bK(Uwk-g0q#-R!0`56-of3#ygR2G zlHRq>G7Gr(jPZGzz!-KXE^gHKyOWk-bI1g?;ObG^I(r~gM?)&YU-qxuDxL)6m-iw# zE1Ne75BXjOH@HEHt|XgTV}|einuiNocMS+;xa`{a@p{{5u*B!5@Ah_=I+A<@HawmAnK{S*q5`jH zn16aa(6oH*$<0r23N*O*2`*|zQ~p_8gb&F41Pgt!V;Up70hIU-Kg#LD?&d+3Lx=S( zIo_V1pqoWK{N~-tfOj@+`0)P)7nRe8%0D@a`jp2N-uUN*awo=H-g`qC>v!(*@tuG8 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 literal 0 HcmV?d00001 diff --git a/tutorial/journey/assets/00/powershell.png b/tutorial/journey/assets/00/powershell.png new file mode 100644 index 0000000000000000000000000000000000000000..757fd4830caa3ade7f2463ed48af0ffb2505758f GIT binary patch literal 32317 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%0AU!=uK6Tp@a14WOdyBK@&c)qpO=<+Elo2f8 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 YlS-r?DEV1sF;Fu(ZedvP{rT(v34TMoXaE2J literal 0 HcmV?d00001 diff --git a/tutorial/journey/assets/00/vscode-cmdline.png b/tutorial/journey/assets/00/vscode-cmdline.png new file mode 100644 index 0000000000000000000000000000000000000000..135fab39f53d2c9e1e736e2b7cf017ef349d730f GIT binary patch literal 580757 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%0DtwZ^lQ7#iAeW*}~?G88m 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 sNu_hzKAsP$X=HLWuCB`3$e&2Gr!6!c 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 TxDW7+R|H9MIk6HEegFRlP6gHs literal 0 HcmV?d00001 diff --git a/tutorial/journey/index.md b/tutorial/journey/index.md index 2be1830..4c8a01f 100644 --- a/tutorial/journey/index.md +++ b/tutorial/journey/index.md @@ -5,22 +5,21 @@ order: 1 # 主线 · 一个程序的一生 -这是 EmbedBox 的**首刷推荐路线**。全书只有一个主角——一个会打招呼的小程序:它从一行 `hello.c` 开始,被解剖、生病、长大、工程化、搬家、进入一台没有屏幕的机器、开口说话、被记录、被编辑器认领。每一拍,都是被一个具体的事故逼着学会一件新工具。 +这是 EmbedBox 的**首刷推荐路线**。全书只有一个主角——一个会打招呼的小程序:它从一行 `hello.c` 开始,被解剖、生病、长大、工程化、搬家、进入一台没有屏幕的机器、开口说话、被记录、被编辑器认领。每一个历程,都是被一个具体的事故逼着学会一件新工具。 补课与查用的朋友,各工具的系统内容在参考篇(建设中);从零开始的朋友,**从这里走**。 -| 拍 | 故事 | 状态 | +| 历程 | 故事 | 状态 | |---|---|---| -| [00 造机器](./00-env-check.md) | 环境体检:clone 下来先确认机器活着 | 完成 | -| [01 造程序](./01-elf.md) | 看着源码一步步变成 ELF,再把它拆开看 | 完成 | -| [02 治病](./02-gdb.md) | 程序被(笔者)弄坏了,printf 够不到病灶,GDB 出场 | 完成 | -| [03 程序长大](./03-make.md) | 改了头文件忘重编,炸出 undefined reference;让 make 接管记账 | 完成 | -| [04 工程化](./04-cmake.md) | 库与应用分离,CMake 产出 compile_commands.json | 完成 | -| [05 搬家](./05-cross.md) | 宿主机二进制目标机跑不了,交叉编译 | 完成 | -| [06 没有屏幕的机器](./06-qemu-uart.md) | QEMU 给身体,串口开口说话,证据落袋 | 完成 | -| [07 记录旅程](./07-git.md) | Git 与 Markdown:让旅程可复现、可交付 | 完成 | -| [08 编辑器接线](./08-vscode.md) | 把工具链接进 VS Code | 完成 | -| [尾声 A 物理串口](./90-physical-serial.md) | USB-TTL、dialout、听真板说话(需硬件) | 完成 | -| [尾声 B 实验安全](./91-lab-safety.md) | 3.3V/5V、共地、静电、万用表三招(需硬件场景) | 完成 | +| [第 1 个历程 · 造机器](./00-env-check.md) | 环境体检:clone 下来先确认机器活着 | 完成 | +| [第 2 个历程 · 造程序](./01-elf.md) | 看着源码一步步变成 ELF,再把它拆开看 | 完成 | +| [第 3 个历程 · 治病](./02-gdb.md) | 程序被(笔者)弄坏了,printf 够不到病灶,GDB 出场 | 完成 | +| [第 4 个历程 · 程序长大](./03-make.md) | 改了头文件忘重编,炸出 undefined reference;让 make 接管记账 | 完成 | +| [第 5 个历程 · 工程化](./04-cmake.md) | 库与应用分离,CMake 产出 compile_commands.json | 完成 | +| [第 6 个历程 · 搬家](./05-cross.md) | 宿主机二进制目标机跑不了,交叉编译 | 完成 | +| [第 7 个历程 · 没有屏幕的机器](./06-qemu-uart.md) | QEMU 给身体,串口开口说话,证据落袋 | 完成 | +| [第 8 个历程 · 记录旅程](./07-git.md) | Git 与 Markdown:让旅程可复现、可交付 | 完成 | +| [第 9 个历程 · 编辑器接线](./08-vscode.md) | 把工具链接进 VS Code | 完成 | +| [尾声 · 实验安全](./91-lab-safety.md) | 3.3V/5V、共地、静电、万用表三招(硬件场景的保命常识) | 完成 | -> 这一卷的每章正文命令,都被 `scripts/journey/` 里的配对脚本在 CI 中逐字重放——咱们看到的输出是真跑出来的,不是编的。尾声两拍为 manual 级(需硬件/编辑器交互),由人工走查声明背书。 +> 这一卷的每章正文命令,都被 `scripts/journey/` 里的配对脚本在 CI 中逐字重放——咱们看到的输出是真跑出来的,不是编的。第 9 个历程 的编辑器交互项与尾声的安全常识为 manual 级,由人工走查声明背书。 From 8342c1f50fd078512c7a05280f142fd67f6ba0cf Mon Sep 17 00:00:00 2001 From: Charliechen114514 <725610365@qq.com> Date: Sun, 23 Aug 2026 23:36:04 +0800 Subject: [PATCH 3/4] ci fix --- .github/workflows/build-check.yml | 2 +- scripts/journey/06-qemu-uart.sh | 6 +++++- scripts/journey/08-vscode.sh | 8 +++++--- tutorial/journey/06-qemu-uart.md | 2 ++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index befbef7..9624e32 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -26,7 +26,7 @@ jobs: - name: Install cross toolchain & emulator (Linux) if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi qemu-system-arm gdb + run: sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi qemu-system-arm gdb gdb-multiarch - name: Lint (commands vs scripts) shell: bash diff --git a/scripts/journey/06-qemu-uart.sh b/scripts/journey/06-qemu-uart.sh index fce4186..0dc7ead 100755 --- a/scripts/journey/06-qemu-uart.sh +++ b/scripts/journey/06-qemu-uart.sh @@ -93,6 +93,10 @@ diff -u expected-serial.txt serial-cmake.txt \ # ═══ 远程调试:第 3 个历程 的伏笔在此兑现 ═══ banner "gdbstub:target remote,隔空断点" GDB_PORT=12345 # 固定端口,正文命令逐字可核 +# Ubuntu 的原生 gdb 是单架构构建,连 ARM 目标会报 unknown architecture "arm"; +# 那边需要 gdb-multiarch。Arch 等发行版的 gdb 本身就是全架构的,直接用。 +GDB_BIN=gdb +command -v gdb-multiarch >/dev/null 2>&1 && GDB_BIN=gdb-multiarch qemu-system-arm -M mps2-an385 -cpu cortex-m3 -nographic -monitor none \ -kernel hello.elf -S -gdb tcp::12345 > /dev/null 2>&1 & QEMU_PID=$! @@ -100,7 +104,7 @@ cleanup_qemu() { kill "$QEMU_PID" 2>/dev/null || true; } trap cleanup_qemu EXIT sleep 1 set +e -timeout 20 gdb -q -batch -iex 'set debuginfod enabled off' \ +timeout 20 "$GDB_BIN" -q -batch -iex 'set debuginfod enabled off' \ -ex "target remote localhost:12345" \ -ex 'break main' \ -ex 'continue' \ diff --git a/scripts/journey/08-vscode.sh b/scripts/journey/08-vscode.sh index e433b90..54288bb 100755 --- a/scripts/journey/08-vscode.sh +++ b/scripts/journey/08-vscode.sh @@ -13,15 +13,17 @@ command -v node >/dev/null 2>&1 || { echo "FATAL: 缺 node(本仓库构建本身 banner() { printf '\n──────── %s ────────\n' "$*"; } banner "机械检查:三份配置存在且是合法 JSON" +# 注意:路径一律走 argv,不拼进 -e 的 JS 字符串——git-bash 调 Windows 原生 node 时 +# 只转换参数里的 POSIX 路径,嵌在字符串里的 /d/a/... 会被 node 当成「当前盘的 \d\a\...」。 for f in settings.json launch.json tasks.json; do [ -e "$DOTVS/$f" ] || { echo "FATAL: 缺 $DOTVS/$f" >&2; exit 1; } - node -e "JSON.parse(require('fs').readFileSync('$DOTVS/$f','utf8'))" + node -e "JSON.parse(require('fs').readFileSync(process.argv[1],'utf8'))" "$DOTVS/$f" echo " [ok] $f" done banner "机械检查:launch 引用的 preLaunchTask 在 tasks.json 里存在" -task_label="$(node -e "console.log(JSON.parse(require('fs').readFileSync('$DOTVS/launch.json','utf8')).configurations[0].preLaunchTask)")" -node -e "const ts=JSON.parse(require('fs').readFileSync('$DOTVS/tasks.json','utf8')).tasks; process.exit(ts.some(t=>t.label==='$task_label')?0:1)" \ +task_label="$(node -e "console.log(JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')).configurations[0].preLaunchTask)" "$DOTVS/launch.json")" +node -e "const ts=JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')).tasks; process.exit(ts.some(t=>t.label==='$task_label')?0:1)" "$DOTVS/tasks.json" \ || { echo "FATAL: tasks.json 里没有 '$task_label'" >&2; exit 1; } echo " [ok] preLaunchTask '$task_label' 可解析" diff --git a/tutorial/journey/06-qemu-uart.md b/tutorial/journey/06-qemu-uart.md index d23cf3f..1e5307b 100644 --- a/tutorial/journey/06-qemu-uart.md +++ b/tutorial/journey/06-qemu-uart.md @@ -340,6 +340,8 @@ gdb -q -batch -iex 'set debuginfod enabled off' \ (先把 QEMU 用 `-S -gdb tcp::12345` 起在后台——`-S` 让它开机即停,`-gdb` 打开一个 gdbstub 服务口。) +这里有个发行版分岔,先打预防针:Ubuntu 的原生 `gdb` 是单架构构建,连上 ARM 目标会警告 `unknown architecture "arm"`,然后当场失联——Ubuntu 用户要请的是 `gdb-multiarch`(`sudo apt install gdb-multiarch`),之后把命令里的 `gdb` 换成 `gdb-multiarch`,其余一字不动;Arch 这类发行版的 gdb 生来全架构,没有这道坎。配对脚本会自己挑人。 + ```text Reset_Handler () at startup.c:39 39 while (dst < &_edata) /* .data:把行李从 flash 搬进 RAM */ From 04ed7c2fd832aff2ef298fb33e96142dad7a92d4 Mon Sep 17 00:00:00 2001 From: Charliechen114514 <725610365@qq.com> Date: Sun, 23 Aug 2026 23:42:52 +0800 Subject: [PATCH 4/4] ci fix --- .github/workflows/build-check.yml | 16 +++------------- tutorial/journey/00-env-check.md | 2 +- tutorial/journey/01-elf.md | 2 +- tutorial/journey/02-gdb.md | 2 +- tutorial/journey/03-make.md | 2 +- tutorial/journey/04-cmake.md | 2 +- tutorial/journey/07-git.md | 2 +- 7 files changed, 9 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index 9624e32..59d2500 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -8,24 +8,14 @@ on: jobs: verify: - name: Verify (journey replays, ${{ matrix.os }}) - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - runs-on: ${{ matrix.os }} + name: Verify (journey replays) + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - - name: Install make (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: choco install -y make - - - name: Install cross toolchain & emulator (Linux) - if: runner.os == 'Linux' + - name: Install cross toolchain & emulator run: sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi qemu-system-arm gdb gdb-multiarch - name: Lint (commands vs scripts) diff --git a/tutorial/journey/00-env-check.md b/tutorial/journey/00-env-check.md index 6999596..28dbeaf 100644 --- a/tutorial/journey/00-env-check.md +++ b/tutorial/journey/00-env-check.md @@ -3,7 +3,7 @@ title: 第 1 个历程 · 环境体检:先确认机器活着 order: 0 verify: scripts/journey/00-env-check.sh tier: ci-matrix -verified-on: WSL2(Arch)/ bash 5.3 / git 2.55 / gcc 16.1.1 / make 4.4.1;CI 矩阵 ubuntu-latest + windows-latest +verified-on: WSL2(Arch)/ bash 5.3 / git 2.55 / gcc 16.1.1 / make 4.4.1;CI:ubuntu-latest --- # 第 1 个历程 · 环境体检:先确认机器活着 diff --git a/tutorial/journey/01-elf.md b/tutorial/journey/01-elf.md index 610d0cb..c981b95 100644 --- a/tutorial/journey/01-elf.md +++ b/tutorial/journey/01-elf.md @@ -3,7 +3,7 @@ title: 第 2 个历程 · 源码→程序:看着它变,再拆开看 order: 1 verify: scripts/journey/01-elf.sh tier: ci-matrix -verified-on: WSL2(Arch)/ gcc 16.1.1;CI 矩阵 ubuntu-latest + windows-latest +verified-on: WSL2(Arch)/ gcc 16.1.1;CI:ubuntu-latest --- # 第 2 个历程 · 源码→程序:看着它变,再拆开看 diff --git a/tutorial/journey/02-gdb.md b/tutorial/journey/02-gdb.md index cc0a759..eaefce4 100644 --- a/tutorial/journey/02-gdb.md +++ b/tutorial/journey/02-gdb.md @@ -3,7 +3,7 @@ title: 第 3 个历程 · 程序病了:printf 够不到的地方 order: 2 verify: scripts/journey/02-gdb.sh tier: ci-matrix -verified-on: WSL2(Arch)/ gcc 16.1.1 / gdb 17.2;CI 矩阵 ubuntu-latest + windows-latest +verified-on: WSL2(Arch)/ gcc 16.1.1 / gdb 17.2;CI:ubuntu-latest --- # 第 3 个历程 · 程序病了:printf 够不到的地方 diff --git a/tutorial/journey/03-make.md b/tutorial/journey/03-make.md index 4d0ab6e..db32f8e 100644 --- a/tutorial/journey/03-make.md +++ b/tutorial/journey/03-make.md @@ -3,7 +3,7 @@ title: 第 4 个历程 · 程序长大:让 make 记住咱们记不住的 order: 3 verify: scripts/journey/03-make.sh tier: ci-matrix -verified-on: WSL2(Arch)/ gcc 16.1.1 / GNU Make 4.4.1;CI 矩阵 ubuntu-latest + windows-latest +verified-on: WSL2(Arch)/ gcc 16.1.1 / GNU Make 4.4.1;CI:ubuntu-latest --- # 第 4 个历程 · 程序长大:让 make 记住咱们记不住的 diff --git a/tutorial/journey/04-cmake.md b/tutorial/journey/04-cmake.md index 96b7bec..0666a2c 100644 --- a/tutorial/journey/04-cmake.md +++ b/tutorial/journey/04-cmake.md @@ -3,7 +3,7 @@ title: 第 5 个历程 · 工程化:CMake 与那枚给编辑器的接口 order: 4 verify: scripts/journey/04-cmake.sh tier: ci-matrix -verified-on: WSL2(Arch)/ cmake 4.4.2 / gcc 16.1.1;CI 矩阵 ubuntu-latest + windows-latest +verified-on: WSL2(Arch)/ cmake 4.4.2 / gcc 16.1.1;CI:ubuntu-latest --- # 第 5 个历程 · 工程化:CMake 与那枚给编辑器的接口 diff --git a/tutorial/journey/07-git.md b/tutorial/journey/07-git.md index 349adce..8483e95 100644 --- a/tutorial/journey/07-git.md +++ b/tutorial/journey/07-git.md @@ -3,7 +3,7 @@ title: 第 8 个历程 · 记录旅程:Git 的深度与一份像样的 README order: 7 verify: scripts/journey/07-git.sh tier: ci-matrix -verified-on: WSL2(Arch)/ git 2.55.0;CI 矩阵 ubuntu-latest + windows-latest +verified-on: WSL2(Arch)/ git 2.55.0;CI:ubuntu-latest --- # 第 8 个历程 · 记录旅程:Git 的深度与一份像样的 README

S_EG|Sep^H(0Fn3q_uMYno> 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