核心公升級介面適配遇到的問題總結

2022-08-19 21:27:10 字數 1665 閱讀 7931

在工作中經常會遇到核心公升級,開發的**需要適配的問題。比如本次專案,要使用最新的核心4.19,而之前我們穩定的版本是4.1核心,從4.1到4.19,核心其實變化很大。基於核心開發的一些使用者態程式,或者核心模組,當核心公升級後,產生的介面變化,會導致這些開發的專案無法編譯成功,或者編譯成功後無法載入模組,或者出現功能異常的問題。那麼就需要基於4.19這個核心,對於介面的變更,要做些適配。

1、編譯遇到的問題:

很多介面變更問題,在編譯階段就可以發現了。

遇到的問題舉例如下:

unknown type name '

compat_time_t

' ##標頭檔案變更

'struct module

' has no member named '

module_core

' ##結構體變更

too many arguments to function

'pagevec_init

' ##函式入參變化

implicit

declaration of function ##函式定義取消

error:

'struct stackframe

' has no member named '

sp' ##結構體變更

error:

implicit declaration of function '

sys_close

' ##函式重新命名

這些變化,可以從社群找到,根據社群的修改記錄,我們找到變更原因,然後按照社群的修復記錄來修改就可以了。如何查詢社群變更記錄可以參考

2、載入模組遇到的問題:

解決編譯問題後,在插入模組時,又報了錯,提示如下錯誤:

unknown symbol get_kernel_modules

unknown symbol nsec_to_clock_t

unknown symbol security_add_hooks

出現這些問題的原因是這些函式符號,沒有使用export_symbol巨集匯出,所在其他模組引用這些函式時,無法找到對應的符號位址,所以報了unknown symbol的錯誤。

其中,security_add_hooks在4.1核心時,在標頭檔案中定義的是乙個static inline型別的函式,到了4.19,該函式被寫在了其他的c檔案中,在標頭檔案中extern宣告。標頭檔案中定義為static inline函式時,我們直接include標頭檔案就可以引用這個函式了,但是如果是在c檔案中定義的這個函式,在標頭檔案中extern了這個函式,即使我們include了這個標頭檔案,在插入模組後,依然還是會報未定義符號的錯誤。

修改這樣的問題時,我們需要在這個函式定義的核心的.c檔案中,加入exprot_symbol(),然後重新編譯核心。

另外要注意,不僅僅是函式符號,即使是變數,被外部使用的話都需要export_symbol。

export_symbol巨集的使用時出現在linux-2.6之後,在linux-2.4核心中,預設的非static函式和變數都會自動匯入到kernel 空間, 不用export_symbol() 做標記。然而linux-2.6之後預設不匯出所有符號,所以需要使用export_symbol() 做標記。

npm 公升級中遇到的問題總結

剛 npm init 後提示npm公升級,故按其提示命令進行公升級報錯了,然後出現以下情況 1 npm任何命令都報錯 npm cli cannot find module d node nodejs node module bin npm cli.js 神奇的是 在cmd中不能使用npm命令,但是在...

MYSQL公升級遇到的問題

如果你公升級mysql到4.1以上版本後遇到以上問題,請先確定你的mysql client 是4.1或者更高版本.windows下有問題你就直接跳到下面看解決方法了,因為mysql 在windows是client和server一起裝上了的 解決方法 請使用以下四種方法之一 其一 mysql set ...

編譯核心遇到的問題

bios開啟虛擬化 安裝vmware tools 多行刪除 1.首先在命令模式下,輸入 set nu 顯示行號 2.通過行號確定你要刪除的行 3.命令輸入 32,65d 回車鍵,32 65 行就被刪除了,很快捷吧 如果無意中刪除錯了,可以使用 u 鍵恢復 命令模式下 更換完映象源要 update a...