이 문서는 램디스크를 업그레이드 하는 방법에 대한 글입니다.
개요 #
이 문서는 glibc-2.3.1 공유 라이브러리 기반으로 동작하는 EZ-X5 용 램디스크를 기존 램디스크를 이용하여 업그레이드 하는 과정에 대하여 기술한다.
배경 #
gcc 3.2.1 과 glibc 2.3.1 을 설치했을때에는 기존 프로그램이 기존
램디스크에서 동작하지 않는 문제가 있다. 그러나 기존 램디스크와 동일한 내용을 재 구축하는 것이 그리 쉬운 일은 아니다. 다행
인것은 하위레벨의 arm 버전으로 컴파일 된것은 그대로 수행된다. 단지 새로운 버전의 툴체인으로 컴파일한것은 새로운 라이브러리를
요구한다는 것이다. 그래서 기존 램디스크를 유지한체 필요한 것만 다시 추가하거나 교체 하는 방식을 사용하는 방법을 사용하기로
결정하였다.
LFS 를 구한다. #
작업 디렉토리 가정 #
작업 디렉토리는 다음과 같이 있는 것을 가정한다.
/project/xscale/ramdisk
기존 이미지를 그대로 옮긴후 푼다. #
다음과 같은 디렉토리를 만든다.
cd /project/xscale/ramdisk
mkdir base_ramdiskroot
이 디렉토리는 비교하기 위한 기초 디렉토리이다. 이 안에는 기존의 램디스크 화일을 풀어 놓는다.
mkdir dir_ramdisk
gzip -d ramdisk.gz
mount -t ext2 -o loop ramdisk dir_ramdisk
cd base_ramdiskroot
cp -dpR ../dir_ramdisk/* .
cd ..
umount dir_ramdisk
rm ramdisk
타켓 이미지 화일 작업용 디렉토리를 만든다. #
cd /project/xscale/ramdisk
mkdir target_ramdiskroot
그리고 base_ramdiskroot 의 내용을 복사해 넣는다.
cd target_ramdiskroot
cp -dpR ../base_ramdiskroot/* .
기본 라이브러리 복사 #
기존의 라이브러리를 제거한다.
cd /project/xscale/ramdisk/target_ramdiskroot/lib
rm -rf *
cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib
rm -rf *
/usr/arm-linux/lib/에 있는 것을 램디스크의 lib 디렉토리에 집어 넣는다. 스트립을 시키면 복사한다.
cd /project/xscale/ramdisk/target_ramdiskroot/lib
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/ld-2.3.1.so ld-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libc-2.3.1.so libc-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libcrypt-2.3.1.so libcrypt-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libdl-2.3.1.so libdl-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libm-2.3.1.so libm-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libnsl-2.3.1.so libnsl-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libnss_dns-2.3.1.so libnss_dns-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libnss_files-2.3.1.so libnss_files-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libresolv-2.3.1.so libresolv-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libutil-2.3.1.so libutil-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libgcc_s.so.1 libgcc_s.so.1
퍼미션을 바꾼다.
chmod 777 *
cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libpthread-0.10.so libpthread-0.10.so
chmod 777 *
다음 명령을 수행한다.
ldconfig -r /project/xscale/ramdisk/target_ramdiskroot
gcc 버전을 맞추기 위하여 다음을 수행한다.
cd /project/xscale/ramdisk/target_ramdiskroot/usr/
mkdir arm-linux
cd arm-linux
ln -s /lib lib
libdb 라이브러리 설치 #
다음에서 받는다.
http://http.us.debian.org/debian/pool/main/libd/libdb/libdb_1.85.4.orig.tar.gz
패케지 libdb_1.85.4.orig.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다.
소스를 푼다.
tar zxvf libdb_1.85.4.orig.tar.gz
cd libdb-1.85.4.orig
hash/hash.h 를 수정한다.
가장 위에
#undef errno 를 삽입한다.
hash/extern.h 를 수정한다.
hash/hash.h를 수정한다.
마지막에 다음을 추가 한다.
extern int errno;
cd PORT/linux
Makefile을 편집한다.
prefix = /root/usr 를 prefix = /usr/arm-linux/ 로 바꾼다.
내용중 ar 명령을 arm-linux-ar 로 바꾼다.
내용중 ranlib 명령을 arm-linux-ranlib 로 바꾼다.
내용중 gcc 명령을 arm-linux-gcc 로 바꾼다.
내용중 OORG= -O6 -m486 -fomit-frame-pointer 을
OORG= -O6 -fomit-frame-pointer 로 바꾼다.
컴파일을 한다.
CC=arm-linux-gcc make all
설치를 한다.
make install
이것을 타켓으로 옮긴다.
cd /project/xscale/ramdisk/target_ramdiskroot/lib
복사한다.
cp -dpR /usr/arm-linux/lib/libdb.so .
cp -dpR /usr/arm-linux/lib/libdb.so.1 .
스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libdb.so.1.85.4 libdb.so.1.85.4
libtermcap 라이브러리 설치 #
다음에 간다.
http://www.sony.net/Products/Linux/Download/FSV-PGX1.html
다음 화일을 받는다.
http://www.sony.net/Products/Linux/Download/FSV-PGX1/libtermcap-2.0.8-31.src.rpm
패케지 termcap-1.3.1.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다.
rpm2cpio libtermcap-2.0.8-31.src.rpm | cpio -ivd
기본 소스를 푼다.
bunzip2 termcap-2.0.8.tar.bz2
tar xvf termcap-2.0.8.tar
cd termcap-2.0.8
패치를 가한다.
cat ../termcap-2.0.8-shared.patch | patch -p1
cat ../termcap-2.0.8-setuid.patch | patch -p1
cat ../termcap-2.0.8-instnoroot.patch | patch -p1
cat ../termcap-2.0.8-compat21.patch | patch -p1
cat ../termcap-2.0.8-xref.patch | patch -p1
cat ../termcap-2.0.8-fix-tc.patch | patch -p1
cat ../termcap-2.0.8-ignore-p.patch | patch -p1
cat ../termcap-buffer.patch | patch -p1
cat ../termcap-2.0.8-bufsize.patch | patch -p1
cat ../termcap-2.0.8-colon.patch | patch -p1
cat ../libtermcap-aaargh.patch | patch -p1
cat ../termcap-2.0.8-glibc22.patch | patch -p1
cat ../libtermcap-2.0.8-ia64.patch | patch -p1
Makefile의 컴파일러 명령을 수정한다.
CC=gcc 를 CC=arm-linux-gcc
AR=ar 를 AR=arm-linux-ar
prefix=/ 를 prefix=/usr/arm-linux/
로 바꾼다.
컴파일을 수행한다.
make
설치를 일일히 손으로 한다.
cp libtermcap.so.2.0.8 /usr/arm-linux/lib/
cp -f libtermcap.a /usr/arm-linux/lib
cp -f termcap.h /usr/arm-linux/include
cp termcap.info* /usr/arm-linux/info
이것을 타켓으로 옮긴다.
cd /project/xscale/ramdisk/target_ramdiskroot/lib
스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libtermcap.so.2.0.8 libtermcap.so.2.0.8
ncurses 라이브러리 설치 #
libtermcap 공유 라이브러리는 ncurses 패케지에 있다.
패케지 ncurses-5.3.tar.bz2 를 /project/xscale/ramdisk/source 에 넣고 푼다.
cd /project/xscale/ramdisk/source
bunzip2 ncurses-5.3.tar.bz2
tar xvf ncurses-5.3.tar
cd ncurses-5.3
환경 설정을 한다.
LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib CC=arm-linux-gcc CXX=arm-linux-g++
./configure --host=i686-linux --target=arm-linux --prefix=/usr/arm-linux --with-shared
설정된 내용에서 다음을 바꾼다.
misc/Makefile 에서
HOSTCC = $(CC) 를 HOSTCC = gcc 로 바꾼다.
sh ./run_tic.sh 을 발견하면 주석 처리 한다.
# sh ./run_tic.sh
ncurses/Makefile 에서
HOSTCC = $(CC) 를 HOSTCC = gcc 로 바꾼다.
컴파일을 수행한다.
make
에러가 나지 않았다면 설치를 수행한다.
make install
라이브러리를 타켓으로 옮긴다.
cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib
스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libncurses.so.5.3 libncurses.so.5.3
libproc.so 라이브러리 설치 #
libproc 라이브러리는 procps-3.0.4 패케지에 포함되어 있다.
패케지 procps-3.0.4.tar.bz2 를 /project/xscale/ramdisk/source 에 넣고 푼다.
bunzip2 procps-3.0.4.tar.bz2
tar xvf procps-3.0.4.tar
cd procps-3.0.4
top.c 의 참조 헤더화일에 대하여 수정한다.
vi top.c
#include 를 #include
#include 를 #include
로 수정한다.
watch.c 의 참조 헤더화일에 대하여 수정한다.
#include 를 #include
컴파일을 수행한다.
DESTDIR=/usr/arm-linux LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib CC=arm-linux-gcc make
생성된 libproc.so.3.0.4 화일을 /usr/arm-linux/lib에 복사한다.
cp proc/libproc.so.3.0.4 /usr/arm-linux/lib/
cp -dpR proc/libproc.so /usr/arm-linux/lib/
이것을 타켓으로 옮긴다.
cd /project/xscale/ramdisk/target_ramdiskroot/lib
cp -dpR /usr/arm-linux/lib/libproc.so .
스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libproc.so.3.0.4 libproc.so.3.0.4
libz 라이브러리 설치 #
libz 라이브러리는 zlib-1.1.4.tar.bz2 패케지에 포함되어 있다.
패케지 zlib-1.1.4.tar.bz2 를 /project/xscale/ramdisk/source 에 넣고 푼다.
bunzip2 zlib-1.1.4.tar.bz2
tar xvf zlib-1.1.4.tar
cd zlib-1.1.4
LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib CC=arm-linux-gcc CPP=arm-linux-g++
./configure --prefix=/usr/arm-linux --shared
Makefile의 내용중 다음을 고친다.
LDSHARED=arm-linux-gcc 를 LDSHARED=arm-linux-gcc -shared 로 수정
AR=arm-linux-ar 를 AR=arm-linux-ar rc 로 수정
install: $(LIBS) $(SHAREDLIB).$(VER) 를 install: $(LIBS) $(SHAREDLIB).$(VER) 로 수정
그뒤에
cp $(LIBS) $(libdir) 를 발견하면 그뒤에
cp $(SHAREDLIB).$(VER) $(libdir) 를 추가
cd $(libdir); chmod 755 $(LIBS) 를 발견하면 그뒤에
cd $(libdir); chmod 755 $(SHAREDLIB).$(VER) 를 추가
컴파일과 설치한다.
make install
라이브러리를 타켓으로 옮긴다.
cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib
cp -dpR /usr/arm-linux/lib/libz.so .
cp -dpR /usr/arm-linux/lib/libz.so.1 .
스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libz.so.1.1.4 libz.so.1.1.4
sysvinit 를 컴파일 하여 넣는다. #
패케지 sysvinit-2.84.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다.
tar zxvf sysvinit-2.84.tar.gz
소스 디렉토리로 이동한다.
cd sysvinit-2.84/src
Makefile을 수정한다.
CC = gcc 를
CC = arm-linux-gcc 로 수정
make
기존의 화일을 지운다.
cd /project/xscale/ramdisk/target_ramdiskroot
rm -rf sbin/halt
rm -rf usr/bin/last
rm -rf sbin/sulogin
rm -rf sbin/runlevel
rm -rf sbin/shutdown
rm -rf sbin/init
새로 만들어진 화일을 복사해 넣는다.
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/halt sbin/halt
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/last usr/bin/last
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/sulogin sbin/sulogin
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/runlevel sbin/runlevel
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/shutdown sbin/shutdown
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/init sbin/init
etc/ld.so.conf 에 라이브러리가 존재하는 디렉토리들을 써 준다.
====[etc/ld.so.conf]===========================================
/lib
/usr/lib
===============================================================
busybox 를 컴파일 하여 넣는다. #
우선 busybox 소스 패케지를 가져 온다.
홈페이지는 여기다.
http://www.busybox.net/
다음 화일을 가져온다.
http://www.busybox.net/downloads/busybox-0.60.4.tar.gz
/project/xscale/ramdisk/source 에 넣고 푼다.
tar zxvf busybox-0.60.4.tar.gz
cd busybox-0.60.4
Config.h 화일의 주석 마크 된것은 구현되어 있으나
포함시키지 않는다는 것이다.
다음은 제거한다.
#define BB_KILL
#define BB_HALT
다음은 추가로 포함 시킨 내용들이다.
#define BB_DEALLOCVT
#define BB_FBSET
#define BB_FREERAMDISK
#define BB_HOSTNAME
#define BB_IFCONFIG ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_INSMOD ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_LOGNAME
#define BB_NSLOOKUP
#define BB_PING
#define BB_PRINTF
#define BB_RDATE ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_RMMOD ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_RPM2CPIO ( 이 부분은 원래 없으나 추가 하였다 )
#define BB_STTY ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_TEE
#define BB_TELNET ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_TFTP ( 이 부분은 원래 없으나 추가 하였다 )
#define BB_TOP ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_TR
#define BB_TRACEROUTE ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_UPDATE
#define BB_USLEEP
#define BB_VI ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
다음은 필요하다고 생각해서 추가한 부분이다.
#define BB_WGET
#define BB_TIME
#define BB_LOSETUP
#define BB_FEATURE_USE_TERMIOS
#define BB_FEATURE_INIT_COREDUMPS
#define BB_FEATURE_IPC_SYSLOG
#define BB_FEATURE_IFCONFIG_STATUS
#define BB_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
#define BB_FEATURE_IFCONFIG_HW
#define BB_FEATURE_IFCONFIG_BROADCAST_PLUS
#define BB_FEATURE_GREP_CONTEXT
#define BB_FEATURE_GREP_EGREP_ALIAS
#define BB_FEATURE_INSMOD_VERSION_CHECKING
#define BB_FEATURE_FBSET_READMODE
#define BB_FEATURE_FBSET_FANCY
#define BB_FEATURE_SH_FANCY_PROMPT
#define BB_FEATURE_SH_APPLETS_ALWAYS_WIN
#define BB_FEATURE_SH_STANDALONE_SHEL
#define BB_FEATURE_COMMAND_USERNAME_COMPLETION
#define BB_FEATURE_NFSMOUNT
Makefile 을 수정한다.
CROSS = 를
CROSS = arm-linux- 로 수정한다
make 를 수행한다.
기존에 있던 내용을 지운다.
cd /project/xscale/ramdisk/target_ramdiskroot
rm -rf bin/busybox
rm -rf bin/ash
rm -rf bin/cat
rm -rf bin/chgrp
rm -rf bin/chmod
rm -rf bin/chown
rm -rf bin/cp
rm -rf bin/date
rm -rf bin/dd
rm -rf bin/df
rm -rf bin/dmesg
rm -rf bin/echo
rm -rf bin/egrep
rm -rf bin/false
rm -rf bin/grep
rm -rf bin/gunzip
rm -rf bin/gzip
rm -rf bin/hostname
rm -rf bin/kill
rm -rf bin/ln
rm -rf bin/ls
rm -rf bin/mkdir
rm -rf bin/mknod
rm -rf bin/more
rm -rf bin/mount
rm -rf bin/mv
rm -rf bin/pidof
rm -rf bin/ping
rm -rf bin/ps
rm -rf bin/pwd
rm -rf bin/rm
rm -rf bin/rmdir
rm -rf bin/sed
rm -rf bin/sh
rm -rf bin/sleep
rm -rf bin/stty
rm -rf bin/sync
rm -rf bin/tar
rm -rf bin/touch
rm -rf bin/true
rm -rf bin/umount
rm -rf bin/uname
rm -rf bin/usleep
rm -rf bin/vi
rm -rf bin/zcat
rm -rf sbin/freeramdisk
rm -rf sbin/ifconfig
rm -rf sbin/insmod
rm -rf sbin/klogd
rm -rf sbin/logread
rm -rf sbin/lsmod
rm -rf sbin/mkswap
rm -rf sbin/modprobe
rm -rf sbin/poweroff
rm -rf sbin/reboot
rm -rf sbin/rmmod
rm -rf sbin/swapoff
rm -rf sbin/swapon
rm -rf sbin/syslogd
rm -rf sbin/update
rm -rf usr/bin/[
rm -rf usr/bin/basename
rm -rf usr/bin/chvt
rm -rf usr/bin/clear
rm -rf usr/bin/cut
rm -rf usr/bin/deallocvt
rm -rf usr/bin/dirname
rm -rf usr/bin/du
rm -rf usr/bin/env
rm -rf usr/bin/find
rm -rf usr/bin/free
rm -rf usr/bin/head
rm -rf usr/bin/id
rm -rf usr/bin/killall
rm -rf usr/bin/logger
rm -rf usr/bin/logname
rm -rf usr/bin/nslookup
rm -rf usr/bin/printf
rm -rf usr/bin/rdate
rm -rf usr/bin/reset
rm -rf usr/bin/rpm2cpio
rm -rf usr/bin/sort
rm -rf usr/bin/tail
rm -rf usr/bin/tee
rm -rf usr/bin/telnet
rm -rf usr/bin/test
rm -rf usr/bin/tftp
rm -rf usr/bin/top
rm -rf usr/bin/tr
rm -rf usr/bin/traceroute
rm -rf usr/bin/tty
rm -rf usr/bin/uniq
rm -rf usr/bin/uptime
rm -rf usr/bin/wc
rm -rf usr/bin/which
rm -rf usr/bin/whoami
rm -rf usr/bin/xargs
rm -rf usr/bin/yes
rm -rf usr/sbin/chroot
rm -rf usr/sbin/fbset
원본 busybox 를 복사한다.
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/busybox-0.60.4/busybox bin/busybox
cd /project/xscale/ramdisk/target_ramdiskroot/bin
ln -s /bin/busybox ash
ln -s /bin/busybox cat
ln -s /bin/busybox chgrp
ln -s /bin/busybox chmod
ln -s /bin/busybox chown
ln -s /bin/busybox cp
ln -s /bin/busybox date
ln -s /bin/busybox dd
ln -s /bin/busybox df
ln -s /bin/busybox dmesg
ln -s /bin/busybox echo
ln -s /bin/busybox egrep
ln -s /bin/busybox false
ln -s /bin/busybox grep
ln -s /bin/busybox gunzip
ln -s /bin/busybox gzip
ln -s /bin/busybox hostname
ln -s /bin/busybox kill
ln -s /bin/busybox ln
ln -s /bin/busybox ls
ln -s /bin/busybox mkdir
ln -s /bin/busybox mknod
ln -s /bin/busybox more
ln -s /bin/busybox mount
ln -s /bin/busybox mv
ln -s /bin/busybox pidof
ln -s /bin/busybox ping
ln -s /bin/busybox ps
ln -s /bin/busybox pwd
ln -s /bin/busybox rm
ln -s /bin/busybox rmdir
ln -s /bin/busybox sed
ln -s /bin/busybox sh
ln -s /bin/busybox sleep
ln -s /bin/busybox stty
ln -s /bin/busybox sync
ln -s /bin/busybox tar
ln -s /bin/busybox touch
ln -s /bin/busybox true
ln -s /bin/busybox umount
ln -s /bin/busybox uname
ln -s /bin/busybox usleep
ln -s /bin/busybox vi
ln -s /bin/busybox zcat
cd /project/xscale/ramdisk/target_ramdiskroot/sbin
ln -s /bin/busybox freeramdisk
ln -s /bin/busybox ifconfig
ln -s /bin/busybox insmod
ln -s /bin/busybox klogd
ln -s /bin/busybox logread
ln -s /bin/busybox lsmod
ln -s /bin/busybox mkswap
ln -s /bin/busybox modprobe
ln -s /bin/busybox poweroff
ln -s /bin/busybox reboot
ln -s /bin/busybox rmmod
ln -s /bin/busybox swapoff
ln -s /bin/busybox swapon
ln -s /bin/busybox syslogd
ln -s /bin/busybox update
ln -s /bin/busybox losetup
cd /project/xscale/ramdisk/target_ramdiskroot/usr/bin
ln -s /bin/busybox [
ln -s /bin/busybox basename
ln -s /bin/busybox chvt
ln -s /bin/busybox clear
ln -s /bin/busybox cut
ln -s /bin/busybox deallocvt
ln -s /bin/busybox dirname
ln -s /bin/busybox du
ln -s /bin/busybox env
ln -s /bin/busybox find
ln -s /bin/busybox free
ln -s /bin/busybox head
ln -s /bin/busybox id
ln -s /bin/busybox killall
ln -s /bin/busybox logger
ln -s /bin/busybox logname
ln -s /bin/busybox nslookup
ln -s /bin/busybox printf
ln -s /bin/busybox rdate
ln -s /bin/busybox reset
ln -s /bin/busybox rpm2cpio
ln -s /bin/busybox sort
ln -s /bin/busybox tail
ln -s /bin/busybox tee
ln -s /bin/busybox telnet
ln -s /bin/busybox test
ln -s /bin/busybox tftp
ln -s /bin/busybox top
ln -s /bin/busybox tr
ln -s /bin/busybox traceroute
ln -s /bin/busybox tty
ln -s /bin/busybox uniq
ln -s /bin/busybox uptime
ln -s /bin/busybox wc
ln -s /bin/busybox which
ln -s /bin/busybox whoami
ln -s /bin/busybox xargs
ln -s /bin/busybox yes
ln -s /bin/busybox wget
ln -s /bin/busybox time
cd /project/xscale/ramdisk/target_ramdiskroot/usr/sbin
ln -s /bin/busybox chroot
ln -s /bin/busybox fbset
시리얼 콘솔이 동작할수 있게 수정한다 #
장치화일을 등록한다.
cd /project/xscale/ramdisk/target_ramdiskroot/dev
mknod ttyS00 c 4 64
mknod ttyS01 c 4 65
mknod ttyS02 c 4 66
etc/inittab 에 login을 수정한다.
cd /project/xscale/ramdisk/target_ramdiskroot/etc
vi inittab
T0:12345:respawn:/sbin/getty -L ttySA0 115200 vt100 을
T0:12345:respawn:/sbin/getty -L ttyS02 115200 vt100 로 바꾼다.
etc/securetty 의 내용을 수정한다.
vi securetty
ttySA0 을 ttyS02 로 바꾼다.
이전의 램디크의 자잘한 잘못을 수정한다. #
root 에 있는 ez_ip를 제거한다
.
etc/rc.d/rc.local 의 내용중
-------------------------------------------------------------
ifconfig lo up
if [ -f /root/ez_ip ]; then
/root/ez_ip
else
ifconfig eth0 192.168.10.125 netmask 255.255.255.0 up
fi
-------------------------------------------------------------
를
-------------------------------------------------------------
ifconfig lo 127.0.0.1 up
ifconfig eth0 192.168.10.125 netmask 255.255.255.0 up
-------------------------------------------------------------
로 바꾼다.
mnt 디렉토리 밑데 nfs, temp 란 디렉토리를 만든다.
cd mnt
mkdir nfs
mkdir temp
chmod 777 *
etc/rc.d/rc.sysinit 의 내용중
# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
mount -n -o remount,rw /
을 가장 선두에 올린다.
etc/fstab 의 내용을
-------------------------------------------------------------
/dev/ram0 / ext2 defaults 1 1
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
-------------------------------------------------------------
로 바꾼다.
램디스크로 만든다. #
dd if=/dev/zero of=t_ramdisk bs=1k count=10240
/sbin/losetup /dev/loop1 t_ramdisk
/sbin/mke2fs /dev/loop1
/sbin/losetup -d /dev/loop1
mount -t ext2 -o loop t_ramdisk dir_ramdisk
ldconfig -r /project/xscale/ramdisk/target_ramdiskroot
cp -dpR target_ramdiskroot/* dir_ramdisk
umount dir_ramdisk
gzip t_ramdisk
mv t_ramdisk.gz ramdisk.new.gz
cp ramdisk.new.gz /tftpboot/ramdisk.new.gz
타켓 보드에 넣고 테스트 해본다.