임베디드리눅스커널설치개요 임베디드리눅스설치 Linux Kernel* Root File System* jffs2.img 1 2 구성요소 리눅스커널 필수구성요소 하드웨어를초기화하고 kernel image를 에올려주어수행을넘겨주는역할을하는프로그램 OS Kernel OS 의핵심프로그램 Root File System Kernel 에서사용할 File System 임베디드리눅스에서는 ram disk 를많이사용 추가구성요소 User File System Root file system 에포함되지않은 util 이나 data file 등을위해추가적으로사용할 file system 임베디드리눅스에서는 flash memory 에설치된 file system 사용 JFFS2 (Journaling Flash File System, version 2) Kernel 다음과같은운영체제의핵심기능을수행하는프로그램 Process management Memory management Device management File System Management Network management 운영체제 API (Application Programming Interface) 등 Kernel Image Kernel을시스템의저장공간을최소한으로사용하기위한목적으로압축한상태로저장함. boot loader에의해압축이해제되어 으로 load 된후에 kernel이실행됨 3 4
root file system RAM disk Root File System root 디렉토리 (/) 로마운트되는파일시스템으로리눅스가동작하기위해기본적으로필요한프로그램및설정파일을가지고있다. Kernel 에서초기화작업후임시로 RAM disk 를 Root File System 으로마운트하여필요한초기작업을수행하고그다음에 disk 에있는실제 root file system 을마운트함 Embedded System 은대부분크기가작아야하므로 hard disk 를가지고있지않기때문에 Root File system 으로 RAM disk 를사용함 Ramdisk RAM disk: RAM을 disk처럼사용하는것 Hard disk 나 floppy 등 Kernel이사용해야하는 File System이없는경우 RAM을이러한용도로사용할수있다. 기본적으로필요한파일들을저장한 ramdisk를먼저만들고이를압축하여 Flash Memory에저장한다. 부팅할때마다 RAM에서 ramdisk의압축을풀어서 에 Load한후 ramdisk를사용한다. 수행중인작업내용을저장할수없다. 실행파일이나 static data 를미리저장해놓음 Embedded System 의경우 Root File System 을구성하기위해 ramdisk 를많이사용한다. 5 6 User File System JFFS2 User File System Root file system 에포함되지않은 utility나 data file등을위해추가적으로사용할 file system 필수요소는아니지만 target board를보다효율적으로구성하기위해서필요하다. JFFS2 Journalling Flash File System (version 2) Red Hat에서개발한 flash file system으로 linux kernel 2.4에서지원 전원이꺼지더라고지워지지않고남아있어야하는설정파일이나, ramdisk에포함되지않은프로그램등을저장하기위해사용 Embedded System 에서는 Flash File System 으로제작 Ramdisk 와달리 Flash Memory 에직접 file system 을구현한것 Flash Memory 에바로 read/write hard disk 와동일하게사용 전원이꺼진후에도작업내용이 Flash Memory 에남아있다. Flash memory 는기록하는데에한계가있으므로빈번하게기록과삭제가일어나면짧은시간에고장날수있다 JFFS2 특징 JFFS2는지운섹터에플래시쓰기를할수있다 JFFS와달리플래시메모리를한사이클에걸쳐쓰기전에도 Garbage Collection을동적으로수행할수있다 완벽하게쓰기전에파일을지우는일이없으므로항상성을유지한다 닳기균등화작업을통해플래시수명을연장시킨다 불량섹터를기록해남은정상섹터만운영이가능하게만든다 파일시스템내부에서사용자개입없이파일을동적으로압축할수있다 7 8
Flash Memory & memory map Kernel Booting 과정 01ff ffff FLASH ROM (32M) a7ff ffff (128M) 0048 0000 0028 0000 0008 0000 0004 0000 0000 0000 JFFS2 parameter BLOB mtd_partition 27.5 Mbytes 2 Mbytes 2 Mbytes 256 Kbytes 256 Kbytes a300 0000 a070 0000 a040 0400 a030 0000 a000 8000 JFFS2 BLOB main() BLOB down image Kernel 이미지적재 Root File System 마운트 init process 실행 (/sbin/init) Login 프롬프트출력 시스템초기화 네트워크설정 호스트이름설정 Device 구동 다른 file system mount ETC 파일시스템점검 가상콘솔접속관리 ETC. 9 10 리눅스운영체제구조 리눅스커널소스구조 process1 process2 process3 processn User Space Filesystem Manager Ext2fs proc xiafs nfs msdos ntfs Buffer Cache System Call Interface Memory Manager Paging/Segmentation Process Manager Task Management Scheduler, Signaling, IPC Kernel Space Device Manager block character Console KBD SCSI CD-ROM PCI ethernet Hardware Interface Network Manager socket Ipv6 IrDA Bluetooth dev1 dev2 dev3 dev4 devn (Source : Linux Kernel Internals) 11 12
커널소스디렉토리설명 (1) arch/ CPU 종속적인부분, 각처리기마다하위디렉토리로구성됨 (arch/arm, arch/i386, arch/alpha ) arch/arm/boot/ 부트스트랩핑코드 arch/arm/kernel/ 하드웨어종속적인 (hardware dependent) 커널관리루틴 트랩, 인터럽트처리루틴 문맥교환루틴 장치구성, 초기화루틴 arch/arm/mm/ 하드웨어종속적인메모리관리루틴 init/ 하드웨어독립적인커널초기화루틴 (start_kernel) 태스크 0 (init_task or task[0]) 생성 태스크 1, 2, 3 등데몬프로세스생성 커널소스디렉토리설명 (2) kernel/ 리눅스커널의가장중심적인디렉토리 (central section of the kernel) 하드웨어독립적인커널관리루틴 ( 하드웨어종속적인커널관리루틴은 arch/arm/kernel 디렉토리에존재 ) fork, exit 등태스크관련시스템호출처리루틴 스케줄러 (scheduler) 루틴 시그널처리 (signal handling)/ 시간관리 (time management) 루틴 mm/ 하드웨어독립적인메모리관리루틴 ( 하드웨어종속적인메모리관리루 틴은 arch/arm/mm 디렉토리에존재 ) 가상메모리관리, 페이징 (paging), 스와핑 (swapping) fs/ 가상파일시스템 (virtual file system ) 관리루틴 open, read 등태스크관련시스템호출처리루틴 특정파일시스템관리루틴은하위디렉토리에존재 (ext2, ext3, ramfs, minix, jffs2, proc, nfs, msdos, coda,.. ) 13 14 커널소스디렉토리설명 (3) 커널소스디렉토리설명 (4) drivers/ 개개의장치를제어하기위한장치드라이버루틴 디바이스드라이버는크게문자 / 블록 / 네트워크드라이버로구분 drivers/block/ : 블록장치드라이버. 예를들어 IDE 디스크 (hd) drivers/char/ : 문자장치드라이버. serial ports, tty, modem,..) drivers/net : 네트웍장치드라이버. 예를들어 3C509,... drivers/pci/ : PCI bus 제어 drivers/sound/ : sound card 드라이버 drivers/cdrom/ : CD-ROM 드라이버 drivers/scsi/ : SCSI 인터페이스관리 ipc/ 프로세스간통신을지원하기위한루틴 세마포어 (semaphores), 공유메모리 (shared memory), 메시지큐 (message queues) net/ TCP/IP, ARP 등네트웍통신프로토콜 ( 네트웍장치드라이버는 drivers/net에존재 ) 소켓인터페이스 include/ 커널헤더 하드웨어독립적인헤더 : include/linux/ 하드웨어종속적인헤더 : include/asm-***/ ( 예를들어 ARM CPU 종속적인헤더는 include/asm-arm/ 디렉토리에존재 ) modules/ 커널모듈루틴 모듈은 insmod(modprobe), rmmod 등의명령으로동적적재 / 제거가능 lib/ 커널라이브러리루틴 doc/ or Documentation/ 커널문서디렉토리. 15 16
리눅스커널설치과정 커널소스생성 Linux Kernel Root File System 커널소스와패치파일구함 커널소스설치 # tar xvfj linux-2.4.19.tar.bz2 # cd linux-2.4.19 패치적용 # patch p1 <../patch-2.4.19-rmk4 ; ARM 패치 # patch p1 <../diff.2.4.19-rmk4-pxa1 ; XScale 패치 # zcat../diff.2.4.19-rmk4-pxa1-huins.gz patch p1 ; Huins 패치 심볼릭링크디렉토리생성 17 18 커널이미지생성 커널이미지설치 패치적용커널소스설치 # tar xvfj linux-2.4.19-pxa255_pro.tar.bz2 # cd linux-2.4.19-pxa255_pro 압축커널이미지를 /tftpboot 로복사 # cp./arch/arm/boot/ /tftpboot 압축커널이미지 target 시스템에설치 커널컴파일 # make menuconfig ; kernel configuration # make dep # make clean ; 기존의 object 파일삭제 # make ; 압축커널이미지파일 생성 blob> tftp kernel blob> flash kernel blob> boot ; download: host ; fusing: Flash ; boot kernel 19 20
RAM disk 설치과정 RAM disk 파일생성 0 으로채워진 ramdisk 파일생성 # dd if=/dev/zero of=ramdisk bs=1024 count=8192 ; 8Kx1KB/block = 8MB Linux Kernel Root FileSystem ramdisk 파일에 file system 생성 # mke2fs ramdisk ; ext2 file system 생성 ramdisk file system을 mount # mkdir ramdisk_point ; mount할디렉토리생성 # mount t ext2 o loop ramdisk ramdisk_point ; mount ramdisk를 mount한곳에필요한파일복사 기본적으로필요한파일은 huins에서제공한 의압축을풀고 mount하여얻을수있다. 필요한파일을이디렉토리에추가한다. 21 22 RAM disk 파일설치 User file system ramdisk를압축 # umount./ramdisk_point ; mount 해제 # gzip -9 ramdisk ; 높은압축률로압축, 생성 ramdisk 의압축이미지를 /tftpboot 로복사. Linux Kernel Root File System % cp /tftpboot ramdisk 압축이미지를 target 시스템에설치 blob> tftp ramdisk ; download: host blob> flash ramdisk ; fusing: Flash jff2.img 23 24
Memory Technology Devices (MTD) JFFS2 파일시스템생성 Memory Technology Devices (MTD) 메모리 ( 특히플래시메모리 ) 의일부영역을파일시스템으로사용하기위한기술 이를위해서 JFFS2 format의파일시스템이미지를만들어서플래시메모리의정의된영역에복사함 mkfs.jffs2 프로그램설치 /sbin 디렉토리에설치 jffs2 파일시스템용 root 디렉토리생성 # mkdir jffs2_root 필요한파일들을 jff2_root 디렉토리아래에복사 ( 파일추가 ) jff2 파일시스템생성 # mkdir jffs2_root #./mkfs.jffs2 r jffs2_root -o jffs2.img e 0x40000 p 0x1b80000 ( -p: pad, -e: sector size, -o: output, -r: root directory) 압축하지않음 25 26 JFFS2 파일시스템설치 jffs2 파일시스템의압축이미지를 /tftpboot 로복사. % cp jffs2.img /tftpboot ramdisk 압축이미지를 target 시스템에설치 blob> tftp jffs2.img usr ; download: host blob> flash usr ; fusing: Flash blob> boot 27