トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

u-boot on SL-C700

[NetBSD][zaurus]

Uボート(ドイツ語: U-boot、英語: U-Boat)は、第一次世界大戦から第二次世界大戦の時期のドイツの潜水艦の総称である。

-- by Uボート - Wikipedia

ではなく。

Das U-Bootは、複数のアーキテクチャに対応したブートローダである。

-- by Das U-Boot - Wikipedia

こっちのお話。

u-boot化でできること・できないこと

  • C700でもGENERICのカーネルで起動できる
  • SDカード1GB制限がなくなる(8GBのSDHCからの起動を確認)
  • 電源ONで直接NetBSDカーネルを読み込むので起動時間が大幅短縮(手元の環境だと電源ONから10秒以内でわさび文字)
  • Linuxとの同居は今のところ不可

ダウンロード

  • u-boot-2009.11_2012-03-14_bin.tar.xz(200)
    • NetBSD/zaurus お試し用 1GB SDイメージ向け。
    • 実際には「第1物理パーティションがFAT」かつ「直下に"netbsd"という名前でカーネルバイナリがある」ことが条件なのでそれさえ満たしていればOKのはず。
    • SL-C700で動作確認しているけどC750/C760/C860でもたぶん動くかもしれず。
    • SL-C3x00/C1000では動かないので間違ってもインストールしないこと。

書き換え手順

基本的にカーネル更新と同じ。Flashの書き換えを伴うので(D+M)によるservice menuからNAND backupをあらかじめ取っておくのを推奨。参考1参考2

  • 展開した"zImage"と"updater.sh"をSDカードの直下に保存する。念のためSDカードには他のファイルは入れておかないこと。
    • 書き換えはメンテナンスカーネルで行なわれるので1GB以下のでないとダメかも
  • 電源OFF(電池抜き)した状態のZaurusにSDカードを挿入する。
  • ACアダプタを接続し、「OK」キーを押しながら電源ONする。
  • 『メンテナンスメニュー』が起動するので十字キーでフォーカスを「4.アップデート」に合わせてEnter。
  • 『アップデート経路』で「3.SD」を同様に選択。
  • 確認画面になるので「はい(Y)」を選択。

後は「黒画面」→「SHARPロゴ画面」→「更新処理」と流れていき、更新が完了すると自動的に再起動がかかる。再起動後にちょっと変わったロゴが表示されていればインストール完了。インストール直後の起動だとSDカードにnetbsdバイナリがないためロゴ表示から先に進まないので電池抜きで強制電源OFFしてください。ちなみにこのときシリアルコンソールでコマンド入力待ちになっているのでシリアル経由で命令を叩くことも可能。

NetBSD/i386でソースからビルドする

正規の手段ではないのでもっと妥当な方法があるかもしれません。とりあえず動けばいい人向け。

  インストール

  • pkgsrcから"bash","gmake","suse-11.3"を入れておく
  • 本家からarmv5te向けのツールチェイン(eldk-eglibc-i686-arm-toolchain-gmae-5.1.tar.bz2)を取得する
  • ツールチェインを適当なところに展開する(とりあえず/emul/linuxの下にした)
  • 展開したツールチェイン一式が/optから見れるようにシンボリックリンクを貼る(ln -s /emul/linux/opt /opt)
    • ここ重要ポイント。なんでかってーとツールチェインの一部が/optからの絶対パスでシンボリックリンクしていやがるせい

  ビルド

  • 環境変数BASHにbashのパスを指定
  • 環境変数PATHにインストールしたツールチェインへのパスを通す
  • 環境変数CROSS_COMPILEに"armv5te-"を指定
  • コンパイルの作業ディレクトリはmake時にOで指定可能

…というのを毎回入力するのは面倒すぎるのでこんなスクリプトをbuild.shとして用意しておくと便利。(パッチにも入れてある)

#!/usr/bin/env sh

BASH=/usr/pkg/bin/bash
export PATH=/emul/linux/opt/eldk-5.1/armv5te/sysroots/i686-eldk-linux/usr/bin/armv5te-linux-gnueabi:$PATH
export CROSS_COMPILE=armv5te-

gmake O=obj $@

あとは"./build.sh corgi_config"で対象を指定して"./build.sh all"を叩くと./obj以下にブツができます。

現状

  • u-boot-2009.11_20120314_patch.tar.xz(158)
    • 起動と同時にSDからnetbsdカーネルファイルを読み込んで実行する対応の追加
    • NAND読み込みの実験パッチ(うまく動かなかったので無効化)
    • 起動ロゴの変更
  • u-boot-2009.11_20120214.tar.xz(155)
    • 画面真っ黒だと起動したのかどうかもわからないので確認も兼ねてロゴを出力
    • ロゴ画像は480x640の16bpp BMPファイルをgzipしただけなので容易に差し替え可能(u-bootが元々持っている機能)
    • 無圧縮BMPを放り込んだら起動でエラーを吐かれたので、あまりイメージが大きすぎるとダメかもしれない
    • ロゴ画像の展開・表示とmmc初期化は全く関係ないのに順番に依存しているとか怪しいところがもりだくさん
  • u-boot-2009.11_20120212.patch.xz(145)
    • w100ドライバ初期化とバックライト点灯を追加
    • GENERICカーネルを喰わせてもわさび色の文字が表示されるように
  • u-boot-2009.11_20120129.patch.xz(194)
    • C700でSDとSDHCの認識できるところまで
    • mmcinfoを実行してからでないとfatls mmcとかでフリーズするらしい
    • 画面表示は一切行わないのでシリアルコンソール必須
    • objcopy -O binaryしたnetbsdカーネルや、それをmkimageで固めたイメージからの起動はOk、ELFバイナリはNG
    • ついでにAngstromで使用していたkexecbootのzImageも起動Ok

参考文献