2014年03月09日

HDL-GXRに最新の2.6系カーネル(2.6.39.4)を入れる

2.6.28用のカーネルパッチ(「HDL-GXR 対応 linux カーネルパッチの使い方」)を、2.6.39.4 に適用できるように書き換えてみた。
完全に理解してやっているわけではないので、間違いがあるかも知れず、ちゃんと動くかどうかも検証してない。
使ってみようという人は、無保証・自己責任でお願いします。

hdl-gxr-kernel-2.6.39.4.patch カーネルパッチ2.6.39.4用
hdl-gxr-config-2.6.39.4.txt .configサンプル

2.6.28の時に施したカーネルオプションを強制的に埋め込みオプションにする改変は、CONFIG_CMDLINE_FORCE ができたので、やめにしてこっちを使用する。
2.6.28の.configを使う場合には、CONFIG_SYSFS_DEPRECATED をオフにする。
# cd (どこか)
# tar xvfj linux-2.6.39.4.tar.bz2
# cd linux-2.6.39.4/
# patch -p1 < ../hdl_gxr_kernel_2.6.39.4.patch
patching file arch/arm/boot/compressed/head.S
patching file arch/arm/kernel/head.S
patching file arch/arm/mach-orion5x/Kconfig
patching file arch/arm/mach-orion5x/Makefile
patching file arch/arm/mach-orion5x/hdl_gxr-setup.c
patching file arch/arm/tools/mach-types
# ARCH=arm make oldconfig
(ENTER連打)
# ARCH=arm make menuconfig
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules
ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=(どこか) make modules_install
:

簡単なまとめはこちら。一応、コンパイル済みのカーネルとモジュールも作った。

hdl-gxr-2-6-39-4usoinfo.png
これでUSB無線LANも使えるようになったし、省電力サーバになりそうだ。
posted by usoinfo at 08:24 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2014年03月08日

HDL-GXRをSqueeze化する

Lenny化し、カーネルも2.6.28になったHDL-GXR。これでSqueezeにできる用意が調ったわけである。いざアップグレードしようとしたが、aptでアップグレードできないので、debootstrap でrootfsを作り、入れ替えることでSqueeze化することにした。

1. 用意する物
  1. カーネルを2.6.28にしたHDL-GXR
  2. Linuxが動いているPC
  3. USB-SATA接続キット


2. HDL-GXRでSqueeze用のrootfsを作成
HDDの空き容量が結構ないとダメなので、ディスク容量が足りない時は、外付けディスクなどを使用。
以下の例では、/opt/landisk 以下に作成する。/opt/landisk/debootstrapにdebootstrapを置き、rootfsは/opt/landisk/squeezeに作成。

# mkdir -p /opt/landisk/debootstrap
# cd /opt/landisk/debootstrap
# wget http://ftp.jp.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_1.0.26+squeeze1_all.udeb
# ar -x debootstrap-udeb_1.0.26+squeeze1_all.udeb
# tar zxvfp data.tar.gz
# export DEBOOTSTRAP_DIR=`pwd`/usr/share/debootstrap
# export PATH=$PATH:`pwd`/usr/sbin
# mkdir -p /opt/landisk/squeeze
# debootstrap --arch=armel squeeze /opt/landisk/squeeze http://ftp.jp.debian.org/debian
(略)
I: Base system installed successfully.
#

結構時間が掛かるので、しばらく待つ。終わったら、
# mount -t proc proc /opt/landisk/squeeze/proc
# chroot /opt/landisk/squeeze

最低限の設定をここでする。
# dpkg-reconfigure tzdata
(タイムゾーンをAsia/Tokyoに設定)

# passwd
(rootのパスワードを設定)

# vi /etc/apt/sources.list
(Squeezeのsources.listを設定)
--
deb http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free]
--

# apt-get update
# apt-get upgrade
# apt-get install udev openssh-server
(システムに必要なudev、ログインに必要なsshdをインストール)

# vi /etc/network/interfaces
(ネットワーク設定、DHCPでアドレスを取るようにしておく)
--
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
--

# vi /etc/fstab
(マウントポイントを設定しておく)
--
proc /proc proc defaults,nosuid,noexec 0 0
/dev/sda1 /boot ext3 defaults,rw 0 0
/dev/sda2 swap swap defaults 0 0
/dev/sda3 / ext3 defaults,rw 1 1
--

# apt-get clean
# exit

設定したらchrootを抜け、カーネルモジュールを配置する。
今走ってる/lib/modules/2.6.28 をコピーしてもいいし、前作ったtgzが残っていればそれを展開してもいい。
# mkdir -p /opt/landisk/squeeze/lib/modules
# cp -arp /lib/modules/2.6.28 /opt/landisk/squeeze/lib/modules
あるいは前回のlib.tgzを使って
# tar xvfz lib.tgz -C /opt/landisk/squeeze

最後に、tarで固めて、ファイルをどこかに取っておく。
# umount /opt/landisk/squeeze/proc
# tar cjvf /opt/landisk/squeeze-rootfs.tar.bz2 .
(squeeze-rootfs.tar.bz2 このファイルはどこかに取っておく)


3. HDDを取り外して別マシンでマウント、作ったtarを展開
HDL-GXRをシャットダウンしてストレージを取り外し、別のPCに接続(ここでは取り付けたHDDがsdbの前提)。
バックアップを取っておくなら
# mount /dev/sdb3 /mnt
# cd /mnt
# tar cjvf /export/landisk/lenny-rootfs-backup.tar.bz2 .
# cd /
# umount /mnt

こんな感じ。
しかる後、sdb3 を新しいものに入れ替える。
# mkfs.ext3 /dev/sdb3
# mount /dev/sdb3 /mnt
# tar xvfj /export/landisk/squeeze-rootfs.tar.bz2 -C /mnt
# umount /mnt


4. HDL-GXRに繋いでブート
うまくいけば、めでたくHDL-GXRがSqueezeになっているはずである。

作ったカーネルとrootfsを一応置いておく。簡単なまとめはこちら
カーネルとモジュールは、iptables関係・ipv6・USBウェブカム・USB無線LANなど、ごちゃごちゃと要らない物も入っているので、作り直した方がいいかも。

kernel hdl-gxr-kernel-2.6.28-20140308.tar.bz2
rootfs hdl-gxr-squeeze-rootfs-20140308.tar.bz2
これをディスクに放り込めば、とりあえずSqueezeが動く。はず。
posted by usoinfo at 17:32 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

シリアルコンソールがなくても、HDL-GXRのカーネルを2.6.28に入れ替える

Lenny化したHDL-GXRであるが、Squeezeにするためには、カーネルが2.6.26以降でなくてはならない。OLP2.0のカーネルは2.6.12なので、カーネルを入れ替える必要がある。

カーネルパッチは、2.6.28のものを作ってらっしゃる方がいるので(「HDL-GXR 対応 linux カーネルパッチの使い方」参照)、コンパイルはできるのだが、これをブートさせるのにはシリアルコンソールを繋いで、u-bootにカーネルパラメータを与えなければならない(と思う)。
UARTの口は基盤にスルーホールがあいていて、繋げば即いけるかと思わせるがそうでもなく、TTL-CMOSレベル変換回路がないとダメである。あいにく持っておらず、通販で買おうにも注文して届くのに時間が掛かる。待ってられない!
ということで、シリアルコンソールがなくても無理矢理カーネル2.6.28をブートさせちまおう、という手順の記録。

1. 用意する物
  1. クロスコンパイルするDebian Squeezeが動いてるPC(※VirtualPCでもいいし、下のPCと同じでもいい)
  2. Lenny化したHDL-GXR
  3. Linuxが動いているPC(失敗した時用)
  4. USB-SATA接続キット(失敗した時用)
時間が掛かってもいいなら、HDL-GXR単体だけでも可能。

2. クロスコンパイル環境を作る
セルフコンパイルするならこの手順飛ばして可。
Squeezeが動いてるPCで、/etc/apt/sources.list にemdebianを追加する。# vi /etc/apt/sources.list

(追加)
deb http://www.emdebian.org/debian/ squeeze main

# aptitude install emdebian-archive-keyring
# aptitude update
次いで、コンパイルに必要なツールをインストール。# aptitude install build-essential ncurses-dev \
uboot-mkimage libc6-dev-armel-cross gcc-4.3-arm-linux-gnueabi \
binutils-arm-linux-gnueabi
3. カーネルにパッチを当てる
カーネルソース、パッチをダウンロードして、パッチを当てる。# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz
# tar xvfz linux-2.6.28.tar.gz
# wget -O hdl-gxr.diff \
"http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?plugin=attach&refer=%C6%FC%B5%AD%2F2008-12-09%2FHDL-GXR%20%C2%D0%B1%FE%20linux%20%A5%AB%A1%BC%A5%CD%A5%EB%A5%D1%A5%C3%A5%C1&openfile=hdl-gxr.diff"
# wget -O hdl-gxr-config \
"http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?plugin=attach&refer=%C6%FC%B5%AD%2F2008-12-11%2FHDL-GXR%20%C2%D0%B1%FE%20linux%20%A5%AB%A1%BC%A5%CD%A5%EB%A5%D1%A5%C3%A5%C1%A4%CE%BB%C8%A4%A4%CA%FD&openfile=dot.config"
# cd linux-2.6.28
# patch -p1 < ../hdl-gxr.diff
# cp ../hdl-gxr-config ./.config

4. カーネルソースをいじくる
u-bootが渡してくるカーネルオプションを無視して、カーネルに埋め込んだオプションを使うようにしてしまう。
arch/arm/kernel/setup.c の 608行目あたり、parse_tag_cmdline()の中を書き換える。// arch/arm/kernel/setup.c L.608

static int __init parse_tag_cmdline(const struct tag *tag)
{
// strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
strlcpy(default_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);

return 0;
}
ソースを変更したら、カーネルのconfigをいじる。
# ARCH=arm make menuconfig
設定をいろいろする。
必ず設定するのは、
Boot options ->
Default kernel command string
console=ttyS0,115200 root=/dev/sda3 ro mem=128Mとする。(ここが4.で渡されるカーネルオプションになる。と思う)。
もしSqueeze化するなら、
General setup ->
Create deprecated sysfs files
をオフにする。
.configで
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/sda3 ro mem=128M"
CONFIG_INOTIFY_USER=y
CONFIG_SIGNALFD=y
# CONFIG_SYSFS_DEPRECATED_V2 is not set
(下3つはSqueeze化するときは必要)となる。

5. コンパイルして、HDL-GXRに新しいカーネルを入れる
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=(どこか) make modules_install
※これで、arch/arm/boot/uImage と、(どこか)/lib/modules/以下のファイルを、HDL-GXRに持っていく。
例えば、
# mkdir -p /opt/arm/boot
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/opt/arm make modules_install
# cp -p arch/arm/boot/uImage /opt/arm/boot/uImage.new
# cp -p System.map /opt/arm/boot/
# cp -p .config /opt/arm/boot/config-2.6.28.hdl-gxr
# cd /opt/arm/boot
# tar cvfz ../kern.tgz .
# cd /opt/arm
# tar cvfz lib.tgz lib
で、/opt/arm/kern.tgz, /opt/arm/lib.tgz をHDL-GXRにscpなりで持って行く


出来たカーネルとモジュールを、それぞれHDL-GXRのsda1,sda3に配置する。
Lennyの動いてるHDL-GXRなら、# tar xvfz kern.tgz -C /boot (さっき作ったカーネルを展開)
# mv /boot/uImage.gxr /boot/uImage.gxr.bak (念のため現在のカーネルをバックアップ)
# mv /boot/uImage.new /boot/uImage.gxr (新しいカーネルを配置)
# tar xvfz lib.tgz -C / (さっき作ったモジュールを展開)


リブートして、うまくいけば、2.6.28のカーネルで起動するはず。
hdl-gxr-2-6-28.png
失敗した時は、HDL-GXRのディスクを取り外してLinuxが動いているPCにつなぎ、sda1 をマウントして、バックアップしておいた uImage.gxr.bak を uImage.gxr に戻せば、2.6.12のカーネルで起動できる。
posted by usoinfo at 14:56 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

HDL-GXRをDebian Lennyで使えるようにする

P3060215s.jpg
中身が完全にすっからかんになった、アイオーデータ製の HDL-GX250R を安く手に入れた。Marvell 88F5182でLinuxが動く箱である。が、中身が完全にすっからかんなので、システムを入れないとウンともスンともいわない。ので、まずは、Debian Lenny が動くようにする。

1. 用意する物
  1. Linuxが動いているPC
  2. USB-SATA接続キット
  3. SATA接続のHDDなりSSDなりHDL-GXRに入れるストレージ

2. OPEN LANDISK PLATFORM Linux Ver. 2.0 をインストールする
http://ftp.iij.ad.jp/pub/sourceforge.jp/freetank/30616/のOLP02をインストールする。
OPEN LANDISK PLATFORM Linux200README.pdfの説明の通りにすればよい。

PCに、USB-SATA接続キットを使って、HDL-GXRに入れるストレージを接続。(ここでは、/dev/sdb になっているという前提。)
fdisk で
/dev/sdb1 83 128M
/dev/sdb2 82 1G
/dev/sdb3 83 残り全部
という感じでパーティションを切る。
例:
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 264191 131072 83 Linux
/dev/sdb2 264192 2361343 1048576 82 Linux スワップ / Solaris
/dev/sdb3 2361344 78140159 37889408 83 Linux
そして、
# mkfs.ext3 /dev/sdb1
# mkfs.ext3 /dev/sdb3
# mkswap /dev/sdb2
でフォーマットする。

次に、tar ballを各パーティションに展開する。
sdb1 に /boot を展開
# wget "http://ftp.iij.ad.jp/pub/sourceforge.jp/freetank/30616/OLP02_boot_etch20071203a.tgz"
# mount /dev/sdb1 /mnt
# tar xvfz OLP02_boot_etch20071203a.tgz -C /mnt
# mv /mnt/uImage.OLP02GXR /mnt/uImage.gxr
# mv /mnt/initrd /mnt/initrd.gxr
# umount /mnt

sdb3 に / を展開
# wget "http://ftp.iij.ad.jp/pub/sourceforge.jp/freetank/30616/OLP02_base_etch20071203a.tgz"
# mount /dev/sdb3 /mnt
# tar xvfz OLP02_base_etch20071203a.tgz -C /mnt
# umount /mnt
できたらストレージを取り外す。

3. HDR-GXR を起動
作ったストレージをHDL-GXRに取り付け、イーサネットも差し込んで、電源をONする。ACCESSのLEDが橙色に点灯し、しばらくしてパワーLED1つの点灯になったら多分成功。
アドレスはDHCPで取得するので、ルータ等のログを見るなりして、取れたアドレスを調べる。
% ssh root@(調べたアドレス)
root@192.168.18.134's password:
で、パスワード olpadmin でログインできる。
これで Debian etch、カーネルは2.6.12のLinux箱になった。

4. Lenny にアップグレードする
aptitude でアップグレードすればいいので、/etc/apt/sources.list を適当に書き換えつつ aptitude update/upgrade/dist-upgrade すればよい。

まず、etch は archive に行っているので、
# vi /etc/apt/sources.list
--
deb http://archive.debian.org/debian/ etch main non-free contrib
deb-src http://archive.debian.org/debian/ etch main non-free contrib

deb http://archive.debian.org/debian-security/ etch/updates main non-free contrib
deb-src http://archive.debian.org/debian-security/ etch/updates main non-free contrib
--
こんな感じにして、

# apt-get update
# apt-get install debian-archive-keyring
keyringを入れたら、Lennyに切り替えてアップグレード。
# vi /etc/apt/sources.list
--
deb http://archive.debian.org/debian/ lenny main non-free contrib
deb-src http://archive.debian.org/debian/ lenny main non-free contrib

deb http://archive.debian.org/debian-security/ lenny/updates main non-free contrib
deb-src http://archive.debian.org/debian-security/ lenny/updates main non-free contrib
--
こんな感じにして、

# aptitude update
# aptitude upgrade
# aptitude dist-upgrade
これで Debian Lenny、カーネルは2.6.12のLinux箱になった。

40Gの2.5"HDDを入れて、消費電力はだいたい9W前後。省電力で大変良い。
タグ:玄箱 Linux LANDISK
posted by usoinfo at 14:09 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする