トップページ⇒linux
278コメント95KB

Linuxはカーネルからドライバを完全分離する時が来たね

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin2012/03/12(月) 04:08:04.12ID:khwvZHK+
遅すぎるぐらいだが。
0243login:Penguin2012/05/03(木) 14:36:30.56ID:xdSKp7k9
>>241
直接読み書きする手段があるかどうかは関係ない。

違うメーカーのUSBキーボードであっても
結局はキーを入力するという同じ機能を提供している。

ドライバはそういう違うメーカーの物を
同じように見せるもの。
0244login:Penguin2012/05/03(木) 15:33:56.52ID:vA9elne1
>>243
複数の機種で動かすのがドライバーではなく、
別に単一機種で動かしてもドライバーだよ
誤解しているよね君
0245login:Penguin2012/05/03(木) 18:00:06.87ID:b1/f/36O
>>242
流通量の少ないデバイスなんかでは、そういうポリシーのごく単純なドライバを書いて
複雑なことは全部ユーザランドでやることもある。

でも普通は抽象化が不十分だと相互運用性が低くて使いにくいからやらない
0246login:Penguin2012/05/04(金) 16:06:47.25ID:ulpq0FrP
OSレベルじゃなくライブラリレベルでももちろん構わないんだけどね
0247横レス2012/05/05(土) 16:42:19.72ID:2uJ9hScj
>>241-242
Linuxカーネルがversion 1の頃は、
そういうユーザランドのドライバ相当のコードたくさんあったよ。
昔のLinuxはroot権限で怪しいメモリもアクセスできたので。
けどこれがシステムの不安定さを招いているので辞めた。

偉い人達の書いたドライバさんは「保護モード」で動いてる。
0248login:Penguin2012/05/06(日) 17:49:43.51ID:iinhuikV
カーネルモード、ユーザーモードてあんまり関係ない。
OSのインターフェースにどう合わせるか、そこがバラバラなのが問題。

単純なLEDを点けるだけであっても、例えばLEDデバイスをオープンして
そのあとどのように操作すればLEDのON/OFFが出来るか?という部分。

ここに決まりが無いんだわ。write()の下に実装してもいいし、ioctl()の実装でもいい。
そのあたりの実装がドライバー独自って状況を生み出す。

カーネル自体が変更されると影響受けるのでまた再実装する。
なことを繰り返してるうちに特定のカーネルバージョンでしか動かないドライバーが出来上がる。
(特にARMはこれがひどい、切り離すなんて絶対無理)
0249横レス2012/05/06(日) 18:54:37.73ID:CUcotG37
元の話はどうしてユーザランドでやってはいけないのかってことでしょ?
インターフェースの統一も含めて。
0250login:Penguin2012/05/06(日) 20:47:10.53ID:R63eHi+y
AndroidでGoogleがフレームワークでIF定めたような作業が必要だな
カーネル開発者がやるとは思えんが…
0251login:Penguin2012/05/06(日) 21:34:50.37ID:tdwvS5oW
素朴な疑問で悪いんだが、カーネルバージョンが変わると、
ドライバーを開発する上で、具体的に何が変わるんです?

あまり詳しくないので、「具体例」を出してわかりやすく説明してくれると嬉しい。
0252横レス2012/05/06(日) 22:01:12.84ID:CUcotG37
USBシリアルデバイスのbulk転送対応がオンオフしかなかったのが、
bulk必須、bluk可能、bulk不可能の3つになり、
ドライバのstructのビットフィールドが1bitから2bitになり、
可能な値は0/1だったのがenumになった。
おまけにフィールド名も変わった。(そのままではちょっと不適切な名前なので)

だからバイナリ互換性もないし、ソース互換性もない。

要するにカーネル内のインターフェースの変更。こういうのはあちこちで起きる。
こういうのを固定して変更しないと、互換性のためにプログラマが我慢したり、
苦労したりするので、開発者が逃げていってしまう。
開発者が多いことが重要なのは、Linuxと他のPC UNIXを比べればよく分かる。
0253login:Penguin2012/05/06(日) 23:25:44.51ID:vMlcB1qP
ソース互換性無くなるのはひでーよなぁ。
0254login:Penguin2012/05/07(月) 00:19:10.20ID:Lt2ZES7q
>>252
ありがとうございます。
1.USBシリアルデバイスのbluk転送対応がon/off ->
   bulk必須・bulk可能・bluk不可能の3種類に変更(よくわからんけど、必須っていうのが追加ってこと?)
2.構造体名はちょっと書いてないのでわからないけど、とにかく1bitの0/1で表してた部分が
   2bitで表されるようになり、enum になった。
  (0/1で表されていた部分は、2bitに増やされた時に意味も変更されたのだろうか?)
3.何かはわからないけど、フィールド名が変更になった。

ちょっと聞くだけでは、3.の変更以外、ソース互換性がないかどうかは判断できませんが、
互換性がないというからにはないんでしょう。

そういう、ソース互換性がないというのは、「あちこちで起きる」「開発者が逃げていってしまう」
と書いてあるからには、頻繁に起きていると思うのですが、
マイナーバージョンアップでしょっちゅう起こってるんです?

そうだとすれば、Linuxには膨大なドライバーソースが含まれている(ドライバーだけでも1000万行近く?)ので、
マイナーバージョンアップが変わるごとに、全部メンテナが変更していることになりますけど、
それってあまりにも大変ですよね?

私があまり知らないだけだからだろうけど、話を聞くだけだと深刻な問題に思えます。

この問題って、他のどこで議論されてるか知っていれば教えて下さい。
どのように解決しているのかも知りたいので、参考にしたいです。
0255横レス2012/05/07(月) 00:25:05.86ID:Cj7ymg+V
しょっちゅう起きてない。
0256login:Penguin2012/05/07(月) 00:39:57.08ID:Lt2ZES7q
>>255
そうだったんです?>>11他多数のレスを見る限り、
カーネルバージョンが上がる度に構造体が変更されているように勘違いしてしまいました。

ただ、ドライバー部分(1000万行近く?)全てとはいわずとも、マイナーバージョンアップのたびに
何百万行を調べる余裕はとてもあるようには思えないので(仮にそうだとしたら大問題)、
そうなのではないかとも思っていました。

一つ疑問が解決した感じです。
0257login:Penguin2012/05/07(月) 10:41:18.41ID:uqtLgDw3
>要するにカーネル内のインターフェースの変更。こういうのはあちこちで起きる。
>こういうのを固定して変更しないと、互換性のためにプログラマが我慢したり、
>苦労したりするので、開発者が逃げていってしまう。
ドライバーの内部的な変更は早々あるもんじゃないでしょ
やってる人の回転?がいいのがlinux
0258login:Penguin2012/06/24(日) 02:29:53.58ID:DUNs0UrU
ヴァーチャルファイルシステムみたいにI/F固定できないのかね
0259 忍法帖【Lv=11,xxxPT】 【東電 73.9 %】 2012/07/04(水) 19:37:49.34ID:XSv1hCM2
test
0260login:Penguin2012/07/26(木) 21:16:29.35ID:gEKA9x+l
こんなに恐ろしく肥大化しているのにカーネルから古いインターフェースを
削除するとかありえないわ。サポートしないのはいいとして削除したら
何もできなくなる。

むやみに増やしすぎたドライバーはハードウエアが実装されていないので
動かないダークな分部で満ちている。
基本ネットワークだけ(無線も含む)サポートすれば他は後付で対応するべき。
HDDのドライバも後付で何の問題もなしで最低はローダーレベルでの
RAMDISKで起動できればいいだろ。
0261login:Penguin2012/07/27(金) 02:02:54.33ID:q7PvhmtZ
日本語でおk
0262login:Penguin2012/07/27(金) 12:22:43.61ID:SllXP148
なるほど。ネットワークブートすればいいんじゃね?
0263login:Penguin2012/07/30(月) 06:18:37.54ID:486wwef+
>>61
なるほど。
例えば、arch/*/configs/下にあるdefconfigファイルの数を較べると、
・ARM 125個
・x86: 2個(i386とx86_64)
linuxの歴史的なことを考えれば、x86に対してARM多過ぎ。
もちろんdefconfigの数が問題なのではなく、ドライバがてんでバラバラなことですね。

ドライバ改造してるんだけど、2.6.xと3.2.xと3.4.xとで全然関数IFが異なってて面倒です。
割と新しいI/F規格だし仕方ないのだろうけど。
0264login:Penguin2012/07/31(火) 18:39:33.43ID:JdT2TbRv
>>263
cpuのアーキテクチャについて一度勉強したほうがいいよ。
0265login:Penguin2012/08/01(水) 20:38:57.09ID:vTI9Jmma
>>263
もしかしてCPUの略語の略をしらないの?
単語として知識を暗記(合理化)しちゃったの?
0266login:Penguin2012/08/08(水) 02:32:34.01ID:uudX+7lg
カーネルのドライバー分離というと
MS-DOSのIO.SYS(ドライバ)MS-DOS.SYS(カーネル)みたいな状態か?
0267login:Penguin2012/08/18(土) 00:04:10.74ID:AFOOumUe
複数の違うアーキテクチャーのバイナリーを混在させるカーネルって
インチキ臭いよな。
0268login:Penguin2012/08/23(木) 23:19:54.43ID:vsdrNnIk
カーネルのドライバー分部と抽象的なOS機能をソースレベルやコードで分離する
必要はないとしても、この世にある全てのハードウエアを一枚板のように
混ぜ合わせるのは良くないね。カーネルが動作する段階では一枚板でいいだろうけど
そのPCに適合するカーネルに動的に編集されて不要な分部は削除されるべき。
例えばinetdで書き換え可能なRAMDISKとしてカーネルをファイルではなく
動的に編集可能なディスクイメージとしてのRAMDISKとして実装し、非実装な
機能分部は多機能(フル実装)の編集する前のinitrdとて存在させておき。
必要において起動中に削除実装ができるようにするカーネルファイルシステム
というのが必要な気がする。
PnPで汎用のカーネルは動的に繋がる新しいハードウエアを認知する為の機能があり
それはアプリケーションのように後天的に実行されるべきで先天的に読み込まれる
のは多様性が膨らむと資源の無駄遣いとシステムの起動の遅さに繋がる。
0269login:Penguin2012/08/24(金) 09:49:29.74ID:IHiydYt7
長い。 3行で
0270横レス2012/08/24(金) 11:02:30.28ID:RNK6oyOp
デバイスドライバのダイナミックロード機能を知らないみたいだな。
0271login:Penguin2012/08/29(水) 14:25:33.40ID:DEjcO5E1
>>256
変更は毎回起きるわけじゃないけど、結構カーネルのマイナーなアップデートでも変更があるので困る。
他のOS(Windows,BSD,UNIX)などに比べるとLinuxは頻繁に変更があると言わざる得ない。
0272login:Penguin2012/08/30(木) 12:19:13.72ID:IaFygKFm
LTSカーネルつかえばいいじゃん(いいじゃん)
0273login:Penguin2012/09/17(月) 19:48:11.24ID:AZJsxh/n
>>271
頻繁に変更が起こるのなら、
具体的にどのバージョンでどこが変更になったか言えっつってるんだろ。

今まで、変更になってソース互換性もなくなったという
構造体名の具体例は一度も出てない。

マイナーアップデートで変更がありまくるのなら、
数百は言えてもおかしくないはずなんだけど・・・
0274login:Penguin2012/09/18(火) 06:02:12.08ID:Yt5HyjCS
>>273
コミットログみれば?
0275login:Penguin2012/09/23(日) 21:15:35.69ID:vJajxKe4
>>274
下位互換性がないのなんんて、殆ど見たことないよ。
そもそもカーネル2.4時代のドライバも動く奴あるし。

そもそも、ドライバだけで数万行のコードがあるのに、
マイナーアップデートでソース互換性がなくなるとすれば、
変更のあった部分全てやり直していることになるんだけど、
実際そんなことは滅多にやってないでしょ?

それと、ドライバーのインターフェイスが頻繁に変わってるって言っていた奴も
いるけど、どこがどう変わったのか、すっげー興味あるから
教えてくれないかなぁ・・・。
0276login:Penguin2012/09/23(日) 21:17:06.46ID:vJajxKe4
>>275
数万とかw間違えた。数百万ね。
0277login:Penguin2012/09/23(日) 21:45:20.56ID:vxVhbaWP
file_operations構造体とか互換性なくなってたよなー
0278login:Penguin2012/09/24(月) 06:52:06.87ID:cJHKRjzt
>>275
マイナーアップデートで大幅な変更とかしないよ。メジャーの間違い?

あと、変更点見たいならgit logで確認したらいいよ。
■ このスレッドは過去ログ倉庫に格納されています