2007年 3月15日
kinnekoさんがおっしゃるようにEABIオンのカーネルでDebianはトラブルが起きそうでいやな感じがするので、EABIをオフにしました。手順はコメントに書いたとおり。LANのLinuxサーバー上にKURO-BOX/PRO用のミニルートを展開してnfsで外からマウントできるようにしておき、 EABIオフでコンパイルしたカーネルでnfsrootでマウントする、という感じ。
nfsrootで起動してしまえば、あとはディスクのパーティションだろうがmkfsだろうが自由自在ですから、思うようにパーティションを作って、そこにミニルートを展開して/etc/fstabを書き換えて起動、と。いずれにしても、シリアルコンソールなしには出来ませんです。
あまり関係ないですけど、KURO-BOX/PROのカーネルはデフォルトの設定でもIP_PNPオン、NFS ROOTもオンでディスクレスnfsrootで起動できるよう作ってあるんですね。そこらあたりが組み込みっぽい。
kurobox:~# cat /proc/version
Linux version 2.6.12.6-mda2 (root@kurobox) (gcc バージョン 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #5 Thu Mar 15 13:26:21 JST 2007
kurobox:~# lsmod
Module Size Used by
snd_usb_audio 64704 1
snd_pcm_oss 51104 0
snd_mixer_oss 16064 1 snd_pcm_oss
snd_pcm 84008 3 snd_usb_audio,snd_pcm_oss
snd_page_alloc 7492 1 snd_pcm
snd_usb_lib 15104 1 snd_usb_audio
snd_seq_midi 7136 0
snd_seq_midi_event 7520 1 snd_seq_midi
snd_seq 56488 2 snd_seq_midi,snd_seq_midi_event
snd_timer 21508 2 snd_pcm,snd_seq
snd_rawmidi 22400 2 snd_usb_lib,snd_seq_midi
snd_seq_device 7720 2 snd_seq_midi,snd_rawmidi
snd 44664 9 snd_usb_audio,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq,snd_timer,snd_rawmidi,snd_seq_device
soundcore 7748 1 snd
KURO-BOX/PROで音楽鳴ってます。
3月 25th, 2007 at 23:05:20
EABI って何?状態だったのですが、ようは構造体のアライメントの互換性のなさが問題になるということなのですよね。
http://jr0bak.homelinux.net/~imai/linux/arm_gcc_badknowhow/arm_gcc_badknowhow-8.html
で引用されているコメントどおり(結論は無視)であれば、kernel EABI, user land non EABI は、
CONFIG_OABI_COMPAT=y
であれば、問題ないのではないでしょうか。玄人志向のカーネルも y ではないかと思っています。n なら、とんでもないクラッシュをしている気がするので。
kernel と kernel module は、EABI 統一する必要があると思いますが。
xfs はコンパイラのアライメントの決め方に依存する部分があるとすれば FS として問題ですね。
3月 26th, 2007 at 11:32:47
UNIXのシステムコールってのを実はよく知らないんですけど、システムコール側が前提にしているアライメントと、システムコールを呼ぶライブラリやなんかが前提にしているシステムコールのアライメントが異なれば、うまく動かないはずですよね。んで、それに関しては、
CONFIG_OABI_COMPAT=y
で対応できるのかなー、と。
xfsのマウントに失敗するのは、恐らくxfsに処理系のアライメントに依存している部分があるから? ではないかと思うのですが(コードを読めば分るですね)、おっしゃるように、そうであればxfsの実装が不味いことになります。
xfsってこれまで使ったこと無いんですけど、確かSGIがcontributeした奴ですよね。xfs-toolsを見る限り高機能っぽいんで、それでKURO-BOX/PROでは採用してみてるんでしょうけど、xfs+EABI/ABI混在環境はちょっと嫌な感じなんかもしれません。検証してないんですけどね、でも異常を起こすのは事実で、xfs w.ABEIのファイルシステムをABIのカーネルでマウントできますがinodeを正しくとれないのか何なのかファイルを見付けることができず起動に失敗します。
kernelとkernel moduleは当然ながら、ABI/EABIを合わせとかないと駄目です。
変なトラブルが起きないとも限らないのでEABIオフで統一しちゃいましたけど、たぶん変なことが起きてなければ、あんま気にすることはないんじゃないでしょうか、、、というのが私的な結論です。
3月 28th, 2007 at 0:33:12
検索していたら Debian ARM EABI port というのが、あるようですね。
http://wiki.debian.org/ArmEabiPort
手元の Kurobox-pro では、いまのところ大した事はしていないので CONFIG_OABI_COMPAT=y で済んでいるのかもしれないです(EABIカーネル + non EABI user land)。検索していたら、互換性の問題が起きたら enum を __u32 にとりあえず置き換えるパッチもあるようですし、何か起きるかもしれないですね。微妙なところでしょうか。
xfsはなぞですね。本家の ML の検索には、そういう話はでていませんでした。なにか問題があるんでしょうが。
http://oss.sgi.com/archives/xfs/
3月 28th, 2007 at 13:11:27
そのページは調べているときに見たような記憶があります。確か、EABI portはちょっと…って感じですよね(パッケージ古かったりとか)。
私の方は、カーネルおよびユーザーランドを非EABI化していて特に問題は起きてないんですけど、MarvellはEABI推奨みたいですから、非EABIは非EABIなりに、なんかトラブルが起きそうな予感もします。
xfsの方はありそうなトラブルではあるような。ディスクから読んできたまま構造体に突っ込むとかしてれば、さよならですもんね~……なーんて他人ごとのように言ってないで自分でコード読めという話ではありますね~。
4月 14th, 2007 at 6:44:09
BAK です.
リファラをたどってきました.
まず,CONFIG_OABI_COMPAT=y については,Kconfig の説明どおりならば非 EABI のユーザランドをサポートするはずなのだけど,私が試した限りでは apache とかが動かなかったような記憶があります.
ABI 変換がイマイチのようです.
ソケット回りは構造体の嵐ですからね
あと,gcc での EABI を指定するオプションがいまひとつしっかり定まっていないあたりも「まだまだ早いかな」という気分にさせてくれます.
あと,xfs については,Xscale IOP シリーズのプロセッサ対応パッチに含まれている修正で動いたかな.
patch-2.6.10-iop1 なんて名前でぐぐれば出てくると思います.
ただ,ここらも EABI でコンパイルすると,このパッチが無くても動作するのだけど.
でわでわ
4月 16th, 2007 at 12:03:18
詳しい説明ありがとうございます。
xfsのパッチ見ましたが簡単な物ですね。これでOKなら、Debian化したなら非EABIで動かすのが安全というのが結論でしょうか。
ちょっと今、玄箱どころではない状況(ちと忙しい)ですが、仕事があけたら安全なDebian化に取り組んでみます。