Debian GNU/Linux スレッド Ver. 52

このエントリーをはてなブックマークに追加
185login:Penguin
debiaの2.6.18-6を使っています。
カーネルモジュール(ohci-hcd.ko)に対してオプションを指定したくていろいろ調べてます。
どうもinitrd中に読み込まれているところまではなんとなくわかったのですが、
モジュール名を指定して読み込んでるのでは無く
どこかで自動的に機器を検出して読み込んでるのでしょうか?
またその場合どこでオプションを指定すれば読み込み時に指定された状態で読み込まれますか?

186login:Penguin:2008/03/19(水) 01:48:40 ID:hI6xFIVz
>>185
update-initramfsコマンドと/etc/modprobe.dあたりじゃね?
187login:Penguin:2008/03/19(水) 01:56:13 ID:rz/V4BX6
>>186
ありがとうございます。
update-initramfsについて少し調べてみます。
/etc/modprobe.dは通常のモジュールのオプションはこちらで設定するので
同じように設定してみたのですが、
どうもinitrdからの起動中には参照されてないように見えました。

188login:Penguin:2008/03/19(水) 07:09:42 ID:IcPRftKX
/etc/initramfs-tools/modules
だと思うんだがどうか。
189login:Penguin:2008/03/19(水) 07:36:27 ID:2YfY+2ov
>>184
>#出会い系サイトにメールアドレスを登録するなんてあくどいことはしないから安心して。

面白そう。やってみるお
190login:Penguin:2008/03/19(水) 13:31:20 ID:DjjlHW3+
Linuxルータ兼俺用おうちサーバとして常用中だけど、デスクトップでもLinux使いたくなってxubuntuに浮気したら
xubuntuインストーラのgrub-installでコケた
仕方ないのでgrubをフローッピーに入れてHDDにgrub入れようとしたらxubuntuが入ってるパーティション読めないとか言われた

3年くらい前に同じパーティション構成でDebian入れたときには何ともなかったのに…
浮気するなってことですかそうですか
191login:Penguin:2008/03/19(水) 15:12:50 ID:z4t+knT8
内部変数 DEFKCODE が追加された ver.2.07 以降の fdclone パッケージはどこかにありませんか?
自分で2.06cからuupdateしてみましたがpatchのいくつかがrejectされてしまいます。
コード書けない子で、手作業patchやら自作パッケージは無理なので。
192login:Penguin:2008/03/19(水) 19:02:03 ID:jAJ2ce4f
ぽっくんは、Plamo→RedHat→Fedora→Debianと乗り換えてからは浮気してない。
193login:Penguin:2008/03/19(水) 21:11:27 ID:V3LC/t3s
/*チラシ
kernel-source-2.4.27 2.4.27-10sarge7 がkpkg-makeできねえよん。
--arch i386 で通るけど。*/
194185:2008/03/19(水) 22:27:38 ID:rz/V4BX6
>>188
ありがとうございます。
新規のモジュール追加はそれでよさそうなんですが、
現在自動で組み込まれているモジュールを更に指定して追加すると
自動でロード→手動で追加したところでロード
となり2回ロードされてしまい手動で追加した分はエラーになってしまうのでは無いでしょうか?


いろいろ調べているのですが、カーネルモジュールがどのタイミングで(どのスクリプトやプログラムから)読み込まれているのか
ブートのプロセスがまだ理解できていません。
/etc/modprobe.d以下で設定されていないので、いったいどこだと調べていたら
どうやらinitrdの中でロードされているようなのはわかったのですが、
実際にinitrdの読み込みのどの部分でモジュールが組み込まれているのかわかりません。
initrdの中で明示的にmodprobeされていないモジュールはどうやって読み込まれているのでしょうか?
ここがわかればオプションを追加したり、自動でロードされないようにした後に手動でロードとできると思うので
そのあたりに詳しい方がいらっしゃいましたらご教授いただけませんでしょうか。

195login:Penguin:2008/03/19(水) 23:35:11 ID:hI6xFIVz
>>194
> どうやらinitrdの中でロードされているようなのはわかったのですが、
> initrdの中で明示的にmodprobeされていないモジュールはどうやって読み込まれているのでしょうか?
何がやりたいのかさっぱり不明だが、
ttp://manpages.debian.net/cgi-bin/man.cgi?query=modules&apropos=0&sektion=5&manpath=Debian+Sid&format=html&locale=en
と、下のChapter 5あたり読んでくれ。
ttp://kernel-handbook.alioth.debian.org/
196login:Penguin:2008/03/19(水) 23:51:57 ID:ppY6bFYb
>>194
オレも何が言いたいのかよくわからんのだが、initrdを展開して中を読んでみるのが良いと思うぞ。
197185:2008/03/20(木) 01:45:06 ID:pIPss+F3
レスありがとうございます。

少々長くなりますが、目的とあわせて現状を報告させていただきます。
libretto L3にdebian(2.6.18-6)をインストールしたところrebootができませんでした。
今の目標はrebootが正常に動作するようにすることになります。

rebootを行うと液晶の電源は切れますが、本体自体は電源が入ったままで再起動されません。
いろいろ調べたところohci-hcdというusbのモジュールに原因があるようで
modinfo ohci-hcd
中略
parm: distrust_firmware:true to distrust firmware power/overcurrent setup (bool)
また、モジュールのソースをみたところ
ohci-hcd.c:156:static int distrust_firmware = 1;
となっていました。
なのでdistrust_firmware=0とオプションで指定するか、ソースで0を指定してコンパイルしたモジュールと入れ替えれば
動くのでは無いかというところまでわかりました。
モジュール入れ替える前にオプションで指定する方が早いと思い、その方法を調べているところです。

198login:Penguin:2008/03/20(木) 01:47:48 ID:1QfG0SzU
一度シャットダウンして起動しなおすっていう消極的解決法ではだめでしょうか
199185:2008/03/20(木) 01:48:26 ID:pIPss+F3
現在のカーネルのバージョンでは/etc/modulesにオプションを指定すればいけるかなと思ったのですが、rebootはできませんでした。
しかしこれがオプション指定できていないから駄目なのか、そもそも指定したところで駄目なのかの判断がつきません。
モジュールが現在このオプションが指定されてロードされていることを調べる方法があればいいのですが…

更に調べたところ、ohci-hcd.koは/etc/modprobe.d以下のどのファイルにも指定されていないので
そもそもここで読み込まれていないのでは無いかと思い、更にいろいろ調べて
initrdを展開してみたところこちらにohci-hcd.koが含まれていた為、initrdの中で読み込まれているのでは無いかとあたりをつけたところです。
ただ、initrdのなかにモジュールが含まれていることはわかったのですが、実際にinitrdのなかで明示的にmodprobeなりされているわけでは無いみたいなので
どのタイミングで読み込まれているのかinitrdのカーネルモジュールの読み込みプロセスについて調べているところです。

ブート時のinitrd読み込み時にロードされるモジュールについては、まだ/etc/modulesなどはマウントされていないと思うので
/etc/modulesでオプションを指定しても意味ないですよね?
なので、initrdで読み込まれるモジュールの中でmodprobeで明示的に指定されていないモジュールは
どうやってロードされているのかなと思って質問しました。
目的としては、initrdで明示的にmodprobeされていないモジュールがロードされているプログラムなりスクリプトが特定出来れば
そこを書き換えるなどしてオプション指定できるのではないかなと思った次第です。
200185:2008/03/20(木) 02:00:33 ID:pIPss+F3
>>198
レスありがとうございます。
現状はそのようにしています。
確かにrebootできないことで困る状況というのはそうは無いのかもしれませんが、
このあたりの動作や仕組みを理解しておくと今後トラぶった時にも役に立つかなという思いや
純粋な知的好奇心もあり、カーネルやモジュール、ブートプロセスあたりを勉強しています。

201login:Penguin:2008/03/20(木) 02:25:44 ID:yUIT387Z
>>200
/etc/modprobe.d/以下にファイル作って
options ohci-hcd power_switching=1
書いて、反映させてrebootでは駄目?
今のohci-hcdだと駄目なんかな?
一度手動で modprobe -r ohci-hcd してから modprobe ohci-hcd power_switching=1 で
試してみて。
202login:Penguin:2008/03/20(木) 02:30:58 ID:9yN6tvEB
オレも良くわかってないんで詳しい人待ちだけど。
ちょろっと見てみたけど、usbとかはdiscoverが担当しているんではないかと。
で、ホントにinitrdでohci-hcd読んでる? 起動時にmount root filesystemて
出る前にusb関係のメッセージが出るかどうかで判別できる気がするんだけど、
どうだろう?

で、discover.confな関係でオプションの指定法はわからんかったから、
discoverでは読み込まないようにして、modulesでの指定なんかで読むように
する、とか、できんのかな?
203185:2008/03/20(木) 03:25:28 ID:pIPss+F3
レスありがとうございます。

>>201
今のバージョンはpower_switchingが無くなってしまっているようです。
modinfoでみると
parm: distrust_firmware:true to distrust firmware power/overcurrent setup (bool)
というのがあって更に検索したら一応パワースイッチに関連したオプションのようでしたので
http://www.mail-archive.com/[email protected]/msg33540.html
これをまず試そうかなと思ってます。
/etc/modprobe.dにファイルを作ってoptions〜は試したけれど駄目でした。
前述したようにこのオプションでは駄目なのかmodprobe.d以下にファイル作った指定方法では駄目なのか
オプションがきちんとohci-hcdにわたっているのかをどう判断したらいいのかがわかりません。
手動で外して下記のコマンドを打つと
modprobe ohci_hcd distrust_firmware=0

ohci_hcd 0000:00:14.0: wakeup
が延々と表示され続けて画面がいっぱいになってしまいます。

>>202
起動時のメッセージがはやくて確認できません(汗
他に確認方法はありますか?
実際initrdで読み込まれているのかその後に読み込まれているのかははっきりわかりません。
ざっとみたところmodprobeで呼び出されていなかったので後どこかなーって思い、
initrdを展開したら中にはいってたのでここで読み込まれてるのかなと思いました。
ただ、initrdの中にあるってだけでinitrdの中のスクリプトや設定ファイル内からも
呼び出されているようにはみえないので、よくわからないのです
あと、discoverは使われなくなってしまったようなのです。↓参照
http://www.debian.org/releases/stable/i386/release-notes/ch-whats-new.ja.html
自動でロードされるのはudevあたりが関連してるっぽいのですが、まだ調べきれてません。
204185:2008/03/20(木) 03:35:32 ID:pIPss+F3
連続すみません
initrdの中にある
ではちょっと意味がわかりづらいので訂正します。

initrdを展開したなかに含まれていたので
/lib/modules/2.6.18-6-686/kernel/drivers/usb/host/ohci-hcd.ko
initrdで読み込まれてるのかなと思いました。
205login:Penguin:2008/03/20(木) 03:55:06 ID:yUIT387Z
>>204
initrdにモジュールが含まれているだけ(起動時に使えるように)で、そこでロードしてる訳ではないと思うよ。

> /etc/modprobe.dにファイルを作ってoptions〜は試したけれど駄目でした。
作った後に depmod -a なり再起動なりしてるよね?

> modprobe ohci_hcd distrust_firmware=0
この前に、modprobe -r はやってるんだよね?(USBに何か挿してないよね?)

起動時のメッセージはdmesgで見るとか、/var/log/以下のログを見るとか。

discoverは、起動時のモジュールロードには使われなくなってると思う。

ところで、etchなの?
206185:2008/03/20(木) 03:59:18 ID:pIPss+F3
うーん

wakeupで画面がいっぱいになってもきにせずrebootと打ってみたけど状況かわらないです。
手動でオプション指定しても駄目ってことはこのオプションでは駄目ってことなのかな…

多分駄目だとおもいますが、
ohci-hcd.c:156:static int distrust_firmware = 1;
ここ書き換えてモジュール入れ替えてみます。
モジュールだけ入れ替えるのは
make modules
make modules_install
でいいのかな?
個別のモジュールだけコンパイルして入れ替える方法があったら教えてください。

また、引き続きohci-hcd(に限らずカーネルモジュール)がどのタイミングでどのスクリプトやプログラムから読み込まれているのか
もご存知の方がいらっしゃいましたら教えてください。
207login:Penguin:2008/03/20(木) 04:06:44 ID:tEIlyDHp
>>185
てか、ログイン後にohci_hcdドライバが手動で抜けるんなら、
/etc/modprobe.d/blacklistにohci_hcdをぶち込んで、ohci_hcdドライバ
が最初っからロードされない状態で起動した上でrebootを実行して再起動が
出来るかを確認するのが、本来の目的からして先じゃね?
208185:2008/03/20(木) 04:17:02 ID:pIPss+F3
>>205
レスありがとうございます。
深くつっこむと話が脱線してしまうかもしれませんが、
initrdに含まれているモジュールがinitrd読み込み時にロードされるか否かの判断はどこでされているのでしょうか?
また、initrdじゃなくその後の起動プロセスでdiscoverが使われなくなった現在
何がどのように判断してモジュールをロードしているのでしょうか?
modprobeで指定されていないのに読み込まれちゃうものを読み込まれなくしたい時に
どこをどうすればいいのかなって思いました。

バージョンはdebianのサイトにある最新のもので
debian etch 2.6.18-6です
試したことは。
/etc/modulesのloopの前に
options ohci-hcd distrust_firmware=0
と記述してshutdown -h now した後に起動

/etc/modprobe.d配下にohci_hcdというファイルを作成し
中に
options ohci-hcd distrust_firmware=0
と記述してshutdown -h now した後に起動

しました。
depmod -aはしてませんが、再起動(shutdownして起動)はしています。

また、手動でやった場合はmodprobe -r で外しlsmodで外れたことを確認
その後modprobeでオプション指定し読み込みました。

dmesgおよび/var/log以下のファイルにmount root filesystemの記述は見つかりませんでした。
209login:Penguin:2008/03/20(木) 04:20:49 ID:aAFsU0AG
「etchでUTF-8の読み書きとEUC-JPの読み書きをEmacsやemacs -nwでできるようになる設定」
ってどこかにまとまってないですか?

昔language-envがやってたようなEmacsやフォント関係の設定が不要になったわけじゃないですよね
210185:2008/03/20(木) 04:33:58 ID:pIPss+F3
>>207
レスありがとうございます。
/etc/modprobe.d/blacklist

blacklist ohci_hcd
を加えて再起動しましたが、
lsmod | grep ohci_hcd
ohci_hcd 18276 0
usbcore 112644 2 ohci_hcd

何故か読み込まれてしまいます。
この状態で手動でmodprobe -rしてrebootした場合は
状況変わらずでした。

>>209
ここはどうでしょうか?
http://debian.fam.cx/index.php?Japanese
211login:Penguin:2008/03/20(木) 04:36:37 ID:aAFsU0AG
>>210
etchでUTF-8の読み書きとEUC-JPの読み書きをEmacsやemacs -nwでできるようになる設定をしたことはありますか?
212login:Penguin:2008/03/20(木) 04:43:24 ID:tEIlyDHp
>>185
187で切り捨てたupdate-initramfsはやんないの?
ohci_hcdドライバがどこでロードされるか俺も知らないけど、
もし、initrdでロードを実行してたなら、update-initramfsでinitrdを
更新しない限り変更した設定は反映されないと思う。

initrdを展開したなかにblacklistってファイルないっけ?
213185:2008/03/20(木) 04:44:30 ID:pIPss+F3
>>211
すみません、 emacs使ったことありません。
214185:2008/03/20(木) 05:01:15 ID:pIPss+F3
>>212
レスありがとうございます。
update-initramfsについては調べました。
ただ、ロードのタイミングがはっきりわかっていないので
周辺の情報を集めているところでした。
(起動しなくなったら怖いなとびびってたのもあります)
initrdの中のetc/modprobe.d/blacklistというファイルがありました。
ここに登録してinitrdをアップデートして読み込まれなくなるか確認してみます。
215185:2008/03/20(木) 06:23:38 ID:pIPss+F3
update-initramfsではblacklistをどう反映させていいかわかりませんでした。
なので、/boot/initrd.img-2.6.18-6-686を展開しそのなかのetc/modprobe.d/blacklistに
blacklist ohci_hcdをくわえ
find . | cpio -o -H newc | gzip > ../initrd.img-2.6.18-6-686
で元にもどし/boot以下のファイルと入れ替え再起動しましたが
lsmod | grep ohci_hcd
ohci_hcd 18276 0
usbcore 112644 2 ohci_hcd
読み込まれてしまいました。
なんでblacklistで制御出来ないんだろorz
216185:2008/03/20(木) 07:26:52 ID:pIPss+F3
連続すみません
若干進展がありました。

まずはアドバイスくださった皆様にお礼を言わせていただきます。
ありがとうございました。

いろんなパターンでテストしたところ
/boot/initrd.img-2.6.18-6-686の中のblacklist
および/etc/modprobe.d/blacklistの両方で指定すると読み込まれなくなりました。
また、rebootも出来ました。←かなり嬉しい

一度読み込まれた状態でmodprobe -rではreboot駄目だったのに
最初から読み込まれない場合はrebootがきくようです。

なので次の段階は
オプションの指定やモジュールの入れ替えを
initrdと/etc/modprob.dでやれればと思います。
217login:Penguin:2008/03/20(木) 08:27:51 ID:NjekK4rM
新聞取ってる?
裏が白紙のチラシある?
なかったら100円ショップでメモ帳買ってくるといいよ。
ここは君の日記を公開する場所じゃないから。
218login:Penguin:2008/03/20(木) 08:30:09 ID:6NIva9wJ
>>217
さっさと予備校の事前課題終わらせとけよ。
219login:Penguin:2008/03/20(木) 10:02:55 ID:TStus2RV
いまだにチラシの裏とか言っているやつがいたのには驚いた
220login:Penguin:2008/03/20(木) 10:50:24 ID:P8AOICIg
あー。俺もまさにリブレットL3に入れていて、たまのカーネル更新のときに再起動が
できないなー。とは思っていた。面倒だから諦めてたけどw
うまく再起動できるようになると、確かにちょっとうれしい。
221login:Penguin:2008/03/20(木) 11:21:13 ID:9yN6tvEB
個人的に>>185の関連は興味深かった。乙。
222login:Penguin:2008/03/20(木) 11:29:37 ID:f2TUgK2M
223login:Penguin:2008/03/20(木) 11:57:15 ID:BoEecjFZ
>>209
language-envは適当に山盛りにしただけに見えて実は
長期間の熟成で結構繊細に調整されてる
etchをたくさんの人が使いまくってノウハウが溜まれば自動設定できるようになるかも

ってことは今の人は泥臭く試行錯誤しなきゃならんってことでもあるけどな
224login:Penguin:2008/03/20(木) 11:57:43 ID:1cu4/stx
>>216
> なので次の段階は
> オプションの指定やモジュールの入れ替えを
> initrdと/etc/modprob.dでやれればと思います。
あまり流れを読んでいないけど、単にinitrd内にblacklist入りさせといたままで
/etc/modprobe.d/ohci_hcdにoptions書いとくだけでいいんじゃないの?
どうせboot時にはUSB使わないでしょ。
225185:2008/03/20(木) 12:13:32 ID:pIPss+F3
おはようございます。

皆様ほんとうにありがとうございました。
debian初心者でほんとわからないことだらけでしたが
皆様のあたたかいアドバイスで何とか解決することができました。
目障りに感じた方は申し訳ございませんでした。

その後様々なパターンでテストしました。
initrd内のblacklistで指定、通常のblacklistの両方で指定し、
起動時にohci-hcdが読み込まれていない状態で手動でmodprobeすると
wakeupで画面が埋め尽くされることも無く普通にモジュールがロードされました。
また、ohci-hcdが読み込まれていない状態でusbにメモリなどをさせば
自動でモジュールがロードされました。
この状態でrebootすると再起動がかかりました。

結局initrdの中でblacklistの設定をし
通常の/etc/modprobe.d/blacklistの方では指定しないように
(initrdで読み込まないで通常のブートプロセス内でロードさせるようにした)
特にオプション等指定しなくてもreboot出来るようになりました。
initrdでohci-hdcが読み込まれた時のみrebootに不具合がでるという謎な現象でした。

usbにメモリさして手動でマウントさせ中身を読めることも確認しました。
なのでこれで解決したと思います。
ありがとうございました。

librettoに最小インストールしたばかりでまだ何も設定していない状態なので
これから使えるよにするのにいろいろ設定いじります。
その際にわからないことがありましたら、また相談させてください。
(うざくならない程度に気をつけたいと思います)
ほんとうにありがとうございました。