
我正在嘗試sound/usb
針對正在運行的核心在 Ubuntu 18.10 上重新編譯該模組。我沒有收到編譯錯誤,但是當我嘗試載入模組時,出現此錯誤:
Invalid module format
我正在運行4.18.0-21-lowlatency
內核。
我透過這種方式獲取內核原始碼
apt source linux
這將下載核心來源並將其解壓縮到資料夾4.18.0
中linux-4.18.0
。
我將.config
和Module.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 選項
下載內核原始碼(
deb-src
應取消註解/etc/apt/sources.list
)$ apt-get install linux-source kernel-package
轉到包含核心原始碼的資料夾並解壓縮
$ cd /usr/src/linux-source-x.x.x $ tar jxvf linux-source-x.x.x.tar.bz2
- 將內容移至目前資料夾
$ mv linux-source-x.x.x/* . $ rm -rf linux-source-x.x.x/
- 獲取必要的包
$ apt-get build-dep linux-source $ mkdir debian/stamps
然後我就可以跑步fakeroot debian/rules clean
了fakeroot 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 獲取原始程式碼。
我相信還有其他方法可以代替make
,fakeroot debian/rules
它可以幫助建立樹內模組。