램디스크이미지제작 1. 램디스크이미지제작 커널이미지와함께만들어져야하는것이램디스크이미지이다. 여기서는램디스크이미지를만드는것에대하여설명하고자한다. 1.1. 램디스크란? 램디스크는별다른물리적장치를지칭하는것이아니라, 메모리의일부분을디스크드라이브로인식시켜이를하드디스크처럼사용하기위한것이다. 타겟보드에는하드디스크가없으므로이램디스크에의해부팅이된다. 램디스크에는커널이완전히로드된후, 시스템의구동에필요한 init, 유틸리티등환경파일과바이너리파일등이있어야부팅이된다. 이런유틸리티들과라이브러리들을모아압축한것이램디스크이미지이다. 램은전원이꺼지면기억된내용이지워지므로램디스크이미지를특정한위치에저장하여야한다. 타겟보드는램에직접써넣는방법과, 플래시를이용하여저장하는두가지방법을제시하고있다. 1.2. 램디스크설정 램디스크는 Kernel Configuration에서설정한다. # make menuconfig 10 장램디스크이미지제작
1.3. 램디스크확인 램디스크는램디스크디바이스인 /dev/ram0 나 dev/ram1등에기록된다. /dev/ram0, /dev/ram1, /dev/ram, /dev/ramdisk등의디바이스가있는지를확인하고. 만약없다면 mknod 명령으로 /dev/ram0를만들어야한다. 타겟보드에서리눅스구동후 login 하여 df 명령으로현재파일시스템이어디에저장되어있는지를확인할수있다. 위와같이되는경우와 /dev/roofs 가 / 에동일하게마운트되어있어도상관은없다. 1.4. 기존램디스크이미지구하기 http://www.falinux.com/win/download.html 사이트에서받아온다. 타겟보드램디스크이미지는 glibc 2.3.3 버전용이다. 1.5. 램디스크이미지다루기 유틸리티와라이브러리들을추가수정할경우또는디바이스드라이브나어플리케이션을작성하여램디스크이미지에추가할경우에램디스크이미지압축을풀어작업을하고다시압축을하여야한다. 램디스크이미지복사하기 여기서는제공한 CD에서램디스크이미지를복사하기로한다. 모든작업디렉토리는 /ez/sw/ramdisk 이다. 아래와같이작업디렉토리를만든다. # mkdir /ez/sw/ramdisk 램디스크이미지를복사한다. # cp -a /mnt/cdrom/sw/ramdisk/ramdisk.gz /ez/sw/ramdisk 작업디렉토리로이동한다. # cd /ez/sw/ramdisk 10 장램디스크이미지제작
램디스크이미지압축풀기 램디스크이미지압축을풀어마운트할작업디렉토리를만든다. # mkdir ramdisk_dir 램디스크이미지압축을푼다. # gzip d ramdisk.gz 압축을푼램디스크이미지를마운트하고, df 명령으로마운트되었는지확인한다. # mount t ext2 o loop ramdisk ramdisk_dir # df 10 장램디스크이미지제작
위와같은명령어를입력하면램디스크이미지가./ramdisk_dir 디렉토리에풀리게된다. 이렇게생성된램디스크이미지를바탕으로하여자신이 arm용으로컴파일한실행파일들이나라이브러리등을복사해서넣는다. 램디스크이미지압축하기 원하는대로램디스크를만든후에다음의작업을하여압축한다. 마운트를해제한다. # umount ramdisk_dir 램디스크이미지압축한다. # gzip ramdisk 램디스크이미지를바꾼후에타겟보드로다운로드한다. 다운로드하는방법은 [14장. 이지부트매뉴얼 ] 을참고하기바란다. 10 장. 램디스크이미지제작
[ 참고 ] 다음의내용은타겟보드의네트워크관리를위해이더넷의 IP 설정을예제로하여램디스크이미지를바꾸어보겠다. 램디스크이미지압축풀기 램디스크이미지압축을풀어마운트할작업디렉토리를만든다. # mkdir ramdisk_dir 램디스크이미지압축을푼다. # gzip d ramdisk.gz 압축을푼램디스크이미지를마운트하고, df 명령으로마운트되었는지확인한다. # mount t ext2 o loop ramdisk ramdisk_dir 이더넷설정수정하기 마운트한 ramdisk_dir 디렉토리로이동한다. # cd ramdisk_dir 이더넷설정을하는스크립트가있는파일로이동한다. # cd etc/rc.d 이더넷설정을수정한다. # vi rc.local [ 수정전 ] ifconfig lo127.0.0.1 up if [ -f /root/ez_ip ]; then /root/ez_ip else ifconfig eth0 192.168.10.125 netmask 255.255.255.0 up fi route add default gw 192.168.10.1 eth0 위의내용을살펴보면 /root/ez_ip 라는파일이있으면 bootloader 에서설정한 IP를사용하고, 만약 /root/ez_ip 라는파일이없으면 ifconfig 로설정하게된다. 10 장. 램디스크이미지제작
이예제는단지램디스크이미지를풀고, 수정하고, 다시압축하는것에대하여설명하기위한것이므로다음과같이수정하도록하자. [ 수정후 ] ifconfig lo 127.0.0.1 up ifconfig eth0 211.217.10.100 netmask 255.255.255.0 up route add default gw 211.217.10.1 eth0 이렇게수정을하면부터로더에서설정한 IP 주소를할당받지않고, 고정으로 IP를할당받게된다. [ rc.local 수정전 ] [ rc.local 수정후 ] 10 장. 램디스크이미지제작
램디스크이미지압축하기 원하는대로램디스크를만든후에다음의작업을하여압축한다. 마운트를해제한다. # umount ramdisk_dir 램디스크이미지를압축한다. # gzip ramdisk 램디스크이미지를바꾼후에타겟보드로다운로드한다. 다운로드하는방법은 [14장. 이지부트매뉴얼 ] 을참고하기바란다. 10 장. 램디스크이미지제작
2. 램디스크디렉토리구성도 이지보드에제공되는램디스크의내용은다음과같다. / home dev etc var usr lib sbin bin root tmp mnt proc home dev etc var usr lib sbin bin root tmp mnt proc sys app home : 사용자영역디렉토리 dev : 디바이스디렉토리 etc : 환경디렉토리 var : 환경및메세지및스풀디렉토리 usr : 일반어플리케이션디렉토리 lib : 공용라이브러리디렉토리 ( 중요 ) sbin : 관리자실행화일디렉토리 bin : 실행디렉토리 root : 루트영역디렉토리 tmp : 임시영역디렉토리 mnt : 디바이스마운트영역 proc : 실행프로세서디렉토리 ( 자동생성 ) sys : 시스템상태디렉토리 ( 자동생성 ) app : 사용자영역디렉토리 mtdblock2 /home/ /dev/ console hdb hdd8 mtd8 mtdr15 sda sdc8 ttycl2 ttyss10 cusa0 hdb1 initctl mtd9 mtdr2 sda1 sdd ttyp0 ttyss11 cusa1 hdb2 kmem mtdblock0 mtdr3 sda2 sdd1 ttyp1 ttyss12 dsp hdb3 mem mtdblock1 mtdr4 sda3 sdd2 ttyp2 ttyss13 fb hdb4 mixer mtdblock10 mtdr5 sda4 sdd3 ttyp3 ttyss14 fb0 hdb5 mk712 mtdblock11 mtdr6 sda5 sdd4 ttys0 ttyss15 fb1 hdb6 mmca mtdblock12 mtdr7 sda6 sdd5 ttys00 ttyss2 fb2 hdb7 mmca1 mtdblock13 mtdr8 sda7 sdd6 ttys01 ttyss3 fb3 hdb8 mmca2 mtdblock14 mtdr9 sda8 sdd7 ttys02 ttyss4 fb4 hdc mmca3 mtdblock15 null sdb sdd8 ttys03 ttyss5 fb5 hdc1 mmca4 mtdblock16 phub sdb1 sound_dsp ttys04 ttyss6 fb6 hdc2 mouse mtdblock2 psaux sdb2 tty ttys05 ttyss7 10 장. 램디스크이미지제작
fb7 hdc3 mtd0 mtdblock3 psystemmap sdb3 tty0 ttys06 ttyss8 flh0 hdc4 mtd1 mtdblock4 ptmx sdb4 tty1 ttys1 ttyss9 flh1 hdc5 mtd10 mtdblock5 pts sdb5 tty2 ttys2 urandom flh2 hdc6 mtd11 mtdblock6 ram sdb6 tty3 ttysa0 watchdog flh3 hdc7 mtd12 mtdblock7 ram0 sdb7 tty4 ttysa1 wdt hda hdc8 mtd13 mtdblock8 ram1 sdb8 tty5 ttysa2 zero hda1 hdd mtd14 mtdblock9 ram2 sdc tty6 ttysac0 hda2 hdd1 mtd15 mtdr0 ram3 sdc1 tty7 ttysac1 hda3 hdd2 mtd2 mtdr1 random sdc2 tty8 ttysac2 hda4 hdd3 mtd3 mtdr10 remocon sdc3 ttyam0 ttysp0 hda5 hdd4 mtd4 mtdr11 root sdc4 ttyam1 ttysp1 hda6 hdd5 mtd5 mtdr12 rs232sa1 sdc5 ttyam2 ttysp2 hda7 hdd6 mtd6 mtdr13 rs232sa2 sdc6 ttycl0 ttyss0 hda8 hdd7 mtd7 mtdr14 rtc sdc7 ttycl1 ttyss1 /sbin/ bootlogd halt initlog losetup modprobe route swapon e2fsck hdparm insmod lsmod pivot_root runlevel sysctl eraseall hwclock killall5 mke2fs poweroff shutdown syslogd fdisk ifconfig klogd mklost+found reboot sulogin telinit getty init logread mkswap rmmod swapoff udhcpc modprobe insmod rmmod lsmod ifconfig route telinit rarp mkswap swapon swapoff -> swapon hdparm shutdown reboot -> halt halt ; 모듈적재 ; 모듈적재 ; 모듈지우기 ; 모듈정보출력하기 ; 네트워크인터페이스환경설정 ; 네트워크경로설정명령 ; 원격접속하기 ; rarp 테이블관리하기 ; 리눅스스왑영역을지정한다 ; 페이징, 스와핑용장치 / 화일사용설정 ; 스왑해제하기 ; 하드디스크파라메터설정 ; 시스템종료 ; 재부팅하기 ; 시스템종료 10 장. 램디스크이미지제작
init ; 초기화프로세서제어 pidof ; 실행중인프로그램의프로세스 ID 찾기 killall5 ; 자신을제외한모든프로세스를죽인다. syslogd ; 로그인과정설정하기 /bin/ addgroup chgrp deluser fgrep login mount ps stty umount adduser chmod df grep ls mountpoint pwd su uname bash chown dmesg gunzip lsattr mv rm sync usleep bashbug cp echo gzip mkdir netstat rmdir tar uuidgen busybox date egrep hostname mknod nice sed tinylogin vi cat dd false kill mktemp pidof sh touch zcat chattr delgroup fdflush ln more ping sleep true stty ; 터미널설정변경 sh -> bash ; 쉘 ps ; 프로세서상태보기 bash ; 쉘 busybox ; vi ; 편집기 netstat ; 네트웍상태보기 nice ; 프로세스우선순위변경하기 mount ; 마운트명령 umount ; 마운트해제 addgroup ; 그룹계정만들기 adduser ; 사용자계정만들기 delgroup ; 그룹계정삭제 deluser ; 사용자계정삭제 login ; 시스템로그인 su ; 루트권한변경또는사용자전환 cat ; 문서보여주기명령 chgrp ; 파일, 디렉토리가속했던그룹바꾸기 chmod ; 화일속성변경 chown ; 화일소유자변경 cp ; 화일카피명령 dd ; 화일생성및변환명령 10장. 램디스크이미지제작
df dmesg du gunzip gzip hostname kill ln ls mkdir mknod more mv ping pwd rm rmdir sleep sync tar tee true uname ; 디스크사용상태보기명령 ; 부팅메시지로그기록파일 ; 디스크사용량 ; 압축명령 ; 압축명령 ; 호스트네임관련사항보기 ; 프로세서죽이기 ; 링크하기 ; 디렉토리목록보기 ; 디렉토리생성명령 ; 특수파일만들기 ; 화면단위로출력하기 ; 화일이동명령 ; ping ; 현재디렉토리보기 ; 화일제거 ; 디렉토리지우기 ; 잠시쉬기 ; 버퍼재설정하기 ; 화일합치기 ; 표준입력으로부터표준출력만들기 ; 종료코드리턴하기 ; 시스템정보보기 /etc/ HOSTNAME host.conf inittab localtime profile services ae.rc hosts inputrc modules protocols shadow ae2vi.rc hosts.allow issue motd rc.d termcap filesystems hosts.deny issue.net networks resolv.conf timezone fstab inetd.conf ld.so.cache nsswitch.conf rpc group initscript.sample ld.so.conf passwd securetty fstab ; 파일마운트환경파일 mtab ; 마운트된정보저장파일 ( 자동생성 ) group ; 그룹환경파일 host.conf ; 호스트명의 IP를얻을때검색순서설정화일 10장. 램디스크이미지제작
hosts inittab issue issue.net motd passwd profile protocols resolv.conf securetty services HOSTNAME ld.so.cache ; 호스트 IP 맵환경파일 ; 시스템실행레벨환경파일 ; login시에나타나는메세지파일 ; 네트웍으로연결시나타나는메시지파일 ; login직후에나타나는메세지파일 ; 암호를포한한유저환경파일 ; 쉘이사용하는기본속성 ; 포트사용리스트 ; DNS 찾기환경파일 : login시사용될 Console 출력을위한포트설정환경파일 ; 포트사용리스트 ; 호스트명 ; ldconfig에서검색할라이브러리디렉토리를지정한곳 /etc/rc.d/ init.d mkip rc rc.sysinit rc1.d rc3.d rc5.d mkclink mkissue rc.local rc0.d rc2.d rc4.d rc6.d mkip mkclink mkissue ; 부트로드에서넘어온 IP 로설정하게하는스크립터파일 ; 부트로드에서넘어온 Consol 포트를 link 하는스크립터파일 ; login 시에나타나는메시지를표출하는스크립터파일 /etc/rc.d/init.d/ functions halt inet killall modutils single syslog /etc/rc.d/ rc0.d/ K50inet K95syslog S00halt /etc/rc.d/ rc1.d/ K50inet K95syslog /etc/rc.d/ rc2.d/ K50inet K95syslog /etc/rc.d/rc3.d/ S05syslog S50inet 10 장. 램디스크이미지제작
/etc/rc.d/rc4.d/ S05syslog S50inet /etc/rc.d/rc5.d/ S05syslog S50inet /etc/rc.d/rc6.d/ K50inet K95syslog S00reboot /var/ lib adm log spool run lock tmp adm -> log tmp -> /tmp /var/lib/ /var/log/ dmesg lastlog messages wtmp /var/spool/ cron /var/spool/cron/ crontabs /var/spool/cron/crontabs/ /var/run/ utmp runlevel.dir inetd.pid /var/lock/ subsys /var/tmp/ /usr/ arm-linux bin include local sbin share 10 장램디스크이미지제작
/usr/arm-linux/ adm lib tmp adm ->../var/log lib -> /lib tmp -> /tmp /usr/bin/ arping cut ftp lastb passwd sz tr vlock xargs basename deallocvt head logger printf tail traceroute wall yes bunzip2 dirname hexdump md5sum readlink tee tty wc bzcat du id mesg reset telnet uniq wget chvt env install nc rz tftp unzip which clear expr killall nslookup sort time uptime who cmp free last openvt strings top utmpdump whoami /usr/include initreq.h /usr/local/ /usr/sbin/ arp chroot in.telnetd inetd rdate tcpd telnetd /usr/share/ terminfo /usr/share/terminfo/ a d l r s v x /usr/share/terminfo/a ansi /usr/share/terminfo/d dumb /usr/share/terminfo/l/ linux 10 장램디스크이미지제작
/usr/share/terminfo/r/ rxvt rxvt-m /usr/share/terminfo/s/ sun /usr/share/terminfo/v/ vt100 vt102 vt220 vt52 /usr/share/terminfo/x/ xterm /lib/ Mcrt1.o libe2p.so libnss_nisplus.so Scrt1.o libe2p.so.2 libnss_nisplus.so.2 crt1.o libe2p.so.2.3 libpcprofile.so crti.o libext2fs.so libproc.so crtn.o libext2fs.so.2 libproc.so.3.0.4 e2initrd_helper libext2fs.so.2.4 libpthread-0.10.so gcrt1.o libgcc_s.so libpthread.so ld-2.3.3.so libgcc_s.so.1 libpthread.so.0 ld-linux.so.2 libm-2.3.3.so libresolv-2.3.3.so ldscripts libm.so libresolv.so libbrokenlocale-2.3.3.so libm.so.6 libresolv.so.2 libbrokenlocale.so libmemusage.so librt-2.3.3.so libbrokenlocale.so.1 libncurses.so librt.so libsegfault.so libncurses.so.4 librt.so.1 libanl-2.3.3.so libncurses.so.5 libss.so libanl.so libncurses.so.5.3 libss.so.2 libanl.so.1 libnsl-2.3.3.so libss.so.2.0 libblkid.so libnsl.so libstdc++.so libblkid.so.1 libnsl.so.1 libstdc++.so.6 libblkid.so.1.0 libnss_compat-2.3.3.so libstdc++.so.6.0.3 libc-2.3.3.so libnss_compat.so libtermcap.so libc.so libnss_compat.so.2 libtermcap.so.2.0.8 libc.so.6 libnss_dns-2.3.3.so libthread_db-1.0.so libcom_err.so libnss_dns.so libthread_db.so libcom_err.so.2 libnss_dns.so.2 libthread_db.so.1 libcom_err.so.2.1 libnss_files-2.3.3.so libutil-2.3.3.so 10장램디스크이미지제작
libcrypt-2.3.3.so libnss_files.so libutil.so libcrypt.so libnss_files.so.2 libutil.so.1 libcrypt.so.1 libnss_hesiod-2.3.3.so libuuid.so libdb.so libnss_hesiod.so libuuid.so.1 libdb.so.1 libnss_hesiod.so.2 libuuid.so.1.2 libdb.so.1.85.4 libnss_nis-2.3.3.so libz.so libdl-2.3.3.so libnss_nis.so libz.so.1 libdl.so libnss_nis.so.2 libz.so.1.2.2 libdl.so.2 libnss_nisplus-2.3.3.so modules /lib/modules/ /lib/ ldscripts/ armelf.x armelf.xr armelf.xu armelf_linux.xc armelf_linux.xsc armelf.xbn armelf.xs armelf.xw armelf_linux.xn armelf_linux.xsw armelf.xc armelf.xsc armelf_linux.x armelf_linux.xr armelf_linux.xu armelf.xn armelf.xsw armelf_linux.xbn armelf_linux.xs armelf_linux.xw /root/ mkflashroot nfsmnt mkflashroot ; NAND 플래시의 mtdblock2 영역을루트파일시스템으로바꾼다 nfsmnt ; NFS 마운트스크립트파일 (./nfsmnt 접속할NFS디렉토리 ) /tmp/ /mnt/ nfs usb1 usb2 mmc hdd temp /proc/ 이디렉토리는부팅후자동으로생성된다. /sys/ 이디렉토리는부팅후자동으로생성된다. /app/ mtdblock2 마운트디렉토리. 플래시영역을마운트한다. 10 장램디스크이미지제작