背景:做linux 驅動,但是從來沒有想過module_init 函數的實現原理。都是按照框架然後就開始寫了。現在想做一個記錄。
解析:
驅動加載到內核中有兩種方式。第一:編譯進內核裏,隨內核啓動。第二:動態加載到內核中(insmod)。
這兩種方式對module_init 的使用是不一樣的。先簡單的總結一下:
第一種:在內核的 init.text __start 和 __end 段中被統一初始化。
第二種:由busybox 中的insmod_main 函數到調用syscall() 函數。將用戶態的.ko 文件註冊到內核態中運行。自然module_init 函數就由insmod 命令調用執行。這個最重要的是理解syscall () 函數,init 和 exit 都是調用的syscall() 函數。
------------------------------------------------------------ 華麗的分割線 --------------------------------------------------------
上面總結了。下面附上我看到的鏈接吧,我感覺最重要的是上面的一段。
第一種:https://blog.csdn.net/ffmxnjm/article/details/71713670
第二種:https://blog.csdn.net/menghuanbeike/article/details/77979497 https://blog.csdn.net/feixin620/article/details/78416560