執行時機:make modules_install 之後。
/lib/modules/$(uname -r)/ 下所有 .ko 檔案。sd_mod 依賴 scsi_mod)。modules.dep、modules.alias、modules.symbols、modules.builtin 等索引檔。modprobe 依賴此索引自動解析載入順序。注意:depmod -a 與編譯過程本身無關,屬於部署後處理,確保目標系統啟動時 modprobe 正常運作。
# 核心建構系統自動生成
nm vmlinux | grep -v '\(compiled\)\|\(\.o$\)\|\( [aUw] \)\|\(\..ng$\)\|\(LASH[RL]DI\)' | sort > System.map
# 複製至 /boot
cp System.map /boot/System.map-$(uname -r)
每行格式:address type symbol_name
c01000a5 T checkCPUtype
c0343f20 B BytesRead
ffffffff81000000 T startup_64
T/t:程式碼區符號 (text)D/d:已初始化資料區B/b:未初始化資料區 (BSS)| 用途 | 說明 |
|---|---|
| 核心除錯 (Oops/panic) | 將堆疊追蹤位址轉為函數名,定位錯誤源頭 |
klogd (核心日誌守護進程) | 解析核心訊息中的位址為符號,輸出可讀日誌 |
lsof, ps, perf, systemtap | 解析核心位址顯示函數/變數名 |
| 專屬驅動模組 | 極少數專有/舊式驅動需解析核心符號 (現代用 EXPORT_SYMBOL 機制) |
/boot/System.map/System.map/usr/src/linux/System.map支援版本智慧匹配:System.map-5.15.100 對應 5.15.100 核心。
klogd 輸出無意義位址、除錯極度困難、部分驅動載入失敗。/proc/ksyms (舊) / /proc/kallsyms (新) 為核心記憶體中即時符號表 (虛擬檔案,大小 0),不依賴磁碟檔案。
# 查看當前核心符號
cat /proc/kallsyms | grep sys_write
# 手動生成 System.map (若遺失)
nm /boot/vmlinux-$(uname -r) | sort > /boot/System.map-$(uname -r)
# 驗證 klogd 能否解析
dmesg -T | head -20 # 應顯示函數名而非純位址