glibc-2.2.5
glibc-linuxthreads-2.2.5
- まずは実機(Linux Zaurus)にて現時点のルートファイルシステムを読み出します。
# sambaマウントで母艦のディスクを借りる; nfsやその他の共有があればそれでも良い smbmount //192.168.129.1/c$ /mnt -o username=belphegor # ddで /dev/mtdblock0 (起動ROM部分) を吸い出す # 母艦側では C:\TEMP\mtdblock0.binってファイル名になるわけですな。 # ちょうど15,073,280バイトのサイズになればOK dd if=/dev/mtdblock0 of=/mnt/TEMP/mtdblock0.bin # ddで /dev/mtdblock1 (ファイルシステム部分) を吸い出す # こっちもちょうど29,360,128バイトのサイズになるはず dd if=/dev/mtdblock1 of=/mnt/TEMP/mtdblock1.bin
- 次にクロスコンパイラ側(母艦)にて作業を行ないます。
まずは cramfs 関係のツール(母艦用)を構築します。
お使いの Linux ディストリビューションで既に用意されていれば、単にそれをインストールするだけで良いです。
cd /anywhere_work_directory (どこでも良い) wget http://twtelecom.dl.sourceforge.net/sourceforge/cramfs/cramfs-1.1.tar.gz tar xvzf cramfs-1.1.tar.gz cd cramfs-1.1 make cp cramfsck mkcramfs /sbin
ここからが実作業です。なお、実機で吸い出した mtdblock0.bin をあらかじめ母艦に移しておきましょう。
# 念のためfsck cramfsck -v mtdblock0.bin # (ROM内の様々なファイルの一覧が現われ、最後に "mtdblock0.bin: OK" が出ればOK) # /mnt にループバックマウントして特定のディレクトリ(以下の例では $BUILD/rootfs)に展開 rm -fR $BUILD/rootfs mkdir $BUILD/rootfs mount -t cramfs -o ro,loop mtdblock0.bin /mnt cd /mnt; tar -cvp . | tar -xpC $BUILD/rootfs cd $BUILD umount /mnt # やっとここから glibc 2.2.5 のコンパイル # ftp://ftp.iij.ad.jp/pub/GNU/glibc/glibc-2.2.5.tar.gz # ftp://ftp.iij.ad.jp/pub/GNU/glibc/glibc-linuxthreads-2.2.5.tar.gz cd $SOURCE tar zxvf $ARCHIVE/glibc-2.2.5.tar.gz cd glibc-2.2.5 tar zxvf $ARCHIVE/glibc-linuxthreads-2.2.5.tar.gz # ftp://ftp.linux.org.uk/pub/armlinux/toolchain/src-3.2/build-toolchainに書かれているパッチ perl -pi -e 's/i386/arm*)\n\tlibc_cv_gcc_unwind_find_fde=yes\n\tarch_minimum_kernel=2.0.10\n\t;;\n i386/' sysdeps/unix/sysv/linux/configure perl -pi -e 's/weak_alias \(__old_sys_nerr/\/\/ $&/' sysdeps/unix/sysv/linux/arm/errlist.c # ワークディレクトリの作成 mkdir $BUILD/glibc cd $BUILD/glibc # configure CC=$TARGET-gcc AR=$TARGET-ar RANLIB=$TARGET-ranlib $SOURCE/glibc-2.2.5/configure --host=$TARGET --enable-add-ons --disable-profile --prefix=/usr --with-headers=$SOURCE/linux/include --disable-nls --libexecdir=/usr/bin # makeinfo時にエラーになる部分の修正 mv $SOURCE/glibc-2.2.5/manual/stdio.texi $SOURCE/glibc-2.2.5/manual/stdio.texi.bak sed "s/@ref{,/@ref{Top,/" < $SOURCE/glibc-2.2.5/manual/stdio.texi.bak > $SOURCE/glibc-2.2.5/manual/stdio.texi # やっとここでmake make all # 面倒なので一気にstrip find . | xargs -P 1 arm-linux-strip -g > /dev/null 2> /dev/null # make install は使えないので、自前でinstall /usr/bin/install -c $BUILD/glibc/elf/ld.so $BUILD/rootfs/lib/ld-2.2.5.so /usr/bin/install -c $BUILD/glibc/libc.so $BUILD/rootfs/lib/libc-2.2.5.so /usr/bin/install -c $BUILD/glibc/locale/libBrokenLocale.so $BUILD/rootfs/lib/libBrokenLocale-2.2.5.so /usr/bin/install -c $BUILD/glibc/math/libm.so $BUILD/rootfs/lib/libm-2.2.5.so /usr/bin/install -c $BUILD/glibc/dlfcn/libdl.so $BUILD/rootfs/lib/libdl-2.2.5.so /usr/bin/install -c $BUILD/glibc/malloc/libmemusage.so $BUILD/rootfs/lib/libmemusage.so /usr/bin/install -c $BUILD/glibc/crypt/libcrypt.so $BUILD/rootfs/lib/libcrypt-2.2.5.so /usr/bin/install -c $BUILD/glibc/linuxthreads/libpthread.so $BUILD/rootfs/lib/libpthread-0.9.so /usr/bin/install -c $BUILD/glibc/resolv/libresolv.so $BUILD/rootfs/lib/libresolv-2.2.5.so /usr/bin/install -c $BUILD/glibc/resolv/libnss_dns.so $BUILD/rootfs/lib/libnss_dns-2.2.5.so /usr/bin/install -c $BUILD/glibc/resolv/libanl.so $BUILD/rootfs/lib/libanl-2.2.5.so /usr/bin/install -c $BUILD/glibc/nss/libnss_files.so $BUILD/rootfs/lib/libnss_files-2.2.5.so /usr/bin/install -c $BUILD/glibc/rt/librt.so $BUILD/rootfs/lib/librt-2.2.5.so /usr/bin/install -c $BUILD/glibc/debug/libSegFault.so $BUILD/rootfs/lib/libSegFault.so /usr/bin/install -c $BUILD/glibc/debug/libpcprofile.so $BUILD/rootfs/lib/libpcprofile.so /usr/bin/install -c $BUILD/glibc/linuxthreads_db/libthread_db.so $BUILD/rootfs/lib/libthread_db-1.0.so /usr/bin/install -c $BUILD/glibc/hesiod/libnss_hesiod.so $BUILD/rootfs/lib/libnss_hesiod-2.2.5.so /usr/bin/install -c $BUILD/glibc/nis/libnsl.so $BUILD/rootfs/lib/libnsl-2.2.5.so /usr/bin/install -c $BUILD/glibc/nis/libnss_nis.so $BUILD/rootfs/lib/libnss_nis-2.2.5.so /usr/bin/install -c $BUILD/glibc/nis/libnss_nisplus.so $BUILD/rootfs/lib/libnss_nisplus-2.2.5.so /usr/bin/install -c $BUILD/glibc/nis/libnss_compat.so $BUILD/rootfs/lib/libnss_compat-2.2.5.so /usr/bin/install -c $BUILD/glibc/login/libutil.so $BUILD/rootfs/lib/libutil-2.2.5.so # シンボリックリンクの作成 ln -sf ld-2.2.5.so $BUILD/rootfs/lib/ld-linux.so.2 ln -sf libc-2.2.5.so $BUILD/rootfs/lib/libc.so.6 ln -sf libBrokenLocale-2.2.5.so $BUILD/rootfs/lib/libBrokenLocale.so.1 ln -sf libm-2.2.5.so $BUILD/rootfs/lib/libm.so.6 ln -sf libdl-2.2.5.so $BUILD/rootfs/lib/libdl.so.2 ln -sf libcrypt-2.2.5.so $BUILD/rootfs/lib/libcrypt.so.1 ln -sf libpthread-0.9.so $BUILD/rootfs/lib/libpthread.so.0 ln -sf libresolv-2.2.5.so $BUILD/rootfs/lib/libresolv.so.2 ln -sf libnss_dns-2.2.5.so $BUILD/rootfs/lib/libnss_dns.so.2 ln -sf libanl-2.2.5.so $BUILD/rootfs/lib/libanl.so.1 ln -sf libnss_files-2.2.5.so $BUILD/rootfs/lib/libnss_files.so.2 ln -sf librt-2.2.5.so $BUILD/rootfs/lib/librt.so.1 ln -sf libthread_db-1.0.so $BUILD/rootfs/lib/libthread_db.so.1 ln -sf libnss_hesiod-2.2.5.so $BUILD/rootfs/lib/libnss_hesiod.so.2 ln -sf libnsl-2.2.5.so $BUILD/rootfs/lib/libnsl.so.1 ln -sf libnss_nis-2.2.5.so $BUILD/rootfs/lib/libnss_nis.so.2 ln -sf libnss_nisplus-2.2.5.so $BUILD/rootfs/lib/libnss_nisplus.so.2 ln -sf libnss_compat-2.2.5.so $BUILD/rootfs/lib/libnss_compat.so.2 ln -sf libutil-2.2.5.so $BUILD/rootfs/lib/libutil.so.1 ln -sf ld-2.2.5.so $BUILD/rootfs/lib/ld-linux.so.2 ln -sf ld-2.2.5.so $BUILD/rootfs/lib/ld.so.2 # glibc 2.2.2の削除 tar cvpzf $BUILD/glibc-2.2.2-old_files.tar.gz --remove-files -T /dev/stdin << EOF $BUILD/rootfs/lib/ld-2.2.2.so $BUILD/rootfs/lib/libc-2.2.2.so $BUILD/rootfs/lib/libcrypt-2.2.2.so $BUILD/rootfs/lib/libdl-2.2.2.so $BUILD/rootfs/lib/libm-2.2.2.so $BUILD/rootfs/lib/libnsl-2.2.2.so $BUILD/rootfs/lib/libnss_compat-2.2.2.so $BUILD/rootfs/lib/libnss_dns-2.2.2.so $BUILD/rootfs/lib/libnss_files-2.2.2.so $BUILD/rootfs/lib/libnss_nis-2.2.2.so $BUILD/rootfs/lib/libresolv-2.2.2.so $BUILD/rootfs/lib/libutil-2.2.2.so EOF # glibc 2.2.5 にしたお陰で容量が足りなくなったので、nmbd, smbdを削除してダミーを入れる rm $BUILD/rootfs/usr/sbin.rom/smbd $BUILD/rootfs/usr/sbin.rom/nmbd cat > $BUILD/rootfs/usr/sbin.rom/smbd << EOF #!/bin/sh # do nothing EOF chmod 755 $BUILD/rootfs/usr/sbin.rom/smbd cat > $BUILD/rootfs/usr/sbin.rom/nmbd << EOF #!/bin/sh # do nothing EOF chmod 755 $BUILD/rootfs/usr/sbin.rom/nmbd # 最後にcramfsファイルシステムの作成 cd $BUILD mkcramfs rootfs initrd.bin
- 最後に完成した initrd.bin を実機に書き込みます。
SL-A300の場合は SDメモリカード(FATフォーマット済み) に下記の updater.pro とともに書き込んで HOME を押しながらリセットです。
INITRD ,BIN,0x00160000,14464
もちろん上記の作業はルート(ROM)ファイルシステムを書き換えたい場合に応用できます。
2. の部分のみ必要に応じて他のアプリケーション等に置き換えてください。
最終更新日: 2003/06/18 12:01:02