質問: 家にあったcarl9170ドライバーを必要とするwifi子機を利用したいと思い、 modinfo carl9170 と実行したところ、そのようなドライバはないと言われたので、 carl9170ドライバーを、kernel.orgのバージョン4.4.77のカーネルから取り出し、 ``` make ``` と実行したところ、 ``` make: *** ターゲットがありません. 中止. ``` と表示されてしまいました。 どうすればコンパイルできるのでしょうか。 ・環境 CPU : arm64 カーネルバージョン : 4.4.77
回答: カーネルモジュールのビルド方法は、カーネルのソースの `Documentation/kbuild/modules.txt` に書いてあります。 以下のようにビルドできます。 ``` luna:/tmp % cp -R /bak/linux-4.15.1/drivers/net/wireless/ath . luna:/tmp % cd ath luna:ath % make -C /lib/modules/`uname -r`/build M=$PWD make: ディレクトリ '/usr/lib/modules/4.15.1-2-ARCH/build' に入ります (略) make: ディレクトリ '/usr/lib/modules/4.15.1-2-ARCH/build' から出ます luna:ath % ls -al carl9170/carl9170.ko -rw-r--r-- 1 masm users 185912 2月 12 16:38 carl9170/carl9170.ko luna:ath % ``` もしビルドされなければ、make に `CONFIG_CARL9170=m CONFIG_ATH_COMMON=m` も付けてみてください。 正常にビルドできたら、 ``` luna:ath % sudo make -C /lib/modules/`uname -r`/build M=$PWD modules_install ``` でインストールできると思います。 `cp: cannot stat './modules.order' No such file or directory` について。 どうすればその状態になるのか解りませんが、`make ... modules_install` の代わりに以下のようにして手動でインストールはできると思います。 1. `/lib/modules/4.4.77-rockchip-ayufan-136/extra` ディレクトリがなければ作ります ``` sudo mkdir /lib/modules/4.4.77-rockchip-ayufan-136/extra ``` 2. カーネルモジュールをコピーします ``` sudo cp ath.ko /lib/modules/4.4.77-rockchip-ayufan-136/extra/ sudo cp carl9170/carl9170.ko /lib/modules/4.4.77-rockchip-ayufan-136/extra/ ``` 3. modules.* を更新します。 ``` sudo depmod -A ``` また、失敗しているターゲットが `_modinst_` である点が気になります。 もし `/lib/modules/4.4.77-rockchip-ayufan-136/kernel` ディレクトリとその中身が、以前はあったが今はなくなっているなら、`make ... modules_install` によって消えてしまった可能性があります。 その場合、カーネルモジュールが入っているパッケージを再度インストールしてください。