
編譯器只是一臺“翻譯機”它自己沒有思想它只會機械地把輸入的 .c 文件翻譯成機器碼。而決定“把哪些 .c 文件喂給它翻譯”的是構建系統Makefile關鍵機制當你執行make時總管會先看ARCH環境變量。如果ARCHarm總管就把arch/arm/這個目錄下的.c文件列表列成清單塞給arm-gcc去翻譯。如果ARCHx86總管就無視arch/arm/把arch/x86/目錄下的.c文件塞給arm-gcc去翻譯ARCHarm決定了“哪些代碼屬于體系相關部分”而CROSS_COMPILE決定了“如何將體系無關 體系相關兩部分代碼翻譯成硬件能跑的指令”體系無關的代碼骨架位于kernel/、mm/、fs/、net/等目錄。它負責“通用邏輯”比如進程調度算法CFS、虛擬內存換頁LRU、文件系統的 inode 管理。特點只寫邏輯不碰硬件寄存器。寫這些代碼的人不需要知道 CPU 是 ARM 還是 x86只看重算法。體系相關的代碼皮膚/血管位于arch/arm/、arch/x86/目錄。它負責“硬件觸達”比如 CPU 上電第一條匯編指令head.S、中斷控制器GIC初始化、MMU 頁表填充、具體 CPU 的 Cache 操作。特點赤裸裸地操作物理地址和特定寄存器。這段代碼必須和 CPU 架構 100% 嚴絲合縫