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