OrangePi-PCを使ってみる

DKMSによるドライバーのインストール


USB-WiFiモジュールなど、一部のハードウェアはカーネル標準のドライバーではサポートしていません。
そこで、DKMSによるドライバーのインストール方法を紹介します。
DKMS(Dynamic Kernel Module Support)についてはこ ちらに詳しく紹介されています。
新しいカーネルがインストールされたときに DKMS でインストールしたドライバーは自動的にリビルドされるのが特徴です。

最初にこちらの手順でカーネルヘッダーをインストー ルします。
今回はRTL8192EUのドライバーをインストールします。
ドライバーのビルドに必要なライブラリとドライバーソースをダウンロードします。
$ sudo apt update

$ sudo apt install build-essential dkms

$ git clone https://github.com/lord2y/rtl8192eu-arm-linux-driver

$ ls rtl8192eu-arm-linux-driver
clean  dkms.conf  ifcfg-wlan0  Kconfig   os_dep    README.md  wlan0dhcp
core   hal        include      Makefile  platform  runwpa

ダウンロードしたドライバーソースの中に「dkms.conf」が含まれています。
これがdkmsが使用するconfiguration fileです。
このファイルがあれば、原則どのようなドライバーもインストールすることができます。

最初にconfiguration fileを使って、ドライバーをデバイスツリーに追加します。
dkms.confが含まれているディレクトリを指定します。
$ sudo dkms add ./rtl8192eu-arm-linux-driver

Creating symlink /var/lib/dkms/rtl8192eu/1.0/source ->
                 /usr/src/rtl8192eu-1.0

DKMS: add completed.

ここで重要なのは上記の赤文字の部分です。
これがモジュール名とモジュールバージョンになります。
このモジュール名とモジュールバージョンを使って、ドライバーをインストールします。
モジュール名とモジュールバージョンを / で区切って指定します。
$ sudo dkms install rtl8192eu/1.0

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
'make' all KVER=3.4.113-sun8i..............................................................................
cleaning build area....

DKMS: build completed.

8192eu.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/3.4.113-sun8i/updates/dkms/

depmod.....

Backing up initrd.img-3.4.113-sun8i to /boot/initrd.img-3.4.113-sun8i.old-dkms
Making new initrd.img-3.4.113-sun8i
(If next boot fails, revert to initrd.img-3.4.113-sun8i.old-dkms image)
update-initramfs..........

DKMS: install completed.

再起動するとインストールしたドライバーが有効になります。



dkmsでインストールしたドライバーは、aptでカーネルバージョンが変わると、自動的にリビルドされます。
対応しているカーネルバージョンは以下のコマンドで知ることができます。
この例では、4.15.0-135の時にインストールしたドライバーが、4.15.0-136になったときに自動的にリビルドされています。
$ dkms status
8812au, 4.2.2, 4.15.0-135-generic, x86_64: installed
8812au, 4.2.2, 4.15.0-136-generic, x86_64: installed

最近知りましたが、dkmsでインストールしたドライバーは、apt autoremoveで不要なカーネルを削除すると、
カーネルの削除と同時に対応したドライバーが自動的に削除されます。