2011年1月4日火曜日

最新のBroadcom STA Wireless DriverをdkmsでUbuntuへ

Ubuntuのレポジトリで配布されているBroadcom STA Wireless Driver(BCM43xx用/S10eの場合、BCM4312用)[5.60.48.36]がBroadcomのオフィシャルで公開されているもの(http://www.broadcom.com/support/802.11/linux_sta.php)[5.100.82.38]より古かったので、練習がてら新しいのに置き換えてみることにした。
とりあえず、ダウンロード。で、適当にディレクトリを作ってその中に展開。
$ tar zxvf hybrid-portsrc_x86_32-v5_100_82_38.tar.gz
とりあえず置き換えてみることにした。
$ make
$ sudo rmmod wl
$ cd /lib/modules/<現在のカーネル>/updates/dkms/
$ mv wl.ko wl.ko.old
$ sudo cp <さっきビルドした、wl.ko> wl.ko
$ sudo insmod wl.ko
うん、動いた。APも認識してくれたし。
だけど、カーネルがアップデートされるたびにこれをしないといけないのか?
そういや、カーネルアップデートするときに自動で組み込んでるよな。そういや、dkmsとかいう名前だったよな。
ってことでググったら、Ubuntu Japanese Wiki(https://wiki.ubuntulinux.jp/UbuntuTips/Others/DkmsHowTo)にあった。これにしたがって作業する。
とりあえず、元の作業ディレクトリに戻って、makeしたのをcleanする。あと、一応いらないもの(README.txt)は消しておく。
$ make clean
$ rm README.txt 
ソースを展開したディレクトリごと、/usr/srcの下にコピーする。
$ sudo cp <ソースを展開したディレクトリ> /usr/src/ -r
古い方のドライバの名前に似せて、リネームしておく。そして、これをきちんと把握しておく。これ重要(後述)。
$ sudo mv <さっきのディレクトリ名> bcmwl-5.100.82.38
古いのはバージョンの後ろに+bdcomとか付いてたけど、もういいやってことで付けなかった。
で、dkms.confを古いのからコピってくる。
$ cd /usr/src
$ sudo cp bcmwl-5.60.48.36+bdcom/dkms.conf bcmwl-5.100.82.38/
dkms.confを編集する。
$ cd bcmwl-5.100.82.38
$ sudo vim dkms.conf
以下のように編集。
PACKAGE_VERSION="5.60.48.36+bdcom" => "5.100.82.38"
PATCHから始まる行をすべて#でコメントアウト(最初、コメントアウトしてなくて、dkmsがエラー吐いた。そりゃ、ないもん参照したってなぁ。)
wikiに従うと、dkms.confではPACKAGE_NAME(ここではbcmwl)とPACKAGE_VERSION(同5.100.82.38)とに一致するディレクトリ(同bcmwl-5.100.82.38)の中を読みに行くらしい。
これ以下の作業でもわかるように、このNAMEとVERSIONがdkmsでの管理情報になるよう。
ここからは、dkmsでの作業。
$ sudo dkms add -m bcmwl -v 5.100.82.38
$ sudo dkms build -m bcmwl -v 5.100.82.38
$ sudo dkms install -m bcmwl -v 5.100.82.38
(mはモジュール名、vはバージョンっぽい。) 
ここで、全部dkms 〜 completed って出たので喜んでwikiにしたがって、古いカーネルを再インストールしたら、dkmsが古い方(5.60.48.36)を自動的にインストールしてくれたorz
よく考えたら、wikiに書いてあるのは、インストールだけだった。更新じゃなかったお。
したがって、manを参考に手探りながら古いドライバをdkmsのツリーから外してやることに。
$ sudo dkms remove -m bcmwl -v 5.60.48.36 --all
インストールしているカーネルそれぞれすべて(--all)から、古いドライバを削除してくれる。
で、改めて、カーネルを再インストール。今度は成功した。
はじめから、dkms使ってやれば、よかったんやん、と自分で思ったのだが、予め展開してみて、ちゃんと動作するか確認するのが重要っぽい。結果的には合ってたそうな。ちゃんちゃん。
参考サイト
https://wiki.ubuntulinux.jp/UbuntuTips/Others/DkmsHowTo

0 件のコメント:

コメントを投稿