モジュールをコンパイルしてカーネルに挿入しようとしていますが、次のエラーが発生し続けます。
insmod: error inserting 'hello.ko': -1 Invalid module format
このチュートリアルで説明されている手順に従いました: http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html . そして、すべてが理にかなっており、機能しているように見えました。サンプル モジュールをコンパイルしましたが、これが失敗する理由の重要な原因となる可能性のある警告がありました。警告はこれでした:
警告: シンボル バージョン ダンプ /usr/src/linux-3.0.0/Module.symvers がありません。モジュールには依存関係や modversion はありません。
Module.symvers ファイルが存在しない理由は率直に言ってわかりません。/usr/src/linux-3.0.0ディレクトリとそのすべての内容は、次のコマンドを使用してソースをダウンロードした後に作成されました。
apt-get source linux-image-$(uname -r)
実際、それは私が従わなかったチュートリアルの唯一のステップでした。カーネル (3.0.0-32-generic) の正確なソースを見つけることができず、aptitude ツールがそれを整理してくれると思ったからです。
ちなみに、私は64ビットマシンでUbuntuを実行しています.uname -aの出力は次のとおりです。
Linux vega 3.0.0-32-generic #51-Ubuntu SMP Thu Mar 21 15:50:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
次に何を試すかについて何か提案はありますか?おすすめの読み物は?
PS1。さらに調査した結果、3.0.0-32-generic を実行していることを確認しました。update-grub が返されました:
Found linux image: /boot/vmlinuz-3.0.0-32-generic
しかし、sudo make oldconfig を発行して結果の .config ファイルを確認すると、次の興味深い行が表示されます。
CONFIG_VERSION_SIGNATURE="Ubuntu 3.0.0-32.51-generic 3.0.69"
それはミスマッチに該当しますか?
PS2。dmesg はこれを出力します:
[ 5.869900] ADDRCONF(NETDEV_UP): eth1: link is not ready
[ 6.144304] EXT4-fs (dm-1): re-mounted. Opts: errors=remount-ro
[ 6.368936] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[ 6.433919] vesafb: mode is 640x480x32, linelength=2560, pages=0
[ 6.433921] vesafb: scrolling: redraw
[ 6.433923] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[ 6.435424] vesafb: framebuffer at 0xb0000000, mapped to 0xffffc90012800000, using 1216k, total 1216k
[ 6.435516] Console: switching to colour frame buffer device 80x30
[ 6.443104] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: (null)
[ 6.450198] fb0: VESA VGA frame buffer device
[ 8.884523] e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
[ 8.885845] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
[ 12.611236] init: ssh main process (762) terminated with status 255
[ 12.624381] init: failsafe main process (752) killed by TERM signal
[ 12.634739] type=1400 audit(1373412287.107:8): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=852 comm="apparmor_parser"
[ 12.634873] type=1400 audit(1373412287.107:9): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=851 comm="apparmor_parser"
[ 12.635180] type=1400 audit(1373412287.107:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=851 comm="apparmor_parser"
[ 12.635403] type=1400 audit(1373412287.107:11): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=851 comm="apparmor_parser"
[ 19.390991] eth1: no IPv6 routers present
[ 576.758697] hello: no symbol version for module_layout