
Ubuntu日本語フォーラム

ログインしていません。
お世話になっております。なんというか、馬鹿げた質問なのかもしれませんが、恥をしのんで。
一応、ハードウェアの認識の問題かと思い、こちらに投稿させていただきます。
FeistyからGutsyにアップグレードしたノートPCを快適に使っています。
最近手持ちのPDAであるSHARP製のSL-C1000(LinuxZaurus)をつないでも、認識していなことに気づきました。
Fesityではusbnetでつながっていたのですが、どうやらGutsyではzaurus.koがないようです。
Feistyから直接コピーして持ってきても、insmodやmodprobeを試みると
「FATAL: Error inserting zaurus.ko ~ Unknown symbol in module」というようなエラーが出て組み込めません。
カーネルのバージョンが違うので当然かとも思いますが、このようなカーネルモジュールを組み込みたい場合、どうすれば良いのでしょうか。
カーネル全体の再構築などをすると、制限つきドライバなんかのインストールやVMwareの環境構築などが大変です(特にipw3945のドライバ組み込みがなんどやってもうまく行かず断念)。
現在動いているカーネル(2.6.22-14-generic)で動くカーネルモジュールのみを得たい場合には、なにかやり方があるのでしょうか。
とりあえず、やってみようとしていることは、
1 カーネルソースをapt-get install linux-source linux-source-2.6.22でインストール
2 # ln -s /usr/src/linux-2.6.22 /usr/src/linux
3 # cp /boot/config-2.6.22-14-generic /usr/src/linux
4 cd /usr/src/linux
5 # make xconfig → linux zaurusのモジュールをmにする
6 # make-kpkg clean
7 # make-kpkg --subversion=custom071211 kernel_modules
8 出来たカーネルパッケージをインストールし、そこで得られたzaurus.koを/lib/modules/2.6.22-14-generic/kernel/drivers/net/usb/にコピーする
という手順なのですが、これってうまくいくのでしょうか。今現在の環境を壊したくないのです。アドバイスをよろしくお願いいたします。
オフライン
Kernel Moduleのコンパイルは大変めんどくさいので、FeistyのKernelを
使ってしまう、という小技をお勧めします。
# ってFeistyだと駄目な理由があったりしますか?
オフライン
hitoさん、レスありがとうございます。
Feistyでも特に大きな問題はなかったのですが、やはりノートPCで使ってる以上はTicklessKernel有効、Kernel IRQ Balancing無効などの省電力措置が初めから取られているGutsyの方がいいかな、と思いまして(intelのpowertop様の言うなりなんですが)。
それに、実質上Gutsyに完全に移行してしまっているのと、実はFeistyのカーネルにダウングレードする方法がよく分からないというのもあります。
カーネルモジュールのコンパイルが「大変面倒くさい」というのは、上述のような方法ではやはりうまくいかない、ということなのでしょうか。
オフライン
hippocampus による投稿:
カーネルモジュールのコンパイルが「大変面倒くさい」というのは、上述のような方法ではやはりうまくいかない、ということなのでしょうか。
ええと、たぶん動きますが、8時間とかかかりますので「大変面倒くさい」です。
当然アップデートがかかるたびに作業が必要なので、あまりお勧めしません。
Feistyのパッケージをダウンロードしてきてdpkg -iで入れるだけなので簡単
なのですが、ノートメインということだとコンパイルしてしまった方がよい
ような気がしてきました。
オフライン
hitoさん ありがとうございます。
なるほど、了解しました。確かに時間と手間がかかりますよね・・・。
FeistyでGutsyからバックポートされた2.6.22カーネルを使う方法も見かけたんですが、やはり正攻法(?)でとりあえずコンパイルしてモジュールを作ってみることにします。なんとなくうまくいかなそうな気がしますが・・・。
オフライン
結果報告です。一応手順に沿ってカーネルの再構築をしてみました。
# sudo -i # apt-get install linux-source-2.6.22 linux-source(カーネルソースは、なぜか2.6.22.9のもの?) # cd /usr/src # tar xvjf linx-source-2.6.22.9.tar.bz2 # ln -s ./linux-2.6.22.9 ./linux # cd linux # cp /boot/config.2.6.22-14-generic .config # make oldconfig # make xconfig →zaurusのチェックボックス # make-kpkg clean # make-kpkg -initrd --revison=custom071211 kernel_image kernel_headers # cd .. # dpkg -i linux-image-2.6.22.9*.deb linux-headers-2.6.22.9*.deb # ln -s /lib/firmware/2.6.22-14-generic /lib/firmware/2.6.22.9
しかし、これで得られたzaurus.koはやはり2.6.22-14-genericのカーネルには組み込めませんでした。
うーん。2.6.22-14-genericのカーネルソースってどこにあるんだろう・・・。
オフライン
うーん。2.6.22-14-genericのカーネルソースってどこにあるんだろう・・・。
apt-get source linux-image-2.6.22-14-generic で取れますが、
--revison=custom071211
を抜けばそのままでも問題ないんじゃないでしょうか……(パッケージング関連以外では中身一緒ですし)。
オフライン
hitoさん 何度もお付き合いいただきありがとうございます。
この--revisionを抜くと、現行のカーネルが上書きされるのかな?と心配していましたが、杞憂なのでしょうか。
linux-image-2.6.22-14-genericのソースをとってきてみて、またチャレンジしてみます(寝てる間に)。
オフライン
hippocampus による投稿:
hitoさん 何度もお付き合いいただきありがとうございます。
この--revisionを抜くと、現行のカーネルが上書きされるのかな?と心配していましたが、杞憂なのでしょうか。
linux-image-2.6.22-14-genericのソースをとってきてみて、またチャレンジしてみます(寝てる間に)。
がーん。ごめんなさい、手順をきちんと読んでいませんでした。
# dpkg -i linux-image-2.6.22.9*.deb linux-headers-2.6.22.9*.deb
してはいけません。代わりに、
find . -name zaurus.ko
して、/lib/firmware/2.6.22-14-generic の下にコピーしてdepmod -aし、modprobe zaurusしてみてください。
よく見ると、
# ln -s /lib/firmware/2.6.22-14-generic /lib/firmware/2.6.22.9
このシンボリックリンクも張る向きが逆のような気が致しますです……。
オフライン
すみません、hitoさん。
当方の理解が悪いせいでお手数をお掛けしています。
hito による投稿:
がーん。ごめんなさい、手順をきちんと読んでいませんでした。
# dpkg -i linux-image-2.6.22.9*.deb linux-headers-2.6.22.9*.deb
してはいけません。代わりに、
find . -name zaurus.ko
して、/lib/firmware/2.6.22-14-generic の下にコピーしてdepmod -aし、modprobe zaurusしてみてください。
ここがよく分からないのですが、make-kpkgでコンパイルをしたあと、カーネルパッケージをインストールせず、/usr/src/でfindするのでしょうか??
新しく出来たカーネルパッケージをインストールしないと、zaurus.ko自体が存在しないのですが・・・。
そして、新しく出来たzaurus.koをコピーするのは/lib/firmware/2.6.22-14-genericなのでしょうか?
/lib/modules/2.6.22-14-generic/kernel/drivers/net/usbにコピーすると思っていましたが・・・。
hito による投稿:
よく見ると、
# ln -s /lib/firmware/2.6.22-14-generic /lib/firmware/2.6.22.9
このシンボリックリンクも張る向きが逆のような気が致しますです……。
逆でしょうか?
カーネルパッケージをインストールしただけでは、/lib/firmware/2.6.22.9は存在せず。既存の2.6.22-14-genericのfirmwareからsymlinkを張る必要があるのだとばかり・・・。
オフライン
hippocampus による投稿:
hito による投稿:
がーん。ごめんなさい、手順をきちんと読んでいませんでした。
# dpkg -i linux-image-2.6.22.9*.deb linux-headers-2.6.22.9*.deb
してはいけません。代わりに、
find . -name zaurus.ko
して、/lib/firmware/2.6.22-14-generic の下にコピーしてdepmod -aし、modprobe zaurusしてみてください。ここがよく分からないのですが、make-kpkgでコンパイルをしたあと、カーネルパッケージをインストールせず、/usr/src/でfindするのでしょうか??
新しく出来たカーネルパッケージをインストールしないと、zaurus.ko自体が存在しないのですが・・・。
新しくできたカーネルパッケージはインストールしてはいけません。
(インストールするとrestricted-modules周りでハマって3945ABGが動かないとか
いうことが起きる可能性が大)
あくまでパッケージのビルドだけを行い、その課程で出来上がるカーネル
モジュールを横取りしてくるのが楽だと思います。
hippocampus による投稿:
そして、新しく出来たzaurus.koをコピーするのは/lib/firmware/2.6.22-14-genericなのでしょうか?
/lib/modules/2.6.22-14-generic/kernel/drivers/net/usbにコピーすると思っていましたが・・・。
あう、立て続けに申し訳ないです。その通りです。
/lib/modules/<linux-image-version-falavor>/ 以下のどこかにコピーしてください。
場所はどこでもいいですが、kernel/drivers/net/usb/ 以下が安全な気はします。
hippocampus による投稿:
hito による投稿:
よく見ると、
# ln -s /lib/firmware/2.6.22-14-generic /lib/firmware/2.6.22.9
このシンボリックリンクも張る向きが逆のような気が致しますです……。逆でしょうか?
カーネルパッケージをインストールしただけでは、/lib/firmware/2.6.22.9は存在せず。既存の2.6.22-14-genericのfirmwareからsymlinkを張る必要があるのだとばかり・・・。
/lib/firmware周りには何もする必要はありません。
やる必要があることを整理しておくと、
・linux-imageそのものはあくまで通常の-genericのまま。
・この状態で、/lib/modules/<linux-image-version-falavor>/ 以下のどこかに
zaurus.koを追加してやる。
・パッケージをビルドすると、その課程でzaurus.koが出来てくるので、それを横取りして
/lib/modules/(略)にコピーしてしまい、
・sudo depmod -a && sudo modprobe zaurus してインストールする。
です。
オフライン
hitoさん
ようやく理解しました。
パッケージとしてインストールすると問題が出てきてしまうので、パッケージにまとめられる「素材」のzaurus.koを横取りするってことなんですね。
findしてみたら、
/usr/src/linux-source-2.6.22-2.6.22/debian/linux-image-2.6.22.9/lib/modules/2.6.22.9/kernel/drivers/net/usb/zaurus.ko
/usr/src/linux-source-2.6.22-2.6.22/drivers/net/usb/zaurus.ko
に出来ていました。
user@ubuntu:~$ sudo cp /usr/src/linux-source-2.6.22-2.6.22/drivers/net/usb/zaurus.ko /lib/modules/2.6.22-14-generic/kernel/drivers/net/usb/ user@ubuntu:~$ sudo depmod -a user@ubuntu:~$ sudo modprobe zaurus FATAL: Error inserting zaurus (/lib/modules/2.6.22-14-generic/kernel/drivers/net/usb/zaurus.ko): Invalid module format
ガーン。やっぱり組み込めません。
・・・しかし、もしかして、.configに変な編集を加えたかもしれません。もう一度、今度は確実にzaurusのモジュールだけを有効にして、やり直して見ます。寝てる間に。
お付き合いくださってありがとうございます。結果は明日報告致します。
最後の編集者: hippocampus (2007-12-12 01:12:52)
オフライン
結果報告です。
やはり、組み込めなかったのは.configに原因がありました。
私が余計なことをしていたようです(proseccer familyをcore2に替えていた)。
zaurusのモジュールの箇所以外を無変更で.configを作成し、それをコンパイルして出来たzaurus.koであれば、問題なく組み込むことが出来ました。キチンとusbnetで通信もできるようです。
hitoさん、長々とお付き合いいただきましてありがとうございました。また一つ、Ubuntuの事を理解することが出来たような気がします:D
オフライン