Embedded System Porting (2)

Slides:



Advertisements
Similar presentations
안양대학교 전기전자공학과 서 삼 준 Kernel Image Generation.
Advertisements

1/15 16 기 장영일 Ext File System. 2/15 처음에 Minix 가 사용되었다 ( 제약사항 ) 최대로 저장할 수 있는 파일의 크기 – 64M : 16bit 정수로 블록 주소 지정 -> 1024( 블록 기본 사이즈 ) * (2^16) = 64M.
2013 년 2 학기 임베디드 프로그래밍. 권장사양  HOST PC 권장사항  리눅스 배포판이 설치된 PC - 권장 배포판 : Asianux open edition3 ( 라곤 하지만 Ubuntu, Fedora, CentOS 등 다양한 리눅스 프랫폼이 가능 )  PC.
키보드 보안 순천향대학교 정보보호학과 임강빈 교수.
Managing Filesystems, Swap Space, and Devices
1. 발명의 명칭 SSD-ODD 결합된 장치에서 Optical Disc의 Defect Management방법 2. 발명의 분야
Linux Debugging issues
Root File System 충북대학교 지능로봇연구실.
개발 환경 설치 Embedded System Software
EZ Board-M In-Ho, Roh Real Time System Lab.
임베디드 시스템 개발 환경 (1) Lecture #3.
임베디드 시스템 개론 8. 임베디드 시스템 개발 환경 8주차 강의 자료 Embedded System Lab.
임베디드 시스템 개발을 위한 리눅스 환경설정.
컴퓨터 네트워크 실습.
Redhat Linux 설치 과정.
Kernel Image Generation
Windows CE 시스템 개발 환경 구축.
제6장 FUSING.
Cross Compiler를이용한 커널 컴파일 및 포팅
PXA270 개발환경 설정 Ubuntu 실습용.
개발 환경 개발 환경 개요 PXA270과 타겟 시스템 툴체인 환경 구축 JTAG 유틸리티 미니컴 Make 유틸리티
크로스 컴파일 환경 구축.
Kernel Porting Lecture #7.
제4장 Cross Compiler 설치.
Minicom,tftp,nfs설정,vnc설정
FUSING.
제8장 커널 & 파일 시스템 분석.
Tftp, nfs, samba 실습 임베디드 시스템 I.
Linux를 이용한 Embedded 장비 개발
임베디드 리눅스 시스템의 기본 개념 강의 목표 내용 임베디드 리눅스 시스템의 기본 개념과 주제 제시 1. 임베디드 시스템
목차 커널의 개념 및 기능 커널 포팅 램디스크.
2. Linux Installation Target Embedded System은 리눅스 환경을 사용한다. 이 장에서는 리눅스 설치부터, 각 설정의 의미들에 대해 이야기 한다.
Development Environment of Embedded System : part 1
WinCE Bootloader Porting
MicroC/OS-II Lab. 경희대학교 컴퓨터공학과 조 진 성.
임베디드 리눅스 설치 및 동작 Lecture #5.
컴퓨터 구조.
PLC를 이용한 제어로직에 관한 연구 김 재 은.
컴퓨터 네트워크 실습.
임베디드 시스템 개론 3주차 Embedded System..
UNIT 02 Microprocessor 로봇 SW 교육원 조용수.
8. Porting.
Root Filesystem Porting
부트 로더 (blob pre2 중심) Lecture #8.
임베디드 소프트웨어 동향. 임베디드 소프트웨어 동향 임베디드 S/W 시장분류 솔루션 측면 시스템 측면 운영체제 개발도구 설계도구 테스트도구 유선통신 무선통신 정보가전 자동차제어 산업자동화 사무자동화 군사/항공우주 의료장비 솔루션 공급 업체 임베디드 S/W시장 임베디드.
개발 환경.
Root Filesystem Porting
Geek-OS Project 정영진
Host PC & Target Board 환경설정 Embedded Linux Image 올리기
임베디드 소프트웨어 설계.
Boot Loader.
Computer System Architecture
Cross Compiler를이용한 커널 컴파일 및 포팅
홈 네트워크 시뮬레이션 정 찬 번 석 성 환.
문자 디바이스 드라이버 임베디드 시스템.
제10장 파일 시스템 인터페이스(File System Interface)
Design of Flash-Based DBMS: An In-Page Logging Approach
SYSMAC GATEWAY 간이 매뉴얼.
Boot PROM.
Swap 추가, fsck.
Linux 9.X 기초에서 활용까지 Chapter 03 리눅스 설치.
JFS operation HP Korea / Operations JFS operation.
UNIT 21 Flash Memory Controller 로봇 SW 교육원 조용수.
Chapter 12 Memory Organization
Kernel, Ramdisk, JFFS2 Porting
8. 리눅스의 내부 군자삼락 [君子三樂] 청출어람이청어람 [ 靑出於藍而靑於藍 ] Why Linux ?
아두이노 프로그래밍 Lecture #
WinCE Bootloader Porting
임베디드 리눅스 설치 및 동작 Lecture #5.
Lecture 7 7-Segment LED controller using u-controller
Presentation transcript:

Embedded System Porting (2) Lecture #5

목 차 Overview Bootloader Kernel Ramdisk – Root File System 목 차 Overview Bootloader Kernel Ramdisk – Root File System JFFS2 – User File System Memory Map 수정

Ramdisk – Root File System

Ramdisk (1) Target System HOST System JTAG 2. Download JTAG Interface Serial Interface or Ethernet Interface Boot Loader FLASH Memory Linux Kernel Root File System User File system SDRAM HOST System 3.Fusing 1.Fusing 2. Download JTAG Target System

Ramdisk (2) Ramdisk 사용 목적 주기억장치인 RAM의 일부를 보조기억장치인 디스크처럼 사용 Ramdisk에 root file system을 설치 Root file system 구성 Embedded linux kernel이 부팅한 후에 리눅스 시스템을 동작시키기 위해 필요로 하는 각종 유틸리티 프로그램 시스템 설정 파일 각종 유틸리티 프로그램 동작에 필요한 동적 라이브러리 등 /bin, /sbin, /lib, /include, /usr, /var, /tmp 등으로 구성

Ramdisk (3) Ramdisk 사용 목적 Root file system에 대한 요구 사항 시스템 유틸리티 프로그램이나 라이브러리에 대한 빠른 접근 속도 한번 작성 후에 수정이 거의 필요 없다  Embedded System 환경에서는 Ramdisk에 Root file system을 설치  메모리 낭비 및 휘발성 특성에 의해 전원이 꺼지면 수정된 데이터도 손실

Ramdisk (4) Ramdisk 제작 순서 HUINS에서 제공한 CD에서 ramdisk.gz를 임의의 디렉토리에 복사한다. Example에서는 /usr/local/pxa255 디렉토리를 기준으로 한다. Step 1: 압축 해제한다. Step 2: ramdisk를 마운트할 디렉토리 생성한다. Step 3: ramdisk 마운트한다. Step 4: ramdisk를 마운트한 디렉토리에 추가하고자 하는 파일을 복사 (예를 들면, 전에 만든 hello 프로그램 추가) 후 다시 압축한다.

Ramdisk (5) Ramdisk 제작 순서 ramdisk의 내용이 pc의 리눅스 디렉토리 구조와 동일함을 볼 수 있다. 여기에 디바이스 드라이버나 응용프로그램 등을 추가로 올리면 stand alone으로 동작하는 완전한 embedded 시스템을 구축할 수 있다.

Ramdisk (6) RAMDISK 설치하기 먼저 수정한 ramdisk 이미지를 /tftpboot 로 복사. % cp ramdisk.gz /tftpboot BLOB 으로 부팅 minicom을 실행 하고 target board에 전원을 인가한다. BLOB command mode로 target system booting Blob command mode로 부팅하기 위해서는 blob이 kernel로 제어를 넘기기 전에 임의의 키를 입력하여야 한다.

Ramdisk (7) RAMDISK 설치하기 (계속) Tftp를 통한 Download ramdisk 는 sdram의 0xa0700000 에 download 되도록 내부적으로 지정되어있다.

Ramdisk (8) RAMDISK 설치하기 (계속) Flash Memory Fusing ramdisk는 flash memory의 0x00280000번지부터 쓰도록 지정되어있다.

JFFS2 – User File System

jffs2 file system (1) Target System HOST System JTAG 2. Download JTAG Interface Serial Interface or Ethernet Interface Boot Loader FLASH Memory Linux Kernel Root File System User File system SDRAM HOST System 3.Fusing 1.Fusing 2. Download JTAG Target System

jffs2 file system (2) JFFS2(Journaling Flash File System-2) file system NOR형 flash memory를 사용하기 위한 linux file system 주로 flash memory를 user file system으로 사용하기 위해 적용 Embedded system에서 flash memory 일부를 부팅에 필요한 이미지를 저장하고, 나머지 영역은 사용자 데이터를 저장하기 위한 영역으로 사용 Embedded system에서 동작하는 응용 프로그램이나 응용 프로그램이 생성하는 데이터 등을 수시로 저장 전원이 꺼져도 저장된 내용을 보전

jffs2 file system (3) mkfs.jffs2 설치 Host에 설치 되어있나 확인하고 되어있지 않으면 설치

jffs2 file system (4) mkfs.jffs2 설치 (계속) mtd-snapshot 파일을 download ftp://ftp.uk.linux.org/pub/people/dwmw2/mtd/cvs 예제에서는 /usr/local/pxa255에 복사하였다. 압축 해제 /usr/local/pxa255로 이동하여 압축을 푼다.

jffs2 file system (5) mkfs.jffs2 설치 (계속) 컴파일 생성된 디렉토리 안에 util 디렉토리로 들어가서 컴파일 한다.

jffs2 file system (6) mkfs.jffs2 설치 (계속) mkfs.jffs2 실행파일 확인

jffs2 file system (7) mkfs.jffs2 설치 (계속) 생성된 mkfs.jffs2실행 파일을 /sbin에 복사.

jffs2 file system (8) JFFS2 file system 이미지 생성 Directory 생성 예제에서는 /usr/local/pxa255/jffs2 로 제작.

jffs2 file system (9) JFFS2 file system 이미지 생성 (계속) 필요한 File 복사 Flash memory에서 27 M + 512 K를 사용하므로 그 이하로 복사 예제에서는 test를 위해 디렉토리에 welcome.txt 를 생성하였다.

jffs2 file system (10) JFFS2 file system 이미지 생성 (계속) mkfs.jffs2 mkfs.jffs2 프로그램을 사용하여 jffs2 디렉토리를 jffs2 file system image로 만들어 준다. mkfs.jffs2의 옵션은 다음과 같은 기능을 한다. -r: jffs2 file system으로 만들 원본 디렉토리를 지정한다. -o: 출력될 jffs2 file system 이미지의 이름을 지정한다. -e: erase block( flash memory에 erase명령을 줄때 한번에 지울 block 의 크기, hardware에 의존적이다) 의 size를 지정한다. 0x40000  256K(pxa255_pro 보드에서 사용한 inter 28F128 Flash Memory의 erase block size 이다.) -p: 생성할 jffs2 file system의 size를 지정한다.byte 단위. 0x1b80000  27M + 512K ( usr file system으로 사용할 flash memory의 크기.)

jffs2 file system (11) JFFS2 file system 설치 생성한 jffs2_image를 /tftpboot 로 복사 % cp /usr/local/pxa255/jffs2.img /tftpboot/ BLOB으로 booting minicom을 실행 한다. blob command mode로 target system booting

jffs2 file system (12) JFFS2 file system 설치 (계속) Tftp를 통해 Download User file system은 sdram의 0xa3000000 에 download 되도록 내부적으로 지정되어있다.

jffs2 file system (13) JFFS2 file system 설치 (계속) Flash Memory Fusing User file system은 flash memory의 0x00480000번지부터 쓰도록 지정되어있다.

jffs2 file system (14) JFFS2 file system 설치 (계속) Booting linux kernel Skip된 부분은 이미 flash memory에이미 같은 값이 씌여져 있기 때문에 넘어간 것이다.

jffs2 file system (15) JFFS2 file system 설치 (계속) Linux login

jffs2 file system (16) JFFS2 file system 설치 (계속) welcome.txt 문서 확인

Memory Map 수정

Memory Map 수정 (1) 0xa7,fff,fff SDRAM (128M) FLASH ROM (32M) | JFFS2 0xa3,000,000 ramdisk.gz 0xa0,700,000 BLOB main() 0xa0,400,400 BLOB down image 0xa0,300,000 zImage 0xa0,008,000 0x00,000,000 0x01,fff,fff 0x00,480,000 0x00,280,000 0x00,080,000 0x00,040,000 0x00,000,000 JFFS2 27.5 Mbytes ramdisk.gz 2 Mbytes zImage parameter 256 Kbytes BLOB 256 kbytes

Memory Map 수정 (2) 목적 현재 flash memory는 다음과 같이 구성 되어있다고 가정한다. Blob: 256 Kbytes Param Block: 256 Kbytes Kernel: 2 Mbytes Ramdisk: 2 Mbytes User file system: 27 Mbyte + 512 Kbytes 개발을 하다 보면 kernel, ramdisk 그리고 user file system 등에서 필요한 저장 공간이 현재 지정되어있는 size보다 많이 필요한 경우가 발생할 수 있다.  flash memory의 각 프로그램에 할당된 size를 조정하여 필요 조건을 충족 시킨다.

Memory Map 수정 (3) 필요한 작업 다음의 2가지 파일을 변경해 주어야 한다. BLOB source code의 pxa255_pro.h “blob 소스코드 디렉토리 ”/include/blob/arch/pxa255_pro.h Kernel source code의 pxa255_pro.c “kernel 소스코드 디렉토리 ”/drivers/mtd/maps/pxa255_pro.c Ramdisk 크기를 바꾼 경우에는 다음 작업도 수행해야 한다. Kernel source code 디렉토리에서 make menuconfig block devices  Default Ram disk size 수정

Memory Map 수정 (4) [BLOB]/include/blob/arch/pxa255_pro.h 수정 /* and where do they live in flash */ #define BLOB_FLASH_BASE (0x00000000) #define BLOB_FLASH_LEN (256 * 1024) #define PARAM_FLASH_BASE (BLOB_FLASH_BASE + BLOB_FLASH_LEN) #define PARAM_FLASH_LEN (256 * 1024) #define KERNEL_FLASH_BASE (PARAM_FLASH_BASE + PARAM_FLASH_LEN) #define KERNEL_FLASH_LEN (1024 * 1024 * 2) #define RAMDISK_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) #define RAMDISK_FLASH_LEN (2 * 1024 * 1024) #define ROOT_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) #define ROOT_FLASH_LEN (2 * 1024 * 1024) #define USR_FLASH_BASE (RAMDISK_FLASH_BASE + RAMDISK_FLASH_LEN) #define USR_FLASH_LEN ((512 * 1024) + ( 27 * 1024 * 1024 )) … /* the size (in kbytes) to which the compressed ramdisk expands */ #define RAMDISK_SIZE (8 * 1024) #endif 위 값들은 blob에서 “flash kernel” 과 같은 명령을 주었을 때에 image를 저장할 flash memory의 시작 주소와 크기를 표시한것이다. BLOB_FLASH_BASE (0x00000000) BLOB_FLASH_LEN (256 * 1024) flash blob 명령을 주면 sdram 0xa03000000 의 내용을 flash memory 0x00000000 에 256 Kbytes복사하도록 정의한 것이다. sdram의 주소 0xa03000000도 sdram을 위한 memory map으로 pxa255_pro.h에 매크로로 정의 되어 있다. PARAM_FLASH_BASE (BLOB_FLASH_BASE + BLOB_FLASH_LEN) PARAM_FLASH_LEN (256 * 1024) flash param 명령을 주면 sdram 0xa0310000 에서 flash memory의 blob 다음 block에 256 Kbytes를 복사하도록 정의한 것이다. Blob이 256 Kbyte였으므로 0x00040000 부터 parameter block이 기록될 것이다. Parameter block는 7장 blob analysis에서 간단히 다룰 것이다. KERNEL_FLASH_BASE (PARAM_FLASH_BASE + PARAM_FLASH_LEN) KERNEL_FLASH_LEN (1024 * 1024 * 2) flash kernel 명령을 주면 sdram 0xa0008000 에서 flash memory의 parameter block 다음 block에 2 Mbytes를 복사하도록 정의한 것이다. Parameter 가 0x00040000에서 시작해 256 Kbyte였으므로 0x00080000 부터 kernel이 기록될 것이다. RAMDISK_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) RAMDISK_FLASH_LEN (2 * 1024 * 1024) flash ramdisk 명령을 주면 sdram 0xa0700000 에서 flash memory의 kernel 다음 block에 2 Mbytes를 복사하도록 정의한 것이다. Kernel이 2 Mbyte였으므로 0x00280000 부터 ramdisk가 기록될 것이다. ROOT_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) ROOT_FLASH_LEN (2 * 1024 * 1024) flash root명령을 주면 sdram 0xa2000000 에서 flash memory의 kernel 다음 block에 2 Mbytes를 복사하도록 정의한 것이다. 현재 root file system으로 ramdisk를 사용하므로 flash memory 주소는 ramdisk와 같게 정의되어있다. USR_FLASH_BASE (RAMDISK_FLASH_BASE + RAMDISK_FLASH_LEN) USR_FLASH_LEN ((512 * 1024) + ( 27 * 1024 * 1024 )) flash usr명령을 주면 sdram 0xa3000000 에서 flash memory에 ramdisk(또는 root) 다음 block에 27 Mbytes + 512 Kbytes를 복사하도록 정의한 것이다. ramdisk가 2 Mbyte였으므로 0x00480000 부터 parameter block이 기록될 것이다. 위의 값을 원하는 size로 변경시켜 주면 되는데, 주의할 것은 총 사용 메모리 양이 설치되어있는 flash memory 양을 넘지 않아야 한다는 것이다. RAMDISK_SIZE (8 * 1024) Ramdisk 의 압축이 풀렸을 때의 size를 정의한 것이다. 나중에 kernel로 부팅할때 argument로 넘겨줄 때 사용한다.

Memory Map 수정 (5) [kernel]/drivers/mtd/maps/pxa255_pro.c 수정 static struct mtd_partition pxa255_pro_partitions[] = { { name: "Bootloader", size: 0x00040000, offset: 0, mask_flags: MTD_WRITEABLE /* force read-only */ },{ name: "param", size: 0x00040000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE /* force read-only */ name: "Kernel", size: 0x00200000, name: "ramdisk", size: 0x00200000, name: "Filesystem", size: MTDPART_SIZ_FULL, offset: MTDPART_OFS_APPEND } }; Kernel에서 flash memory의 partion에 대한 정보를 담아두는 구조체이다. (mtd는 memory techonology device의 약자로 flash등의 memory device에 file system을 구현하기 위해 kernel에서 지원하는 subsystem의 이름이다.) name partiton 의 이름 size partition 의 size MTDPART_OFS_FULL (0) //[kernel 디렉토리]/include/mtd/partitions.h 에 정의되어있다. Flash memory의 남은 모든 공간 할당 offset: 어디에 부터 사용할 것인지를 결정하는 것이다. [kernel 디렉토리]/include/mtd/partitions.h 에 정의되어있다. MTDPART_OFS_NXTBLK (-2) //다음 BLOCK 부터 기록 MTDPART_OFS_APPEND (-1) //이어서 기록 mask_flags 읽기, 쓰기, 지우기 모두를 허용할 것인지 일부를 제한할 것인지 결정하는 flag [kernel 디렉토리]/include/mtd/mtd.h 에 정의되어있다. #define MTD_CLEAR_BITS 1 // Bits can be cleared (flash) #define MTD_SET_BITS 2 // Bits can be set #define MTD_ERASEABLE 4 // Has an erase function #define MTD_WRITEB_WRITEABLE 8 // Direct IO is possible #define MTD_VOLATILE 16 // Set for RAMs #define MTD_XIP 32 // eXecute-In-Place possible #define MTD_OOB 64 // Out-of-band data (NAND flash) #define MTD_ECC 128 // Device capable of automatic ECC // Some common devices / combinations of capabilities #define MTD_CAP_ROM 0 #define MTD_CAP_RAM (MTD_CLEAR_BITS|MTD_SET_BITS|MTD_WRITEB_WRITEABLE) #define MTD_CAP_NORFLASH (MTD_CLEAR_BITS|MTD_ERASEABLE) #define MTD_CAP_NANDFLASH (MTD_CLEAR_BITS|MTD_ERASEABLE|MTD_OOB) #define MTD_WRITEABLE (MTD_CLEAR_BITS|MTD_SET_BITS) MTD_WRITEABLE /* force read-only */  쓰기를 금지하는 것이다. 위 내용에서 size 부분을 blob에서 바꾸어 준 것과 동일하게 바꾸어 준다.

Memory Map 수정 (6) make menuconfig % make menuconfig 옵션 수정 block device 메뉴에 가서 enter Default Ram disk size 에서 변경한 ramdisk의 size를 적어 준다.

Memory Map 수정 (7) 목표 Ramdisk의 압축이 풀렸을 때 size를 12M bytes로, 압축 되었을 때에 2M bytes + 512K bytes가 되도록 memory map을 수정한다. 단계 Step 1: Ramdisk image 재작성 기존의 ramdisk image mount 새로운 ramdisk image 제작 새로운 ramdisk image mount 기본의 ramdisk 내용을 새로운 ramdisk로 복사 추가할 파일을 새로운 ramdisk로 복사

Memory Map 수정 (8) 단계 (계속) Step 2: BLOB source code 수정/컴파일/Download pxa255_pro.h 수정 Step 3: Kernel source code 수정/컴파일/Download pxa255_pro.c 수정 Kernel option ramdisk size 수정

Memory Map 수정 (9) Ramdisk image 재작성 기존의 ramdisk mount (/usr/local/pxa255/ramdisk.gz) Mount에서 –o loop 옵션은 loop back device를 마운트 할 때 사용하는 옵션이다. Loop back device란 file을 하나의 장치처럼 사용할 때 이를 지원해 주는 가상 디바이스이다. 위 슬라이드에서 ramdisk는 파일로서 존재하는 것이기 때문에 이를 마운트 하기 위해서는 –o loop 옵션이 필요하다.

Memory Map 수정 (10) Ramdisk image 재작성 (cont’) 새로운 ramdisk image 제작 dd 명령은 file을 복사하는 명령으로 if 는 input file, of 는 output file이다. /dev/zero는 0으로 된 가상장치이다. 즉 0으로 초기화된 output file을 만드는 것이다. bs는 복사할 block 단위, count는 복사할 block 수이다.

Memory Map 수정 (11) Ramdisk image 재작성 (cont’) 새로운 ramdisk image를 ext2 file system으로 format

Memory Map 수정 (12) Ramdisk image 재작성 (cont’) 새로운 ramdisk image mount 하고 기존 ramdisk의 내용 복사 cp 에서 a 옵션은 원본 파일의 속성, 링크 정보들을 그대로 복사하는 것이다. 예를 들어 a 옵션이 없는 경우 link파일을 복사하면 link 하고 있는 원본 파일을 복사하게 되지만 a 옵션을 주면 link 파일 자체를 복사하게 된다.

Memory Map 수정 (13) Ramdisk image 재작성 (cont’) 새로운 ramdisk image unmount, 압축, image 크기 확인 tftp로 전송하기 위해 /tftpboot로 복사

Memory Map 수정 (14) BLOB source code 수정 pxa255_pro.h를 다음과 같이 수정 /* and where do they live in flash */ #define BLOB_FLASH_BASE (0x00000000) #define BLOB_FLASH_LEN (256 * 1024) #define PARAM_FLASH_BASE (BLOB_FLASH_BASE + BLOB_FLASH_LEN) #define PARAM_FLASH_LEN (256 * 1024) #define KERNEL_FLASH_BASE (PARAM_FLASH_BASE + PARAM_FLASH_LEN) #define KERNEL_FLASH_LEN (1024 * 1024 * 2) #define RAMDISK_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) #define RAMDISK_FLASH_LEN ((512 * 1024) + (2 * 1024 * 1024)) #define ROOT_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) #define ROOT_FLASH_LEN ((512 * 1024) + (2 * 1024 * 1024)) #define USR_FLASH_BASE (RAMDISK_FLASH_BASE + RAMDISK_FLASH_LEN) #define USR_FLASH_LEN (27 * 1024 * 1024) … /* the size (in kbytes) to which the compressed ramdisk expands */ #define RAMDISK_SIZE (12 * 1024) #endif

Target boar에 올릴 kernel source code 디렉토리 Memory Map 수정 (15) BLOB source code 컴파일 예전에 configure를 수행해 Makefile을 만들어 주었으므로 make를 통해 컴파일 한다. configure 를 실행한 적이 없거나 Makefile이 없는 경우 blob source code가 있는 디렉토리에서 다음과 작업 먼저 수행 Target boar에 올릴 kernel source code 디렉토리

Memory Map 수정 (16) BLOB source code 컴파일 (cont’) make

Memory Map 수정 (17) BLOB image를 /tftpboot로 복사 현재 target board에 BLOB이 설치되어 있으므로 tftp로 전송 가능.

Memory Map 수정 (18) Kernel 수정 pxa255_pro.c 를 다음과 같이 수정 { static struct mtd_partition pxa255_pro_partitions[] = { { name: "Bootloader", size: 0x00040000, offset: 0, mask_flags: MTD_WRITEABLE /* force read-only */ },{ name: "param", size: 0x00040000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE /* force read-only */ name: "Kernel", size: 0x00200000, name: "ramdisk", size: 0x00C00000, name: "Filesystem", size: MTDPART_SIZ_FULL, offset: MTDPART_OFS_APPEND } };

Memory Map 수정 (19) Kernel 수정(cont’) make menuconfig 후 Block devices 선택 후 enter

Memory Map 수정 (20) Kernel 수정(cont’) Default Ram disk size 선택 후 enter

Memory Map 수정 (21) Kernel 수정(cont’) Size 기록 후 저장하고 나온다.

Memory Map 수정 (22) Kernel 컴파일 make clean; make dep; make bzImage make zImage와 make bzImage 둘 중 아무거나 사용해도 된다. bzImage는 kernel 이미지가 클 때 사용한다.

Memory Map 수정 (23) Kernel image를 /tftpboot로 복사 BLOB를 통해 tftp로 download할 수 있다.

Memory Map 수정 (24) JFFS2 file system 이미지 수정 Ramdisk 이미지 크기가 커졌기 때문에 JFFS2 file system 이미지 크기를 조정하여야 함 앞에서 살펴본 JFFS2 file system 이미지 생성 절차에 따라 새로운 크기의 이미지를 생성한다 새로이 생성된 JFFS2 file system 이미지를 다운로드하기 위해 /tftpboot 디렉토리에 복사한다

Memory Map 수정 (25) BLOB command mode Target board를 BLOB command mode로 부팅한다.

Memory Map 수정 (26) BLOB download blob을 target board에 download

Memory Map 수정 (27) BLOB fusing blob을 target board의 flash memory에 fusing

Memory Map 수정 (28) Target 재부팅 후 status 확인 Flash memory의 memory 변경 사항이 적용되었는지 확인한다. Ramdisk의 size가 커져서 usr 의 시작 주소가 0x00480000 에서 0x0050000으로 변경되었다.

Memory Map 수정 (29) Kernel download zImage를 target board에 download

Memory Map 수정 (30) Kernel fusing Download 한 zImage를 flash에 fusing

Memory Map 수정 (31) Ramdisk download 새로 만든 ramdisk_big을 target board에 download

Memory Map 수정 (32) Ramdisk fusing Download한 ramdisk_big을 flash에 fusing

Memory Map 수정 (33) Jffs2 download 새로 생성된 jffs2 file system image를 download

Memory Map 수정 (34) Jffs2 fusing Download한 jffs2 file system image를 flash에 fusing

Memory Map 수정 (35) Booting

Memory Map 수정 (36) Ramdisk partition 크기 확인