嘗試編譯當前核心時子級別版本不匹配

嘗試編譯當前核心時子級別版本不匹配

我正在嘗試sound/usb針對正在運行的核心在 Ubuntu 18.10 上重新編譯該模組。我沒有收到編譯錯誤,但是當我嘗試載入模組時,出現此錯誤:

Invalid module format

我正在運行4.18.0-21-lowlatency內核。

我透過這種方式獲取內核原始碼

apt source linux

這將下載核心來源並將其解壓縮到資料夾4.18.0linux-4.18.0

我將.configModule.symvers檔案複製到/lib/modules/4.18.0-21-lowlatency/build核心來源目錄的根目錄。

我跑make EXTRAVERSION=-21-lowlatency modules_prepare,然後make EXTRAVERSION=-21-lowlatency M=sound/usb

運行insmod結果寫入以下錯誤syslog

snd_usb_audio: version magic '4.18.20-21-lowlatency SMP preempt mod_unload ' should be '4.18.0-21-lowlatency SMP preempt mod_unload '

運行modinfo /lib/modules/uname -r/kernel/sound/usb/snd-usb-audio.ko | grep vermagic返回此

vermagic:       4.18.0-21-lowlatency SMP preempt mod_unload

modinfo在我新編譯的模組上運行會返回這個

vermagic:       4.18.20-21-lowlatency SMP preempt mod_unload

我將問題追溯到該問題的前幾行Makefile

VERSION = 4
PATCHLEVEL = 18
SUBLEVEL = 20

如果我更改為SUBLEVEL然後0編譯,我可以成功加載模組。

因此,即使我正在運行4.18.0內核,並且apt source linux似乎下載了4.18.0內核,下載的文件也是有版本的4.18.20

這是正常現象還是我遺漏了什麼?

答案1

我有類似的問題。問題在於如何取得核心原始碼以及如何「建構」核心。有一個連結指向官方的操作方式。我跟著它從https://help.ubuntu.com/community/Kernel/Compile。從它的外觀來看,它似乎已經過時且閱讀時間較長。

根據情況我想使用官方發布的Ubuntu核心(而不是從其他地方)apt-get source xxxxx。它是一個包含 Debian 資料夾和 tar 球的資料夾。然後我按照部分指示進行操作嘗試在 18.04 上建立核心。沒有 editconfigs 選項

  1. 下載內核原始碼(deb-src應取消註解/etc/apt/sources.list

    $ apt-get install linux-source kernel-package
    
  2. 轉到包含核心原始碼的資料夾並解壓縮

    $ cd /usr/src/linux-source-x.x.x
    $ tar jxvf linux-source-x.x.x.tar.bz2
    
  3. 將內容移至目前資料夾
    $ mv linux-source-x.x.x/* .
    $ rm -rf linux-source-x.x.x/
    
  4. 獲取必要的包
    $ apt-get build-dep linux-source
    $ mkdir debian/stamps
    

然後我就可以跑步fakeroot debian/rules cleanfakeroot debian/rules binary-headers binary-generic binary-perarch。中間我必須手動複製一個amd gpu頭檔到缺少的位置,否則編譯失敗。這樣就fakeroot debian/rules可以使用您正在執行的核心配置 ( uname -r)。

如果我使用make menuconfigure和 .config,我最終會遇到與您相同的問題。所以你可以使用我的範例來使用官方發布的Ubuntu核心並fakeroot debian/rules進行編譯。模組的版本可以匹配。

我的版本是Ubuntu 18.04,我的uname -r是5.3.0-51。我在 2020 年 4 月 15 日左右使用 apt-get 獲取原始程式碼。

我相信還有其他方法可以代替makefakeroot debian/rules它可以幫助建立樹內模組。

相關內容