載入過程
巨集module_init本質是將核心中函式的指標指向模組的初始化函式.
啟動時載入
過程:系統在進入與體系結構無關的核心部分後,開始呼叫/init/main.c中的start_kernel()函式.經過start_kernel()->rest_init()->kernel_thread()->kernel_init()->do_basic_setup()->do_initcalls()後.掃瞄__con_initcall_start和__con_initcall_end段之間的函式位址.隨核心啟動時載入模組的模組啟動函式位址就在這個段中.
優先順序:
由五個因素控制:1核心模組的呼叫框架2.核心鏈結指令碼(arch/x86/vmlinux.lds)3.makefile框架(部分大目錄鏈結順序由makefile中賦值語句決定,其餘目錄了鏈結順序由makefile行序決定)4.模組**宣告5.編譯器
動態載入
過程:使用者空間的shell中輸入insmod命令,insmod呼叫系統呼叫init_module(),init_module()陷入核心空間,呼叫核心函式sys_init_module().
sys_init_module()執行以下步驟:
1.檢查模組許可;
2.裝載模組到記憶體(核心空間)mod=load_module(mod_name,args);
3.將模組加入系統模組的linked list;
4.通知正在等待模組改變的執行緒;
5.將模組初始化mod_init();
6.改變該模組的狀態為module_state_live;
7.return.
Linux 核心載入過程
最近在研究linux的核心載入過程,對於grub是如何引導linux的核心並啟動還是有點混亂,結合網上找的一些資料總結了一下大概流程,部分是摘抄別人的,算是比較清晰思路了。arch i386 boot bootsect.s生產引導扇區的彙編 完成後跳轉到setup.s 3.16.2核心對應x86的合...
linux 核心模組載入 HelloWorld
1。建立hello目錄 mkdir hello 2。進入hello目錄 cd hello 3。編寫hello.c include include module license gpl static int hello init void static void hello exit void mod...
核心模組載入錯誤 Makefile
載入核心模組錯誤 insmod error inserting globalvar.ko 1 device or resource busy 問題描述 裝置號跟已有的裝置衝突了 解決方法 檢視已有裝置號 cat proc devices 修正在程式中設定的裝置號,或者改為自動分配 錯誤2 insmo...