시스템포팅개요 부트로더 리눅스커널 커널컴파일 파일시스템 순천향대학교컴퓨터학부이상정 1 시스템포팅개요 순천향대학교컴퓨터학부이상정 2
시스템포팅순서 1. 타겟보드에부트로더를올림 2. 타겟보드에맞게작성된커널소스를컴파일 3. 컴파일된커널이미지를타겟보드에올림 4. 파일시스템을구성하여올림 순천향대학교컴퓨터학부이상정 3 시스템포팅과정 시 작 Loader확인 yes no Loader 만들기 JTAG Interface Loader loading zimage 확인 yes no zimage 만들기 Ethernet zimage loading ramdisk.gz 확인 yes no ramdisk.gz 만들기 Ethernet ramdisk.gz loading Kernel 실행 순천향대학교컴퓨터학부이상정 4
부트로더 순천향대학교컴퓨터학부이상정 5 부트로더 (bootloader) 소개 시스템의하드웨어를초기화하고운영체제의커널을메모리에올려실행시키는시스템프로그램 부트로더의위치 일반적으로시스템메모리의물리주소 0 번지부터위치 롬, 플래시, SRAM 등정적인메모리에위치 부트로더의기능 메모리초기화 하드웨어초기화 직렬포트의초기화 네트워크초기화 프로세서속도, 인터럽트의초기화 커널과램디스크적재 커널과램디스크를램에적재하여실행 순천향대학교컴퓨터학부이상정 6
부트로더의동작 (1) 부트로더의실행순서 부트로더 전원전원인가 하드웨어초기화초기화 자동부트모드? Yes 입력입력명령명령처리 No 명령명령입력대기 커널부팅명령? 커널커널로딩 & 스타트스타트 순천향대학교컴퓨터학부이상정 7 부트로더의동작 (2) 하드웨어초기화 프로세서및메모리초기화 네트워크및시리얼포트등의디바이스초기화 자동부트 커널등의프로그램이미지를로딩하고실행시킴 자동부트가아닌경우, 사용자입력대기상태 입력명령처리 간단한수준의디버깅 IP 주소설정및자동부팅설정등의보드환경설정 각종상태체크 커널로딩및스타트 롬에저장되어있는커널및램디스크이미지를타겟메모리에로딩 커널프로그램의시작번지로점프하여커널부팅 순천향대학교컴퓨터학부이상정 8
부트로더이미지생성 부트로더이미지생성 # cd /temp_cd/kernel/ # tar xvfj linux-2.4.19-pxa255_pro2.tar.bz2 # cd../bootloader # tar xvfj blob-20040507.tar.bz2 # cd blob #./configure --with-linux-prefix=/temp_cd/kernel/linux- 2.4.19-pxa255_pro2 with-board=pxa255_pro # make 생성된부트로더이미지위치 /temp_cd/bootloader/blob/src/blob/ 순천향대학교컴퓨터학부이상정 9 타겟보드에부트로더 JTAG 퓨징 # cd /temp_cd/bootloader/blob/src/blob # jtag jtag) cable parallel 0x378 PXA255 jtag) detect jtag) flashmem 0 blob 순천향대학교컴퓨터학부이상정 10
부트로더 - 명령어 boot [kernel options] boot linux with optional kernel options tftp : download blob/kernel/ramdisk image to RAM flash : copy blob/kernel/ramdisk from RAM to flash help : get this help reblob : restart blob from RAM reboot : reboot system reset : reset terminal speed : set download speed status : display current status btp : get ip set : set MAC & IP address 순천향대학교컴퓨터학부이상정 11 리눅스커널 순천향대학교컴퓨터학부이상정 12
커널개요 커널 (kernel) 운영체제의핵심 시스템내의모든리소스 (H/W, S/W) 관리 응용프로그램에게서비스제공 기능 프로세스관리 (Pocess Management) 태스크생성, 실행, 상태전이, 스케줄링, 시그널처리, 프로세스간통신, 모듈등의서비스를관리및제공 메모리관리 (Memory Management) 가상메모리, 주소변환, 페이지부재결함처리 파일시스템관리 (File System Management) 파일생성, 접근제어, inode 관리, 디렉터리관리, 버퍼캐쉬관리등 디바이스관리 (Device Management) 주변장치를구동하는드라이버로구성 순천향대학교컴퓨터학부이상정 13 리눅스커널구조 User Level User Program & Application Library Library Kernel Level System System Call Call Interface Interface Virtual Virtual File File System System Memory Memory Management Management Process Management Process Management Buffer Buffer Char Char Device Device Driver Driver Block Block Kernel Level Hardware Control Hardware Control H/W Level Hardware Hardware Control Control 순천향대학교컴퓨터학부이상정 14
리눅스커널소스구조 (1) 순천향대학교컴퓨터학부이상정 15 리눅스커널소스구조 (2) init 커널의초기화부분 커널의메인시작함수가구현된디렉토리 kernel 태스크관리자가구현된디렉터리 태스크생성, 소멸, 프로그램의실행, 스케줄링, 시그널처리, 모듈관련, 커널심볼등이구현 fs 리눅스에서지원하는다양한파일시스템들이구현 open(), read(), write() 등의시스템호출이구현 대표적파일시스템 ext2, nfs, ufs, ntfs, msdos, proc 등 순천향대학교컴퓨터학부이상정 16
리눅스커널소스구조 (3) arch H/W 에종속적인부분들이구현 CPU 타입에따라하위디렉토리로다시구분 /arch/cpu-type/ 에는다시 5 개의하위디렉토리로구성 boot: 시스템초기화시이용하는부트스트랩코드가구현커널소스컴파일시결과물인 vmlinuz 파일도여기에생성 kernel: 태스크관리자중에서컨텍스트스위치또는쓰레드관리같은하드웨어종속적인부분이구현 mm: 메모리관리자중에서페이지부재결함처리와같은하드웨어종속적인부분이구현 lib: 커널이사용하는라이브러리함수가구현 mm 메모리관리자가구현 가상메모리, 태스크마다할당되는메모리객체관리, 커널메모리할당자등의기능이구현 순천향대학교컴퓨터학부이상정 17 리눅스커널소스구조 (4) driver 디바이스드라이버가구현 문자 (character) 디바이스드라이버, driver/char 블록 (Block) 디바이스드라이버, driver/block 네트워크 (Network) 디바이스드라이버, driver/net 기타 driver/cdrom, driver/sound, /driver/video 등으로구성 ipc 리눅스커널이지원하는프로세스간통신 (Inter-Process Communication) 기능이구현 대표적인 IPC: 파이프, 시그널, SVR4 IPC, 소켓등 메시지패싱, 공유메모리, 세마포어가구현되어있음 파이프는 fs 디렉토리, 시그널은 kernel 디렉토리, 소켓은 net 디렉토리에구현되어있음 순천향대학교컴퓨터학부이상정 18
리눅스커널소스구조 (5) net 리눅스에서지원하는통신프로토콜이구현되어있으며소켓이구현되어있음 지원프로토콜 TCP/IP, PPP, X.25, IPX 등다수지원 net/ipv4, net/x25, net/802 등으로구성 include 리눅스커널이사용하는헤더파일들이구현 헤더파일중 H/W 독립적인부분은 include/linux 하위디렉토리에구현 lib 커널라이브러리함수들이구현 순천향대학교컴퓨터학부이상정 19 리눅스커널소스구조 (5) Documentation 리눅스커널및명령어들에대한자세한문서파일들이존재 module 컴파일된모듈함수들이존재 scripts 커널구성및컴파일할때이용되는스크립터들이존재 순천향대학교컴퓨터학부이상정 20
리눅스커널의부팅과정 Boot loader 커널커널이미지이미지압축해제압축해제 커널실행커널실행 메모리와하드웨어초기와메모리와하드웨어초기와 Linux Kernel 디바이스드라이버초기화디바이스드라이버초기화 루트파일시스템마운트루트파일시스템마운트 /sbin/init 실행 /sbin/init 실행 User Programs 로그인로그인프롬프트프롬프트 네트워크서비스시작네트워크서비스시작 X-Window 실행, X-Window 실행, 순천향대학교컴퓨터학부이상정 21 커널컴파일 순천향대학교컴퓨터학부이상정 22
커널컴파일순서 (1) # make mrproper 이전의설정을모두제거 # make menuconfig 커널설정사항변경 # make dep 커널소스코드사이의의존관계분석 ->.depend 파일에저장 커널소스코드의위치를변경하였을경우다시 make dep을해주어야함 # make zimage zimage 생성, 에러없이완료되었을경우./arch/arm/boot 에 zimage 파일생성 순천향대학교컴퓨터학부이상정 23 커널컴파일순서 (2) 순천향대학교컴퓨터학부이상정 24
커널컴파일옵션설정 (1) 커널컴파일옵션설정원리.config.config Makefile 에서이용 #make #make menuconfig menuconfig 메뉴설정메뉴설정 설정저장설정저장 config.in 을읽어서메뉴로표현 같은내용을두가지형태로저장 include/linux/autoconf.h include/linux/autoconf.h C 파일에서이용 순천향대학교컴퓨터학부이상정 25 커널컴파일옵션설정 (2) 커널컴파일시필요한옵션설정방법 가장먼저 Linux 소스가있는디렉터리로이동 ( 예 :/kernel/src/linux-2.4.19/) # make menuconfig 입력 순천향대학교컴퓨터학부이상정 26
커널컴파일옵션설정 (3) make config 커널을설정하는명령어 config는 text 기반으로설정내용을순서대로물어본다. 한번설정한내용을수정하기위해서는처음부터다시해야하므로많이사용하지않음 순천향대학교컴퓨터학부이상정 27 커널컴파일옵션설정 (4) make xconfig make config와같이커널을설정하는명령어 xconfig는역시 Tcl/Tk 스크립트언어를사용해서 X-Windows 환경의 GUI를제공 순천향대학교컴퓨터학부이상정 28
커널이미지 zimage 생성하기 특정한 Xscale 용 target board 에맞는 kernel image 의생성은일반적으로다음 4 단계로이루어짐 Linux Linux Kernel Kernel 소스를소스를구함 ARM ARM 용패치패치파일파일소스를소스를구함 Xscale Xscale용패치패치파일파일소스를소스를구함 Target Target Board Board 패치패치파일파일소스를소스를구함 순천향대학교컴퓨터학부이상정 29 커널이미지실습 # cd /temp_cd/kernel/ # tar xvfj linux-2.4.19-pxa255.tar.bz2 # cd /temp_cd/kernel/linux-2.4.19-pxa255_pro2 # make menuconfig // 커널설정 # make dep // 의존성검사 # make clean // 컴파일된오브젝트파일과실행파일삭제 # make zimage //zimage 생성 /temp_cd/kernel/linux-2.4.19-pxa255_pro2/arch/arm/boot 에 zimage 생성 순천향대학교컴퓨터학부이상정 30
커널다운로드및퓨징실습 # cd /temp_cd/kernel/linux-2.4.19- pxa255_pro2/arch/arm/boot # cp zimage /tftpboot # minicom boot> btp boot> tftp zimage kernel // 커널다운로드 boot> flash kernel // 커널퓨징 boot> boot // booting 순천향대학교컴퓨터학부이상정 31 TFTP/NFS 를이용한부팅시나리오 Target RAM RAM Host 1.TFTP request Flash memory 부트부트로더로더 4. 커널분기 5. 분기및커널압축해제 Linux Linux 커널커널 2.TFTP reply ( 압축커널만 ) 3. 압축커널다운로드 압축커널압축커널이미지이미지 6. 6. NFS NFS Root Root FS FS 마운트마운트 Host Hard Disk (File System) 순천향대학교컴퓨터학부이상정 32
파일시스템 순천향대학교컴퓨터학부이상정 33 파일시스템 파일시스템 (file system) 보조기억장치와그안에저장되는파일을관리하는알고리즘및자료구조의통칭 응용에서특정파일에대한접근이나정보요구할때운영체제에서가장먼저하는일이파일시스템참조 순천향대학교컴퓨터학부이상정 34
램디스크 (Ramdisk) 램디스크 메모리의일부영역에파일시스템으로사용 응용프로그램수행속도가빠름 임베디드시스템에서제품화단계에사용 압축파일은플래시메모리에적재되어있다가부팅시메모리로적재 NFS 보다액세스속도가현저하게빠름 네트워크상태와무관하게부팅 사용가능한메모리의용량이감소 업그레이드가번거로움 순천향대학교컴퓨터학부이상정 35 루트파일시스템 (Root File System) 임베디드시스템에서이용되는루트파일시스템 NFS (Network File System) 리눅스의 NFS 서버를동작시킨후타겟보드에서이를파일시스템으로사용 initrd (Initial RAM Disk) 리눅스에서램디스크를위한파일시스템을구성한후압축하여플래시에저장하고있다가커널이루트파일시스템을참조하는경우플래시메모리에서읽어와 RAM에압축을푼다음파일시스템으로사용하는방법 MTD (Memory Technology Device) 플래시메모리를파일시스템으로사용하는것 JFFS, JFFS2, Cramfs, Ramfs 등 순천향대학교컴퓨터학부이상정 36
initrd 이미지 ( 램디스크이미지 ) initrd (Initial RAM Disk) 리눅스부팅과정에서읽을수있는임시루트파일시스템을포함한램디스크 ( 일반램디스크는부팅종료후사용가능 ) initrd 이미지만을사용한부팅은쉽고간단하므로임베디드리눅스개발단계시스템에서가장널리사용 부팅과정 1단계 : 커널과최소모듈만동작 2단계 : initrd에들어있는추가모듈과실행파일시작 -> 부팅초기에최소시스템만으로시스템구동 플로피디스크로만든부팅디스켓또는부팅 CD의경우에도 initrd 이용 순천향대학교컴퓨터학부이상정 37 TFTP/initrd 를이용한부팅시나리오 Target Host 1.TFTP request Flash memory 부트부트로더로더 4. 커널분기 RAM 5. 분기및커널압축해제 RAM Linux Linux 커널커널 2.TFTP reply ( 압축커널및 initrd 이미지 ) 3. 커널이미지다운로드 3.initrd 이미지다운로드 압축커널압축커널이미지이미지압축 initrd 압축 initrd 이미지이미지 5. 이미지압축해제 마운트마운트 initrd initrd (Ramdisk) (Ramdisk) 순천향대학교컴퓨터학부이상정 38
initrd 이미지를이용한부팅시나리오 Target RAM RAM 1. 커널분기 Flash memory 부트부트로더로더 3. 분기및커널압축해제 Linux Linux 커널커널 2. 재배치 압축커널압축커널이미지이미지 압축압축커널커널이미지이미지 2. 재배치 압축 initrd 압축 initrd 이미지이미지 4. 이미지압축해제 마운트마운트 압축 initrd 압축 initrd 이미지이미지 initrd initrd (Ramdisk) (Ramdisk) 순천향대학교컴퓨터학부이상정 39 램디스크이미지작성 파일시스템이미지작성방법 루프디바이스 (Loop Device) 를이용하여작성 리눅스에서의루프디바이스 파일시스템내의파일에대한블록디바이스드라이버 파일의내용으로파일시스템을구성한후 mount 하여사용가능 루프디바이스이용을위한명령어 dd : 원하는크기의이미지파일생성 mkfs : 생성된파일에파일시스템생성 mount o loop : 생성된파일을루프로 mount 하여시스템구성 예 # dd if=/dev/zero of=ramdisk bs=1024 count=16384 -> initrd 램디스크이미지파일생성, 16MB # mke2fs ramdisk -> ext2 리눅스파일시스템생성 순천향대학교컴퓨터학부이상정 40
램디스크이미지작성및파일추가예 (1) # cd /temp # dd if=/dev/zero of=ramdisk bs=1024 count=8192 # mke2fs ramdisk # mkdir ramdisk_point # mount t ext2 o loop ramdisk ramdisk_point # cd ramdisk_point <- 여기서램디스크에포함될파일추가 # cd../ # umount./ramdisk_point # gzip -9 ramdisk 순천향대학교컴퓨터학부이상정 41 램디스크이미지작성및파일추가예 (2) 순천향대학교컴퓨터학부이상정 42
램디스크파일추가실습 (1) 휴인스 CD 제공램디가스크에파일추가 # cp /temp_cd/image/ramdisk.gz /temp # cd /temp # gunzip ramdisk.gz # mount t ext2 o loop ramdisk./ramdisk_point # cd ramdisk_point <- hello.c 작성, 크로스컴파일, hello.c hello.o hello 파일추가 # cd../ # umount./ramdisk_point # gzip ramdisk <- ramdisk.gz 생성 순천향대학교컴퓨터학부이상정 43 램디스크파일추가실습 (2) 램디스크의타겟보드로다운로드및퓨징 # cp ramdisk.gz /tftpboot # minicom s boot> tftp ramdisk.gz ramdisk boot> flash ramdisk 순천향대학교컴퓨터학부이상정 44
jffs2 파일시스템생성 MTD (Memory Technology Devices) 리눅스에서플래시메모리의일부영역을파일시스템으로사용하기위한플래시메모리드라이버 MTD를이용하여플래시영역을몇개의파티션으로나누어사용가능 jffs 형식의파일시스템이미지를만들어플래시메모리의정의된영역 (usr) 에다운로드 jffs2 포맷의파일시스템생성은 CD에서제공되는 mkfs.jffs 유틸리티를이용 순천향대학교컴퓨터학부이상정 45 jffs2 파일시스템생성실습 (1) # cp /tepm_cd/application/mkfs.jffs2 /temp # cd /temp # mkdir jffs2_root <- jffs2_root 디렉토리에파일추가에내용추가 #./mkfs.jffs2 -r jffs2_root -o usr.jffs2 -eraseblock=0x40000 - pad=0x1800000 -r : root directory -o: output file name --eraseblock: the sector size of flash on the target machine (0x40000= 256KB) --pad : file system size (0x1800000=24MB) 순천향대학교컴퓨터학부이상정 46
jffs2 파일시스템생성실습 (2) # cp usr.jffs2 /tftpboot # minicom s boot> tftp usr.jiffs2 usr 순천향대학교컴퓨터학부이상정 47 MTD 를이용한부팅시나리오 1. 커널분기 Flash memory 부트부트로더로더 Target RAM 3. 분기및커널압축해제 RAM Linux Linux 커널커널 2. 재배치 압축커널압축커널이미지이미지 압축커널압축커널이미지이미지 마운트마운트 MTD로구성된 MTD 구성된 FS FS 순천향대학교컴퓨터학부이상정 48
initrd/mtd 를이용한부팅시나리오 Target RAM RAM 1. 커널분기 Flash memory 부트부트로더로더 3. 분기및커널압축해제 Linux Linux 커널커널 압축압축커널커널이미지이미지 2. 재배치 압축압축커널커널이미지이미지 마운트마운트 압축 initrd 압축 initrd 이미지이미지 MTD로구성된 MTD 구성된 FS FS 2. 재배치 압축 initrd 압축 initrd 이미지이미지 4. 이미지압축해제 initrd initrd (Ramdisk) (Ramdisk) 순천향대학교컴퓨터학부이상정 49 TFTP/MTD 를이용한부팅시나리오 Target Host 1.TFTP request Flash memory 부트부트로더로더 4. 커널분기 RAM 5. 분기및커널압축해제 RAM Linux Linux 커널커널 2.TFTP reply ( 압축커널 ) 3. 커널메모리다운로드 압축커널압축커널이미지이미지 마운트마운트 MTD로구성된 MTD 구성된 FS FS 순천향대학교컴퓨터학부이상정 50