ARM Linux內(nèi)核啟動(dòng)流程
ARM Linux內(nèi)核綜述
啟動(dòng)分兩步,
首先是硬件相關(guān)部分,入口是arch/arm/kernel/head.S代碼文件中的ENTRY(stext)函數(shù);
然后是硬件無(wú)關(guān)部分,入口函數(shù)是init/main.c代碼文件中的start_kernel函數(shù)。
ARM Linux內(nèi)核硬件相關(guān)部分
1. 我們平臺(tái)是arm,自然硬件相關(guān)部分代碼在arch/arm/里面。
2. 平臺(tái)相關(guān)部分的核心代碼自然在arch/arm/kernel/里面。
3. 找入口函數(shù),必須從對(duì)應(yīng)目錄的Makefile和鏈接腳本*.lds入手!
# ls arch/arm/kernel/
得到一個(gè)Makefile文件和一個(gè)vmlinux.lds文件
# vim arch/arm/kernel/Makefile
看到有一句extra-y := $(head-y) init_task.o vmlinux.lds,則說(shuō)明其使用鏈接腳本為vmlinux.lds
還有一句head-y := head$(MMUEXT).o
# vim arch/arm/kernel/vmlinux.lds
看到有一句ENTRY(stext),則說(shuō)明入口函數(shù)為stext
# ls arch/arm/kernel/head*
得到arch/arm/kernel/head-common.S
再結(jié)合Makefile的默認(rèn)規(guī)則%.o : %.S 或 %.o : %.c
可以知道arch/arm/kernel/head.o與arch/arm/kernel/head.S對(duì)應(yīng)。
另外,查找arch/arm/kernel/目錄下,有那個(gè)文件有“stext”字樣
評(píng)論