web-dev-qa-db-ja.com

Fedoraで非アクティブ化されたカーネルモジュールを利用可能にする

編集:私はクリスチャンの回答をすべてを自動的に行うスクリプトに変えました: https://github.com/frans-fuerst/magic/ blob/master/Fedora-activate-can.sh

Linuxソースで利用可能であるが、Fedora 20では非アクティブ化されているいくつかのカーネルモジュールが必要です。それらを利用可能にするための最も簡単で最も前向きな方法は何でしょうか。 (つまり、net/CANがサポートされ、一部のcan_ *モジュールが生成されます)

  • 非アクティブ化されたモジュールを使用可能にするFedora-repos/rpmはありますか?
  • または、これらのモジュールを手動でコンパイルする必要がありますか?
  • この場合-カーネルの更新時にこれを自動化するメカニズムはありますか、それとも何度もコンパイルする必要がありますか?

私はすでにフォローしています this HowTo(そしてそこにはもっと多くの非常によく似たものがあります)が、「build a module only」セクションのみが機能しているようです無効にされていないモジュールの場合。その場合、モジュールのソースも失われます。

これが私が試したものです前述の HowTo に続いて:

最初にOut Of Tree Modulesセクションを追跡しようとしましたが、CANサポートのソースが欠けていても、kernel-develに同梱されているいまいましいソースツリーにはありません。だから私はsrc.rpmからモジュールを構築しようとします:

$ yumdownloader --source kernel
$ Sudo yum-builddep kernel-3.14.8-200.fc20.src.rpm
$ rpm -Uvh kernel-3.14.8-200.fc20.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=$(uname -m) kernel.special
$ cd ~/rpmbuild/BUILD/<kerneldir>/<linuxdir>
$ <configure the kernel using menuconfig>
$ make prepare

次に、いくつかの警告をビルドして取得します。

$ make -C /lib/modules/`uname -r`/build M=`pwd`/net/can modules
make: Entering directory `<rpmbuild-BUILD-kernel-linux-dir>'

  WARNING: Symbol version dump <rpmbuild-BUILD-kernel-linux-dir>/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/bcm.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/gw.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/raw.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/af_can.o
  CC [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/proc.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.o
  Building modules, stage 2.
  MODPOST 4 modules
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.ko
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.ko
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.ko
  CC      <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.mod.o
  LD [M]  <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.ko
make: Leaving directory `<rpmbuild-BUILD-kernel-linux-dir>'

$ Sudo make -C /lib/modules/`uname -r`/build M=`pwd`/net/can modules_install
make: Entering directory `<rpmbuild-BUILD-kernel-linux-dir>'
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.ko
Can't read private key
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.ko
Can't read private key
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.ko
Can't read private key
  INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.ko
Can't read private key
  DEPMOD  3.14.8
make: Leaving directory `<rpmbuild-BUILD-kernel-linux-dir>'

make modulesを実行しただけでは最初の警告は表示されませんが、これには約1時間かかります。

ただし、インストール後、.koファイルは間違ったディレクトリ(/usr/lib/modules/3.14.8ではなく/usr/lib/modules/3.14.8-200.fc20.x86_64)にあり、depmod -aおよびmodprobe canの後に

modprobe: ERROR: could not insert 'can': Exec format error

何が悪いのですか?

6
frans

おそらく完璧には程遠いですが、私はそれを手に入れたと思います。

  1. 実行してソースコードを準備する

    rpmbuild -bp --target=$(uname -m) kernel.spec
    
  2. たとえば、次のようにしてビルドディレクトリに移動します。

    cd ~/rpmbuild/BUILD/kernel-3.14.fc20/linux-3.14.8-200.fc20.x86_64
    
  3. Makefileを編集し、EXTRAVERSIONを次のように設定します。

    EXTRAVERSION = -200.fc20.x86_64
    
  4. モジュールを有効にします。 configsディレクトリの下にある対応するファイルから始めることをお勧めします(私はkernel-3.14.8-x86_64.config)。

  5. モジュール用のカーネルを準備します。

    make modules_prepare
    
  6. モジュールをビルドします。

    make M=drivers/net/can
    
  7. 利益!モジュールを挿入します。

    insmod can-dev.ko
    
6

完全を期すために、Fedoraで無効にされたCANモジュール(またはその他のモジュール)を使用可能にするために必要な手順の完全なリストをここに示します(ソースを削除するため、kernel-devel-approachを使用するだけでは実行できません) )。

この手順は完全ではないかもしれませんが、私にとっては機能し、peak_usbおよびvcanおよびFedoraのベースCANモジュール。

私はこれを頻繁に行わなければならないので、改善はありがたく、光栄です。

  1. カーネルを2回更新する必要がないように、今すぐ更新することをお勧めします

    Sudo yum update
    reboot
    
  2. fedoraカーネルソースツリーの準備、取得、インストール

    rpmdev-setuptree
    yumdownloader --source kernel
    Sudo yum-builddep kernel-3.14.8-200.fc20.src.rpm
    rpm -Uvh kernel-3.14.8-200.fc20.src.rpm
    cd ~/rpmbuild/SPECS
    rpmbuild -bp --target=$(uname -m) kernel.spec
    
  3. Makefileを編集し、EXTRAVERSIONを次のように設定します。

    cd ~/rpmbuild/BUILD/kernel-3.14.fc20/linux-3.14.8-200.fc20.x86_64
    EXTRAVERSION = -200.fc20.x86_64
    
  4. 最初に基本構成をフェッチしてカーネルを構成します。

    cp /boot/config-3.14.8-200.fc20.x86_64 .config
    

    または

    cp configs/kernel-3.14.8-x86_64.config .config
    

    そして、必要なモジュールをアクティブにすることでそれを構成します。

    make menuconfig
    
  5. モジュールを構築する

    make modules_prepare
    make M=net/can modules
    make M=drivers/net/can modules
    
  6. インストールとロード

    Sudo make M=net/can modules_install
    Sudo make M=drivers/net/can modules_install
    Sudo depmod -a
    Sudo modprobe can
    
0
frans