개발환경 2 임베디드시스템소프트웨어 I
차례 부트로더의기능, 컴파일방법 커널의기능, 컴파일방법 파일시스템의기능, 생성방법 Host-KIT 네트워크연결방법 (Bootp, TFTP, NFS) 개발환경 2 2
부트로더의기능 하드웨어초기화 CPU clock, Memory Timing, Interrupt, UART, GPIO 등을초기화 커널로드 커널이미지를 flash 메모리에서 SDRAM 으로복사한후커널이미지주소로제어를넘김 이미지다운로드 커널이미지와파일시스템을 SDRAM에다운로드 Ethernet(bootp, tftp) 을통해서도가능 Flash SDRAM에저장된이미지를플레쉬메모리에쓰기기능 Flash lock, unlock 기능등 개발환경 2 3
부트로더컴파일방법 커널소스트리생성 휴인스 CD 의 linux-2.4.19-pxa255_pro2.tar.bz2 파일복사및압축을푼다 BLOB 소스트리생성 휴인스 CD 의 blob-20040713.tar.gz 파일복사및압축을푼다 BLOB 컴파일 부트로더소스의최상위디렉토리로이동한다 다음명령어줄을수행한다 $./configure with-linux-prefix= 커널소스트리가있는디렉토리절대경로 with-board=pxa255_pro $ make blob 파일생성확인 부트로더파일 src/blob/blob 이생성되었는지확인한다 개발환경 2 4
커널의기능 프로세스스케쥴링및 IPC 기능 메모리관리와가상주소기능 파일시스템기능 강력한네트워크기능 인터럽트및시스템운영기능 모듈화된디바이스드라이버 개발환경 2 5
PXA255-pro2 용리눅스커널패칭 PXA255 를사용하는임베디드시스템에리눅스커널을포팅하는방법은다음과같다 리눅스기본커널을가져온다 (linux-2.4.19.tar.gz) ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.19.tar.gz ARM patch 를적용한다 (patch-2.4.19-rmk4.gz) ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch- 2.4.19-rmk4.gz Xscale patch 를적용한다 (diff-2.4.19-rmk4-pxa1.gz) ftp://ftp.arm.linux.org.uk/pub/linux/arm/people/nico/diff- 2.4.19-rmk4-pxa1.gz 휴인스 patch 를적용한다 (diff-2.4.19.rmk4-pxa1-huins.gz) 이부분은 board 개발회사가하여야할사항이다 개발환경 2 6
PXA255-pro2 용리눅스커널패칭 휴인스 CD 의디렉토리 "Kernel/src" 의다음파일을실습디렉토리에복사한다 linux-2.4.19.tar.bz2 patch-2.4.19-rmk4 diff-2.4.19-rmk4-pxa1 diff-2.4.19-rmk4-pxa1-huins.gz 다음명령어줄을수행한다 $ tar xvjf linux-2.4.19.tar.bz2 $ gzip d diff-2.4.19-rmk4-pxa1-huins.gz $ cd linux-2.4.19 $ cat../patch-2.4.19-rmk4 patch p1 $ cat../diff-2.4.19-rmk4-pxa1 patch p1 $ cat../diff-2.4.19-rmk4-pxa1-huins patch p1 개발환경 2 7
커널컴파일방법 리눅스커널소스의최상위디렉토리로이동한다 다음명령어줄을수행한다 $ make menuconfig // kernel compile configure $ make dep // dependency check $ make bzimage // kernel compile 커널파일 arch/arm/boot/zimage 이생성되었는지확인한다 개발환경 2 8
파일시스템의기능 커널부팅후처음수행될 init 프로세스의저장 init 프로세스수행후수행될시스템기본프로그램 ( 예 : 네트워크데몬프로그램, 로그인프로그램등 ) 의저장 임베디드시스템의응용프로그램의저장 임베디드리눅스의파일시스템의종류 ramdisk, jffs, jffs2, nfs 등을사용 개발환경 2 9
미리만들어진 Ramdisk 마운트하기 휴인스 CD의디렉토리 "Image" 의 ramdisk.gz 파일을실습디렉토리에복사한다 다음명령어줄을수행한다 $ gzip d ramdisk.gz // 압축해제 $ mkdir ramdisk_dir // 마운트할디렉토리생성 # mount t ext2 o loop ramdisk ramdisk_dir // 마운트 ramdisk를마운트한디렉토리에추가하고자하는파일을복사한다 # umount ramdisk_dir // 마운트해제 $ gzip ramdisk // ramdisk 다시압축 개발환경 2 10
파일시스템의생성방법 -Ramdisk Kernel configure <*> RAM disk support (16384) Default RAM disk size // SDRAM에서의크기 (K) [*] Initial RAM disk (initrd) support Kernel source file "drivers/mtd/maps/pxa255_pro.c" 의배열 pxa255_pro_partitions[] 에서플래쉬메모리에압축저장된 ramdisk의크기 0x00600000 및시작주소를알려준다 file "arch/arm/mach-pxa/pxa255_pro.c" 의함수 "fixup_pxa25 5_pro" 에서 SDRAM에서 ramdisk 시작주소인 0xa0000000와 ramdisk 크기 (128*1024*1024) 를알려준다 개발환경 2 11
파일시스템의생성방법 -Ramdisk 다음명령어줄을수행한다 $ dd if=/dev/zero of=ramdisk.img bs=1024 count=16384 $ mke2fs ramdisk.img // ext2 파일시스템생성 $ mkdir ramdisk_dir // 마운트할디렉토리생성 # mount o loop ramdisk.img ramdisk_dir ramdisk_dir 아래에원하는 directory/file 들을만든다 $ gzip ramdisk.img // ramdisk 압축 개발환경 2 12
파일시스템의생성방법 -JFFS2 Kernel configure MTD(Memory Technology Device) 설정 <*> Journaling Flash File System v2 (JFFS2) support 휴인스 CD 의디렉토리 "Application" 의 mkfs.jffs2 파일을 /usr/sbin 으로복사한다 제작법 $ mkdir jffs2_dir jffs2_dir 아래에원하는 directory/file 들을만든다 $ mkfs.jffs2 d jffs2_dir o jffs2.img e 0x40000 p 0x1800000 -d : jffs2 파일시스템으로만들디렉토리 -o : 만들어질파일시스템이미지파일이름 -e : erase block 크기 -p : 만들파일시스템의크기 (0x01800000 = 24MB) 개발환경 2 13
Host-KIT 네트워크연결방법 -Bootp 휴인스 CD 의디렉토리 "Application" 의 bootpd- 2.4.tar.gz 파일을작업디렉토리로복사한후다음명령어줄을수행한다 $ tar xvzf bootpd-2.4.tar.gz $ cd bootpd-2.4 # make install /etc/bootptab 파일을만들고내용을수정한다.default:\ hd=/tftpboot:bf=null:sm=255.255.255.0:gw=192.168.32.254: pxa255_pro2:ht=1:ha=0x123456789071:ip=192.168.32.171:tc=.default: KIT MAC 주소 KIT IP 주소 개발환경 2 14
Host-KIT 네트워크연결방법 -Bootp 호스트에서다음명령어줄을수행한다 # lokkit // 방화벽없음설정 # /usr/etc/bootpd KIT의부트로더에서 MAC 및 IP 주소를설정한다 boot> set mac_addr Newvalue: 12:34:56:78:90:71 boot> set ip_addr Newhostip: 192.168.32.141 Newtargetip: 192.168.32.171 KIT의부트로더에서다음명령을수행한다 boot> btp // KIT의주소를 Host에서가져오기 boot> status // KIT의상태확인 개발환경 2 15
Host-KIT 네트워크연결방법 -TFTP 호스트의 /etc/xinetd.d/tftp 파일에다음을설정한다 service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4 } 개발환경 2 16
Host-KIT 네트워크연결방법 -TFTP 호스트에서 xinetd 데몬을다시수행한다 # /etc/init.d/xinetd restart 호스트에서 /tftpboot 디렉토리를만들고 KIT로다운로드할파일을이디렉토리로복사한다. KIT의부트로더에서다음명령을수행한다 boot> btp // Host와 KIT 네트워크연결 boot> tftp ramdisk.gz ramdisk // 파일다운로드 boot> status // KIT의상태확인 개발환경 2 17
Host-KIT 네트워크연결방법 -NFS 호스트에서공유할디렉토리를만든다 # mkdir /home/share 호스트의 /etc/exports 파일을수정한다 /home/share 192.168.32.*(rw,no_root_squash) 호스트의 NFS 서버를시작한다 # /etc/rc.d/init.d/nfs start 개발환경 2 18
Host-KIT 네트워크연결방법 -NFS KIT에서커널로부팅한다 KIT에서다음명령어줄을수행한다 # ifconfig eth0 192.168.32.171 # mkdir /mnt/nfs # mount t nfs 192.168.32.141:/home/share /mnt/nfs # mount // 마운트상태확인 개발환경 2 19
참고문헌 정보통신연구진흥원, 한국정보처리학회, 임베디드시스템소프트웨어 I 교안, 2004. 휴인스, 홍릉과학출판사, Intel PXA255와임베디드리눅스응용, 2004 휴인스, 홍릉과학출판사, Intel PXA255와임베디드리눅스응용파워포인트강의자료, 2004 상명대학교임베디드시스템소프트웨어트랙, http://et.smu.ac.kr, 2004. 신동하, http://et.smu.ac.kr, 상명대학교임베디드소프트웨어교안, 2003. 개발환경 2 20