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

Masa's blog

検索キーワード:

2010年05月15日 zaurus SL-C760 Debian(lenny) for ARM with Angstrom [長年日記]

_ zaurus SL-C760 Debian(lenny) for ARM with Angstrom

とりあえず、さまに成って来たので記憶が薄れる前に作業した事を記録しておく。

前提条件

  • 内蔵フラッシュにはAngstromがインストールされていること。
  • kexecbootから内蔵フラッシュのAngstromが起動できるていること。
  • Angstromからインターネットにアクセスできていること。

方針

debootstrapのインストール(内蔵フラッシュのAngstromで)

# cd /some_where_work
# wget http://ftp.jp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.10lenny1_all.deb
# ar -x debootstrap_1.0.10lenny1_all.deb
# cd /
# tar xvzf /some_where_work/data.tar.gz

perlのインストール(内蔵フラッシュのAngstromで)

# opkg install perl

SHDC(16GB)のパーティショニング(内蔵フラッシュのAngstromで)

こんな感じ。

# fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 16.5 GB, 16574840832 bytes
28 heads, 60 sectors/track, 19269 cylinders
Units = cylinders of 1680 * 512 = 860160 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1               5         161      131880    c  W95 FAT32 (LBA)
/dev/mmcblk0p2             162         474      262920   82  Linux swap / Solaris
/dev/mmcblk0p3             475       19269    15787800   83  Linux

debootstrapの実行(内蔵フラッシュのAngstromで)

SDHCへの書き込みはデフォルトのsyncオプション付きマウントだとdebootstrapに時間がかかるので、syncオプションを外して、マウントし直し。

# umount /dev/mmcblk0p3
# mount -t ext3 -o rw,noatime /dev/mmcblk0p3 /media/card

いよいよdebootstrapの実行。

# /usr/sbin/debootstrap --arch armel --include=udev,apmd,pcmciautils,console-tools,ntpdate lenny /media/card http://ftp.jp.debian.org/debian

http://ftp.jp.debian.org/debianの部分は、ローカルにダウンロードしたものが有れば、

file:///some_where/debian

みたいな指定も可能。

ブートに必要な諸々をAngstromからコピる(内蔵フラッシュのAngstromで)

# cd /media/card/boot/ && (cd /boot/ && tar cf - .) | tar xvpif -
# cd /media/card/lib/modules/ && (cd /lib/modules/ && tar cf - .) | tar xvpif -
# cd /media/card/dev/ && (cd /dev/ && tar cf - .) | tar xvpif -
# cd /media/card/etc/ && cp /etc/modules .
# cd /media/card/etc/ && cp /etc/keymap2.6-map .
# cd /media/card/etc/init.d/ && cp /etc/keymap keymap-angstrom
# cd /media/card/etc/rcS.d/ && ln -s ../init.d/keymap-angstrom S49keymap-angstrom

/media/card/etc/fstab の編集(内蔵フラッシュのAngstromで)

syncオプションを外すのと、noatimeでアクセスを早める。

/dev/mmcblk0p3	/ 	ext3	rw,noatime	1	1
/dev/mmcblk0p2	none	swap	sw		0	0
proc		/proc	proc	defaults	0	0

#tmpfs		/var/volatile	tmpfs   mode=0755       0  0
#tmpfs		/media/ram	tmpfs	defaults	0  0
#tmpfs                /dev/shm             tmpfs      mode=0777             0  0

/dev/hda1	/media/cf	auto	rw,noatime,noauto	0	0
# SD/MMC in kernel 2.4
#/dev/mmcda1	/media/card	auto	rw,noatime,noauto	0	0
# SD/MMC in kernel 2.6
/dev/mmcblk0p1	/media/card	auto	rw,noatime,noauto	0	0

/media/card/etc/hostname の編集(内蔵フラッシュのAngstromで)

c7x0

/media/card/etc/hosts の編集(内蔵フラッシュのAngstromで)

127.0.0.1	localhost
192.168.0.67	c7x0.artie.or.jp c7x0

/media/card/etc/resolv.conf の編集(内蔵フラッシュのAngstromで)

nameserver 192.168.0.100
search artie.or.jp

/media/card/etc/network/interfaces の編集(内蔵フラッシュのAngstromで)

実際には無線LANが使えるようになったのは、ファームを入れ換える必要があったので、もっと後のこと...

# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
	address	192.168.0.76
	network	192.168.0.0
	netmask	255.255.255.0
	broadcast	192.168.0.255
	gateway	192.168.0.100
	dns-nameservers 192.168.0.100
	dns-search artie.or.jp

allow-hotplug wlan0
iface wlan0 inet static
       wireless-mode managed
       wireless-essid MY_ESSID
       wireless-key s:MY_WEPKEY
	address	192.168.0.76
	network	192.168.0.0
	netmask	255.255.255.0
	broadcast 192.168.0.255
	gateway	192.168.0.100
	dns-nameservers 192.168.0.100
	dns-search artie.or.jp

/media/card/etc/udev/rules.d/local.rules の編集(内蔵フラッシュのAngstromで)

最後の行がタッチスクリーンのデバイスを生成するルール。

# There are a number of modifiers that are allowed to be used in some
# of the different fields. They provide the following subsitutions:
#
# %n the "kernel number" of the device.
#    For example, 'sda3' has a "kernel number" of '3'
# %e the smallest number for that name which does not matches an existing node
# %k the kernel name for the device
# %M the kernel major number for the device
# %m the kernel minor number for the device
# %b the bus id for the device
# %c the string returned by the PROGRAM
# %s{filename} the content of a sysfs attribute
# %% the '%' char itself
#

# Media automounting
##SUBSYSTEM=="block", ACTION=="add"    RUN+="/etc/udev/scripts/mount.sh"
##SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"

# Handle network interface setup
##SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh"
##SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh"

# The first rtc device is symlinked to /dev/rtc
##KERNEL=="rtc0", SYMLINK+="rtc"

# Try and modprobe for drivers for new hardware
##ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"

# Create a symlink to any touchscreen input device
SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0"

リブート(内蔵フラッシュのAngstromで)

# sync; sync; sync; umount /dev/mmcblkp3
# sync; sync; sync; reboot

kexecbootが起動したら、Debian(lenny) for ARMをインストールしたパーティションが表示される(はずな)ので、それを選択して起動する!

ここから以降の作業は、得に断りの無い限りDebian(lenny) for ARM上での作業となる。

タイムゾーンの設定

# dpkg-reconfigure tzdata

/etc/apt/sources.listの設定

##deb file:///media/nfs/debian lenny main contrib non-free
deb http://ftp.jp.debian.org/debian lenny main contrib non-free
deb http://ftp.us.debian.org/debian lenny main contrib non-free
##deb-src file:///media/nfs/debian lenny main contrib non-free
deb-src http://ftp.jp.debian.org/debian lenny main contrib non-free
deb-src http://ftp.us.debian.org/debian lenny main contrib non-free

ロケールデータのインストール

# http_proxy=http://192.168.0.100:8080/; export http_proxy
# apt-get install locales
# dpkg-reconfigure locales

アカウントの登録等

# vipw
# vipw -g
# pwconv
# passwd

angstromからxserver-kdrive-imageon等をインストール

X.orgの基本部分をDebianからインストール

# apt-get install x-window-system

オリジナルのサーバをリネーム

# dpkg-divert --add --rename /usr/bin/Xorg

必要な ipk は、http://www.angstrom-distribution.org/repo/から取得する。

# cd /some_where
# ar -x xserver-kdrive-imageon_1.2.0-r6.1_armv5te.ipk
# cd / && tar xvpif /some_where/data.tar.gz
# cd /some_where
# ar -x xserver-security-policy_1.4.2-r3.2_armv5te.ipk
# cd / && tar xvpif /some_where/data.tar.gz

Ximageonにシンボリックリンクをはる

# cd /usr/bin && ln -s Ximageon Xorg

Debianのlibtsを先にインストール

# apt-get install libts-0.0-0

その後、angstromから関連モジュールをインストール。

# cd /some_where
# ar -x pointercal_0.0-r18.5_c7x0.ipk
# cd / && tar xvpif /some_where/data.tar.gz
# cd /some_where
# ar -x tslib-conf_1.0-r23.3.5_armv5te.ipk
# cd / && tar xvpif /some_where/data.tar.gz
# cd /some_where
# ar -x libts-1.0-0_1.0-r23.3.5_armv5te.ipk
# cd / && tar xvpif /some_where/data.tar.gz

/etc/profileに追加

TSLIB_TSDEVICE=/dev/input/touchscreen0; export TSLIB_TSDEVICE

/etc/X11/xinit/xserverrcの編集

exec /usr/bin/X11/X -br -pn -mouse tslib -dpi 75 -rgba rgb :0 -noreset

後は、.xsessionなり.xinitrcなりを用意して、startxでOK。

apt-get install した者達

  • gnome
  • kde
  • xutils-dev
  • openssh-server
  • telnet
  • ftp
  • screen
  • w3m
  • gcc
  • make
  • bison
  • jfbterm
  • emacs
  • nfs-common (NEED_STATD=no => /etc/default/nfs-common)
  • jless
  • canna
  • kinput2
  • libncurses5
  • libncurses5-dev

Canna関係の設定

/etc/hosts.canna

localhost
unix

/etc/default/canna

# Enable cannaserver
CANNA_SERVER_RUN=yes

# Enable inet socket connection
##CANNA_ENABLE_INET=no
CANNA_ENABLE_INET=yes

ワーニング対策

$ touch ~/.cannax/rkc.conf

/etc/nettwork/interfaces

auto lo
iface lo inet loopback

apt-get install した者達(2)

  • rxvt-unicode-ml
  • libts-bin
  • bc
  • hostap-utils (prismのチップを使った無線LANカードの設定に利用するツール類)

w3m をソースからビルド

apt-get installしたのでは、画像が表示出来なかったので...

事前準備(apt-get install)
  • libgc-dev
  • imlib11-dev
  • libimlib2 libimlib2-dev
  • libssl-del
ソース

mplayerをソースからビルド

libmad対応するために、野良ビルド。

事前準備(apt-get install)
  • madplay
  • mplayer
  • libmad0-dev
  • liblivemedia-dev
  • livemedia-utils
  • libgtk2.0-dev
  • libasound2-dev
  • libsdl.*-dev
  • libxv-dev
  • libopenjpeg2
  • libopenjpeg-dev
  • openjpeg-tools
  • libbz2-dev
  • libtwolame0
  • twolame
  • libtwolame-dev
  • toolame
  • libtheora0
  • libtheora-dev
  • libtheora-bin
  • liba52-0.7.4
  • liba52-0.7.4-dev
  • libmpcdec3
  • libmpcdec-dev
  • mppenc
  • libdv4
  • libdv4-dev
  • libschroedinger-1.0-0
  • libschroedinger-dev
ソース

mixerをソースからビルド

shineをソースからビルド

netdateをソースからビルド

*** Makefile.ORG        2010-03-16 21:12:28.000000000 +0900
--- Makefile    2010-03-16 21:13:23.000000000 +0900
***************
*** 12,19 ****
  netdate: netdate.o

  install: netdate
!       install -s netdate /usr/sbin/
!       install -m 0644 netdate.8 /usr/man/man8/

  clean:
        rm -f netdate *~ *.o core
--- 12,19 ----
  netdate: netdate.o

  install: netdate
!       install -s netdate /usr/local/sbin/
!       install -m 0644 netdate.8 /usr/local/man/man8/

  clean:
        rm -f netdate *~ *.o core

LCD バックライトの制御

bd.sh

#! /bin/sh
#
# for 2.6.33
dir=/sys/devices/platform/pxa2xx-spi.1/spi1.1/backlight/corgi_bl
#
# for 2.6.26
#dir=/sys/class/backlight/corgi-bl
#
diff=5
min_brightness=1
##max_brightness=`cat ${dir}/max_brightness`
brightness=`cat ${dir}/brightness`
#
brightness=`expr ${brightness} - ${diff}`
if [ ${brightness} -lt ${min_brightness} ]
then
	brightness=${min_brightness}
fi
#
echo ${brightness} >${dir}/brightness

bu.sh

#! /bin/sh
#
# for 2.6.33
dir=/sys/devices/platform/pxa2xx-spi.1/spi1.1/backlight/corgi_bl
#
# for 2.6.26
#dir=/sys/class/backlight/corgi-bl
#
diff=5
##min_brightness=1
max_brightness=`cat ${dir}/max_brightness`
brightness=`cat ${dir}/brightness`
#
brightness=`expr ${brightness} + ${diff}`
if [ ${brightness} -gt ${max_brightness} ]
then
	brightness=${max_brightness}
fi
#
echo ${brightness} >${dir}/brightness

loff.sh

#! /bin/sh
#
# for 2.6.33
dir=/sys/devices/platform/pxa2xx-spi.1/spi1.1/backlight/corgi_bl
#
# for 2.6.26
#dir=/sys/class/backlight/corgi-bl
#
min_brightness=0
brightness=${min_brightness}
#
echo ${brightness} >${dir}/brightness

lon.sh

#! /bin/sh
#
# for 2.6.33
dir=/sys/devices/platform/pxa2xx-spi.1/spi1.1/backlight/corgi_bl
#
# for 2.6.26
#dir=/sys/class/backlight/corgi-bl
#
max_brightness=`cat ${dir}/max_brightness`
brightness=${max_brightness}
#
echo ${brightness} >${dir}/brightness

/etc/keymap-2.6.map

keycode 63 = F4 (本体裏のon)
keycode 64 = F3 (本体裏のoff)

.fvwmrc

Key F3          A       N       Exec "brightdown" exec sudo /home/m-ito/bin/bd.sh
Key F4          A       N       Exec "brightup"   exec sudo /home/m-ito/bin/bu.sh
Key F3          A       C       Exec "lcdoff"     exec sudo /home/m-ito/bin/loff.sh
Key F4          A       C       Exec "lcdon"      exec sudo /home/m-ito/bin/lon.sh

/etc/sudoers (sudoグループにあらかじめ属すること)

%sudo ALL=NOPASSWD: ALL
  • [on] : 輝度下げる
  • [off] : 輝度上げる
  • [CTRL]+[on] : バックライト OFF
  • [CTRL]+[off] : バックライト ON

firefoxをソースからビルド

事前準備(apt-get install)
  • libnotify-dev
  • libglib1.2-dev
  • libidl-dev
ソース

ビルド自体は普通のIA版Linuxと全く同じ手順でOK。

.Xmodmap
(コロン)が入力できない現象を回避する。
add mod5 = Mode_switch
remove mod4 = Mode_switch

mplayerplug-inをソースからビルド

事前準備(apt-get install)
  • libxpm-dev
ソース

key2mouseをソースからインストール

fvwm上でペースト(中ボタンクリック)したかったので...

事前準備(apt-get install)
  • libxtst-dev
ソース
/*
 * 2004.06.10 create Masahiko Ito (Special Thanks to nn)
 *
 * Usage : key2mouse [1|2|3]
 *
 */
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>

int
main(argc, argv)
int argc;
char** argv;
{
    Display* display;
    int screen;
    Window root;

    if (argc < 2 ||
        strncmp(argv[1], "-h", strlen("-h")) == 0 ||
        strncmp(argv[1], "--help", strlen("--help")) == 0){
        printf("Usage : %-s [1|2|3]\n\n", argv[0]);
        exit(0);
    }

    display = XOpenDisplay (NULL);
    screen = DefaultScreen (display);
    root = DefaultRootWindow(display);
    if (strncmp(argv[1], "1", 1) == 0){
        XTestFakeButtonEvent (display, Button1, True, 0);
        XTestFakeButtonEvent (display, Button1, False, 0);
    }else if (strncmp(argv[1], "2", 1) == 0){
        XTestFakeButtonEvent (display, Button2, True, 0);
        XTestFakeButtonEvent (display, Button2, False, 0);
    }else if (strncmp(argv[1], "3", 1) == 0){
        XTestFakeButtonEvent (display, Button3, True, 0);
        XTestFakeButtonEvent (display, Button3, False, 0);
    }
    XCloseDisplay (display);

}
.fvwmrc
Key 1           A       C       Exec "click1" exec key2mouse 1
Key 2           A       C       Exec "click2" exec key2mouse 2
Key 3           A       C       Exec "click3" exec key2mouse 3
  • [CTRL]+[1] : 左ボタンクリック
  • [CTRL]+[2] : 中ボタンクリック
  • [CTRL]+[3] : 左ボタンクリック

apt-get install した者達(3)

  • aumix
  • xpaint

サスペンド

# echo mem >/sys/power/state

WLI2-CF-S11(無線LAN)

  • hostap ドライバがロードされるが、wep keyが設定できない。
  • hostapを止めて、orinocoをロードしても認識しない。
  • カードのファームウェアをバージョンアップすると問題が解消するとの情報が有ったが、ファームを書き込むためには linux-2.6.31 以上のカーネルで動いていて、なおかつコンパクトフラッシュのインターフェースを持つマシンが必要
  • このzaurusのカーネルは(現時点では)2.6.26

あきらめた。

WLI-CF-S11G(無線LAN)

このカードには専用のCF to PCMCIAへの変換カードが付いている。

  • kernel 2.6.31以上のノートパソコンでファームを最新にアップデート。
prism2_srec -f -v wlan1 Latest-prism/primary-FLASH/pk010101.hex  Latest-prism/secondary-FLASH/sf010804.hex
prism2_srec -f wlan1 Latest-prism/primary-FLASH/pk010101.hex  Latest-prism/secondary-FLASH/sf010804.hex
  • hostapではダメだったのでblacklistに入れて止める
  • orinocoだとOK!、ただし自動的にはロードされなかった

なんとか動かしたが、感度が非常に悪い。ほぼ使えない。

WLI2-CF-S11(無線LAN) 2度目のチャレンジ

# hostap_diag wlan0(ファームバージョンアップ前)
Host AP driver diagnostics information for 'wlan1'

NICID: id=0x800c v1.0.0 (PRISM II (2.5) PCMCIA (SST parallel flash))
PRIID: id=0x0015 v1.0.5
STAID: id=0x001f v1.3.4 (station firmware)
#  hostap_diag wlan0(ファームバージョンアップ後)
Host AP driver diagnostics information for 'wlan0'

NICID: id=0x800c v1.0.0 (PRISM II (2.5) PCMCIA (SST parallel flash))
PRIID: id=0x0015 v1.1.1
STAID: id=0x001f v1.8.4 (station firmware)

カーネルのセルフビルド

2.6.31.x, 2.6.33.x, 2.6.34.x のセルフ(クロスでない)ビルドに成功。ほぼ問題なく使えそうだが、

  • corgi_ts(zaurus専用のタッチスクリーンドライバ)が削除予定になっており、選択してもカーネルパニックを起こす。
  • 汎用のタッチスクリーンドライバ(ADS7846)の完成度がcorgi_tsに比べると良くない。びみょうに震える。
  • レジュームの前にACアダプタを抜き->差しするか、裏の電池ぶたスイッチの解除->ロックをしないといけない。

等の問題がある。

お持ち帰りはzImage+modules+config for zaurus(SL-C760)から出来ます。利用に関しては当然自己責任で :)

参考ページ