bzImage中的更多疑問
維基百科中的描述
bzImage
真的讓我很困惑。上圖來自維基百科,但旁邊的一行是:
bzImage 文件採用特定格式:它包含串聯的 bootsect.o + setup.o + misc.o + piggy.o。
我在圖像中找不到其他 (
misc.o
和piggy.o
)。我還想更清楚地了解這些目標文件。
這篇文章中關於為什麼我們無法啟動
vmlinux
文件的資訊也讓我很困惑。另一個疑問是關於
System.map
. 它是如何與bzImage
? 我知道它包含vmlinux
創建之前的符號bzImage
。但是在啟動時,如何bzImage
連接到System.map
?
對於 Linux 2.6.22,
bzImage
包含:
- bbootsect (
bootsect.o
):- 設置 (
setup.o
)- bvmlinux (
head.o
,misc.o
,piggy.o
)Linux 2.6.23 將 bbootsect 和 bsetup 合併為一個 (
header.o
)。在啟動時,核心需要初始化一些序列(參見上面的標頭檔),這些序列僅是使系統進入所需的可用狀態所必需的。在執行時,這些序列不再重要(那麼為什麼要將它們包含到正在執行的核心中呢?)。
System.map
與vmlinux
,相關bzImage
的只是壓縮容器,vmlinux
在啟動時會從中提取出來(=>bzImage
並不真正關心System.map
)。Linux 2.5.39 引入
CONFIG_KALLSYMS
. 如果啟用,核心會保留它自己的符號映射 (/proc/kallsyms
)。
System.map
主要由使用者空間程序使用,例如klogd
用於ksymoops
調試目的。放在哪裡
System.map
取決於參考它的使用者空間程序。
ksymoops
嘗試從/proc/ksyms
或獲取符號映射/usr/src/linux/System.map
。在和中
klogd
搜尋/boot/System.map``/System.map``/usr/src/linux/System.map
/boot/System.map
在核心為 2.6.27.19 的 Linux 系統上刪除沒有問題。