Chapter. 5 Bootloader, Kernel, Ramdisk Professor. Jaeheung, Lee
목차 Bootloader Kernel File System 1
Bootloader Bootloader 란? 리눅스커널부팅이전에미리실행되면서커널이올바르게부팅되기위해필요한모든관련작업을마무리하고최종적으로리눅스커널을부팅시키기위한목적으로짜여진프로그램 Bootloader 의기능 H/W 초기화 CPU Clock, Memory Timing, Interrupt, UART, GPIO 등을초기화 Linux 부팅 Kernel Image 를 SDRAM 에저장후 Kernel Image 주소로점프 Image Downloading Kernel Image (zimage) 와 File System 을 SDRAM 에 Download Ethernet (bootp, tftp) 을통해서가능 2
Bootloader Bootloader 의기능 Flash 제어 Flash Write, Erase 기능 Flash Lock, Unlock 기능 3
Bootloader Linux Bootloader 실행구조 시작 JTAG Interface Loader 확인 Yes Loader 로딩 Loader 생성 Ethernet (tftp) zimage 확인 Yes zimage 확인 No zimage 생성 Ethernet (tftp) Ramdisk 확인 Yes Ramdisk 로딩 No Ramdisk 생성 커널시작 4
Bootloader Bootloader 실행절차 5
Bootloader Start.S (1/2) 6
Bootloader Start.S (2/2) 7
Bootloader Manual Boot (main.c) 8
Bootloader Bootloader 명령모드로의전환방법 부팅후메시지에서 Ethernet 확인이어서 Kernel, Ramdisk가 Flash에서 RAM으로 copy 확인 Command mode로전환시 Enter 입력 대부분의키트는 Power On 후수초내에키를입력하면명령모드로전환 9
Bootloader Bootloader 명령어 각각의명령어는타겟보드에따라다르지만일반적으로유사한명령어구조를가짐 예 ) Help : Command Mode 에서사용가능한명령어를출력 10
Bootloader Bootloader 설치 개발키트 CD/Internet을통해 Source를구함압축해제 # mkdir /home/working # cd /mnt/cdrom/source # cp empos_boot-20031022.tar.bz2 /home/working # cd /home/working # tar xvfj empos_boot-20031022.tar.bz2 bz2 파일압축해제옵션 # cd /home/working/empos_boot-20031022 # make 11
Bootloader Bootloader 설치 cont d 12
Bootloader Bootloader 설치 cont d 13
Bootloader Bootloader Porting JTAG 을이용한포팅 컴파일후완성된 Bootloader 파일을 Jflash 실행파일이있는디렉토리로복사후 Target Board 에 Write # cd /home/working/empos_boot-20031022 # cp empos_boot(bootloader 파일 ) /usr/local/jtag/jflash-xscale # cd /usr/local/jtag/jflash-xscale #./Jflash-Xscale empos_boot JFLASH Version 1.00-HBE-EMPOS COPYRIGHT 2000, 2001 Intel Corporation JTAG Test Passed Target Board 에컴파일된파일을 Fusing 후 Target Board 를 Reset 시켜야함 14
Bootloader Bootloader Porting Jflash 를이용한 Bootloader 포팅 15
Bootloader tftp 를이용한다운로드 Target Board 에서 tftp 를이용한 Bootloader 다운로딩 tftp 이용시해당파일을 /tftpboot 디렉토리에복사 # cd /home/working/empos_boot-20031022 # cp emos_boot( 부트로더파일 ) /tftpboot Host PC tftp 명령을이용하여 Target Board 에 Bootloader 파일다운로드 Bootloader 의 Flash 명령을이용하여 Write EMPOS # tftp empos_boot booter EMPOS # flash booter Target Board 16
Bootloader tftp 를이용한다운로드 cont d Host PC Target Board 17
Bootloader tftp 를이용한다운로드 cont d tftp 를통해서이미지가전송이되는 booter 라는영역과이어서나올 kernel, ramdisk 라는영역은휘발성이있는 ram 영역이므로이곳에저장이된이미지 ( 현재 empos_boot) 는보드가재부팅이되면없어지게된다. 따라서 ram 영역에서 flash 영역으로옮겨주어야한다. 이명령어가 flash 이다. 18
Kernel Kernel 이란? 운영체계를이루는핵심적소프트웨어 자원의관리 CPU, 메모리, 프로세스, IPC, 파일시스템, 네트워크등의자원들을관리하고분배하는기능및디바이스드라이버에의한주변장치제어기능들을제공 19
Kernel Kernel 의기능 프로세스처리와스케줄링및 IPC 기능 어떤특정한업무의처리하기위해실행되고관리되는단위인프로세스에대한생성, 제거, 스케줄링및각프로세스간의통신인 IPC 기능제공 메모리관리와가상주소기능 페이지 단위의메모리관리하여논리적인접근방식에의한한정된메모리의효율적인사용 파일시스템기능 리눅스커널은외부장치를하나의파일로간주하여입 / 출력이이루어지기때문에장치파일의관리, 캐시및특수 proc 파일시스템기능을제공 20
Kernel Kernel 의기능 cont d 강력한네트워크기능 TCP/IP 를비롯한많은네트워크프로토콜자원, 다양한네트워크서비스및관련장치의제어를위한디바이스드라이버등을지원 모듈화된디바이스드라이버 자주사용되지않는디바이스를제어하기위한디바이스드라이버는모듈로처리하여메모리의낭비를최소화 인터럽트및시스템운영기능 인터럽트처리를비롯한타이머, 디버깅, 로그메시지처리, 사용자인터페이스와같은시스템운영자원들을포함 21
Kernel Linux Kernel 실행구조 시작 JTAG Interface Loader 확인 Yes Loader 로딩 Loader 생성 Ethernet (tftp) zimage 확인 Yes zimage 확인 No zimage 생성 Ethernet (tftp) Ramdisk 확인 Yes Ramdisk 로딩 No Ramdisk 생성 커널시작 22
Kernel Linux Kernel 구조 23
Kernel Linux Kernel 구조 security sound kernel ipc lib mm scripts doc /usr/src/linux drivers block char alpha arch crypto fs init include user net usb i386 coda asm ethernet video m68k ext2 asm-arm ipv4 audio mips ext3 linux ipv6 sound ppc ext4 net unix sparc jffs scsi x25 arm boot nfs video atm kernel lib mach-pxa 임베디드시스템 I 의주관심영역을빨간색으로표시 24
Kernel Kernel 의주요함수 시스템시작및초기화 arch/i386/kernel/head.s 일련의시스템구조의의존적인초기화를수행한후, init/main.c 의 Start_kernel() 함수호출 Start_kernel() Start_kernel(){ setup_arch(); paging_init(); trap_init(); init_irq(); sched_init(); kernel_thread(init); cpu_idle(); } Init(){ setup(); execute( /sbin/init ); } 25
Kernel Kernel 의주요함수 cont d 메모리관리 페이지폴트핸들링 : mm/memory.c 메모리매핑및페이지캐싱 : mm/filemap.c 버퍼캐쉬 : mm/buffer.c 스왑캐쉬 : mm/swap_state.c, mm/swapfile.c Kernel 기능 스케줄러 : kernel/sched.c Fork : kernel/fork.c Bottom half of interrupt handling Include/linux/interrupt.h Process table : include/linux/sched.h 26
Kernel Kernel 의주요함수 cont d Interrupt Handling 대부분의구조는서로의존적임 arch/i386/kernel/irq.c 네트워크 Networking code in net/ Header files in include/net BSD socket code : net/socket.c IP version 4 INET code : net/ipv4/af_inet.c Generic protocol support code : net/core TCP/IP networking code : net/ipv4 27
Kernel Kernel Image (zimage) 생성하기 특정한 Xscale 용 Target Board 에맞는 kernel image 의생성은일반적으로다음 4 단계로이루어짐 Linux Kernel 소스를구함 ARM 용패치파일소스를구함 / 패치 Xscale 용패치파일소스를구함 / 패치 Target Board 패치파일소스를구함 / 패치 28
Kernel Kernel Image (zimage) 생성하기 cont d Linux Kernel 소스파일설치 (ex. Version 2.4.19) # mount /mnt/cdrom # mkdir /home/working/kernel # cp /mnt/cdrom/source/linux-2.4.19.tar.gz../working/kernel # cd /working/kernel # tar xvfz linux-2.4.19.tar.gz ARM 패치 patch-2.4.19-rmk4.gz # mount /mnt/cdrom # cd /mnt/cdrom/source/patch # cp patch-2.4.19-rmk.gz /home/working/kernel/linux-2.4.19 # cd /home/working/kernel/linux-2.4.19 # zcat patch-2.4.19-rmk.gz patch p1 29
Kernel Kernel Image (zimage) 생성하기 cont d Xscale 패치 diff-2.4.19-rmk4-pxa2.gz # mount /mnt/cdrom # cd /mnt/cdrom/source/patch # cp diff-2.4.19-rmk-pxa2.gz /home/working/kernel/linux-2.4.19 # cd /home/working/kernel/linux-2.4.19 # zcat diff-2.4.19-rmk-pxa2.gz patch p1 EMPOS II Board 패치 diff-2.4.19-rmk4-empx1.gz # mount /mnt/cdrom # cd /mnt/cdrom/source/patch # cp diff-2.4.19-rmk-pxa2-empx1.gz /home/working/kernel/linux-2.4.19 # cd /home/working/kernel/linux-2.4.19 # zcat diff-2.4.19-rmk-pxa2-empx1.gz patch p1 30
Kernel Kernel Image (zimage) 생성하기 cont d menuconfig 실행 원하는 Kernel 내용을구성 dep 실행 clean 실행 zimage 생성 # make menuconfig # make dep # make clean # make zimage arch/arm/boot 에 zimage 생성확인 31
Kernel Kernel Image (zimage) 생성하기 cont d menuconfig 실행 # make menuconfig 본명령어를통해커널을컴파일할때추가, 삭제해야할것을선택할수있는메뉴가출력되어커널에서필요부분을추가, 삭제할수있어좀더최적화된커널을생성가능 32
Kernel Kernel Image (zimage) 생성하기 cont d dep 실행 # make dep 본명령어는커널소스사이의코드의존성을검사하여분석후.depend 라는파일로저장.depend 파일안에는소스들의 PATH 정보등컴파일에필요한정보들이저장 33
Kernel Kernel Image (zimage) 생성하기 cont d clean 실행 # make clean 본명령어는컴파일수행후생성된여러오브젝트파일을삭제해주는명령어 34
Kernel Kernel Image (zimage) 생성하기 cont d ziamge 생성 # make zimage 실제커널을컴파일하는명령어 make dep 의결과로생성된.depend 파일을참조하면서커널소스를하나씩컴파일 압축커널이미지가 arch/arm/boot 에 zimage 로생성되며, zimage 의처음부분에압축을해제하는코드가포함되어있음 35
Kernel Kernel Image (zimage) 생성하기 cont d ziamge 생성 zimage 생성확인 36
Kernel Kernel Image 다운로딩 Kernel 포팅 tftp를이용하여 Kernel Image를 Target Board에다운로드 Flash 명령을이용하여 Flash Memory에 Write # cd /home/working/kernel/linux-2.4.19/arch/arm/boot # cp zimage /tftpboot Host PC EMPOS # tftp zimage kernel EMPOS # flash kernel Target Board 37
Kernel Kernel Image 다운로딩 cont d Host PC Download Fusing 38
File System Target Board 의 File System 은사양에따라다양한선택이가능 Ramdisk Jffs Jffs2 Cramfs Ramfs Root File System 에는커널이동작하기위한공간과 Library, Util 등이포함 39
File System Ramdisk 란? 별도의물리적저장장치가없이메모리의한부분을할당하여컴퓨터의하드디스크처럼사용가능하도록한것 별도의디스크저장공간이없는임베디드보드에서 root 파일시스템으로이러한 Ramdisk 를보편적으로사용 Ramdisk 의성질 RAM이휘발성이므로전원을차단시키면모든데이터가사라짐 RAM에서동작하므로빠른실행이가능압축방법 (gzip) 을이용하므로용량을효율적으로사용할수있음 40
File System Linux Ramdisk 실행구조 시작 JTAG Interface Loader 확인 Yes Loader 로딩 Loader 생성 Ethernet (tftp) zimage 확인 Yes zimage 확인 No zimage 생성 Ethernet (tftp) Ramdisk 확인 Yes Ramdisk 로딩 No Ramdisk 생성 커널시작 41
File System Kernel Configuration menuconfig 에서 Ramdisk 를 Root File System 으로사용하기위해다음과같이설정 Default RAM disk size 는사용할 Ramdisk 의크기 : 8Mbytes 설정예 42
File System Ramdisk 생성 Host PC 의루프백디바이스를사용한 Ramdisk 생성및수정어떤파일시스템의파일한개를마치하나의디바이스처럼인식다른디바이스처럼포맷되고마운트될수있음 파일의내용을모두 0 으로채우는의미생성된 Ramdisk 이름 # cd /home/working/ramdisk # dd if=/dev/zero of=./skhu_ramdisk count=3096 bs 1024 # mkfs t ext2 skhu_ramdisk 1024byte 크기의블록을총 4096 번반복 ( 총 4Mbyte 의 Ramdisk 생성 ) dd 명령으로생성된 Kernel Image 에서파일시스템을생성하는과정 ( 리눅스에서가장많이사용되고있는 ext2 로생성 ) 43
File System Ramdisk 수정 / 작성방법 만들어진가상디바이스를 mount 하기위한디렉토리를하나만듬 (mkdir rampoint) gzip 으로파일 (skhu_ramdisk.gz) 을압축해제 skhu_ramdisk 이생김 만들어진공간에 Ramdisk image(shhu_ramdisk) 를 mount 시킴 (mount t ext2 -o loop shhu_ramdisk./rampoint) mount point 에필요한설정파일, 라이브러리, 유틸리티프로그램등을복사 작업디렉토리를 umount(umount./rampoint) gzip 으로파일 (skhu_ramdisk) 을압축 압축파일 (skhu_ramdisk.gz) 이생김 bootloader 에서해당파일을올리면새로운 Ramdisk 가 root file system 으로동작 44
File System Ramdisk 수정 / 작성방법 cont d # mkdir /home/working/ramdisk # mount /mnt/cdrom # cp /mnt/cdrom/ramdisk-empos1.gz /home/working/ramdisk # cd/ home/working/ramdisk # gzip d ramdisk-empos1.gz # mkdir /mnt/ramdisk # mount t ext2 o loop ramdisk-empos1 /mnt/ramdisk # ls /mnt/ramdisk Ramdisk 수정작업시여기에필요한파일복사 # umount /mnt/ramdisk # gzip ramdisk-empos1 # ls /home/working/ramdisk Target Board 에포팅이가능한형태로 Ramdisk 수정 45
File System Ramdisk 수정 / 작성방법 cont d 수정내용 : testfolder 라는 directory 생성 46
File System Ramdisk 포팅 tftp 를이용하여 Ramdisk Image 를 Target Board 에다운로딩 Flash 명령을이용해서 Flash Memory 에 Write # cp ramdisk.gz /tftpboot Host PC EMPOS # tftp ramdisk.gz kernel EMPOS # flash kernel EMPOS # boot Target Board 47
File System Ramdisk 포팅 cont d Host PC Target Board 48
File System Ramdisk 포팅 cont d Flash Ramdisk Ramdisk 확인 49