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からインターネットにアクセスできていること。
方針
- Debian(lenny) for ARMのインストール先はSDHC(16GB)とする。
- 内蔵フラッシュのAngstromからdebootstrapを 実行し、インストールを行う。
- kexecbootから起動する。
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等をインストール
# 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
ソース
- opencore-amr-0.1.2.tar.gz
- mplayer-checkout-snapshot.tar.bz2
- essential-20071007.tar.bz2
- all-20100303.tar.bz2
- Blue-small-1.4.tar.bz2
- win32codecs-20040703.tar.bz2
- win32codecs-essential-20040703.tar.bz2
mixerをソースからビルド
shineをソースからビルド
netdateをソースからビルド
- netdate.tar.gz
- my patch
*** 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度目のチャレンジ
- ファームウェアをアップするために、c7x0のカーネルを2.6.33.2にアップ(後述)
- WLI2-CF-S11を挿し、hostap, hopstap_csがロードされることを確認
- prism2_srec -v wlan0 Latest-prism/primary-FLASH/pk010101.hex Latest-prism/secondary-FLASH/sf010804.hex
- OK表示を確認後
- prism2_srec -f -v wlan0 Latest-prism/primary-FLASH/pk010101.hex Latest-prism/secondary-FLASH/sf010804.hex
- ファームのバージョンアップ成功!
- リブート&設定調整(/etc/network/interfaces)で接続OK!
# 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)から出来ます。利用に関しては当然自己責任で :)