2011/04/09日
U-Bootの設定はネットコンソールを使用する。
その為シリアルコンソールはなくても良い。
しかしネットコンソールには表示されない情報がある。
ネットコンソールでは起動しない場合の原因の追究がシリアルコンソールより困難になる。
玄箱 HGのシリアルコンソールを使用する場合の設定は以下のようにする。
| ボー・レート | 57600 |
| データ | 8bit |
| パリティ | none |
| ストップビット | 1bit |
| フロー制御 | none |
| 1 | GND |
| 2 | VCC |
| 3 | RxD |
| 4 | TxD |
RxDは基盤の裏面にショートさせなければいけない場所がある。
これを行わないと入力を受け付けない。
モニタするだけなら必要ない。
またsqueezeにアップグレード後はシリアルコンソールの入力反応が悪くなる。
カーネルのコンパイルを行うが時間がかかるので注意する。
またu-bootでカーネルが読込めない状況が発生する可能性がある。
発生条件はつかめていない。
多分ディスクのサイズ、パーティションのサイズが関係してるようだ。
また試してはしないがGPTディスクも読めないと思う。
第3パーティションの/bootに置いたカーネルが読み込めない場合は第1パーティションの/bootに置いて試してみる。
それでも読めない場合はEMモードの/sbin/mfdiskを使用しパーティションをすべて削除する。
EMモードの/sbin/mkfilesystem.shでパーティション分割とフォーマットを行う。
これで第1パーティションの/bootに置いたカーネルは読めるようにると思う。
パーティションの削除を行う必要が生じた場合に備えて玄箱HG以外でハードディスクを読める手段を用意したほうが良い。
うまく出来ない場合に備えディスク待避は行っていた方が安全だ。
起動確認済みディスク
loader.oの設定が/dev/hda3側もしてあると再起動のたびに/dev/hda1側と/dev/hda3側が切り換る。
事前に/dev/hda3側の設定をやめ常に/dev/hda3側が起動するようしておく。
フラッシュの書込みを行うが失敗すると玄箱HGが起動しなくなる可能性が高い。
フラッシュに書込むときは十分注意する。
またフラッシュの読出しを行う時に間違って書込んでしまわないように注意する。
移行前
移行後
PC側
netcatはネットコンソール用通信ソフトとして使える。
netcatの説明は
オンラインソフトを使え! 「第12回 Netcat」が詳しい。
PC側のOSがWindowsの場合はwin32版のnetcatをインストールする。
netcat win32で検索すれば見つかる。
Jesse's Website - Downloadsからダウンロードできる。
GenBako Kernel Collection u-boot_loaderからもダウンロードできる。
こちらはソースファイルも入っていてファイル名はnc111nt.zipだ。
Jesse's Website - DownloadsとGenBako Kernel Collectionのバイナリは同一のものだ。
PC側がdebianならパッケージがある。
$ sudo aptitude install netcat
アップグレードはsshで接続して行う。
sshクライアントをインストールしていなければ、インストールする。
sshクライアントの設定は「sshクライアントの使い方と設定(Windows TeraTerm + Pageant + PuTTYgen)」に記述してある。
PC側がdebianの場合は「sshクライアントの使い方と設定(debian lenny,squeeze)(CentOS 5.5 x86_64)」に記述してある。
PC側のIPアドレスにネットコンソール用のIPアドレス192.168.10.21を追加する。
DHCPでアドレスを設定するようになっていると追加のアドレスを設定できないので固定の設定に変更する。
現在のネットワークアドレスに属するアドレスを設定し、その上で追加でネットコンソール用のアドレスを追加する。
DHCPから固定のアドレスに切替えた場合はDHCPが割振る範囲外のアドレスを使用する必要がある。
今回使用するU-Bootバイナリのデフォルトで設定されているアドレスは以下である。
| マシン | IPアドレス | ポート番号 |
|---|---|---|
| 玄箱HG | 192.168.10.145 | 6666 |
| PC | 192.168.10.21 | 6666 |
sshを使用する。
設定していなければ設定する。
設定方法は「sshサーバを設定する(debian lenny,squeeze)(CentOS 5.5 x86_64)」に記述してある。
ルートになりホームディレクトリに移動。
$ su
# cd
フラッシュをファイルにバックアップする。
# cp /dev/mtd0 mtd0
# cp /dev/mtd1 mtd1
# cp /dev/mtd2 mtd2
# cp /dev/mtd3 mtd3
/dev/mtdの設定をしていなければEMモードで行う。
EMモードでは/dev/fl1、/dev/fl2、dev/fl3のバックアップを行う。
バックアップファイルは別マシンにもコピーする。
カーネルのソースを入手するのにwgetを使用する。
カーネルのソースはbzip2で圧縮されているので展開するのに使用する。
u-bootイメージをコンパイルする為にuboot-mkimageを使用する。
menuconfigを行うのにncurses-devが必要。
# aptitude install wget bzip2 screen gcc uboot-mkimage ncurses-dev
カーネルのコンパイルは「
玄箱HG Debian 自宅サーバ化総編 最新カーネルに挑戦」を参考にさせていただいた。
またカーネルのコンパイル以外に関しても参考にさせていただいている。
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2
# tar jxpvf linux-2.6.32.2.tar.bz2
# cd linux-2.6.32.2
# make ARCH=powerpc linkstation_defconfig
# cp -p ./.config ./.config.org
# nano ./.config
crtl-wで単語の検索ができる。
CONFIG_SYSFS_DEPRECATEDを検索する。
有効になっているのでコメントアウトし無効にする。
CONFIG_SYSFS_DEPRECATED_V2もコメントアウトし無効にする。
以下の2つの項目がこの通りになっているか確認する。
CONFIG_INOTIFY_USERが有効
CONFIG_SIGNALFDが有効
# make menuconfig
nanoでコメントアウトした項目が正式のコメントアウトの形式に変換される。
# make uImage
# make modules
# make modules_install
# cp -p System.map /boot/System.map
# cp -p arch/powerpc/boot/uImage /boot/vmlinux.UBoot
# scripts/dtc/dtc -f -I dts -O dtb -o /boot/kuroboxHG.dtb -V 16 arch/powerpc/boot/dts/kuroboxHG.dts
エラー状態のパッケージがあるか確認。
# dpkg --audit
hold状態のパッケージがあるか確認。
# aptitude search "~ahold" | grep "^.h"
# dpkg --get-selections | grep hold
ソースリスト修正。
# nano /etc/apt/sources.list
有効行をすべてコメントアウトし以下を追加。
deb http://ftp.jp.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb http://ftp.jp.debian.org/debian/ squeeze-updates main contrib non-free
screenでセッションを張る。
# screen -S upgrade
パッケージリストの更新。
# apt-get update
アップグレード1段階目。
# apt-get upgrade
/bootの内容を第1パーティションの/bootにもコピーする。
# mount /dev/hda1 /mnt
# cp /boot/* /mnt/boot/
fstabを編集し/dev/hdaを/dev/sdaに変更する。
少なくとも/とswapの2箇所は変更する。
シリアルコンソールがttyS0からttyS1に変更になっているのでinittabを修正する。
# nano /etc/inittab
シリアルコンソール用 con:2345:respawn:/sbin/getty 57600 ttyS1 にする
# depmod -a
「
LinkStation/TeraStation/玄箱/PPC/Debian/Squeeze DTC対応U-Bootの作成 コンパイル済みバイナリ」からu-boot-1.2.0-hg.flash.binを取得する。
玄箱用、玄箱HG用に分かれ、さらにRAM版、FLASH版に分かれている。
間違わないようにする。
間違えたら起動不能になる可能性が高い。
wgetではダウンロードできないアドレスになっているので別の方法でダウンロードする必要がある。
lynxを使用すれば玄箱HGからダウンロード出来る。
PCでダウンローロードしてscpで玄箱HGにコピーしても良い。
2011/04/09に取得したファイルのmd5sumはc3ae10f906db089213978b71c2a8f3f1。
ファイルサイズは187488バイト。
# cat u-boot-1.2.0-hg.flash.bin > /dev/mtdblock1
# cat /dev/mtd1 > tmp
# cmp u-boot-1.2.0-hg.flash.bin tmp
cmp: ファイルu-boot-1.2.0-hg.flash.binの末尾
u-boot-1.2.0-hg.flash.binファイルの最後まで同じであることが確認できた。
/dev/mtdの設定をしていなければEMモードで行う。
EMモードでは書込む場所は/dev/fl2だ。
PC側でnetcatを動かす。
windowsの場合はスタートメニューからコマンドプロンプトを起動する。
netcatを置いたフォルダに移動する。
netcatを起動する。
>nc -v -v -n -u -s 192.168.10.21 -p 6666 192.168.10.145 6666
以下のように表示される。
(UNKNOWN) [192.168.10.145] 6666 (?) open
玄箱HGを再起動させる
# reboot
玄箱HGが再起動している間にWindowsのnetcatが起動しているコマンドプロンプトでEnterを何回か押す。
設定が間違えていなければ接続できる。
以下のような表示がでる。
表示内容はハードディスクのモデルやシリアル番号の部分もあるので同じ内容にはならない。
stdin : nc
stdout: nc
stderr: nc
IDE: Bus 0: OK
Device 0: Model: WDC WD15EADS-00P8B0 Firm: 01.00A01 Ser#: WD-WMAVU0779377
Type: Hard Disk
Supports 48-bit addressing
Capacity: 1430799.3 MB = 1397.2 GB (-1364690128 x 512)
Boot in 10 seconds ('s' to stop)...avr_input: Unexpected code: 0x25
's'を押すとU-Bootのコンソールに入る。
ネットコンソールを使用している場合は's'を押した後Enterキーを押す必要がある。
第3パーティションから起動するようにする。
=> setenv hdpart 0:3
=> setenv bootargs root=/dev/sda3
=> setenv bootmhd bootm ${ldaddr} - 7f0000
=> setenv hdboot run hdload bootmhd
カーネルの読込みテストを行う。
=> run hdload
以下のエラーはハードディスクが接続されていない、ハードディスクに電源ケーブルが接続されていない等の状況で起きる。
** Bad partition 1 ** ** Bad partition 1 **
多分このエラーは容量が大きなハードディスクを使用した場合起きる可能性があると思われる。
** ext2fs_devread() read outside partition sector -1979448616 ** Unable to read "boot/vmlinux.UBoot" from ide 0:3 ** ** ext2fs_devread() read outside partition sector -1979448616 ** Unable to read "boot/kuroboxHG.dtb" from ide 0:3 **
このエラーも容量が大きなハードディスクで起こると思われる。
Error (no IRQ) dev 0 blk 1851250109: status 0x51 ** ext2fs_devread() read error - last part ** Unable to read "boot/vmlinux.UBoot" from ide 0:3 ** Error (no IRQ) dev 0 blk 1851250109: status 0x51 ** ext2fs_devread() read error - last part ** Unable to read "boot/kuroboxHG.dtb" from ide 0:3 **
エラーが起きた場合は第1パーティションから読み込むようにする。
=> setenv hdpart 0:1
=> run hdload
第1パーティションで読込みが成功したら以下のように表示される。
Loading 0:1:boot/vmlinux.UBoot 1921101 bytes read 2371 bytes read
成功した場合は起動させる。
=> boot
このU-Bootの設定は保存しておかないと消えてしまう。
起動できる設定を見つけたらsaveenvコマンドで保存しておく。
成功しない場合はパーティションの分割から行う必要がある。
$ su
# screen -S upgrade
# apt-get install udev
再起動。
# reboot
$ su
# screen -S upgrade
# apt-get dist-upgrade
起動スクリプトがLSB(Linux Standard Base)を満たしていない警告が出る。
起動スクリプトをすべてLSBを満たすようにしてsysv-rcを設定しなおすと起動シーケンスをイベント起動に変更できる。
しかしこの変更を行わない。
イベント起動に変更した場合haltで電源が切れなくなり、rebootも出来なくなる。
LSBに対応させてもsysv-rc再設定を行わなければhaltやrebootは正常動作する。
LinkStation/TeraStation/玄箱/PPC/Debian/Squeeze Debian由来でない LinkStation?/TeraStation?/玄箱 独自のファイルに玄箱独自のファイルをLSBに対応させる方法が記述されている。
再起動。
# reboot
完了。