被忽視的另乙個vmlinux

2021-07-22 18:08:07 字數 1593 閱讀 9156

在x86平台,編譯完核心後用find命令搜vmlinux,你可以看到有兩個同名的檔案。

./vmlinux

./arch/x86/boot/compressed/vmlinux

當我第一次見到的時候,也是有點吃驚的。要不是這麼多年在江湖行走,也不會這麼淡定。

其實之前我們就見到過了,不過當時並沒有仔細去研究。

"arch/x86/boot/makefile"

$(obj)/bzimage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build force

$(call if_changed,image)

@echo

'kernel: $@ is ready'

' (#'

`cat .version`

')'objcopyflags_vmlinux.bin := -o binary -r .note -r .comment -s

$(obj)/vmlinux.bin: $(obj)/compressed/vmlinux force

$(call if_changed,objcopy)

恩,這個就是製作bzimage的第二個部分。

"arch/x86/boot/compressed/makefile"

$(obj)/vmlinux: $(vmlinux-objs-y) force

$(call if_changed,ld)

@:

簡單明瞭,就是一堆obj鏈結而成。

"arch/x86/boot/compressed/makefile"

vmlinux-objs-y := $(obj)/vmlinux.lds $(obj)/head_$(bits).o $(obj)/misc.o \

$(obj)/string.o $(obj)/cmdline.o \

$(obj)/piggy.o $(obj)/cpuflags.o

vmlinux-objs-$(config_early_printk) += $(obj)/early_serial_console.o

vmlinux-objs-$(config_randomize_base) += $(obj)/aslr.o

$(obj)/eboot.o: kbuild_cflags += -fshort-wchar -mno-red-zone

vmlinux-objs-$(config_efi_stub) += $(obj)/eboot.o $(obj)/efi_stub_$(bits).o \

$(objtree)/drivers/firmware/efi/libstub/lib.a

vmlinux-objs-$(config_efi_mixed) += $(obj)/efi_thunk_$(bits).o

恩,這個問題解決了,不過別的困惑又來了。

bzimage中包含的是這個vmlinux,那根目錄的vmlinux呢?啟動的時候是怎麼把根目錄的vmlinux載入到記憶體的? 又是怎麼跳轉到根目錄的vmlinux的呢?

路漫漫其修遠兮,吾將上下而求索

乙個被忽視的流量入口

接招 id itakethat 文丨方浩 這些年,雖然已經從bat三巨頭之中掉隊,但關於搜尋市場的競爭始終有一種論調 戰爭結束了。前段時間瘋傳google之時,很多人也不看好這家全球搜尋巨頭在中國的前景。理由很簡單 搜尋是乙個很難有重大創新突破的市場,一旦形成壟斷性的市場份額,很容易一家獨大。和go...

乙個被忽視的學習方法

晚上在公司加班,繼續為明天測試奮戰。發乙個之前的草稿文章。當你讀了足夠多的 實現了足夠多的演算法,它們都會內化成你的知識和想法。要培養機器學習工程師,我推薦的流程是 上 deeplearning.ai的 機器學習課程來打基礎,然後讀 並復現其中的結果,另外,還要通過參加人工智慧的會議來鞏固自己的基礎...

另乙個自己

人們常說 人貴有自知之明 可是話說回來,又有幾人能真正的了解自己呢?我覺得我就是乙個很沒有自知之明的人。生於89年的我,到了今年的生日就28周歲了。都說三十而立,正所謂成家立業,可以回過頭發現自己可以稱得上 一無是處,一無所有 曾幾何時,還是鄰居家叔叔阿姨教育孩子的榜樣 曾幾何時父母因為自己考個好大...