SL-6000 Zaurus


SL-6000Dをヤフオクで入手しました。メモ代わりにこのページを記します。 自分の行ったことをほぼ時系列に記録して行きますので、同系統の話題が いろんな箇所に散らばって出て来ますが御了承下さい。

zaurusに関する情報源

NAND Backup

あれこれ設定をいじり倒すまえに、flushメモリ(NAND)のバックアップを取ります。 以上の操作でサービスメニュー(全4ページ)が表示される。

コンソールでログインする方法

SL-6000では電源を入れると、GUI(Qtopia)が起動しますが、以下の手順で コンソールを起動することが出来ます。

Qtopia上のターミナル

とりあえずはターミナルというわけで、 その後、bashが8bit文字を通すように、

zsh導入(SIGSTOP問題対応のため)

zaurusでは電源のOFF/ONでSIGSTOP/SIGCONTが飛んできます。SIGSTOPを受けて サスペンド(CTRL-Z状態)になったプロセスを電源ON後にfgでフォアグラウンドに 戻したときに端末の設定が初期化されてしまうため、たいがいのアプリケーションで画面が 崩れてまともに動かなくなります。対策として、 という3つの手法があるようです。とりあえず最もお手軽で効果の高そうな(?)zshへの 入れ換えを行いました。

記号の入力に関して

SL-6000(zaurus全般?)ではキーの数がかなり少ないので、記号の入力に苦労します、というかデフォルト では一部の記号が(入力できるけど)刻印されてなかったり、全く入力できなかったりします。もちろん ソフトウェアキーボードを使えば入力可能なんですが...。でもそれでは使い勝手が悪いので、 /home/QtPalmtop/etc/keycode.tblを修正して、全ての記号をキーボードから入力できるように しました。

keycode.tbl修正内容

*** keycode.tbl.save    Sat Nov 17 11:30:30 2007
--- keycode.tbl Sat Nov 17 11:30:28 2007
***************
*** 24,36 ****
  0x006 Key_F 0x66 0x46 0x6 0xffff 0xa1
  0x106 Key_Underscore 0x5f 0xffff 0x6 0xffff 0x01
  0x007 Key_G 0x67 0x47 0x7 0xffff 0xa1
! 0x107 Key_yen 0xff65 0xffff 0x7 0xffff 0x01
  0x008 Key_H 0x68 0x48 0x8 0xffff 0xa1
! 0x108 Key_cent 0xff62 0xffff 0x8 0xffff 0x01
  0x009 Key_I 0x69 0x49 0x9 0xffff 0xa1
  0x109 Key_8 0x38 0x3e 0x9 0xffff 0x01
  0x00a Key_J 0x6a 0x4a 0xa 0xffff 0xa1
! 0x10a Key_sterling 0xff63 0xffff 0xa 0xffff 0x01
  0x00b Key_K 0x6b 0x4b 0xb 0xffff 0xa1
  0x10b Key_ParenLeft 0x28 0xffff 0xb 0xffff 0x01
  0x00c Key_L 0x6c 0x4c 0xc 0xffff 0xa1
--- 24,48 ----
  0x006 Key_F 0x66 0x46 0x6 0xffff 0xa1
  0x106 Key_Underscore 0x5f 0xffff 0x6 0xffff 0x01
  0x007 Key_G 0x67 0x47 0x7 0xffff 0xa1
! #
! # # -> Fn + G
! ##0x107 Key_yen 0xff65 0xffff 0x7 0xffff 0x01
! 0x107 Key_NumberSign 0x23 0xffff 0x7 0xffff 0x01
! #
  0x008 Key_H 0x68 0x48 0x8 0xffff 0xa1
! #
! # $ -> Fn + H
! ##0x108 Key_cent 0xff62 0xffff 0x8 0xffff 0x01
! 0x108 Key_Dollar 0x24 0xffff 0x8 0xffff 0x01
! #
  0x009 Key_I 0x69 0x49 0x9 0xffff 0xa1
  0x109 Key_8 0x38 0x3e 0x9 0xffff 0x01
  0x00a Key_J 0x6a 0x4a 0xa 0xffff 0xa1
! #
! # % -> Fn + J
! ##0x10a Key_sterling 0xff63 0xffff 0xa 0xffff 0x01
! 0x10a Key_Percent 0x25 0xffff 0xa 0xffff 0x01
! #
  0x00b Key_K 0x6b 0x4b 0xb 0xffff 0xa1
  0x10b Key_ParenLeft 0x28 0xffff 0xb 0xffff 0x01
  0x00c Key_L 0x6c 0x4c 0xc 0xffff 0xa1
***************
*** 53,68 ****
  0x114 Key_5 0x35 0x25 0x14 0xffff 0x01
  0x015 Key_U 0x75 0x55 0x15 0xffff 0xa1
  0x115 Key_7 0x37 0x3c 0x15 0xffff 0x01
! 0x016 Key_V 0x76 0x56 0x16 0xffff 0x81
! 0x116 Key_V 0x16 0xffff 0x16 0xffff 0x41
  0x017 Key_W 0x77 0x57 0x17 0xffff 0xa1
  0x117 Key_2 0x32 0x22 0x17 0xffff 0x01
! 0x018 Key_X 0x78 0x58 0x18 0xffff 0x81
! 0x118 Key_X 0x18 0xffff 0x18 0xffff 0x41
  0x019 Key_Y 0x79 0x59 0x19 0xffff 0xa1
  0x119 Key_6 0x36 0x26 0x19 0xffff 0x01
! 0x01a Key_Z 0x7a 0x5a 0x1a 0xffff 0x81
! 0x11a Key_Z 0x1a 0xffff 0x1a 0xffff 0x41
  0x01b Key_Shift 0xffff 0xffff 0xffff 0xffff 0x10
  0x11b Key_Shift 0xffff 0xffff 0xffff 0xffff 0x10
  0x01c Key_Return 0xd 0xd 0x5d 0xffff 0x01
--- 65,95 ----
  0x114 Key_5 0x35 0x25 0x14 0xffff 0x01
  0x015 Key_U 0x75 0x55 0x15 0xffff 0xa1
  0x115 Key_7 0x37 0x3c 0x15 0xffff 0x01
! #
! # \ -> Fn + V
! ##0x016 Key_V 0x76 0x56 0x16 0xffff 0x81
! ##0x116 Key_V 0x16 0xffff 0x16 0xffff 0x41
! 0x016 Key_V 0x76 0x56 0x16 0xffff 0xa1
! 0x116 Key_Backslash 0x5c 0xffff 0x16 0xffff 0x01
! #
  0x017 Key_W 0x77 0x57 0x17 0xffff 0xa1
  0x117 Key_2 0x32 0x22 0x17 0xffff 0x01
! #
! # ^ -> Fn + X
! ##0x018 Key_X 0x78 0x58 0x18 0xffff 0x81
! ##0x118 Key_X 0x18 0xffff 0x18 0xffff 0x41
! 0x018 Key_X 0x78 0x58 0x18 0xffff 0xa1
! 0x118 Key_AsciiCircum 0x5e 0xffff 0x18 0xffff 0x01
! #
  0x019 Key_Y 0x79 0x59 0x19 0xffff 0xa1
  0x119 Key_6 0x36 0x26 0x19 0xffff 0x01
! #
! # & -> Fn + Z
! ##0x01a Key_Z 0x7a 0x5a 0x1a 0xffff 0x81
! ##0x11a Key_Z 0x1a 0xffff 0x1a 0xffff 0x41
! 0x01a Key_Z 0x7a 0x5a 0x1a 0xffff 0xa1
! 0x11a Key_Ampersand 0x26 0xffff 0x1a 0xffff 0x01
! #
  0x01b Key_Shift 0xffff 0xffff 0xffff 0xffff 0x10
  0x11b Key_Shift 0xffff 0xffff 0xffff 0xffff 0x10
  0x01c Key_Return 0xd 0xd 0x5d 0xffff 0x01
***************
*** 134,140 ****
  0x040 Key_Minus 0x2d 0x22 0x5b 0xffff 0x01
  0x140 Key_At 0x40 0xffff 0x5b 0xffff 0x01
  0x041 Key_Tab 0x9 0xffff 0xffff 0xffff 0x01
! 0x141 Key_CapsLock 0xffff 0xffff 0xffff 0xffff 0x10
  0x045 Key_F26 0xffff 0xffff 0xffff 0xffff 0x00
  0x145 Key_F31 0xffff 0xffff 0xffff 0xffff 0x00
  0x046 Key_F21 0xffff 0xffff 0xffff 0xffff 0x00
--- 161,171 ----
  0x040 Key_Minus 0x2d 0x22 0x5b 0xffff 0x01
  0x140 Key_At 0x40 0xffff 0x5b 0xffff 0x01
  0x041 Key_Tab 0x9 0xffff 0xffff 0xffff 0x01
! #
! # < -> Fn + [Tab]
! ##0x141 Key_CapsLock 0xffff 0xffff 0xffff 0xffff 0x10
! 0x141 Key_Less 0x3c 0xffff 0xffff 0xffff 0x01
! #
  0x045 Key_F26 0xffff 0xffff 0xffff 0xffff 0x00
  0x145 Key_F31 0xffff 0xffff 0xffff 0xffff 0x00
  0x046 Key_F21 0xffff 0xffff 0xffff 0xffff 0x00
***************
*** 180,186 ****
  0x05b Key_F30 0x20 0x20 0x20 0xffff 0x00
  0x15b Key_F30 0x20 0x20 0x20 0xffff 0x00
  0x05c Key_Space 0x20 0x7c 0x60 0xffff 0x01
! 0x15c Key_F23 0xffff 0xffff 0x60 0xffff 0x00
  0x05d Key_Delete 0xffff 0xffff 0xffff 0xffff 0x21
  0x15d Key_Period 0x2e 0x2e 0xffff 0xffff 0x21
  0x05e Key_Rotate2 0xffff 0xffff 0xffff 0xffff 0x00
--- 211,221 ----
  0x05b Key_F30 0x20 0x20 0x20 0xffff 0x00
  0x15b Key_F30 0x20 0x20 0x20 0xffff 0x00
  0x05c Key_Space 0x20 0x7c 0x60 0xffff 0x01
! #
! # > -> Fn + [Space]
! ##0x15c Key_F23 0xffff 0xffff 0x60 0xffff 0x00
! 0x15c Key_Greater 0x3e 0xffff 0x60 0xffff 0x01
! #
  0x05d Key_Delete 0xffff 0xffff 0xffff 0xffff 0x21
  0x15d Key_Period 0x2e 0x2e 0xffff 0xffff 0x21
  0x05e Key_Rotate2 0xffff 0xffff 0xffff 0xffff 0x00

デフォルトでは入力できない記号

記号keycode.tbl修正にて以下に割付け
当然、元々割付けられていた機能は使えなくなりますB-P
#[Fn] + [G]
$[Fn] + [H]
%[Fn] + [J]
&[Fn] + [Z]
^[Fn] + [X]
\[Fn] + [V]
<[Fn] + [Tab]
>[Fn] + [変換]

キーボードに刻印は無いけど入力できる記号

記号キー入力の割付け
"[Shift] + [-]
|[Shift] + [変換]
`[Fn] + [Shift] + [変換]
{[Fn] + [Shift] + [,]
}[Fn] + [Shift] + [.]
[[Fn] + [Shift] + [-]
][Fn] + [Shift] + [enter]
;[Fn] + [enter]

「CTRL-なにがし」の入力に関して

CTRL-AからCTRL-Zのうち、
CTRL-Cは[Fn] + [C]で入力可能
それ以外は[Fn] + [Shift] + [なにがし]で入力可能です。

元々、CTRL-Z,X,Vも[Fn] + [ZXV]で入力できるのですが、上記の keycode.tblの修正で、該当するキーストロークに記号を割り当てているので 利用できなくなっています。

それと、2ch情報ですが、[●](<-[Cancel]の上のボタン)を[Ctrl] に割り当てることも出来るようです。

keycodes.tblのSharpSpecialの行を
0x03a Key_Control 0xffff 0xffff 0xffff 0xffff 0x10
に変えた上でqpe.confを
Special=@1021
との事です。

X/Qt-2

Qtopia上に実装されたX Window Systemである X/Qt-2 をインストールしました。

インストールしたモジュール

.xinitrc

xmodmap ~/.Xmodmap
rxvt &
exec blackbox

.Xmodmap

入力できない記号に対処する。どうしても一部のキーはkeycode.tblの定義に 合わせることができなかった。
keycode 22 = minus quotedbl
keycode 42 = Return grave
keycode 69 = comma slash
keycode 70 = period question
keycode 77 = space bar
keycode 103 = F9 braceleft
keycode 104 = Control_L braceright
keycode 106 = Alt_L bracketleft
keycode 107 = F13 bracketright

デフォルトでは入力できない記号または刻印の無い記号

記号keycode.tbl+.Xmodmapにて以下に割付け備考
/[Shift] + [,]
?[Shift] + [.]
#[Fn] + [G]
$[Fn] + [H]
%[Fn] + [J]
&[Fn] + [Z]
^[Fn] + [X]
\[Fn] + [V]
<[Fn] + [Tab]
>[Fn] + [変換]
"[Shift] + [-]
|[Shift] + [変換]
`[Shift] + [Return]Qtopia環境と異なる割当て
{[Shift] + [Calendar]Qtopia環境と異なる割当て
}[Shift] + [Address]Qtopia環境と異なる割当て
[[Shift] + [Home]Qtopia環境と異なる割当て
][Shift] + [Mail]Qtopia環境と異なる割当て
;[Fn] + [enter]

コンソール&Qtopia関係のインストール

セルフコンパイル環境(dev_img-1.3)

セルフの開発環境を構築する為にdev_img-1.3を導入します。正確には、 SL-C700 上のビルド環境 其の二 のページで公開されている、dev_img-1.3に若干の拡張をほどこして再構成された dev.tar.gz を利用させていただきました。

既に公開されている事例を参考にしながら作業して行くのですが、それらとちょっと 違うところは、素直にext2フォーマットしたSDに dev.tar.gz を展開せずに、SD上にext2フォーマットしたパーティションのイメージファイルを用意して それをループバックデバイスを利用してマウントし、そこに環境を展開している点です。

なぜわざわざそうしているかというと、zaurus(qtopia?)の仕様上、カード類の上に多くの ディレクトリが存在すると「ボイスレコーダ」や「ソフトウェアの追加/削除」の動作が 極端に遅くなるからです。

dev_img-1.3インストール

SD(1GB)カード上に環境を構築して行く。

諸々の修正

残念ながら上記でインストールした開発環境には若干の不具合がありますので、それらを修正します。

libc_nonshared.aの追加

stat関係の関数がリンクできない不具合を解消するためにlibc_nonshared.aを導入する 必要があります。libc_nonshared.aは ザウルスサポートステーション で公開されている glibc-arm-2.2.2-0.i386.rpm から取り出し、CFに用意しておきます。

tgmath.hの修正

tgmath.hの後半がNULLで埋められて壊れています。これを正しいものに入れ換えます。 tgmath.hも glibc-arm-2.2.2-0.i386.rpm から取り出し、CFに用意しておきます。

dev/usr/share/qt/includeのリンク先間違いの修正

dev/usr/share/qt/includeのシンボリックリンク先が../../qtとなっておりますが、 遡る階層が一つ足りません。

cppが見つからない

Canna37p3のビルド中に気付いたのですが、標準の手順でインストールした場合PATHの範囲に cppが見つからないため、Makefileから直接cppを呼び出している場合に問題が発生します。 そこで、 としてやります。

generic.hでのマクロのコンフリクト

MPlayerのビルド中に気付いたのですが、 /usr/local/include/linux/byteorder/generic.h中のマクロ定義が他の ヘッダーファイル中の定義とコンフリクトを起こします。以下の修正で 誤魔化しました...。
*** generic.h.ORG       Wed Jan  2 11:27:34 2008
--- generic.h   Wed Jan  2 11:41:31 2008
***************
*** 146,160 ****
   * Do the prototypes. Somebody might want to take the
   * address or some such sick thing..
   */
! #if defined(__KERNEL__) || (defined (__GLIBC__) & __GLIBC__ >= 2)
  extern __u32                  ntohl(__u32);
  extern __u32                  htonl(__u32);
! #else
  extern unsigned long int      ntohl(unsigned long int);
  extern unsigned long int      htonl(unsigned long int);
! #endif
  extern unsigned short int     ntohs(unsigned short int);
  extern unsigned short int     htons(unsigned short int);
  
  
  #if defined(__GNUC__) & (__GNUC__ >= 2) & defined(__OPTIMIZE__)
--- 146,162 ----
   * Do the prototypes. Somebody might want to take the
   * address or some such sick thing..
   */
! #if defined(__KERNEL__)
! #  if defined (__GLIBC__) & __GLIBC__ >= 2
  extern __u32                  ntohl(__u32);
  extern __u32                  htonl(__u32);
! #  else
  extern unsigned long int      ntohl(unsigned long int);
  extern unsigned long int      htonl(unsigned long int);
! #  endif
  extern unsigned short int     ntohs(unsigned short int);
  extern unsigned short int     htons(unsigned short int);
+ #endif
  
  
  #if defined(__GNUC__) & (__GNUC__ >= 2) & defined(__OPTIMIZE__)
***************
*** 164,178 ****
  #define ___ntohl(x) __be32_to_cpu(x)
  #define ___ntohs(x) __be16_to_cpu(x)
  
! #if defined(__KERNEL__) || (defined (__GLIBC__) & __GLIBC__ >= 2)
  #define htonl(x) ___htonl(x)
  #define ntohl(x) ___ntohl(x)
! #else
  #define htonl(x) ((unsigned long)___htonl(x))
  #define ntohl(x) ((unsigned long)___ntohl(x))
! #endif
  #define htons(x) ___htons(x)
  #define ntohs(x) ___ntohs(x)
  
  #endif /* OPTIMIZE */
  
--- 166,182 ----
  #define ___ntohl(x) __be32_to_cpu(x)
  #define ___ntohs(x) __be16_to_cpu(x)
  
! #if defined(__KERNEL__)
! #  if defined (__GLIBC__) & __GLIBC__ >= 2
  #define htonl(x) ___htonl(x)
  #define ntohl(x) ___ntohl(x)
! #  else
  #define htonl(x) ((unsigned long)___htonl(x))
  #define ntohl(x) ((unsigned long)___ntohl(x))
! #  endif
  #define htons(x) ___htons(x)
  #define ntohs(x) ___ntohs(x)
+ #endif
  
  #endif /* OPTIMIZE */

再起動時には...

zaurusの再起動時には以下の操作が必要です。スクリプトにするもよし、 /etc/fstabあたりをいじるもよし...。

リンク時エラーの対応

上記の環境で実際にソースからビルドしようとすると、リンク時に 「ライブラリが見つからないよ〜」系のエラーが頻発しました。 色々調べてみると、ライブラリの末尾が.aか.soでないとリンクできない ようです。たとえば、
# ls -al /lib/libnsl*
-rwxr-xr-x    1 root     root        75332 May 20  2002 /lib/libnsl-2.2.2.so
lrwxrwxrwx    1 root     root           15 Jan  8  2004 /lib/libnsl.so.1 -> libnsl-2.2.2.so
という状態で-lnslオプションでリンクしようとしても失敗します。対策としては
# cd /usr/local/lib
# ln -s /lib/libnsl-2.2.2.so libnsl.so
とします。

/lib配下のライブラリの内、末尾が.soでない全てのライブラリに関して同様に /usr/local/lib配下に末尾.soでシンボリックリンクを作成します。

また、/usr/lib配下のライブラリに関しても同様に末尾が.soでない全てのライ ブラリに関して同じディレクトリ配下に末尾.soでシンボリックリンクを作成します。

X関係のヘッダーファイル

Xのクライアントをコンパイルするためにはヘッダーファイルを用意する 必要があります。もともとX/Qt-2のクライアントはクロスコンパイルで 作成することが前提となっているようですが、クロス開発用に用意されて いるパッケージからヘッダーファイルだけを抜き出して利用することに します。 また、X/Qt-2のgtk関係を利用してクライアントを作成する場合は glib-gtk-zlib-devel_0.0.1_arm.tar.gz から同様にヘッダーファイルを抜き出して利用できるかもしれません。個人的にはgtk 関係はソースから入れようと思ってますが。

configure

Gnu関係もののconfigureスクリプトのオプションに関しては原則デフォルトで ビルドすることが多いのですが、dev_img環境においてはデフォルトでは通らない ことも多いです。そこで、経験上必要だったオプションを全て挙げておきます。 実際に適用する場合は、アプリケーションによって明かに不要なもの(まずいもの) は適当に削ったり適切に運用して下さい。
CPPFLAGS="-I/usr/local/include \
        -I/usr/local/ssl/include \
        -I/usr/local/canna/include \
        -I/usr/local/X11R6/include \
        -I/usr/local/X11R6/include/freetype2 \
        -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
        -L/usr/local/ssl/lib \
        -L/usr/local/canna/lib \
        -L/usr/local/X11R6/lib \
        -L/opt/QtPalmtop/lib" \
        ./configure \
                --prefix=/usr/local \
                --x-includes=/usr/local/X11R6/include \
                --x-libraries=/opt/QtPalmtop/lib \
                --enable-shared \
                --enable-static

imake等々の準備

xmkmfを利用してビルドするタイプのアプリケーションの場合、imake, makedepend, rmanが 無いよ〜との事で、うまくビルド出来ません。そこで、XFree86-4.3.0のソースから3コマンドを 作成します。また、この3コマンド(imake, makedepend, rman)をインストールした環境でkterm-6.2.0 のセルフビルドに成功しています。

rman

imake

makedepend

ビルドしたアプリケーションのインストール

xmkmfを利用したアプリをmake installでインストールすると、/opt/QtPalmtop/以下にインストール されます。個人的には自分でビルドしたアプリ(X Clients)は/usr/local/X11R6/以下にインストールしたいので
make  DESTDIR=/usr/local/X11R6 \
        BINDIR=/bin \
        CONFDIR=/lib/X11 \
        LIBDIR=/lib \
        XAPPLOADDIR=/lib/X11/app-defaults \
        DOCHTMLDIR=/lib/X11/doc/html \
        MANDIR=/man/man1 \
        install install.man
のようにしています。

libXi.so.6.0

firefox-2.0.0.11をビルド中にlibXi.so.6.0を要求してきたのだけれど、 オリジナルの配布物にはこのライブラリが含まれていない様子。 無いものは自分で作るしかないので、 ちなみに今現在(2008.01.04)firefoxはビルド中なので、上記の方法でOK かは不明。

2008.01.08 追記
firefox-2.0.0.11は無事ビルドできたけれども、起動しても表示されず...。ひょっとしたら 異常に起動に時間が掛かっていただけかもしれないけれども、一旦2.0.0.11はあきらめて firefox-1.0.8(古い...)をビルドしてみた。結果、正常に起動できるものがビルドできま した。噂どおり起動するまでに1分程度かかりますが、起動してしまえば意外と使えます。 まぁ何と言ってもSL-6000でfirefoxが使えるだけでも有難いことでは有ります。ちなみに firefox-1.0.8はlibXi.so.6.0をリンクしてませんでした...。

2008.01.18 追記
firefox-2.0.0.11も無事ビルド出来ました。初回の起動に時間がめちゃくちゃかかってる (5分程度?)だけで(おそらく~/.mozilla/配下にプロファイルを作成するのに時間がかかってる のではと想像...)、むしろ2回目以降はfirefox-1.0.8より動きが軽快な気がします。

/etc/localtime

標準の状態ではdateコマンドの表示する時刻がGMTになります。 これを解決するには の2通りの対処方法があります。私は2番目の方法で対処しました。

xrdbと/usr/bin/cpp

X Window Systemのリソースファイル(.Xresources)を読み込むためのコマンドとして xrdbがありますが、このコマンドは内部で/usr/bin/cppを呼び出しています。 しかしdev_imgをインストールした状態でも/usr/bin/にcppは存在しないので、結果として xrdbによるリソース設定が失敗します。そこで、xrdbにはcppを指定するオプション があるので、
xrdb -cpp /usr/local/dev/bin/cpp -merge ~/.Xresources
のように実行してやるとうまく行きます。

app-defaultsファイルのサーチパス設定

ソースからインストールするX clientのデフォルトリソース ファイルは/usr/local/X11R6/lib/X11/app-defaults/にインストール します。だだ、通常この場所は読み込みの対象ではありません。 読み込み対象にするには以下の設定を行います。
XAPPLRESDIR="/usr/local/X11R6/lib/X11/app-defaults/"
export XAPPLRESDIR

疑似端末 /dev/pty

SL-6000(zaurus?)では疑似端末が /dev/ptya0〜/dev/ptyaf に存在します。いくつかのアプリケーションは /dev/ptyp以降の疑似端末が存在することを前堤として作られているようです。このような場合、 mknodで必要なデバイスを作るか、ソースを修正して存在するデバイスをオープンするようにするか、どちらかの 方法で対処します。kterm-6.2.0はソースの方を直しちゃいました。

Qtopiaとnice値

Qtopia環境でユーザが起動したプロセスのnice値はデフォルトで 10になるようです。OSの制御に優先的にCPUを割り当てたいという 意図は理解できるのですが、そこまでOS側を優遇しなくても良いの ではないかと思い、ユーザプロセスのnice値のデフォルトを0に しました。

/home/QtPalmtop/qpe.shを編集します。

##    nice survive -l 6 runqpe $QPEUSER $QPEGROUP >/dev/null 2>&1
    survive -l 6 runqpe $QPEUSER $QPEGROUP >/dev/null 2>&1

バッテリー駆動時のオートパワーオフ解除

SL-6000(zausus?)のGUI設定(ライト/省電力設定)ではバッテリー駆動 時に最大30分でオートパワーオフが働いてしまいます。これを 回避するには/home/zaurus/Settings/qpe.confのInterval値を直接 編集してやれば可能です。
*** qpe.conf.20080126   Sat Jan 26 14:31:28 2008
--- qpe.conf    Mon Jan 28 17:04:02 2008
***************
*** 40,46 ****
  Brightness = 51
  Brightness_AC = 51
  Dim = 1
! Interval = 1800
  Interval_AC_00 = 900
  Interval_AC_01 = 1800
  Interval_AC_02 = 3600
--- 40,46 ----
  Brightness = 51
  Brightness_AC = 51
  Dim = 1
! Interval = 0
  Interval_AC_00 = 900
  Interval_AC_01 = 1800
  Interval_AC_02 = 3600
ただし、GUIで設定を更新するとInterval値もGUIで設定できる 範囲の値に戻ってしまうので注意が必要です。

シリアルによるログイン

シリアルケーブル(CE-170TS)を入手したので、普通のWindows パソコンからzaurusにログインしてみました。zaurus側の準備と して/etc/inittabを修正します。
*** inittab.ORG Mon Jan 28 12:20:46 2008
--- inittab     Mon Jan 28 12:21:00 2008
***************
*** 28,34 ****
  sw::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1
  
  # Specify program to run on ttyS0
! s0:24:respawn:/sbin/getty 9600 ttyS0
  pd:3:respawn:/etc/sync/serialctl
  
  # Specify program to run on tty1
--- 28,34 ----
  sw::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1
  
  # Specify program to run on ttyS0
! s0:245:respawn:/sbin/getty 9600 ttyS0
  pd:3:respawn:/etc/sync/serialctl
  
  # Specify program to run on tty1
その後、「telinit q」にてinittabの修正をinitプロセスに 通知してやります。

Windows側でTeraTermを起動し、接続先ポートにCOM1を 選択し[ENTER]を押下すればloginプロンプトが表示され ます。

2008.01.30 追記
boot時に参照されるinittabは/etc/inittabではなくて/root/etc/inittabのようです。 /root/etc/inittabを修正するためには/(ルート)をrwでマウントし直す必要がありますが、 個人的にはroの領域まで修正を加えることは望まないので、必要なときにtelinit qする 運用でいきたいと思ってます(またはgettyが起動してなければtelinit qするようなスクリプト を定期的にcronで実行ぐらいはするかも)。

シリアルによるファイルの送受信

Windowsパソコンからzaurusでファイルを受信するには、 (パソコン通信世代には懐かしい)ZMODEMプロトコルを利用 します。まずzaurus側で「rz」コマンドを実行し、受信待ち 状態にします。その後Windowsパソコン側のTeraTermで、 File->Transfer->ZMODEM->Sendを選択します。

zaurusからWindowsパソコン側にファイルを送信する場合も ZMODEMプロトコルを利用します。まずzaurus側で 「sz 送信ファイル名」 コマンドを実行し、その後Windowsパソコン側のTeraTermで、 File->Transfer->ZMODEM->Receiveを選択します。

Qtopiaアプリの高速起動オプションとメモリー不足

Qtopiaアプリケーションのアイコンを永押しするとオプション 設定画面が出て来ますが、その中に「高速起動オプション」と いうのが有ります。このオプションが有効になっていると、 そのアプリケーションは「launcher -qcop なにがし」と いう形で常駐プロセスとなり起動時間を短くすることが できるのですが、当然その分メモリーを常に消費しているので X/Qt-2環境をメインに利用していると、しばしばメモリー 不足になります。ですので、Qtopiaアプリはたまにしか使わない というのであれば、全ての「高速起動オプション」をオフに しておくのが良いと思います。

イー・モバイルCF型データ通信端末 D01NX

2008/02/07からzaurus(SL-C1000,SL-C3x00)向けのドライバ配布が 開始されたとのことで、そこらじゅうで盛り上がってるようですが、 SL-C7xx,SL-C8xxですら対象外ですので当然SL-6000は相手にされて ません。ただ、SL-6000シリーズはUSBホスト機能が実装されており、 3桁機が標準で持ってないusbcoreモジュールを持ってるので、その 点でSL-C7xx,SL-C8xxシリーズより希望が持てるのでは と楽観的に考えてみたり。

とりあえず 配布されてるドライバ(acm.o,vmb_usb.o)を 抜き出して無理矢理ロードしてみました...。

# ls *.o
acm.o  vmb_usb.o
# lsmod
Module                  Size  Used by
pxa_bi                 21728   0  (unused)
net_fd                 25024   0  (unused)
usbdcore               34544   0  [pxa_bi net_fd]
usbdmonitor             5248   0 
sharp_mmcsd_m          31520   2 
usb_ohci_tc6393        24544   0  (unused)
usbcore                52048   1  [usb_ohci_tc6393]
# insmod -f acm.o     
Warning: kernel-module version mismatch
        acm.o was compiled for kernel version 2.4.20
        while this kernel is version 2.4.18-rmk7-pxa3-embedix
# insmod -f vmb_usb.o 
Warning: kernel-module version mismatch
        vmb_usb.o was compiled for kernel version 2.4.20
        while this kernel is version 2.4.18-rmk7-pxa3-embedix
# lsmod
Module                  Size  Used by
vmb_usb                39152   0  (unused)
acm                     7664   0  (unused)
pxa_bi                 21728   0  (unused)
net_fd                 25024   0  (unused)
usbdcore               34544   0  [pxa_bi net_fd]
usbdmonitor             5248   0 
sharp_mmcsd_m          31520   2 
usb_ohci_tc6393        24544   0  (unused)
usbcore                52048   1  [vmb_usb acm usb_ohci_tc6393]
# dmesg
usb.c: registered new driver <NULL>
../acm.c: v0.21:USB Abstract Control Model driver for USB modems and ISDN adapters
../acm.c acm_init 
# 
対象となるカーネルバージョンが合ってないので警告は出てるの ですが、なんとなくローディングはできている模様。これ以上は 実機が無いのでなんとも出来ないのですが(^^;。

ソースからビルドした者達

特記事項のみ記録してます。通常のビルド手順はソースに含まれる ドキュメント類を参照して下さい。

ソースのバージョンは最新にはこだわらない方針です。build出来ることを最優先します。 2001.03(gcc-2.95.xの最終リリース時期)〜2003.12(SL-6000発表時期)辺りのソースがbuild しやすいように感じます。

基本のconfigureパターン

CPPFLAGS="-I/usr/local/include \
        -I/usr/local/ssl/include \
        -I/usr/local/canna/include \
        -I/usr/local/X11R6/include \
        -I/usr/local/X11R6/include/freetype2 \
        -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
        -L/usr/local/ssl/lib \
        -L/usr/local/canna/lib \
        -L/usr/local/X11R6/lib \
        -L/opt/QtPalmtop/lib" \
        ./configure \
                --prefix=/usr/local \
                --x-includes=/usr/local/X11R6/include \
                --x-libraries=/opt/QtPalmtop/lib \
                --enable-shared \
                --enable-static

gc6.5.tar.gz

通常の手順でビルドOK

perl5.005_04.tar.gz

通常の手順でビルドOK

openssl-0.9.8g.tar.gz

通常の手順でビルドOK

bison-1.29.tar.bz2

通常の手順でビルドOK

coreutils-5.0.tar.bz2

通常の手順でビルドOK

gettext-0.11.5.tar.gz

通常の手順でビルドOK

groff-1.17.2.tar.gz

通常の手順でビルドOK

m4-1.4.1.tar.gz

通常の手順でビルドOK

man-1.6c.tar.bz2

通常の手順でビルドOK

libtool-1.4.1.tar.gz

通常の手順でビルドOK

jpegsrc.v6b.tar.gz

*** config.sub.ORG      Fri Dec 14 23:51:03 2007
--- config.sub  Fri Dec 14 23:54:01 2007
***************
*** 156,162 ****
                | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
                | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
                | mipstx39 | mipstx39el \
!               | sparc | sparclet | sparclite | sparc64 | v850)
                basic_machine=$basic_machine-unknown
                ;;
        # We use `pc' rather than `unknown'
--- 156,162 ----
                | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
                | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
                | mipstx39 | mipstx39el \
!               | sparc | sparclet | sparclite | sparc64 | v850 | armv5tel*)
                basic_machine=$basic_machine-unknown
                ;;
        # We use `pc' rather than `unknown'
*** ltconfig.ORG        Sat Dec 15 09:51:51 2007
--- ltconfig    Sat Dec 15 13:18:13 2007
***************
*** 1161,1167 ****
    ;;

  # This must be Linux ELF.
! linux-gnu*)
    version_type=linux
    library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so'
    soname_spec='${libname}${release}.so.$major'
--- 1161,1167 ----
    ;;

  # This must be Linux ELF.
! linux-gnu*|unknown-linux-gnu*)
    version_type=linux
    library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so'
    soname_spec='${libname}${release}.so.$major'

X430src-1.tgz - rman, makedepend, imake

上記参照

libungif-4.1.0b1.tar.bz2

通常の手順でビルドOK

giflib-4.1.3.tar.bz2

通常の手順でビルドOK

tiff-v3.5.7.tar.gz

通常の手順でビルドOK

file-4.21.tar.gz

通常の手順でビルドOK

imlib-1.9.15.tar.bz2

通常の手順でビルドOK

pkgconfig-0.15.0.tar.gz

通常の手順でビルドOK

bzip2-1.0.4.tar.gz

通常の手順でビルドOK

imlib2-1.2.1.tar.gz

通常の手順でビルドOK

gdb-5.2.1.tar.gz

*** ltconfig.ORG        Sun Dec 16 18:53:02 2007
--- ltconfig    Sun Dec 16 22:35:06 2007
***************
*** 1216,1222 ****
    ;;

  # This must be Linux ELF.
! linux-gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
--- 1216,1222 ----
    ;;

  # This must be Linux ELF.
! linux-gnu*|unknown-linux-gnu)
    version_type=linux
    need_lib_prefix=no
    need_version=no

kterm-6.2.0.tar.gz

*** main.c.ORG  Wed Dec 19 12:16:45 2007
--- main.c      Wed Dec 19 12:26:27 2007
***************
*** 142,147 ****
--- 142,151 ----
  #define WTMP
  #endif

+ #ifdef linux
+ #include <asm/termbits.h>
+ #endif
+
  #include <sys/ioctl.h>
  #include <sys/stat.h>

*** ptyx.h.ORG  Wed Dec 19 21:39:48 2007
--- ptyx.h      Wed Dec 19 21:43:29 2007
***************
*** 93,99 ****
--- 93,103 ----
  #ifdef hpux
  #define PTYCHAR1      "zyxwvutsrqp"
  #else /* !hpux */
+ #if defined(__arm__) && defined(__linux__)
+ #define       PTYCHAR1        "a"
+ #else
  #define       PTYCHAR1        "pqrstuvwxyzPQRSTUVWXYZ"
+ #endif
  #endif        /* !hpux */
  #endif        /* !PTYCHAR1 */

*** screen.c.ORG        Wed Dec 19 12:31:56 2007
--- screen.c    Wed Dec 19 12:38:26 2007
***************
*** 46,52 ****
--- 46,56 ----
  #include <sys/ptem.h>
  #endif

+ #ifdef linux
+ extern Char *realloc();
+ #else
  extern Char *calloc(), *malloc(), *realloc();
+ #endif
  extern void free();

  ScrnBuf Allocate (nrow, ncol, addr)
*** scrollbar.c.ORG     Wed Dec 19 12:39:08 2007
--- scrollbar.c Wed Dec 19 12:42:22 2007
***************
*** 324,330 ****
        register TScreen *screen = &xw->screen;
        register int border = 2 * screen->border;
        register int i;
!       Char *realloc(), *calloc();

        if(screen->scrollbar)
                return;
--- 324,334 ----
        register TScreen *screen = &xw->screen;
        register int border = 2 * screen->border;
        register int i;
! #ifdef linux
!         Char *realloc();
! #else
!         Char *realloc(), *calloc();
! #endif

        if(screen->scrollbar)
                return;
インストールは以下の方法で
make  DESTDIR=/usr/local/X11R6 \
        BINDIR=/bin \
        CONFDIR=/lib/X11 \
        LIBDIR=/lib \
        XAPPLOADDIR=/lib/X11/app-defaults \
        DOCHTMLDIR=/lib/X11/doc/html \
        MANDIR=/man/man1 \
        install install.man
ただし、電源ボタンでのサスペンド復帰時にフリーズしてしまうので使えませんでした...。

Canna37p3.tar.bz2

ビルドに先だって以下をしておく。
cd /usr/local/dev/bin
ln -s ../lib/gcc-lib/armv4l-redhat-linux/2.95.1/cpp .
後は通常の手順でビルドOK

kinput2-v3.1.tar.gz

*** Kinput2.conf.ORG    Thu Dec 20 12:18:58 2007
--- Kinput2.conf        Thu Dec 20 12:32:46 2007
***************
*** 18,24 ****
  /* #define UseWnn */  /* define if you are going to use Wnn (v4, v6 or v7) */
  /* #define UseWnn6 */ /* define if you are going to use Wnn6 or above */
  #define UseCanna      /* define if you are going to use Canna */
! #define UseSj3                /* define if you are going to use Sj3 */
  /* #define UseAtok */ /* define if you are going to use Atok */


--- 18,24 ----
  /* #define UseWnn */  /* define if you are going to use Wnn (v4, v6 or v7) */
  /* #define UseWnn6 */ /* define if you are going to use Wnn6 or above */
  #define UseCanna      /* define if you are going to use Canna */
! /* #define UseSj3 */  /* define if you are going to use Sj3 */
  /* #define UseAtok */ /* define if you are going to use Atok */


***************
*** 78,94 ****
   * If you have already installed Canna header files and libraries..
   */
  XCOMM use installed headers/libraries
! XCOMM CANNAINSTDIR = /usr/local/canna
! XCOMM CANNASRC = $(CANNAINSTDIR)/include
! XCOMM CANNALIB = -lcanna16

  /*
   * If you have compiled Canna that came with X11R6 (contrib/programs/Canna),
   * but not installed yet..
   */
  XCOMM use headers/libraries in the source tree
! CANNASRC = $(CONTRIBSRC)/programs/Canna32
! CANNALIB = -L$(CANNASRC)/lib/canna16 -lcanna16


  XCOMM SJ3 configuration
--- 78,94 ----
   * If you have already installed Canna header files and libraries..
   */
  XCOMM use installed headers/libraries
! CANNAINSTDIR = /usr/local/canna
! CANNASRC = $(CANNAINSTDIR)/include
! CANNALIB = -L$(CANNAINSTDIR)/lib -lcanna16

  /*
   * If you have compiled Canna that came with X11R6 (contrib/programs/Canna),
   * but not installed yet..
   */
  XCOMM use headers/libraries in the source tree
! XCOMM CANNASRC = $(CONTRIBSRC)/programs/Canna32
! XCOMM CANNALIB = -L$(CANNASRC)/lib/canna16 -lcanna16


  XCOMM SJ3 configuration
インストール後、以下のリソース設定をしないとkinput2を起動できない。
Kinput2*IMProtocol.locales:     ja_JP.eucJP

tar-1.19.tar.bz2

通常の手順でビルドOK

strace-4.5.15.tar.bz2

*** system.c.ORG        Thu Dec 20 16:50:19 2007
--- system.c    Thu Dec 20 16:50:55 2007
***************
*** 1617,1623 ****
--- 1617,1625 ----
        { CTL_DEBUG, "CTL_DEBUG" },
        { CTL_DEV, "CTL_DEV" },
        { CTL_BUS, "CTL_BUS" },
+ #if 0
        { CTL_ABI, "CTL_ABI" },
+ #endif
        { CTL_CPU, "CTL_CPU" },
        { 0, NULL }
  };

gc-7.0.tar.gz

通常の手順でビルドOK

libtool-1.4.3.tar.gz

通常の手順でビルドOK

libtool-1.5.24.tar.gz

通常の手順でビルドOK

findutils-4.1.20.tar.gz

通常の手順でビルドOK

ImageMagick-5.5.7-36.tar.bz2

*** utilities/Makefile.in.ORG   Sun Dec 23 02:15:54 2007
--- utilities/Makefile.in       Sun Dec 23 02:22:45 2007
***************
*** 266,272 ****
  LIBRARY_CURRENT = @LIBRARY_CURRENT@
  LIBRARY_EXTRA_CPPFLAGS = @LIBRARY_EXTRA_CPPFLAGS@
  LIBRARY_REVISION = @LIBRARY_REVISION@
! LIBS = @LIBS@
  LIBSTDCLDFLAGS = @LIBSTDCLDFLAGS@
  LIBTOOL = @LIBTOOL@
  LIBTOOL_DEPS = @LIBTOOL_DEPS@
--- 266,272 ----
  LIBRARY_CURRENT = @LIBRARY_CURRENT@
  LIBRARY_EXTRA_CPPFLAGS = @LIBRARY_EXTRA_CPPFLAGS@
  LIBRARY_REVISION = @LIBRARY_REVISION@
! LIBS = @LIBS@ -lXt
  LIBSTDCLDFLAGS = @LIBSTDCLDFLAGS@
  LIBTOOL = @LIBTOOL@
  LIBTOOL_DEPS = @LIBTOOL_DEPS@

glib-1.2.10.tar.gz

通常の手順でビルドOK

gtk+-1.2.10.tar.gz

通常の手順でビルドOK

gdk-pixbuf-0.22.0.tar.bz2

通常の手順でビルドOK

w3m-0.5.2.tar.gz

*** Makefile.in.ORG     Fri Dec 21 18:05:43 2007
--- Makefile.in Fri Dec 21 17:58:05 2007
***************
*** 59,65 ****
        RC_DIR='$(RC_DIR)' DESTDIR='$(DESTDIR)' KEYBIND_SRC='$(KEYBIND_SRC)'

  IMGCFLAGS = @IMGX11CFLAGS@ @IMGFBCFLAGS@
! IMGLDFLAGS = @IMGX11LDFLAGS@ @IMGFBLDFLAGS@

  CC0 = @CC@
  CC = @POSUBST@ $(CC0)
--- 59,65 ----
        RC_DIR='$(RC_DIR)' DESTDIR='$(DESTDIR)' KEYBIND_SRC='$(KEYBIND_SRC)'

  IMGCFLAGS = @IMGX11CFLAGS@ @IMGFBCFLAGS@
! IMGLDFLAGS = @IMGX11LDFLAGS@ @IMGFBLDFLAGS@ -lfreetype

  CC0 = @CC@
  CC = @POSUBST@ $(CC0)

openssh-4.7p1.tar.gz

通常の手順でビルドOK

patch-2.5.4.tar.gz

通常の手順でビルドOK

canfep-1.0.tar.gz

diff -crN ../canfep-1.0.ORG/Makefile ./Makefile
*** ../canfep-1.0.ORG/Makefile  Tue Dec 18 16:09:27 2001
--- ./Makefile  Sun May 20 12:35:28 2007
***************
*** 1,7 ****
  # Linux
  CC=c++
  LIBS=-lcanna -ltermcap
! CFLAGS=-O2 -g

  # Solaris 2.6J
  #CC=c++
--- 1,8 ----
  # Linux
  CC=c++
  LIBS=-lcanna -ltermcap
! CFLAGS=-O2 -g -I/usr/local/canna/include
! LDFLAGS=-L/usr/local/canna/lib

  # Solaris 2.6J
  #CC=c++
***************
*** 19,25 ****
  all: $(TARGET)

  $(TARGET): $(OBJS)
!       $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)

  .C.o:
        $(CC) $(CFLAGS) -c $<
--- 20,26 ----
  all: $(TARGET)

  $(TARGET): $(OBJS)
!       $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)

  .C.o:
        $(CC) $(CFLAGS) -c $<
diff -crN ../canfep-1.0.ORG/pty.C ./pty.C
*** ../canfep-1.0.ORG/pty.C     Sat Dec 22 23:57:31 2001
--- ./pty.C     Sun May 20 12:31:58 2007
***************
*** 11,16 ****
--- 11,18 ----
  char Pty::endstr[] = "";
  char Pty::endmsg[] = "";

+ static char nullstr[] = "";
+ static char *Tgetstr(char *id, char **area);
  // コンストラクタだよん
  Pty::Pty(int ac, char** av, char* amsg, char* emsg)
  {
***************
*** 30,54 ****
      char* pt = funcstr;

      // スタンドアウト (反転)
!     so = tgetstr("so", &pt);
      adjstr(so);
!     se = tgetstr("se", &pt);
      adjstr(se);

      // アンダーライン (下線)
!     us = tgetstr("us", &pt);
      adjstr(us);
!     ue = tgetstr("ue", &pt);
      adjstr(ue);

      // カーソル位置の保存,保存した位置への復帰
!     sc = tgetstr("sc", &pt);
      adjstr(sc);
!     rc = tgetstr("rc", &pt);
      adjstr(rc);

      // カーソル位置から行の最後までを削除する
!     ce = tgetstr("ce", &pt);
      adjstr(ce);

      // ステータスラインを持っているかどうか
--- 32,56 ----
      char* pt = funcstr;

      // スタンドアウト (反転)
!     so = Tgetstr("so", &pt);
      adjstr(so);
!     se = Tgetstr("se", &pt);
      adjstr(se);

      // アンダーライン (下線)
!     us = Tgetstr("us", &pt);
      adjstr(us);
!     ue = Tgetstr("ue", &pt);
      adjstr(ue);

      // カーソル位置の保存,保存した位置への復帰
!     sc = Tgetstr("sc", &pt);
      adjstr(sc);
!     rc = Tgetstr("rc", &pt);
      adjstr(rc);

      // カーソル位置から行の最後までを削除する
!     ce = Tgetstr("ce", &pt);
      adjstr(ce);

      // ステータスラインを持っているかどうか
***************
*** 62,72 ****

      // ステータスラインへ移動,戻る
      if (hs) {
!         ts = tgoto(tgetstr("ts", &pt), 0, 0);
          adjstr(ts);
!         fs = tgetstr("fs", &pt);
          adjstr(fs);
!         ds = tgetstr("ds", &pt);
          adjstr(ds);
          if (ds) {
              strcat(endstr, ds);
--- 64,74 ----

      // ステータスラインへ移動,戻る
      if (hs) {
!         ts = tgoto(Tgetstr("ts", &pt), 0, 0);
          adjstr(ts);
!         fs = Tgetstr("fs", &pt);
          adjstr(fs);
!         ds = Tgetstr("ds", &pt);
          adjstr(ds);
          if (ds) {
              strcat(endstr, ds);
***************
*** 74,98 ****
          }
      }
      else {
!         char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
          adjstr(cs);
          if (cs) {
              write(1, ce, strlen(ce));
              write(1, cs, strlen(cs));
          }
!         char* cl = tgetstr("cl", &pt);
          adjstr(cl);
          if (cl) {
              write(1, cl, strlen(cl));
              strcat(endstr, cl);
          }
!         ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
          adjstr(ds);
          if (ds) {
              strcat(endstr, ds);
              strcat(endstr, ce);
          }
!         ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
          adjstr(ts);
          fs = rc;
      }
--- 76,100 ----
          }
      }
      else {
!         char* cs = tgoto(Tgetstr("cs", &pt), tgetnum("li") - 2, 0);
          adjstr(cs);
          if (cs) {
              write(1, ce, strlen(ce));
              write(1, cs, strlen(cs));
          }
!         char* cl = Tgetstr("cl", &pt);
          adjstr(cl);
          if (cl) {
              write(1, cl, strlen(cl));
              strcat(endstr, cl);
          }
!         ds = tgoto(Tgetstr("cs", &pt), tgetnum("li") - 1, 0);
          adjstr(ds);
          if (ds) {
              strcat(endstr, ds);
              strcat(endstr, ce);
          }
!         ts = tgoto(Tgetstr("cm", &pt), 0, tgetnum("li") - 1);
          adjstr(ts);
          fs = rc;
      }
***************
*** 133,138 ****
--- 135,148 ----
              fail();
          }
          if (child) {
+ #if defined(__NetBSD__)
+ //
+ // 起動してもなぜか直に終了してしまう原因はexecしたshellが
+ // 起動しきる前に、その疑似端末のマスタ側を読み込もうとし
+ // ていたかららしい。
+ //
+             sleep(1);
+ #endif
              close(0);
              int cc;
              int ret;
***************
*** 165,170 ****
--- 175,189 ----
          dup2(slave, 1);
          dup2(slave, 2);
          close(slave);
+ #if defined(__NetBSD__)
+ //
+ // CTRL-C(SIGINT)等のシグナルが効かなかった原因は、疑似端末の
+ // スレーブが制御端末として設定できていなかったかららしい。
+ //
+ // stdin(=疑似端末のスレーブ)を制御端末とする
+ //
+         ioctl(0, TIOCSCTTY, 0);
+ #endif
          if (ac > 1)
              execvp(av[1], &av[1]);
          else
***************
*** 334,358 ****
          tgetent(buff, term);
          char funcstr[BUFSIZ];
          char* pt = funcstr;
!         char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
          adjstr(cs);
          if (cs) {
              write(1, ce, strlen(ce));
              write(1, cs, strlen(cs));
          }
!         char* cl = tgetstr("cl", &pt);
          adjstr(cl);
          if (cl) {
              write(1, cl, strlen(cl));
              strcpy(endstr, cl);
          }
!         ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
          adjstr(ds);
          if (ds) {
              strcat(endstr, ds);
              strcat(endstr, ce);
          }
!         ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
          adjstr(ts);
      }

--- 353,377 ----
          tgetent(buff, term);
          char funcstr[BUFSIZ];
          char* pt = funcstr;
!         char* cs = tgoto(Tgetstr("cs", &pt), tgetnum("li") - 2, 0);
          adjstr(cs);
          if (cs) {
              write(1, ce, strlen(ce));
              write(1, cs, strlen(cs));
          }
!         char* cl = Tgetstr("cl", &pt);
          adjstr(cl);
          if (cl) {
              write(1, cl, strlen(cl));
              strcpy(endstr, cl);
          }
!         ds = tgoto(Tgetstr("cs", &pt), tgetnum("li") - 1, 0);
          adjstr(ds);
          if (ds) {
              strcat(endstr, ds);
              strcat(endstr, ce);
          }
!         ts = tgoto(Tgetstr("cm", &pt), 0, tgetnum("li") - 1);
          adjstr(ts);
      }

***************
*** 365,367 ****
--- 384,399 ----

      signal(SIGWINCH, (SIG_PF) winchange);
  }
+ //
+ // termcapエントリが貧弱な場合core dumpするのを防ぐ為のtgetstr代替
+ //
+ static char *Tgetstr(char *id, char **area)
+ {
+     static char *str;
+     str = tgetstr(id, area);
+     if (str == (char *)NULL){
+         return(nullstr);
+     }else{
+         return(str);
+     }
+ }
diff -crN ../canfep-1.0.ORG/pty.H ./pty.H
*** ../canfep-1.0.ORG/pty.H     Sat Dec 22 23:56:54 2001
--- ./pty.H     Sun May 20 12:31:58 2007
***************
*** 15,21 ****
  #include <sys/file.h>
  #include <sys/signal.h>
  #include <sys/wait.h>
! #if defined(sun)
  #include <curses.h>
  #else
  #include <term.h>
--- 15,21 ----
  #include <sys/file.h>
  #include <sys/signal.h>
  #include <sys/wait.h>
! #if defined(sun) || defined(__NetBSD__)
  #include <curses.h>
  #else
  #include <term.h>
*** pty.C.ORG   Mon Dec 24 21:04:16 2007
--- pty.C       Mon Dec 24 21:08:03 2007
***************
*** 251,258 ****
--- 251,263 ----
  {
      struct stat stb;

+ #if 0
      char* pty = &line[strlen("/dev/ptyp")];
      for (char* p = "pqrs"; *p; p++) {
+ #else
+     char* pty = &line[strlen("/dev/ptya")];
+     for (char* p = "a"; *p; p++) {
+ #endif
          line[strlen("/dev/pty")] = *p;
          *pty = '0';
          if (stat(line, &stb) < 0)

pefnac

BSD方面でcanfepを利用すると、文字化けしたり、画面が崩れたりという頻度が高まるような気がします。 termcap libraryの扱いに若干問題があるように見受けたので、修正しようと思ったのですが、 私はC++を理解してません。そこで、使いなれてるCに書き直しtermcap libraryの 扱いを改善したものをpefnac(canfep-like canna frontend processor) として公開させていただきました。現行のcanfepでお困りの点がありましたら、 pefnac を試していただければ解決するかも(?)しれません。

Nemacs-3.3.2(based on emacs-18.59.tar.gz)

Information about Nemacsのページに従ってemacs-18.59.tar.gzに emacs-18.59-nemacs-3.3.2+lx.diff.bz2とemacs-18.59-nemacs-extra.tar.bz2を 適用させた後に以下のパッチを当てる。

X11使用版

diff -crN emacs-18.59.ORG/Makefile emacs-18.59/Makefile
*** emacs-18.59.ORG/Makefile    Fri Dec 28 15:09:55 2007
--- emacs-18.59/Makefile        Fri Dec 28 20:25:46 2007
***************
*** 18,24 ****
  # but there was no explanation of why, so it seems better to keep this stable.
  LIBDIR= /usr/local/emacs
  BINDIR= /usr/local/bin
! MANDIR= /usr/man/man1

  CC= gcc
  # Flags passed down to subdirectory makefiles.
--- 18,24 ----
  # but there was no explanation of why, so it seems better to keep this stable.
  LIBDIR= /usr/local/emacs
  BINDIR= /usr/local/bin
! MANDIR= /usr/local/man/man1

  CC= gcc
  # Flags passed down to subdirectory makefiles.
***************
*** 26,32 ****

  # Command used for installation.
  # If `install' doesn't work on your system, try `./install.sh'.
! INSTALL=/usr/bin/install

  # Subdirectories to make recursively.  `lisp' is not included
  # because the compiled lisp files are part of the distribution
--- 26,32 ----

  # Command used for installation.
  # If `install' doesn't work on your system, try `./install.sh'.
! INSTALL=/usr/local/bin/install

  # Subdirectories to make recursively.  `lisp' is not included
  # because the compiled lisp files are part of the distribution
***************
*** 73,79 ****
        mv ${BINDIR}/xemacs ${BINDIR}/emacs
        (cd /usr/local; chown -R root.root emacs)
        chmod 2755 /usr/local/emacs/etc/movemail
!       chgrp mail /usr/local/emacs/etc/movemail

  install.sysv: all mkdir lockdir
        -if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
--- 73,79 ----
        mv ${BINDIR}/xemacs ${BINDIR}/emacs
        (cd /usr/local; chown -R root.root emacs)
        chmod 2755 /usr/local/emacs/etc/movemail
!       -chgrp mail /usr/local/emacs/etc/movemail

  install.sysv: all mkdir lockdir
        -if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
diff -crN emacs-18.59.ORG/src/config.h emacs-18.59/src/config.h
*** emacs-18.59.ORG/src/config.h        Fri Dec 28 15:09:57 2007
--- emacs-18.59/src/config.h    Fri Dec 28 20:26:18 2007
***************
*** 19,30 ****
  along with GNU Emacs; see the file COPYING.  If not, write to
  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */


  /* Include here a s- file that describes the system type you are using.
     See the file ../etc/MACHINES for a list of systems and
     the names of the s- files to use for them.
     See s-template.h for documentation on writing s- files.  */
! #include "s-linux.h"
  #define       ATTRIBUTE

  /* Include here a m- file that describes the machine and system you use.
--- 19,31 ----
  along with GNU Emacs; see the file COPYING.  If not, write to
  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

+ /* 2007.12.28  modified for zaurus(SL-6000D) by Masahiko Ito <m-ito@myh.no-ip.org> */

  /* Include here a s- file that describes the system type you are using.
     See the file ../etc/MACHINES for a list of systems and
     the names of the s- files to use for them.
     See s-template.h for documentation on writing s- files.  */
! #include "s-zaurus.h"
  #define       ATTRIBUTE

  /* Include here a m- file that describes the machine and system you use.
***************
*** 33,39 ****
     See m-template.h for info on what m- files should define.
     */

! #include "m-linux.h"

  /* Load in the conversion definitions if this system
     needs them and the source file being compiled has not
--- 34,40 ----
     See m-template.h for info on what m- files should define.
     */

! #include "m-zaurus.h"

  /* Load in the conversion definitions if this system
     needs them and the source file being compiled has not
diff -crN emacs-18.59.ORG/src/m-zaurus.h emacs-18.59/src/m-zaurus.h
*** emacs-18.59.ORG/src/m-zaurus.h      Thu Jan  1 09:00:00 1970
--- emacs-18.59/src/m-zaurus.h  Fri Dec 28 20:26:18 2007
***************
*** 0 ****
--- 1,71 ----
+ /* Machine description file for ARM-based non-RISCiX machines.
+    Copyright (C) 1994 Free Software Foundation, Inc.
+
+ This file is part of GNU Emacs.
+
+ GNU Emacs is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU Emacs is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs; see the file COPYING.  If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+
+ /* 2007.12.28  modified for zaurus(SL-6000D) by Masahiko Ito <m-ito@myh.no-ip.org> */
+
+ #define SHORTBITS 16            /* Number of bits in a short */
+ #define INTBITS 32              /* Number of bits in an int */
+ /* Define CANNOT_DUMP on machines where unexec does not work.
+    Then the function dump-emacs will not be defined
+    and temacs will do (load "loadup") automatically unless told otherwise.  */
+ #undef CANNOT_DUMP
+
+ /* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word
+    is the most significant byte.  */
+
+ #undef WORDS_BIG_ENDIAN
+
+ /* Define NO_ARG_ARRAY if you cannot take the address of the first of a
+  * group of arguments and treat it as an array of the arguments.  We can't
+  * do this on the arm with gcc, since the first 4 args are in registers.  */
+
+ #ifdef __GNUC__
+ #define NO_ARG_ARRAY
+ #else
+ #undef NO_ARG_ARRAY
+ #endif
+
+ /* Define WORD_MACHINE if addresses and such have
+  * to be corrected before they can be used as byte counts.  */
+
+ #undef WORD_MACHINE
+
+ /* Define how to take a char and sign-extend into an int.
+    On machines where char is signed, this is a no-op.  */
+
+ #define SIGN_EXTEND_CHAR(c) (((int)(c) << 24) >> 24)
+
+ #define NO_UNION_TYPE
+
+ #ifdef __GNUC__
+
+ /* Use builtin alloca. Also be sure that no other ones are tried out. */
+ #define alloca __builtin_alloca
+ #define HAVE_ALLOCA
+
+ #else
+ #define C_ALLOCA
+ #undef HAVE_ALLOCA
+ #endif  /* __GNUC__ */
+
+ #define NO_REMAP
+
+ #define STACK_DIRECTION -1
+
diff -crN emacs-18.59.ORG/src/s-zaurus.h emacs-18.59/src/s-zaurus.h
*** emacs-18.59.ORG/src/s-zaurus.h      Thu Jan  1 09:00:00 1970
--- emacs-18.59/src/s-zaurus.h  Fri Dec 28 20:26:18 2007
***************
*** 0 ****
--- 1,125 ----
+ /* Definitions file for GNU Emacs running on linux 0.96c pl2 and gcc 2.2.2
+    by Rick Sladkey <jrs@world.std.com>, your mileage may vary */
+
+ /*
+ This file is part of Mule (MULtilingual Enhancement of GNU Emacs).
+
+ Mule is free software distributed in the form of patches to GNU Emacs.
+ You can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ Mule is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs; see the file COPYING.  If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ /* 93.5.4   modified for Mule Ver.0.9.8
+                       by S.Komeda <komeda@ics.es.osaka-u.ac.jp>
+       Linux support updated. */
+
+ /* 2007.12.28  modified for zaurus(SL-6000D) by Masahiko Ito <m-ito@myh.no-ip.org> */
+
+ #include "s-usg5-2.h"         /* as close as anything */
+ #undef        SYSTEM_TYPE
+ #define       SYSTEM_TYPE     "Linux"
+
+ /* overrides for linux versus s-usg5-2.h */
+
+ #undef TERMINFO                       /* not really SYSV */
+ #undef COFF                   /* not really SYSV */
+ #undef NOMULTIPLEJOBS         /* not even used ... */
+ #undef NONSYSTEM_DIR_LIBRARY  /* use our dirent library for VFS */
+ #undef static                 /* static is OK for with gcc */
+ #undef sigsetmask             /* linux has sigsetmask */
+ #undef _setjmp                        /* we must use macro in setjmp.h */
+
+ /* We need bss_end from emacs.c for undumping */
+
+ #ifndef USG_SHARED_LIBRARIES
+ #define USG_SHARED_LIBRARIES
+ #endif
+
+ #define DATA_SEG_BITS 0x02000000
+
+ #define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o
+ #define LIB_STANDARD -lc /usr/lib/crtn.o
+
+ #define UNEXEC unexelf.o
+ /*#define UNEXEC_USE_MAP_PRIVATE*/
+
+ /* just a few small changes for linux ... */
+
+ /* let's see, what have we got here */
+
+ #define HAVE_TCATTR           /* fixes ^z problems */
+ #define HAVE_SETSID           /* fixes shell problems */
+ #define HAVE_DUP2             /* is builtin */
+ #define HAVE_TIMEVAL          /* is builtin */
+ #define HAVE_GETTIMEOFDAY     /* is builtin */
+ #define HAVE_RENAME           /* is builtin */
+ #define HAVE_RANDOM           /* is builtin */
+ #define HAVE_SELECT           /* works */
+ #define HAVE_PTYS             /* works */
+ #define HAVE_CLOSEDIR         /* we have a closedir */
+ #define HAVE_GETPAGESIZE      /* we now have getpagesize (0.96) */
+ #define HAVE_VFORK            /* we now have vfork (0.96) */
+ #define HAVE_SYS_SIGLIST      /* we have a (non-standard) sys_siglist */
+ #define HAVE_GETWD            /* cure conflict with getcwd? */
+ #define       HAVE_SOCKETS            /* we have socket */
+ #define       NO_SOCK_SIGIO           /* linux doesn't have SIGIO */
+
+ #define BSTRING                       /* we now have bcopy, etc. (0.96) */
+ #define USE_UTIME             /* don't have utimes */
+ #define NO_SIOCTL_H           /* don't have sioctl.h */
+ #define SYSV_SYSTEM_DIR               /* use dirent.h */
+ #define USG_SYS_TIME          /* use sys/time.h, not time.h */
+
+ #define INTERRUPTABLE_CLOSE   /* no harm if not true */
+ #define close sys_close
+
+ #define C_COMPILER gcc
+ #define C_DEBUG_SWITCH  -O2 -fwritable-strings -fomit-frame-pointer -D__const=
+ #define C_OPTIMIZE_SWITCH -O2 -fwritable-strings -fomit-frame-pointer -D__const=
+ #define C_SWITCH_SYSTEM -I/opt/QtPalmtop/include
+ #define C_SWITCH_X_SYSTEM -I/usr/local/include -I/usr/local/X11R6/include
+ #define OLDXMENU_OPTIONS CFLAGS="-O2 -I/opt/QtPalmtop/include -I/usr/local/include -I/usr/local/X11R6/include" EXTRA=insque.o /* doesn't work anyway */
+ #define LIB_X11_LIB -L/opt/QtPalmtop/lib -lX11
+ #define       ORDINARY_LINK   /* if you use libc.so.4.4 or greater */
+
+ #if 0                         /* choose for yourself */
+ #define SYSTEM_MALLOC         /* produces smaller binary */
+ #else
+ #define ULIMIT_BREAK_VALUE (32*1024*1024) /* ulimit not implemented */
+ #endif
+
+ #undef rcheck                 /* for debugging builtin malloc */
+
+ #ifdef rcheck
+ #define botch(msg)    (printf("%s", (msg)), abort())
+ #endif
+
+ /* misc. kludges for linux */
+
+ #define __const               /* avoids type mismatch errors */
+
+ #define MAXNAMLEN NAME_MAX    /* missing SYSV-ism */
+
+ #define SIGBUS SIGSEGV                /* rename to harmless work-alike */
+ #define SIGSYS SIGSEGV                /* rename to harmless work-alike */
+
+ #define VSWTCH VSWTC          /* mis-spelling in termios.h? */
+ #define CDEL '\0'             /* missing termio-ism */
+
+ /* we have non-standard standard I/O (iostream) ... */
+
+ #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_IO_write_ptr - (FILE)->_IO_write_base)
+
+ /* defines for linux in preparation for m-intel386.h */
+
+ #define DONT_DEFINE_SIGNAL    /* live with the warnings */

X11未使用版

diff -crN emacs-18.59.ORG/Makefile emacs-18.59/Makefile
*** emacs-18.59.ORG/Makefile    Fri Dec 28 15:09:55 2007
--- emacs-18.59/Makefile        Fri Dec 28 20:25:46 2007
***************
*** 18,24 ****
  # but there was no explanation of why, so it seems better to keep this stable.
  LIBDIR= /usr/local/emacs
  BINDIR= /usr/local/bin
! MANDIR= /usr/man/man1

  CC= gcc
  # Flags passed down to subdirectory makefiles.
--- 18,24 ----
  # but there was no explanation of why, so it seems better to keep this stable.
  LIBDIR= /usr/local/emacs
  BINDIR= /usr/local/bin
! MANDIR= /usr/local/man/man1

  CC= gcc
  # Flags passed down to subdirectory makefiles.
***************
*** 26,32 ****

  # Command used for installation.
  # If `install' doesn't work on your system, try `./install.sh'.
! INSTALL=/usr/bin/install

  # Subdirectories to make recursively.  `lisp' is not included
  # because the compiled lisp files are part of the distribution
--- 26,32 ----

  # Command used for installation.
  # If `install' doesn't work on your system, try `./install.sh'.
! INSTALL=/usr/local/bin/install

  # Subdirectories to make recursively.  `lisp' is not included
  # because the compiled lisp files are part of the distribution
***************
*** 73,79 ****
        mv ${BINDIR}/xemacs ${BINDIR}/emacs
        (cd /usr/local; chown -R root.root emacs)
        chmod 2755 /usr/local/emacs/etc/movemail
!       chgrp mail /usr/local/emacs/etc/movemail

  install.sysv: all mkdir lockdir
        -if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
--- 73,79 ----
        mv ${BINDIR}/xemacs ${BINDIR}/emacs
        (cd /usr/local; chown -R root.root emacs)
        chmod 2755 /usr/local/emacs/etc/movemail
!       -chgrp mail /usr/local/emacs/etc/movemail

  install.sysv: all mkdir lockdir
        -if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
diff -crN emacs-18.59.ORG/src/config.h emacs-18.59/src/config.h
*** emacs-18.59.ORG/src/config.h        Fri Dec 28 15:09:57 2007
--- emacs-18.59/src/config.h    Fri Dec 28 20:33:31 2007
***************
*** 19,30 ****
  along with GNU Emacs; see the file COPYING.  If not, write to
  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */


  /* Include here a s- file that describes the system type you are using.
     See the file ../etc/MACHINES for a list of systems and
     the names of the s- files to use for them.
     See s-template.h for documentation on writing s- files.  */
! #include "s-linux.h"
  #define       ATTRIBUTE

  /* Include here a m- file that describes the machine and system you use.
--- 19,31 ----
  along with GNU Emacs; see the file COPYING.  If not, write to
  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

+ /* 2007.12.28  modified for zaurus(SL-6000D) by Masahiko Ito <m-ito@myh.no-ip.org> */

  /* Include here a s- file that describes the system type you are using.
     See the file ../etc/MACHINES for a list of systems and
     the names of the s- files to use for them.
     See s-template.h for documentation on writing s- files.  */
! #include "s-zaurus.h"
  #define       ATTRIBUTE

  /* Include here a m- file that describes the machine and system you use.
***************
*** 33,39 ****
     See m-template.h for info on what m- files should define.
     */

! #include "m-linux.h"

  /* Load in the conversion definitions if this system
     needs them and the source file being compiled has not
--- 34,40 ----
     See m-template.h for info on what m- files should define.
     */

! #include "m-zaurus.h"

  /* Load in the conversion definitions if this system
     needs them and the source file being compiled has not
***************
*** 48,54 ****

  /* Define HAVE_X_WINDOWS if you want to use the X window system.  */

! #define HAVE_X_WINDOWS

  /* Define X11 if you want to use version 11 of X windows.
     Otherwise, Emacs expects to use version 10.  */
--- 49,55 ----

  /* Define HAVE_X_WINDOWS if you want to use the X window system.  */

! #undef HAVE_X_WINDOWS

  /* Define X11 if you want to use version 11 of X windows.
     Otherwise, Emacs expects to use version 10.  */
diff -crN emacs-18.59.ORG/src/m-zaurus.h emacs-18.59/src/m-zaurus.h
*** emacs-18.59.ORG/src/m-zaurus.h      Thu Jan  1 09:00:00 1970
--- emacs-18.59/src/m-zaurus.h  Fri Dec 28 20:26:18 2007
***************
*** 0 ****
--- 1,71 ----
+ /* Machine description file for ARM-based non-RISCiX machines.
+    Copyright (C) 1994 Free Software Foundation, Inc.
+
+ This file is part of GNU Emacs.
+
+ GNU Emacs is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU Emacs is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs; see the file COPYING.  If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+
+ /* 2007.12.28  modified for zaurus(SL-6000D) by Masahiko Ito <m-ito@myh.no-ip.org> */
+
+ #define SHORTBITS 16            /* Number of bits in a short */
+ #define INTBITS 32              /* Number of bits in an int */
+ /* Define CANNOT_DUMP on machines where unexec does not work.
+    Then the function dump-emacs will not be defined
+    and temacs will do (load "loadup") automatically unless told otherwise.  */
+ #undef CANNOT_DUMP
+
+ /* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word
+    is the most significant byte.  */
+
+ #undef WORDS_BIG_ENDIAN
+
+ /* Define NO_ARG_ARRAY if you cannot take the address of the first of a
+  * group of arguments and treat it as an array of the arguments.  We can't
+  * do this on the arm with gcc, since the first 4 args are in registers.  */
+
+ #ifdef __GNUC__
+ #define NO_ARG_ARRAY
+ #else
+ #undef NO_ARG_ARRAY
+ #endif
+
+ /* Define WORD_MACHINE if addresses and such have
+  * to be corrected before they can be used as byte counts.  */
+
+ #undef WORD_MACHINE
+
+ /* Define how to take a char and sign-extend into an int.
+    On machines where char is signed, this is a no-op.  */
+
+ #define SIGN_EXTEND_CHAR(c) (((int)(c) << 24) >> 24)
+
+ #define NO_UNION_TYPE
+
+ #ifdef __GNUC__
+
+ /* Use builtin alloca. Also be sure that no other ones are tried out. */
+ #define alloca __builtin_alloca
+ #define HAVE_ALLOCA
+
+ #else
+ #define C_ALLOCA
+ #undef HAVE_ALLOCA
+ #endif  /* __GNUC__ */
+
+ #define NO_REMAP
+
+ #define STACK_DIRECTION -1
+
diff -crN emacs-18.59.ORG/src/s-zaurus.h emacs-18.59/src/s-zaurus.h
*** emacs-18.59.ORG/src/s-zaurus.h      Thu Jan  1 09:00:00 1970
--- emacs-18.59/src/s-zaurus.h  Fri Dec 28 20:26:18 2007
***************
*** 0 ****
--- 1,125 ----
+ /* Definitions file for GNU Emacs running on linux 0.96c pl2 and gcc 2.2.2
+    by Rick Sladkey <jrs@world.std.com>, your mileage may vary */
+
+ /*
+ This file is part of Mule (MULtilingual Enhancement of GNU Emacs).
+
+ Mule is free software distributed in the form of patches to GNU Emacs.
+ You can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ Mule is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs; see the file COPYING.  If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ /* 93.5.4   modified for Mule Ver.0.9.8
+                       by S.Komeda <komeda@ics.es.osaka-u.ac.jp>
+       Linux support updated. */
+
+ /* 2007.12.28  modified for zaurus(SL-6000D) by Masahiko Ito <m-ito@myh.no-ip.org> */
+
+ #include "s-usg5-2.h"         /* as close as anything */
+ #undef        SYSTEM_TYPE
+ #define       SYSTEM_TYPE     "Linux"
+
+ /* overrides for linux versus s-usg5-2.h */
+
+ #undef TERMINFO                       /* not really SYSV */
+ #undef COFF                   /* not really SYSV */
+ #undef NOMULTIPLEJOBS         /* not even used ... */
+ #undef NONSYSTEM_DIR_LIBRARY  /* use our dirent library for VFS */
+ #undef static                 /* static is OK for with gcc */
+ #undef sigsetmask             /* linux has sigsetmask */
+ #undef _setjmp                        /* we must use macro in setjmp.h */
+
+ /* We need bss_end from emacs.c for undumping */
+
+ #ifndef USG_SHARED_LIBRARIES
+ #define USG_SHARED_LIBRARIES
+ #endif
+
+ #define DATA_SEG_BITS 0x02000000
+
+ #define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o
+ #define LIB_STANDARD -lc /usr/lib/crtn.o
+
+ #define UNEXEC unexelf.o
+ /*#define UNEXEC_USE_MAP_PRIVATE*/
+
+ /* just a few small changes for linux ... */
+
+ /* let's see, what have we got here */
+
+ #define HAVE_TCATTR           /* fixes ^z problems */
+ #define HAVE_SETSID           /* fixes shell problems */
+ #define HAVE_DUP2             /* is builtin */
+ #define HAVE_TIMEVAL          /* is builtin */
+ #define HAVE_GETTIMEOFDAY     /* is builtin */
+ #define HAVE_RENAME           /* is builtin */
+ #define HAVE_RANDOM           /* is builtin */
+ #define HAVE_SELECT           /* works */
+ #define HAVE_PTYS             /* works */
+ #define HAVE_CLOSEDIR         /* we have a closedir */
+ #define HAVE_GETPAGESIZE      /* we now have getpagesize (0.96) */
+ #define HAVE_VFORK            /* we now have vfork (0.96) */
+ #define HAVE_SYS_SIGLIST      /* we have a (non-standard) sys_siglist */
+ #define HAVE_GETWD            /* cure conflict with getcwd? */
+ #define       HAVE_SOCKETS            /* we have socket */
+ #define       NO_SOCK_SIGIO           /* linux doesn't have SIGIO */
+
+ #define BSTRING                       /* we now have bcopy, etc. (0.96) */
+ #define USE_UTIME             /* don't have utimes */
+ #define NO_SIOCTL_H           /* don't have sioctl.h */
+ #define SYSV_SYSTEM_DIR               /* use dirent.h */
+ #define USG_SYS_TIME          /* use sys/time.h, not time.h */
+
+ #define INTERRUPTABLE_CLOSE   /* no harm if not true */
+ #define close sys_close
+
+ #define C_COMPILER gcc
+ #define C_DEBUG_SWITCH  -O2 -fwritable-strings -fomit-frame-pointer -D__const=
+ #define C_OPTIMIZE_SWITCH -O2 -fwritable-strings -fomit-frame-pointer -D__const=
+ #define C_SWITCH_SYSTEM -I/opt/QtPalmtop/include
+ #define C_SWITCH_X_SYSTEM -I/usr/local/include -I/usr/local/X11R6/include
+ #define OLDXMENU_OPTIONS CFLAGS="-O2 -I/opt/QtPalmtop/include -I/usr/local/include -I/usr/local/X11R6/include" EXTRA=insque.o /* doesn't work anyway */
+ #define LIB_X11_LIB -L/opt/QtPalmtop/lib -lX11
+ #define       ORDINARY_LINK   /* if you use libc.so.4.4 or greater */
+
+ #if 0                         /* choose for yourself */
+ #define SYSTEM_MALLOC         /* produces smaller binary */
+ #else
+ #define ULIMIT_BREAK_VALUE (32*1024*1024) /* ulimit not implemented */
+ #endif
+
+ #undef rcheck                 /* for debugging builtin malloc */
+
+ #ifdef rcheck
+ #define botch(msg)    (printf("%s", (msg)), abort())
+ #endif
+
+ /* misc. kludges for linux */
+
+ #define __const               /* avoids type mismatch errors */
+
+ #define MAXNAMLEN NAME_MAX    /* missing SYSV-ism */
+
+ #define SIGBUS SIGSEGV                /* rename to harmless work-alike */
+ #define SIGSYS SIGSEGV                /* rename to harmless work-alike */
+
+ #define VSWTCH VSWTC          /* mis-spelling in termios.h? */
+ #define CDEL '\0'             /* missing termio-ism */
+
+ /* we have non-standard standard I/O (iostream) ... */
+
+ #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_IO_write_ptr - (FILE)->_IO_write_base)
+
+ /* defines for linux in preparation for m-intel386.h */
+
+ #define DONT_DEFINE_SIGNAL    /* live with the warnings */
余談。
s-zaurus.h中の「#define DATA_SEG_BITS 0x02000000」が結構キモでした。おそらく heep領域の開始アドレスを定義してると思うのですが、この値に落ち着くまでセグフォルトする nemacsばかりできました。結局、
zaurus@zaurus /usr/local/src> cat memtest.c
#include <stdio.h>
#include <stdlib.h>

char g_c;

main()
{
        char l_c;
        char *h_c;

        h_c = (char *)malloc(1);

        printf("global g_c = %x\n", &g_c);
        printf("local l_c  = %x\n", &l_c);
        printf("heap h_c   = %x\n", h_c);
}
zaurus@zaurus /usr/local/src> cc -o memtest memtest.c
zaurus@zaurus /usr/local/src> ./memtest
global g_c = 200853c
local l_c  = bffff443
heap h_c   = 2008548
みたいにして、0x02000000と「予想」しました。とりあえず動いてるからいいや...の レベルです。

rxvt上でnemacsを使っていて、電源スイッチでサスペンドさせると 復帰した時に特定のキーシーケンスが入力されるようで、nemacsが 固まったようになるのですが、CTRL-Gで中断すれば元に戻ります。

fvwm-1.24r.i18n-jp.tar.gz

*** configure.h.ORG     Fri Dec 28 23:42:06 2007
--- configure.h Fri Dec 28 23:49:06 2007
***************
*** 1,7 ****
--- 1,13 ----
+ #if 0
  #define FVWMDIR     "/usr/lib/X11/fvwm"
  /* #define FVWMDIR        "/local/homes/dsp/nation/modules"*/
  #define FVWM_ICONDIR   "/usr/include/X11/bitmaps:/usr/include/X11/pixmaps"
  #define FVWMRC         "/usr/lib/X11/fvwm/system.fvwmrc"
+ #else
+ #define FVWMDIR     "/usr/local/X11R6/lib/X11/fvwm"
+ #define FVWM_ICONDIR   "/usr/local/X11R6/include/X11/bitmaps:/usr/local/X11R6/include/X11/pixmaps"
+ #define FVWMRC         "/usr/local/X11R6/lib/X11/fvwm/system.fvwmrc"
+ #endif

  /* Imake command needed to put modules in desired target location */
  /* Use the second version if it causes grief */
インストールは以下の方法で
make \
        BINDIR=/usr/local/X11R6/bin \
        CONFDIR=/usr/local/X11R6/lib/X11 \
        LIBDIR=/usr/local/X11R6/lib \
        XAPPLOADDIR=/usr/local/X11R6/lib/X11/app-defaults \
        DOCHTMLDIR=/usr/local/X11R6/lib/X11/doc/html \
        MANDIR=/usr/local/X11R6/man/man1 \
        install install.man

fcal1.1.2.tar.gz

*** Makefile.ORG        Sat Dec 29 01:20:06 2007
--- Makefile    Sat Dec 29 01:21:07 2007
***************
*** 9,19 ****
  ### c flags ###
  CC = gcc

! CFLAGS = -I/usr/X11R6/include -O2 -Wall
  # For Solaris
  # CFLAGS = -I/usr/openwin/include -O2 -Wall

! LDFLAGS = -L/usr/X11R6/lib
  # For Solaris
  # LDFLAGS = -L/usr/openwin/lib
  LDLIBS = -lXaw -lXmu -lXt -lXext -lX11
--- 9,19 ----
  ### c flags ###
  CC = gcc

! CFLAGS = -I/usr/local/X11R6/include -O2 -Wall
  # For Solaris
  # CFLAGS = -I/usr/openwin/include -O2 -Wall

! LDFLAGS = -L/opt/QtPalmtop/lib
  # For Solaris
  # LDFLAGS = -L/usr/openwin/lib
  LDLIBS = -lXaw -lXmu -lXt -lXext -lX11

elisau10.tgz

bdftopcfでBDFファイルをPCFフォントに変換して利用。

fontkit-1.1-src.tar.gz

bdftopcfでBDFファイルをPCFフォントに変換して利用。

rxvt-2.7.10.tar.gz

X/QT-2にrxvtは含まれているのだけれど、セグフォルトするxclockの代りにrclockを使いたいが 為にビルド。
CPPFLAGS="-I/usr/local/include \
        -I/usr/local/ssl/include \
        -I/usr/local/canna/include \
        -I/usr/local/X11R6/include \
        -I/usr/local/X11R6/include/freetype2 \
        -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
        -L/usr/local/ssl/lib \
        -L/usr/local/canna/lib \
        -L/opt/QtPalmtop/lib" \
        ./configure \
                --prefix=/usr/local \
                --x-includes=/usr/local/X11R6/include \
                --x-libraries=/opt/QtPalmtop/lib \
                --enable-shared \
                --enable-static \
                --enable-languages \
                --enable-everything \
                --with-encoding=eucj \
                --enable-xim
make
make clock
make install

wavplay-1.4.tar.gz

*** Makefile.ORG        Sun Dec 30 01:53:03 2007
--- Makefile    Sun Dec 30 01:59:34 2007
***************
*** 38,44 ****
  #----------------------------------------------------------------------
  # If you are running a 386 you should comment this line out.
  #
! CPU=-m486

  #----------------------------------------------------------------------
  # If you are experiencing troubles (like core dumps!), then uncomment
--- 38,45 ----
  #----------------------------------------------------------------------
  # If you are running a 386 you should comment this line out.
  #
! ##CPU=-m486
! CPU=

  #----------------------------------------------------------------------
  # If you are experiencing troubles (like core dumps!), then uncomment

snd-util-3.5.tar.gz

mixerのみインストール。
*** mixer.c.ORG Sun Dec 30 09:35:40 2007
--- mixer.c     Sun Dec 30 09:36:39 2007
***************
*** 86,95 ****
--- 86,97 ----
                perror("SOUND_MIXER_READ_RECMASK");
                exit(-1);
        }
+ #if 0
        if (ioctl(baz, SOUND_MIXER_READ_RECSRC, &recsrc) == -1) {
                perror("SOUND_MIXER_READ_RECSRC");
                exit(-1);
        }
+ #endif

        switch (argc) {
                case 3:

jvim-3.0.tar.gz

通常の手順でビルドOK

dcron-2.3.3.tar.gz

Slackware-12のソースディレクトリからdcron-2.3.3.tar.gzをいただき、それに dcron-2.3.3.diff.gz, dcron-2.3.3.diff2.gz, dcron-2.3.3.diff3.gz, dcron-2.3.3.crontab.diff4.gz, dcron-2.3.3.version.diff.gz, dcron.fork.diff.gz, dcron.tmpdir.diff.gzを適用した後に以下のパッチを当てる。
*** Makefile.ORG        Mon Dec 31 20:46:37 2007
--- Makefile    Mon Dec 31 20:48:36 2007
***************
*** 30,39 ****
        rm -f *.o dcron.tgz $(PROTOS) *~

  install: crond crontab
!       install -o root -g root -m 0755 crond /usr/sbin
!       install -o root -g root -m 4755 crontab /usr/bin
!       install -o root -g root crontab.1 /usr/man/man1
!       install -o root -g root  crond.8 /usr/man/man8

  tar: cleano
        (cd ..; tar cvf - dcron | gzip -9 >dcron.tgz.tmp)
--- 30,39 ----
        rm -f *.o dcron.tgz $(PROTOS) *~

  install: crond crontab
!       install -o root -g root -m 0755 crond /usr/local/sbin
!       install -o root -g root -m 4755 crontab /usr/local/bin
!       install -o root -g root crontab.1 /usr/local/man/man1
!       install -o root -g root  crond.8 /usr/local/man/man8

  tar: cleano
        (cd ..; tar cvf - dcron | gzip -9 >dcron.tgz.tmp)
*** defs.h.ORG  Mon Dec 31 20:50:03 2007
--- defs.h      Mon Dec 31 20:51:39 2007
***************
*** 29,41 ****
  #define arysize(ary)  (sizeof(ary)/sizeof((ary)[0]))

  #ifndef CRONTABS
! #define CRONTABS      "/var/spool/cron/crontabs"
  #endif
  #ifndef TMPDIR
! #define TMPDIR                "/var/spool/cron"
  #endif
  #ifndef LOG_FILE
! #define LOG_FILE      "/var/log/cron"
  #endif
  #ifndef OPEN_MAX
  #define OPEN_MAX      256
--- 29,41 ----
  #define arysize(ary)  (sizeof(ary)/sizeof((ary)[0]))

  #ifndef CRONTABS
! #define CRONTABS      "/usr/local/var/spool/cron/crontabs"
  #endif
  #ifndef TMPDIR
! #define TMPDIR                "/usr/local/var/spool/cron"
  #endif
  #ifndef LOG_FILE
! #define LOG_FILE      "/usr/local/var/log/cron"
  #endif
  #ifndef OPEN_MAX
  #define OPEN_MAX      256

run-parts.gz

展開後、実行属性をつけてPATHの通ってる所に放り込む。

live.2007.12.27.tar.gz

通常の手順でビルドOK

amrnb-7.0.0.0.tar.bz2

interf_dec.cとinterf_enc.cの末尾にNULLが入り込んでるので、取り除く。
*** interf_dec.c.ORG    Tue Jan  1 17:13:46 2008
--- interf_dec.c        Tue Jan  1 17:13:58 2008
***************
*** 1336,1339 ****
     s->prev_ft = frame_type;
     s->prev_mode = mode;
  }
- ^@^@
\ No newline at end of file
--- 1336,1338 ----
*** interf_enc.c.ORG    Tue Jan  1 17:15:48 2008
--- interf_enc.c        Tue Jan  1 17:16:09 2008
***************
*** 1101,1104 ****
     free( s );
     state = NULL;
  }
- ^@^@
\ No newline at end of file
--- 1101,1103 ----

amrwb-7.0.0.2.tar.bz2

通常の手順でビルドOK

libid3tag-0.15.1b.tar.gz

通常の手順でビルドOK

libmad-0.15.1b.tar.gz

通常の手順でビルドOK

lame-3.97.tar.gz

通常の手順でビルドOK

SDL-1.2.13.tar.gz

通常の手順でビルドOK

make-3.81.tar.bz2

通常の手順でビルドOK

vidix-1.0.0.tar.bz2

SL-6000においてはインストールは無意味だったかも...。
*** vidix/drivers/mga_vid.c.ORG Tue Jan  8 22:41:11 2008
--- vidix/drivers/mga_vid.c     Tue Jan  8 22:40:04 2008
***************
*** 392,397 ****
--- 392,399 ----

  static void mga_vid_write_regs(int restore)
  {
+     unsigned char r, g, b, y, cb, cr;
+     int i;
  #ifdef BES
      //Make sure internal registers don't get updated until we're done
      writel(BESGLOBCTL, (readl(VCOUNT)-1)<<16);
***************
*** 622,629 ****
--- 624,633 ----
      //writel(C2SPICSTARTADD1, cregs.c2spicstartadd1);

      //set Color Lookup Table for Subpicture Layer
+ #if 0
      unsigned char r, g, b, y, cb, cr;
      int i;
+ #endif
      for (i = 0; i < 16; i++) {

          r = (i & 0x8) ? 0xff : 0x00;
*** libdha/sysdep/pci_linux.c.ORG       Tue Jan  8 22:18:57 2008
--- libdha/sysdep/pci_linux.c   Tue Jan  8 22:19:55 2008
***************
*** 7,13 ****
  #ifdef __i386__
  #include <sys/perm.h>
  #else
! #ifndef __sparc__
  #include <sys/io.h>
  #endif
  #endif
--- 7,13 ----
  #ifdef __i386__
  #include <sys/perm.h>
  #else
! #if !defined(__sparc__) && !defined(__arm__)
  #include <sys/io.h>
  #endif
  #endif
*** libdha/pci.c.ORG    Tue Jan  8 17:07:14 2008
--- libdha/pci.c        Tue Jan  8 17:07:38 2008
***************
*** 463,469 ****
  #include "sysdep/pci_ia64.c"
  #elif defined(__sparc__)
  #include "sysdep/pci_sparc.c"
! #elif defined( __arm32__ )
  #include "sysdep/pci_arm32.c"
  #elif defined(__powerpc__)
  #include "sysdep/pci_powerpc.c"
--- 463,469 ----
  #include "sysdep/pci_ia64.c"
  #elif defined(__sparc__)
  #include "sysdep/pci_sparc.c"
! #elif defined( __arm32__ ) || defined(__arm__)
  #include "sysdep/pci_arm32.c"
  #elif defined(__powerpc__)
  #include "sysdep/pci_powerpc.c"
*** libdha/AsmMacros.h.ORG      Tue Jan  8 17:15:57 2008
--- libdha/AsmMacros.h  Tue Jan  8 17:16:24 2008
***************
*** 70,76 ****
  #include "sysdep/AsmMacros_ia64.h"
  #elif defined(__sparc__)
  #include "sysdep/AsmMacros_sparc.h"
! #elif defined( __arm32__ )
  #include "sysdep/AsmMacros_arm32.h"
  #elif defined(__powerpc__)
  #include "sysdep/AsmMacros_powerpc.h"
--- 70,76 ----
  #include "sysdep/AsmMacros_ia64.h"
  #elif defined(__sparc__)
  #include "sysdep/AsmMacros_sparc.h"
! #elif defined( __arm32__ ) || defined(__arm__)
  #include "sysdep/AsmMacros_arm32.h"
  #elif defined(__powerpc__)
  #include "sysdep/AsmMacros_powerpc.h"
上記パッチ後、以下の手順でビルド&インストール
CPPFLAGS="-I/usr/local/include \
        -I/usr/local/ssl/include \
        -I/usr/local/canna/include \
        -I/usr/local/X11R6/include \
        -I/usr/local/X11R6/include/freetype2 \
        -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
        -L/usr/local/ssl/lib \
        -L/usr/local/canna/lib \
        -L/usr/local/X11R6/lib \
        -L/opt/QtPalmtop/lib" \
        ./configure \
                --prefix=/usr/local \
                --enable-shared \
                --enable-static

make
make install

MPlayer-1.0rc2.tar.bz2

ビルドに先だって/usr/local/include/linux/byteorder/generic.h にパッチを当てておく。その後以下のパッチを当ててビルドする。 ただし、vidix-1.0.0.tar.bz2をインストールしなければ、configureに対するパッチ のみでOKだと思います。
*** configure.ORG       Tue Jan  1 22:13:36 2008
--- configure   Wed Jan  2 22:24:11 2008
***************
*** 4766,4772 ****
  EOF
    _sdl=no
    if "$_sdlconfig" --version >>"$TMPLOG" 2>&1 ; then
!     if cc_check `$_sdlconfig --cflags` `$_sdlconfig --libs` >>"$TMPLOG" 2>&1 ; then
        _sdlversion=`$_sdlconfig --version | sed 's/[^0-9]//g'`
          if test "$_sdlversion" -gt 116 ; then
            if test "$_sdlversion" -lt 121 ; then
--- 4766,4772 ----
  EOF
    _sdl=no
    if "$_sdlconfig" --version >>"$TMPLOG" 2>&1 ; then
!     if cc_check `$_sdlconfig --cflags` `$_sdlconfig --libs` -lm >>"$TMPLOG" 2>&1 ; then
        _sdlversion=`$_sdlconfig --version | sed 's/[^0-9]//g'`
          if test "$_sdlversion" -gt 116 ; then
            if test "$_sdlversion" -lt 121 ; then
***************
*** 7584,7590 ****
  EXTRALIBS = $_extra_libs
  EXTRA_LIB = $_ld_extra $_ld_static $_ld_lm
  EXTRALIBS_MPLAYER = $_libs_mplayer
! EXTRALIBS_MENCODER = $_libs_mencoder

  HAVE_MLIB = $_mlib
  HAVE_PTHREADS = $_pthreads
--- 7584,7590 ----
  EXTRALIBS = $_extra_libs
  EXTRA_LIB = $_ld_extra $_ld_static $_ld_lm
  EXTRALIBS_MPLAYER = $_libs_mplayer
! EXTRALIBS_MENCODER = $_libs_mencoder -lX11

  HAVE_MLIB = $_mlib
  HAVE_PTHREADS = $_pthreads
*** ./vidix/sysdep/AsmMacros_arm32.h.ORG        Fri Jan 11 12:08:23 2008
--- ./vidix/sysdep/AsmMacros_arm32.h    Fri Jan 11 22:41:23 2008
***************
*** 8,44 ****
--- 8,68 ----
  #define ASMMACROS_ARM32_H
  unsigned int IOPortBase;  /* Memory mapped I/O port area */

+ #if defined(__arm32__)
  static __inline__ void outb(short port,char val)
+ #else
+ static __inline__ void outbz(short port,char val)
+ #endif
  {
         if ((unsigned short)port >= 0x400) return;
        *(volatile unsigned char*)(((unsigned short)(port))+IOPortBase) = val;
  }

+ #if defined(__arm32__)
  static __inline__ void outw(short port,short val)
+ #else
+ static __inline__ void outwz(short port,short val)
+ #endif
  {
         if ((unsigned short)port >= 0x400) return;
        *(volatile unsigned short*)(((unsigned short)(port))+IOPortBase) = val;
  }

+ #if defined(__arm32__)
  static __inline__ void outl(short port,int val)
+ #else
+ static __inline__ void outlz(short port,int val)
+ #endif
  {
         if ((unsigned short)port >= 0x400) return;
        *(volatile unsigned long*)(((unsigned short)(port))+IOPortBase) = val;
  }

+ #if defined(__arm32__)
  static __inline__ unsigned int inb(short port)
+ #else
+ static __inline__ unsigned int inbz(short port)
+ #endif
  {
         if ((unsigned short)port >= 0x400) return((unsigned int)-1);
        return(*(volatile unsigned char*)(((unsigned short)(port))+IOPortBase));
  }

+ #if defined(__arm32__)
  static __inline__ unsigned int inw(short port)
+ #else
+ static __inline__ unsigned int inwz(short port)
+ #endif
  {
         if ((unsigned short)port >= 0x400) return((unsigned int)-1);
        return(*(volatile unsigned short*)(((unsigned short)(port))+IOPortBase));
  }

+ #if defined(__arm32__)
  static __inline__ unsigned int inl(short port)
+ #else
+ static __inline__ unsigned int inlz(short port)
+ #endif
  {
         if ((unsigned short)port >= 0x400) return((unsigned int)-1);
        return(*(volatile unsigned long*)(((unsigned short)(port))+IOPortBase));
*** ./vidix/pci.c.ORG   Sat Jan 12 00:54:41 2008
--- ./vidix/pci.c       Sat Jan 12 00:56:39 2008
***************
*** 63,68 ****
--- 63,76 ----
  /* OS depended stuff */
  #if defined (linux)
  #include "sysdep/pci_linux.c"
+ #if defined(__arm__)
+ #  define outb(port, val) outbz((port),(val))
+ #  define outw(port, val) outwz((port),(val))
+ #  define outl(port, val) outlz((port),(val))
+ #  define inb(port) inbz((port))
+ #  define inw(port) inwz((port))
+ #  define inl(port) inlz((port))
+ #endif
  #elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__)
  #include "sysdep/pci_freebsd.c"
  #elif defined (__386BSD__)
*** ./vidix/dha.c.ORG   Sat Jan 12 00:54:58 2008
--- ./vidix/dha.c       Sat Jan 12 00:57:24 2008
***************
*** 47,52 ****
--- 47,60 ----
  #include <sys/io.h>
  #endif
  #include <unistd.h>
+ #if defined(__arm__)
+ #  define outb(port, val) outbz((port),(val))
+ #  define outw(port, val) outwz((port),(val))
+ #  define outl(port, val) outlz((port),(val))
+ #  define inb(port) inbz((port))
+ #  define inw(port) inwz((port))
+ #  define inl(port) inlz((port))
+ #endif

  #if defined(WIN32)
  #include "sysdep/libdha_win32.c"
*** ./vidix/AsmMacros.h.ORG     Fri Jan 11 12:02:31 2008
--- ./vidix/AsmMacros.h Fri Jan 11 21:21:06 2008
***************
*** 70,76 ****
  #include "sysdep/AsmMacros_ia64.h"
  #elif defined(__sparc__)
  #include "sysdep/AsmMacros_sparc.h"
! #elif defined( __arm32__ )
  #include "sysdep/AsmMacros_arm32.h"
  #elif defined(__powerpc__)
  #include "sysdep/AsmMacros_powerpc.h"
--- 70,76 ----
  #include "sysdep/AsmMacros_ia64.h"
  #elif defined(__sparc__)
  #include "sysdep/AsmMacros_sparc.h"
! #elif defined( __arm32__ ) || defined(__arm__)
  #include "sysdep/AsmMacros_arm32.h"
  #elif defined(__powerpc__)
  #include "sysdep/AsmMacros_powerpc.h"
その後、以下の様にconfigureを実行。
CPPFLAGS="-I/usr/local/include \
        -I/usr/local/ssl/include \
        -I/usr/local/canna/include \
        -I/usr/local/X11R6/include \
        -I/usr/local/X11R6/include/freetype2 \
        -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
        -L/usr/local/ssl/lib \
        -L/usr/local/canna/lib \
        -L/opt/QtPalmtop/lib" \
./configure --prefix=/usr/local \
        --disable-gcc-check \
        --target=generic-linux \
        --enable-gui
「あんたのgccのバージョンはサポートしてないねんから自分で責任持って やってや〜」 みたいなメッセージが出てconfigureが一旦止まるので、[ENTER]を押す。 あとは通常にmake;make install。

その後、 essential-20071007.tar.bz2, all-20071007.tar.bz2, Blue-1.7.tar.bz2を 通常の手順でインストールする。

framebufferでの再生は以下のように実行。

mplayer -quiet -framedrop -dr -double -vo fbdev -ao oss -vfm ffmpeg, -afm libmad, -fs -autosync 30 -cache 2048 foo.avi
320x240に拡大(縮小)したい場合は -zoom -xy 320 オプションを追加。

Xでの再生は以下のように実行。

mplayer -quiet -framedrop -dr -double -vo sdl -ao oss -vfm ffmpeg, -afm libmad, -autosync 30 -cache 2048 foo.avi
320x240に拡大(縮小)したい場合は -xy 320 オプションを追加。

ビデオチップのアクセラレーション機能が有効に利用できていないSL-6000においてスムーズに再生するには、

程度のソースが限度かも...。

余談。
本当はconfigureの段階で「--target=generic-linux」を指定しなければ、armに多少は最適化された mplayerができるはずなのですが、残念ながらアセンブラソース(libavcodec/armv4l/dsputil_arm_s.S) で文法エラーが発生してしまいました。 おそらくzaurus版mplayerで有名なattyさんの コードが本家に取り込まれているのですが、attyさんはgcc-3.4.2でビルドされているようで、 私のとこのgcc-2.95.1(と言うかgas-2.9.5?)ではビルドできないようです。いつかgccを バージョンアップしたなら再度挑戦してみたいと思います。

2008.01.20 追記
アセンブラのソース(2本)を修正してgcc-2.95.1+gas-2.9.5でも 「--target=generic-linux」指定無しでビルドに成功しました。 修正は以下の通りです。pld命令(プリロード)はコメントアウト、 .elseifマクロは.if-.endifに書き換えという方針で。

*** ./libmpeg2/motion_comp_arm_s.S.ORG	Sat Jan 19 10:29:01 2008
--- ./libmpeg2/motion_comp_arm_s.S	Sat Jan 19 10:44:40 2008
***************
*** 25,31 ****
  	.global MC_put_o_16_arm
  MC_put_o_16_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! 	pld [r1]
          stmfd sp!, {r4-r11, lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_o_16_arm_align_jt
--- 25,31 ----
  	.global MC_put_o_16_arm
  MC_put_o_16_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! @	pld [r1]
          stmfd sp!, {r4-r11, lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_o_16_arm_align_jt
***************
*** 35,41 ****
  MC_put_o_16_arm_align0:
  	ldmia r1, {r4-r7}
  	add r1, r1, r2
! 	pld [r1]
  	stmia r0, {r4-r7}
  	subs r3, r3, #1
  	add r0, r0, r2
--- 35,41 ----
  MC_put_o_16_arm_align0:
  	ldmia r1, {r4-r7}
  	add r1, r1, r2
! @	pld [r1]
  	stmia r0, {r4-r7}
  	subs r3, r3, #1
  	add r0, r0, r2
***************
*** 46,52 ****
  	ldmia r1, {r4-r8}
  	add r1, r1, r2
  	mov r9, r4, lsr #(\shift)
! 	pld [r1]
  	mov r10, r5, lsr #(\shift)
  	orr r9, r9, r5, lsl #(32-\shift)
  	mov r11, r6, lsr #(\shift)
--- 46,52 ----
  	ldmia r1, {r4-r8}
  	add r1, r1, r2
  	mov r9, r4, lsr #(\shift)
! @	pld [r1]
  	mov r10, r5, lsr #(\shift)
  	orr r9, r9, r5, lsl #(32-\shift)
  	mov r11, r6, lsr #(\shift)
***************
*** 85,91 ****
  	.global MC_put_o_8_arm
  MC_put_o_8_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! 	pld [r1]
          stmfd sp!, {r4-r10, lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_o_8_arm_align_jt
--- 85,91 ----
  	.global MC_put_o_8_arm
  MC_put_o_8_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! @	pld [r1]
          stmfd sp!, {r4-r10, lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_o_8_arm_align_jt
***************
*** 94,100 ****
  MC_put_o_8_arm_align0:
  	ldmia r1, {r4-r5}
  	add r1, r1, r2
! 	pld [r1]
  	stmia r0, {r4-r5}
  	add r0, r0, r2
  	subs r3, r3, #1
--- 94,100 ----
  MC_put_o_8_arm_align0:
  	ldmia r1, {r4-r5}
  	add r1, r1, r2
! @	pld [r1]
  	stmia r0, {r4-r5}
  	add r0, r0, r2
  	subs r3, r3, #1
***************
*** 105,111 ****
  	ldmia r1, {r4-r6}
  	add r1, r1, r2
  	mov r9, r4, lsr #(\shift)
! 	pld [r1]
  	mov r10, r5, lsr #(\shift)
  	orr r9, r9, r5, lsl #(32-\shift)
  	orr r10, r10, r6, lsl #(32-\shift)
--- 105,111 ----
  	ldmia r1, {r4-r6}
  	add r1, r1, r2
  	mov r9, r4, lsr #(\shift)
! @	pld [r1]
  	mov r10, r5, lsr #(\shift)
  	orr r9, r9, r5, lsl #(32-\shift)
  	orr r10, r10, r6, lsl #(32-\shift)
***************
*** 154,160 ****
  	.global MC_put_x_16_arm
  MC_put_x_16_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! 	pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_x_16_arm_align_jt
--- 154,160 ----
  	.global MC_put_x_16_arm
  MC_put_x_16_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! @	pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_x_16_arm_align_jt
***************
*** 179,185 ****
  MC_put_x_16_arm_align0:
  	ldmia r1, {r4-r8}
  	add r1, r1, r2
! 	pld [r1]
  	AVG_PW r7, r8
  	AVG_PW r6, r7
  	AVG_PW r5, r6
--- 179,185 ----
  MC_put_x_16_arm_align0:
  	ldmia r1, {r4-r8}
  	add r1, r1, r2
! @	pld [r1]
  	AVG_PW r7, r8
  	AVG_PW r6, r7
  	AVG_PW r5, r6
***************
*** 193,199 ****
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r8}
  	add r1, r1, r2
! 	pld [r1]
  	ADJ_ALIGN_QW 8, r4, r5, r6, r7, r8
  	AVG_PW r7, r8
  	AVG_PW r6, r7
--- 193,199 ----
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r8}
  	add r1, r1, r2
! @	pld [r1]
  	ADJ_ALIGN_QW 8, r4, r5, r6, r7, r8
  	AVG_PW r7, r8
  	AVG_PW r6, r7
***************
*** 208,214 ****
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r8}
  	add r1, r1, r2
! 	pld [r1]
  	ADJ_ALIGN_QW 16, r4, r5, r6, r7, r8
  	AVG_PW r7, r8
  	AVG_PW r6, r7
--- 208,214 ----
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r8}
  	add r1, r1, r2
! @	pld [r1]
  	ADJ_ALIGN_QW 16, r4, r5, r6, r7, r8
  	AVG_PW r7, r8
  	AVG_PW r6, r7
***************
*** 223,229 ****
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r8}
  	add r1, r1, r2
! 	pld [r1]
  	ADJ_ALIGN_QW 24, r4, r5, r6, r7, r8
  	AVG_PW r7, r8
  	AVG_PW r6, r7
--- 223,229 ----
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r8}
  	add r1, r1, r2
! @	pld [r1]
  	ADJ_ALIGN_QW 24, r4, r5, r6, r7, r8
  	AVG_PW r7, r8
  	AVG_PW r6, r7
***************
*** 246,252 ****
  	.global MC_put_x_8_arm
  MC_put_x_8_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! 	pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_x_8_arm_align_jt
--- 246,252 ----
  	.global MC_put_x_8_arm
  MC_put_x_8_arm:
  	@@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
! @	pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
  	and r4, r1, #3
  	adr r5, MC_put_x_8_arm_align_jt
***************
*** 267,273 ****
  MC_put_x_8_arm_align0:
  	ldmia r1, {r4-r6}
  	add r1, r1, r2
! 	pld [r1]
  	AVG_PW r5, r6
  	AVG_PW r4, r5
  	stmia r0, {r5-r6}
--- 267,273 ----
  MC_put_x_8_arm_align0:
  	ldmia r1, {r4-r6}
  	add r1, r1, r2
! @	pld [r1]
  	AVG_PW r5, r6
  	AVG_PW r4, r5
  	stmia r0, {r5-r6}
***************
*** 279,285 ****
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r6}
  	add r1, r1, r2
! 	pld [r1]
  	ADJ_ALIGN_DW 8, r4, r5, r6
  	AVG_PW r5, r6
  	AVG_PW r4, r5
--- 279,285 ----
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r6}
  	add r1, r1, r2
! @	pld [r1]
  	ADJ_ALIGN_DW 8, r4, r5, r6
  	AVG_PW r5, r6
  	AVG_PW r4, r5
***************
*** 292,298 ****
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r6}
  	add r1, r1, r2
! 	pld [r1]
  	ADJ_ALIGN_DW 16, r4, r5, r6
  	AVG_PW r5, r6
  	AVG_PW r4, r5
--- 292,298 ----
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r6}
  	add r1, r1, r2
! @	pld [r1]
  	ADJ_ALIGN_DW 16, r4, r5, r6
  	AVG_PW r5, r6
  	AVG_PW r4, r5
***************
*** 305,311 ****
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r6}
  	add r1, r1, r2
! 	pld [r1]
  	ADJ_ALIGN_DW 24, r4, r5, r6
  	AVG_PW r5, r6
  	AVG_PW r4, r5
--- 305,311 ----
  	and r1, r1, #0xFFFFFFFC
  1:	ldmia r1, {r4-r6}
  	add r1, r1, r2
! @	pld [r1]
  	ADJ_ALIGN_DW 24, r4, r5, r6
  	AVG_PW r5, r6
  	AVG_PW r4, r5
*** ./libavcodec/armv4l/dsputil_arm_s.S.ORG	Fri Jan 18 17:04:25 2008
--- ./libavcodec/armv4l/dsputil_arm_s.S	Sun Jan 20 12:17:56 2008
***************
*** 76,82 ****
  put_pixels16_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r11, lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
--- 76,82 ----
  put_pixels16_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r11, lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
***************
*** 87,93 ****
          ldmia r1, {r4-r7}
          add r1, r1, r2
          stmia r0, {r4-r7}
!         pld [r1]
          subs r3, r3, #1
          add r0, r0, r2
          bne 1b
--- 87,93 ----
          ldmia r1, {r4-r7}
          add r1, r1, r2
          stmia r0, {r4-r7}
! @        pld [r1]
          subs r3, r3, #1
          add r0, r0, r2
          bne 1b
***************
*** 97,103 ****
          ldmia r1, {r4-r8}
          add r1, r1, r2
          ADJ_ALIGN_QUADWORD_D 1, r9, r10, r11, r12, r4, r5, r6, r7, r8
!         pld [r1]
          subs r3, r3, #1
          stmia r0, {r9-r12}
          add r0, r0, r2
--- 97,103 ----
          ldmia r1, {r4-r8}
          add r1, r1, r2
          ADJ_ALIGN_QUADWORD_D 1, r9, r10, r11, r12, r4, r5, r6, r7, r8
! @        pld [r1]
          subs r3, r3, #1
          stmia r0, {r9-r12}
          add r0, r0, r2
***************
*** 108,114 ****
          ldmia r1, {r4-r8}
          add r1, r1, r2
          ADJ_ALIGN_QUADWORD_D 2, r9, r10, r11, r12, r4, r5, r6, r7, r8
!         pld [r1]
          subs r3, r3, #1
          stmia r0, {r9-r12}
          add r0, r0, r2
--- 108,114 ----
          ldmia r1, {r4-r8}
          add r1, r1, r2
          ADJ_ALIGN_QUADWORD_D 2, r9, r10, r11, r12, r4, r5, r6, r7, r8
! @        pld [r1]
          subs r3, r3, #1
          stmia r0, {r9-r12}
          add r0, r0, r2
***************
*** 119,125 ****
          ldmia r1, {r4-r8}
          add r1, r1, r2
          ADJ_ALIGN_QUADWORD_D 3, r9, r10, r11, r12, r4, r5, r6, r7, r8
!         pld [r1]
          subs r3, r3, #1
          stmia r0, {r9-r12}
          add r0, r0, r2
--- 119,125 ----
          ldmia r1, {r4-r8}
          add r1, r1, r2
          ADJ_ALIGN_QUADWORD_D 3, r9, r10, r11, r12, r4, r5, r6, r7, r8
! @        pld [r1]
          subs r3, r3, #1
          stmia r0, {r9-r12}
          add r0, r0, r2
***************
*** 138,144 ****
  put_pixels8_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r5,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
--- 138,144 ----
  put_pixels8_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r5,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
***************
*** 149,155 ****
          ldmia r1, {r4-r5}
          add r1, r1, r2
          subs r3, r3, #1
!         pld [r1]
          stmia r0, {r4-r5}
          add r0, r0, r2
          bne 1b
--- 149,155 ----
          ldmia r1, {r4-r5}
          add r1, r1, r2
          subs r3, r3, #1
! @        pld [r1]
          stmia r0, {r4-r5}
          add r0, r0, r2
          bne 1b
***************
*** 159,165 ****
          ldmia r1, {r4-r5, r12}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r12
!         pld [r1]
          subs r3, r3, #1
          stmia r0, {r4-r5}
          add r0, r0, r2
--- 159,165 ----
          ldmia r1, {r4-r5, r12}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r12
! @        pld [r1]
          subs r3, r3, #1
          stmia r0, {r4-r5}
          add r0, r0, r2
***************
*** 170,176 ****
          ldmia r1, {r4-r5, r12}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r12
!         pld [r1]
          subs r3, r3, #1
          stmia r0, {r4-r5}
          add r0, r0, r2
--- 170,176 ----
          ldmia r1, {r4-r5, r12}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r12
! @        pld [r1]
          subs r3, r3, #1
          stmia r0, {r4-r5}
          add r0, r0, r2
***************
*** 181,187 ****
          ldmia r1, {r4-r5, r12}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r12
!         pld [r1]
          subs r3, r3, #1
          stmia r0, {r4-r5}
          add r0, r0, r2
--- 181,187 ----
          ldmia r1, {r4-r5, r12}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r12
! @        pld [r1]
          subs r3, r3, #1
          stmia r0, {r4-r5}
          add r0, r0, r2
***************
*** 200,206 ****
  put_pixels8_x2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r10,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
--- 200,206 ----
  put_pixels8_x2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r10,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
***************
*** 212,218 ****
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
!         pld [r1]
          RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
--- 212,218 ----
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
! @        pld [r1]
          RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
***************
*** 225,231 ****
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
!         pld [r1]
          RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
--- 225,231 ----
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
! @        pld [r1]
          RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
***************
*** 238,244 ****
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
!         pld [r1]
          RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
--- 238,244 ----
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
! @        pld [r1]
          RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
***************
*** 250,256 ****
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
!         pld [r1]
          RND_AVG32 r8, r9, r6, r7, r5, r10, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
--- 250,256 ----
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
! @        pld [r1]
          RND_AVG32 r8, r9, r6, r7, r5, r10, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
***************
*** 269,275 ****
  put_no_rnd_pixels8_x2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r10,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
--- 269,275 ----
  put_no_rnd_pixels8_x2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r10,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
***************
*** 281,287 ****
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
!         pld [r1]
          NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
--- 281,287 ----
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
! @        pld [r1]
          NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
***************
*** 294,300 ****
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
!         pld [r1]
          NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
--- 294,300 ----
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
! @        pld [r1]
          NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
***************
*** 307,313 ****
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
!         pld [r1]
          NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
--- 307,313 ----
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
          ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
! @        pld [r1]
          NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
          subs r3, r3, #1
          stmia r0, {r4-r5}
***************
*** 319,325 ****
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
!         pld [r1]
          NO_RND_AVG32 r8, r9, r6, r7, r5, r10, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
--- 319,325 ----
          ldmia r1, {r4-r5, r10}
          add r1, r1, r2
          ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
! @        pld [r1]
          NO_RND_AVG32 r8, r9, r6, r7, r5, r10, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
***************
*** 340,346 ****
  put_pixels8_y2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
--- 340,346 ----
  put_pixels8_y2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
***************
*** 354,366 ****
          add r1, r1, r2
  6:      ldmia r1, {r6-r7}
          add r1, r1, r2
!         pld [r1]
          RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          ldmia r1, {r4-r5}
          add r1, r1, r2
          stmia r0, {r8-r9}
          add r0, r0, r2
!         pld [r1]
          RND_AVG32 r8, r9, r6, r7, r4, r5, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
--- 354,366 ----
          add r1, r1, r2
  6:      ldmia r1, {r6-r7}
          add r1, r1, r2
! @        pld [r1]
          RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          ldmia r1, {r4-r5}
          add r1, r1, r2
          stmia r0, {r8-r9}
          add r0, r0, r2
! @        pld [r1]
          RND_AVG32 r8, r9, r6, r7, r4, r5, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
***************
*** 371,388 ****
  2:
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
          RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
          subs r3, r3, #1
          RND_AVG32 r10, r11, r7, r8, r4, r5, r12
--- 371,388 ----
  2:
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
          RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
          subs r3, r3, #1
          RND_AVG32 r10, r11, r7, r8, r4, r5, r12
***************
*** 394,411 ****
  3:
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
          RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
          subs r3, r3, #1
          RND_AVG32 r10, r11, r7, r8, r4, r5, r12
--- 394,411 ----
  3:
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
          RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
          subs r3, r3, #1
          RND_AVG32 r10, r11, r7, r8, r4, r5, r12
***************
*** 417,434 ****
  4:
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
          RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
          subs r3, r3, #1
          RND_AVG32 r10, r11, r7, r8, r4, r5, r12
--- 417,434 ----
  4:
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
          RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
          subs r3, r3, #1
          RND_AVG32 r10, r11, r7, r8, r4, r5, r12
***************
*** 449,455 ****
  put_no_rnd_pixels8_y2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
--- 449,455 ----
  put_no_rnd_pixels8_y2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adr r5, 5f
          ands r4, r1, #3
***************
*** 463,475 ****
          add r1, r1, r2
  6:      ldmia r1, {r6-r7}
          add r1, r1, r2
!         pld [r1]
          NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          ldmia r1, {r4-r5}
          add r1, r1, r2
          stmia r0, {r8-r9}
          add r0, r0, r2
!         pld [r1]
          NO_RND_AVG32 r8, r9, r6, r7, r4, r5, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
--- 463,475 ----
          add r1, r1, r2
  6:      ldmia r1, {r6-r7}
          add r1, r1, r2
! @        pld [r1]
          NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
          ldmia r1, {r4-r5}
          add r1, r1, r2
          stmia r0, {r8-r9}
          add r0, r0, r2
! @        pld [r1]
          NO_RND_AVG32 r8, r9, r6, r7, r4, r5, r12
          subs r3, r3, #1
          stmia r0, {r8-r9}
***************
*** 480,497 ****
  2:
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
          NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
          subs r3, r3, #1
          NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
--- 480,497 ----
  2:
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
          NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
          subs r3, r3, #1
          NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
***************
*** 503,520 ****
  3:
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
          NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
          subs r3, r3, #1
          NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
--- 503,520 ----
  3:
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
          NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
          subs r3, r3, #1
          NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
***************
*** 526,543 ****
  4:
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
          NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
!         pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
          subs r3, r3, #1
          NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
--- 526,543 ----
  4:
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
  6:      ldmia r1, {r7-r9}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
          NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
          stmia r0, {r10-r11}
          add r0, r0, r2
          ldmia r1, {r4-r6}
          add r1, r1, r2
! @        pld [r1]
          ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
          subs r3, r3, #1
          NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
***************
*** 556,581 ****
  .macro  RND_XY2_IT align
          @ l1=  (a & 0x03030303) + (b & 0x03030303) ?(+ 0x02020202)
          @ h1= ((a & 0xFCFCFCFCUL) >> 2) + ((b & 0xFCFCFCFCUL) >> 2)
  .if \align == 0
          ldmia r1, {r6-r8}
! .elseif \align == 3
          ldmia r1, {r5-r7}
  .else
          ldmia r1, {r8-r10}
  .endif
          add r1, r1, r2
!         pld [r1]
  .if \align == 0
          ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
! .elseif \align == 1
          ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r8, r9, r10
          ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r8, r9, r10
! .elseif \align == 2
          ADJ_ALIGN_DOUBLEWORD_D 2, r4, r5, r8, r9, r10
          ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r8, r9, r10
! .elseif \align == 3
          ADJ_ALIGN_DOUBLEWORD_D 3, r4, r5, r5, r6, r7
  .endif
          ldr r14, [r12, #0]      @ 0x03030303
          tst r3, #1
          and r8, r4, r14
--- 556,613 ----
  .macro  RND_XY2_IT align
          @ l1=  (a & 0x03030303) + (b & 0x03030303) ?(+ 0x02020202)
          @ h1= ((a & 0xFCFCFCFCUL) >> 2) + ((b & 0xFCFCFCFCUL) >> 2)
+ @ -------------------------------
+ @.if \align == 0
+ @        ldmia r1, {r6-r8}
+ @.elseif \align == 3
+ @        ldmia r1, {r5-r7}
+ @.else
+ @        ldmia r1, {r8-r10}
+ @.endif
+ @ -------------------------------
  .if \align == 0
          ldmia r1, {r6-r8}
! .else
! .if \align == 3
          ldmia r1, {r5-r7}
  .else
          ldmia r1, {r8-r10}
  .endif
+ .endif
+ @ -------------------------------
          add r1, r1, r2
! @        pld [r1]
! @ -------------------------------
! @.if \align == 0
! @        ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
! @.elseif \align == 1
! @        ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r8, r9, r10
! @        ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r8, r9, r10
! @.elseif \align == 2
! @        ADJ_ALIGN_DOUBLEWORD_D 2, r4, r5, r8, r9, r10
! @        ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r8, r9, r10
! @.elseif \align == 3
! @        ADJ_ALIGN_DOUBLEWORD_D 3, r4, r5, r5, r6, r7
! @.endif
! @ -------------------------------
  .if \align == 0
          ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
! .else
! .if \align == 1
          ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r8, r9, r10
          ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r8, r9, r10
! .else
! .if \align == 2
          ADJ_ALIGN_DOUBLEWORD_D 2, r4, r5, r8, r9, r10
          ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r8, r9, r10
! .else
! .if \align == 3
          ADJ_ALIGN_DOUBLEWORD_D 3, r4, r5, r5, r6, r7
  .endif
+ .endif
+ .endif
+ .endif
+ @ -------------------------------
          ldr r14, [r12, #0]      @ 0x03030303
          tst r3, #1
          and r8, r4, r14
***************
*** 622,628 ****
  put_pixels8_xy2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adrl r12, 5f
          ands r4, r1, #3
--- 654,660 ----
  put_pixels8_xy2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adrl r12, 5f
          ands r4, r1, #3
***************
*** 658,664 ****
  put_no_rnd_pixels8_xy2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
!         pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adrl r12, 5f
          ands r4, r1, #3
--- 690,696 ----
  put_no_rnd_pixels8_xy2_arm:
          @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
          @ block = word aligned, pixles = unaligned
! @        pld [r1]
          stmfd sp!, {r4-r11,lr} @ R14 is also called LR
          adrl r12, 5f
          ands r4, r1, #3

zip232.zip

通常の手順でビルドOK

flex-2.5.34.tar.bz2

通常の手順でビルドOK

libIDL-0.6.8.tar.gz

通常の手順でビルドOK

X430src-1.tgz - libXi.so.6.0

上記参照。

perl-5.6.2.tar.gz

*** ./ext/Errno/Errno_pm.PL.ORG Mon Jan  7 12:43:52 2008
--- ./ext/Errno/Errno_pm.PL     Mon Jan  7 13:13:26 2008
***************
*** 101,107 ****
      } elsif ($^O eq 'linux') {
        # Some Linuxes have weird errno.hs which generate
        # no #file or #line directives
!       $file{'/usr/include/errno.h'} = 1;
      } elsif ($^O eq 'MacOS') {
        # note that we are only getting the GUSI errno's here ...
        # we might miss out on compiler-specific ones
--- 101,108 ----
      } elsif ($^O eq 'linux') {
        # Some Linuxes have weird errno.hs which generate
        # no #file or #line directives
! #     $file{'/usr/include/errno.h'} = 1;
!       $file{'/usr/local/include/errno.h'} = 1;        # for zaurus dev_img
      } elsif ($^O eq 'MacOS') {
        # note that we are only getting the GUSI errno's here ...
        # we might miss out on compiler-specific ones

firefox-1.0.8-source.tar.bz2

.mozconfigを以下の内容で作成。
. $topsrcdir/browser/config/mozconfig
ac_add_options --disable-debug
ac_add_options --enable-optimize
ac_add_options --enable-default-toolkit=gtk
ac_add_options --disable-xft
ac_add_options --disable-freetype2
ビルドは以下のように実行。
CPPFLAGS="-I/usr/local/include \
        -I/usr/local/ssl/include \
        -I/usr/local/canna/include \
        -I/usr/local/X11R6/include \
        -I/usr/local/X11R6/include/freetype2 \
        -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
        -L/usr/local/ssl/lib \
        -L/usr/local/canna/lib \
        -L/usr/local/X11R6/lib \
        -L/opt/QtPalmtop/lib" \
make -f client.mk build
その後のインストールは通常の手順通り

firefox-2.0.0.12-source.tar.bz2

firefox-1.0.8と同様の手順でビルドOK。初回の起動に5分程かかる(~/.mozilla/配下のプロファイル作成に時間が掛かってる?) ものの、その後はむしろfirefox-1.0.8よりも軽快な気がします...。

2008.02.18 追記
アンチエイリアス機能をOFFにすれば少しでも軽快になるかと思い、 URL欄にabout:configを入力し、font.scale.aa_bitmap.enableの値をfalseに 設定した。アンチエイリアスはOFFになったけれども、<H?>〜</H?> に応じたタイトル表示の変化がしなくなった。また軽快感についてもビミョウな感じ...。

mplayerplug-in-3.50.tar.gz

ビルド手順は以下のとおり。
CPPFLAGS="-I/usr/local/include \
  -I/usr/local/ssl/include \
  -I/usr/local/canna/include \
  -I/usr/local/X11R6/include \
  -I/usr/local/X11R6/include/freetype2 \
  -I/opt/QtPalmtop/include" \
LDFLAGS="-L/usr/local/lib \
  -L/usr/local/ssl/lib \
  -L/usr/local/canna/lib \
  -L/usr/local/X11R6/lib \
  -L/opt/QtPalmtop/lib" \
  ./configure \
        --prefix=/usr/local \
        --x-includes=/usr/local/X11R6/include \
        --x-libraries=/opt/QtPalmtop/lib \
        --enable-shared \
        --enable-static \
        --enable-gtk1 \
        --disable-gtk2 \
        --with-gecko-sdk=/gecko-sdkへのパス
make
cp *.so /firefoxインストールディレクトリ/plugins/
cp *.xpt /firefoxインストールディレクトリ/components/

sound-recorder-0.06.tar.gz

*** ./src/play-sample.cc.ORG    Fri Jan 25 12:15:00 2008
--- ./src/play-sample.cc        Fri Jan 25 12:15:47 2008
***************
*** 189,195 ****
        char * home, * home_env = getenv("HOME");
        home = new char[strlen(home_env) + 50];

!       strcpy(home, "/etc/soundrecorder.conf");
        RCfile rc(home, false);
        
        strcpy(home, home_env);
--- 189,195 ----
        char * home, * home_env = getenv("HOME");
        home = new char[strlen(home_env) + 50];

!       strcpy(home, "/usr/local/etc/soundrecorder.conf");
        RCfile rc(home, false);
        
        strcpy(home, home_env);
*** ./src/record.cc.ORG Fri Jan 25 12:16:05 2008
--- ./src/record.cc     Fri Jan 25 12:16:31 2008
***************
*** 541,547 ****
        char * home, * home_env = getenv("HOME");
        home = new char[strlen(home_env) + 50];

!       strcpy(home, "/etc/soundrecorder.conf");
        RCfile rc(home, false);
        
        strcpy(home, home_env);
--- 541,547 ----
        char * home, * home_env = getenv("HOME");
        home = new char[strlen(home_env) + 50];
  
!       strcpy(home, "/usr/local/etc/soundrecorder.conf");
        RCfile rc(home, false);
  
        strcpy(home, home_env);
*** ./Makefile.ORG      Fri Jan 25 12:11:05 2008
--- ./Makefile  Fri Jan 25 12:12:42 2008
***************
*** 9,15 ****
  
  install:
        $(foreach dir,$(dirs),cd $(dir); make install; cd ..;)
!       $(INSTALL) -m 644 -g root -o root soundrecorder.conf /etc
  
  clean:
        $(foreach dir,$(dirs),cd $(dir); make clean; cd ..;)
--- 9,15 ----
  
  install:
        $(foreach dir,$(dirs),cd $(dir); make install; cd ..;)
!       $(INSTALL) -m 644 -g root -o root soundrecorder.conf /usr/local/etc
  
  clean:
        $(foreach dir,$(dirs),cd $(dir); make clean; cd ..;)
*** ./Makefile.Rules.ORG        Fri Jan 25 12:13:43 2008
--- ./Makefile.Rules    Fri Jan 25 12:21:59 2008
***************
*** 1,8 ****
  
  # $Id: 20070908_sl-6000_zaurus.html,v 1.40 2016/03/23 16:00:11 m-ito Exp $
  
! BUILDDATE := $(shell date +'%b %d %Y')
! VERSION = 0.06 (Build on $(BUILDDATE))
  VERSION_LONG = $(VERSION), GPL 2 (see COPYRIGHTS)
  FLAGS =  -D_REENTRANT -g -Wall -O2 -DVERSION='"$(VERSION)"'
  LIBS  =  -lpthread
--- 1,8 ----
  
  # $Id: 20070908_sl-6000_zaurus.html,v 1.40 2016/03/23 16:00:11 m-ito Exp $
  
! BUILDDATE := $(shell date +'%b_%d_%Y'|tr -d ' ')
! VERSION = 0.06_(Build_on_$(BUILDDATE))
  VERSION_LONG = $(VERSION), GPL 2 (see COPYRIGHTS)
  FLAGS =  -D_REENTRANT -g -Wall -O2 -DVERSION='"$(VERSION)"'
  LIBS  =  -lpthread

sox-14.0.0.tar.gz

*** ./src/amr-wb.c.ORG  Fri Jan 25 20:46:39 2008
--- ./src/amr-wb.c      Fri Jan 25 20:48:48 2008
***************
*** 35,38 ****
--- 35,40 ----
  #define AMR_NAMES           "amr-wb", "awb"
  #define AMR_PRIV_TOO_BIG    amr_wb_PRIVSIZE_too_big
  #define AMR_RATE            16000
+ #if 0
  #include "amr.h"
+ #endif
*** ./src/amr-nb.c.ORG  Fri Jan 25 20:50:07 2008
--- ./src/amr-nb.c      Fri Jan 25 20:50:46 2008
***************
*** 52,55 ****
--- 52,57 ----
  #define E_IF_exit           Encoder_Interface_exit
  #define E_IF_init()         Encoder_Interface_init(1)
  static unsigned block_size[] = {13,14,16,18,20,21,27,32,6,1,1,1,1,1,1,1};
+ #if 0
  #include "amr.h"
+ #endif
*** ./configure.ORG     Fri Jan 25 19:29:03 2008
--- ./configure Fri Jan 25 19:50:54 2008
***************
*** 3427,3439 ****
    CFLAGS=$ac_save_CFLAGS
  elif test $ac_cv_prog_cc_g = yes; then
    if test "$GCC" = yes; then
!     CFLAGS="-g -O2"
    else
      CFLAGS="-g"
    fi
  else
    if test "$GCC" = yes; then
!     CFLAGS="-O2"
    else
      CFLAGS=
    fi
--- 3427,3441 ----
    CFLAGS=$ac_save_CFLAGS
  elif test $ac_cv_prog_cc_g = yes; then
    if test "$GCC" = yes; then
! #    CFLAGS="-g -O2"
!     CFLAGS="-g"
    else
      CFLAGS="-g"
    fi
  else
    if test "$GCC" = yes; then
! #    CFLAGS="-O2"
!     CFLAGS=""
    else
      CFLAGS=
    fi
***************
*** 5904,5916 ****
    CXXFLAGS=$ac_save_CXXFLAGS
  elif test $ac_cv_prog_cxx_g = yes; then
    if test "$GXX" = yes; then
!     CXXFLAGS="-g -O2"
    else
      CXXFLAGS="-g"
    fi
  else
    if test "$GXX" = yes; then
!     CXXFLAGS="-O2"
    else
      CXXFLAGS=
    fi
--- 5906,5920 ----
    CXXFLAGS=$ac_save_CXXFLAGS
  elif test $ac_cv_prog_cxx_g = yes; then
    if test "$GXX" = yes; then
! #    CXXFLAGS="-g -O2"
!     CXXFLAGS="-g"
    else
      CXXFLAGS="-g"
    fi
  else
    if test "$GXX" = yes; then
! #    CXXFLAGS="-O2"
!     CXXFLAGS=""
    else
      CXXFLAGS=
    fi
***************
*** 6504,6516 ****
    FFLAGS=$ac_save_FFLAGS
  elif test $ac_cv_prog_f77_g = yes; then
    if test "x$ac_cv_f77_compiler_gnu" = xyes; then
!     FFLAGS="-g -O2"
    else
      FFLAGS="-g"
    fi
  else
    if test "x$ac_cv_f77_compiler_gnu" = xyes; then
!     FFLAGS="-O2"
    else
      FFLAGS=
    fi
--- 6508,6522 ----
    FFLAGS=$ac_save_FFLAGS
  elif test $ac_cv_prog_f77_g = yes; then
    if test "x$ac_cv_f77_compiler_gnu" = xyes; then
! #    FFLAGS="-g -O2"
!     FFLAGS="-g"
    else
      FFLAGS="-g"
    fi
  else
    if test "x$ac_cv_f77_compiler_gnu" = xyes; then
! #    FFLAGS="-O2"
!     FFLAGS=""
    else
      FFLAGS=
    fi

comprec-current.tar.gz

ARMに最適化された高速mp3エンコーダshineです。 会議録を直接mp3で録音できます。
以下のパッチを当て、
*** ./Makefile.ORG      Fri Jan 25 21:50:41 2008
--- ./Makefile  Fri Jan 25 21:52:31 2008
***************
*** 1,8 ****
  ZROOT=/home/zaurus/develop
  CC_NATIVE=gcc
! CC=$(ZROOT)/arm/bin/arm-linux-gcc
! AS=$(ZROOT)/arm/bin/arm-v4l-linux-as
! STRIP=$(ZROOT)/arm/bin/arm-v4l-linux-strip
  IPKG_BUILD=./ipkg-build
  
  CFLAGS+=-Wall -O2 -fno-exceptions -g
--- 1,8 ----
  ZROOT=/home/zaurus/develop
  CC_NATIVE=gcc
! CC=gcc
! AS=as
! STRIP=strip
  IPKG_BUILD=./ipkg-build
  
  CFLAGS+=-Wall -O2 -fno-exceptions -g
以下のコマンドでビルドします。
PATH=.:$PATH make
インストールはshineを適当なディレクトリにコピーして完了。

libpng-1.2.24.tar.bz2

通常の手順でビルド後、既存のlibpng-1.0.xを移動させる。 その後 make install でインストール。

netdate.tar.gz

slackwareからソース、パッチを取得し、展開、適用を行う。 その後、Makefileを修正する。
*** ./Makefile.ORG      Sat Feb  9 12:14:46 2008
--- ./Makefile  Sat Feb  9 12:16:21 2008
***************
*** 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
そして、make; make install。

plugger-5.1.3.tar.gz

以下の修正を行った後に、
*** ./Makefile.in.ORG   Sun Feb 10 18:01:21 2008
--- ./Makefile.in       Sun Feb 10 18:06:35 2008
***************
*** 172,178 ****
        ./install-sh -c plugger-controller $(root)$(prefix)/bin/
        ./install-sh -c plugger-oohelper $(root)$(prefix)/bin/
        ./install-sh -c plugger.7 $(root)$(mandir)/man7/
!       if [ ! -f $(root)/etc/pluggerrc-$(VERSION) ]; then ./install-sh -c pluggerrc $(root)/etc/pluggerrc-$(VERSION) ; fi
        if [ "$(plugindir)" = "UNKNOWN" ]; then \
          ./magic-install.sh $(browsers) ; \
        else \
--- 172,179 ----
        ./install-sh -c plugger-controller $(root)$(prefix)/bin/
        ./install-sh -c plugger-oohelper $(root)$(prefix)/bin/
        ./install-sh -c plugger.7 $(root)$(mandir)/man7/
! #     if [ ! -f $(root)/etc/pluggerrc-$(VERSION) ]; then ./install-sh -c pluggerrc $(root)/etc/pluggerrc-$(VERSION) ; fi
!       if [ ! -f $(root)$(prefix)/etc/pluggerrc-$(VERSION) ]; then ./install-sh -c pluggerrc $(root)$(prefix)/etc/pluggerrc-$(VERSION) ; fi
        if [ "$(plugindir)" = "UNKNOWN" ]; then \
          ./magic-install.sh $(browsers) ; \
        else \
通常の手順でconfigure && make。その後、
cp plugger.so /firefoxのインストールディレクトリ/plugins/

tcl8.3.5-src.tar.gz

通常の手順でビルドOK

tk8.3.5-src.tar.gz

通常の手順でビルドOK
kinput2による漢字入力サンプル
tk useinputmethods 1
entry .e -font k14
pack .e

[更新] [戻る]
m-ito@myh.no-ip.org