linux系統的啟動,指的是從系統加電到系統控制台顯示「login:
」登入提示符為止的系統執行階段,與這部分動作密切相關的**主要是:
在系統啟動過程中,主要關注一下幾個方面:
中斷系統及排程系統
檔案系統的初始化
裝置管理系統的初始化
網路協議的初始化
在init/main.c
中reset_init
函式:
在此函式中,有kernel_thread
函式,這個函式建立了核心執行緒,原型如下:
int kernel_thread(int (*fn), void *arg, unsigned long flags)
此函式定義在arch/***/kernel/process.c
中,它利用do_fork()
函式建立乙個新的核心態執行緒,linux的核心執行緒是沒有虛擬儲存空間的程序,它們執行在核心中,直接使用實體地址空間。
kernel_thread
建立的新的核心執行緒是init
,然後返回,執行unlock_kernel
(與start_kernel
中的lock_kernel
對應),接著執行cpu_idle()
,這實際是執行初始化主線程的歸宿:它觀察自己是否處於tif_need_resched
——在need_resched
實現,如果不是,就讓自己睡眠,否者完成schedule()
函式。tif即thread information flag的意思。
下一步轉入init
函式中:
init執行緒呼叫了許多函式,但與網路有關的在do_basic_setup
中初始化的sock_init()
,然後繼續執行do_initcalls
函式,此函式定義在c檔案中,有兩個重要的變數__initcall_start
和__initcall_end
,它們的定義如下:
extern initcall_t __initcall_start, __initcall_end;
static void __init do_initcalls(void)
}
initcall_t
類與__initcall_start
,__initcall_end
定義在include/linux目錄下的init.**件中。 理解linux系統初始化
文章內容由網上蒐集的資料整理而得,由於資料下的太多沒注意出處及作者,在這裡只好謝謝各位大大們了。要說linux服務就不得不說linux系統的初始化過程了。開機步驟 1.開機自檢 2.預引導 3.核心映像裝入 4.核心啟動 5.系統初始化 6.等待使用者登入 注 在核心啟動完之後會搜尋檔案系統中的in...
linux初始化系統init
linux從bios開始啟動,然後載入記憶體映像到記憶體,進行記憶體初始化,核心初始化的最後一步是啟動乙個pid為1的init的程序!他負責載入啟動別的程序。對應的啟動指令碼都在 etc init.d下。init是序列化啟動,啟動較慢!init的管理 etc init.d deamon start,...
LINUX 系統初始化指令碼
bin bash the system first start configuretion for install copy right by donglei 1 配置sysctl mv etc sysctl.conf etc sysctl.bak echo the new config for s...