トップ «前の日記(2010年03月05日) 最新 次の日記(2010年04月17日)» 編集

Masa's blog

検索キーワード:

2010年03月12日 zaurus SL-C760 Slackware(ARMedslack) with Angstrom [長年日記]

_ zaurus SL-C760 Slackware(ARMedslack) with Angstrom

zaurus SL-C760Slackwarearm版(ARMedslack)のインストールを試みた。

基本的な戦略は、ARMedslackのユーザランドにAngstromのカーネル類をつっこんで動かしてみるというもの。同様の方法でDebian GNU/Linux on ARMをSL-C760で稼働させている方が居られた(Angstrom + Debian/armel on Zaurus SL-C760)ので、まねっこしてみた。

例によって記憶や思い込みにたよって記述しているので、この通りに行って重大な障害が発生しても何の責任も取れませんのであしからず。

母艦(Slackware-12.2 Intel)にて

$ wget -c -np -l 100 -r ftp://ftp.armedslack.org/armedslack/armedslack-current/slackware/
  • SDHCのパーティション分け(/dev/mmcblk0p1 : VFAT, /dev/mmcblk0p2 : SWAP, /dev/mmcblk0p3 : ext3)
# fdisk /dev/mmcblk0
  • スワップ設定、フォーマット(ext3)
# mkswap /dev/mmcblk0p2
# mke2fs -j /dev/mmcblk0p3
# mount -t ext3 -o rw,noatime /dev/mmcblk0p3 /mnt/card
# cd ftp.armedslack.org/armedslack/armedslack-current/slackware
# installpkg -root /mnt/card */*tgz

Angstromからカーネル等取得

  • Angstromから最新カーネルを含んだrootfsを取得する。
    • Select the machine : c7x0
    • Select the release : unstable
    • Base system : regular (task-base)
    • Select the /dev manager : udev
    • Select the type of image : tar.bz2
    • User environment selection : Console only(残念ながら現時点ではX11を含むrootfsは作成出来なかった)
    • Additional packages selection : All kernel modules

Angstromのカーネル+モジュールをARMedslackに展開

# mkdir angstrom
# cd angstrom
# tar xvjf ../取得したrootfs.tar.bz2
# cd /mnt/card/boot
# (cd /どこか/angstrom/boot && tar cf - .) | tar xvpif -
# cd /mnt/card/lib/modules
# (cd /どこか/angstrom/lib/modules && tar cf - .) | tar xvpif -
# vi /mnt/card/etc/fstab
# sync;sync;sync
# umount /mnt/card

kexecboot(ブートローダ)インストール用SDの用意

  • 別のSDを用意し、先頭にVFATのパーティションを作っておく。
# mount /dev/mmcblk0p1 /mnt/card
# tar xvzf c7x0.tar.gz
# cd c7x0
# cp zImage-kexecboot-2.6.32+2.6.33-rc6-r18-c7x0.bin /mnt/card/zImage.bin
# cp updater.sh.c7x0 /mnt/card/updater.sh

kexecboot(ブートローダ)のインストール前に

私の環境では内蔵フラッシュにはAngstromが既にインストールされている。このままkexecbootをインストールすると、このAngstromが起動できなくなる。kexecbootからブートできるようにするには、上記で取得したAngstromの/boot以下と、/lib/modules以下を内蔵フラッシュに展開しておく。

kexecboot(ブートローダ)のインストール

  • 上記のSD(VFAT)をスロットにセットする。
  • ACアダプタで給電していることを確認する。
  • 本体裏側の電池交換スイッチを「解除(交換時)」側に切り替え、5秒待ってから、「Fn」キーと「HOME」キーを同時に押しながら電池交換スイッチを「ロック(使用時)」に切り替える。
  • 充電ランプ(オレンジ色)が点灯していることを確認して、「OK」キーを押しながら、「電源」キーを押す。
  • メンテナンスメニューが表示されるので、「4.アップデート」を選択する。
  • 用意したメモリカード(「2.CF」または「3.SD」)を選択し、「はい(Y)」を選択する(USBはサポート外)。
  • アップデート(=kexecbootのインストール)が完了すると、自動的に再起動され、kexecbootが起動する。

ARMedslackの起動(1)

ARMedslack(with Angstrom's kernel)を展開したSDHCを挿し、rebootを行うと、kexecbootのメニューにARMedslackのパーティションが表示されるので、カーソルキーで選択し、[OK]する。

おぉ〜!カーネルのブートメッセージが流れて行く!...がしばらく眺めていると、

panic

のメッセージが出てフリーズ。どうやらrootをマウントできないよう。

ARMedslackの起動(2)

ルートデバイスのデバイスファイルを静的に作る必要があるようなので、内蔵Angstromで再起動し、/dev/mmcblk0* をARMedslackの/dev以下に展開(手抜き)。そしてARMedslackから再起動。すると、

kernel too old

のメッセージでフリーズ。

ARMedslackの起動(3)

ARMedslackのglibcはカーネルが2.6.32以降であることが要求される様子(?)。それに対して、ARMedslackにコピってきたAngstromのカーネルは2.6.26なので上記の状態になると推測する。よって、強引ではあるが、ARMedslackの/lib以下にAngstromの/lib以下を強制上書き(!)してカーネルとglibc等の整合を取ってみる。すると...

panic

...えーと、少しは進んだみたいだが、freeing memory ...みたいなメッセージの直後で固まった。

ARMedslackの起動(4)

今度は/sbin/initが見つからなかったよう。ただし、実際には/bin/initは存在しているので、Angstromのカーネルがbusybox版の/sbin/initでないと起動できないと判断した。えーいとARMedslackの/sbin以下にAngstromの/sbin以下を強制上書き(!)。すると...

出ました!login prompt !!

でも

/bin/sh: /lib/libc.so.6 version GLIBC.2.8 not found

みたいなメッセージが出てログインできない。

ARMedslackへのログイン(1)

あーっ疲れて来た。/libをAngstromのそれに置き換えたことの影響が出ている。ARMedslackの/bin以下にAngstromの/bin以下を強制上書き。あっ、それと/etc/passwd, /etc/shadowをいじってrootのパスワードを削除しておく。

ARMedslackへのログイン(2)

rootのログインシェルである/bin/bashでも

/bin/bash: /lib/libc.so.6 version GLIBC.2.8 not found

とのたまう。ログインできない。

ARMedslackへのログイン(ついに!)

rootのシェルを/etc/passwdをいじって/bin/shに変更。

ついにログイン成功!

結論(現時点での)

ログインは出来たものの、ARMedslackがカーネルバージョン2.6.32以降の環境でビルドされているので、Angstromの2.6.26なカーネル+glibcの下では多くのコマンドがマトモに動かなかった。残念ながら現時点では(私の力では)常用する環境とはなりえなかった。

ただし、今後Angstrom環境のカーネルが2.6.32以降の物になれば、かなり希望が出てくると思われるので、そのときに再度試してみたいと思う。