• 검색 결과가 없습니다.

GettingStarted-with-HBE-EMPOSII

N/A
N/A
Protected

Academic year: 2021

Share "GettingStarted-with-HBE-EMPOSII"

Copied!
200
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Getting Started 1

st

Edition

March 2004

(2)
(3)

Revision History

Date Version Description Revised by

(4)
(5)

Contents

1.

EMPOS II QUICK START ... 1

1.1. 기능 및 활용 방안 ...1 1.2. 패키지 콘텐츠 ...1 1.3. 사용 방법 및 실행 순서 ...2 1.4. TextLcd 프로그램 실행...5 1.5. 7 Segment 프로그램 실행...6 1.6. Led I/O 제어 프로그램 실행...7 1.7. IP 설정 및 DEFAULT GATEWAY 설정 방법 ...8 1.8. WEB SERVER 실행하기...9 1.9. 사전 안전 조치 ...10

2.

개발 환경 설치 ... 13

2.1. 타겟 (레퍼런스) 보드 ...13 2.1.1 EMPOSⅡ 보드 구성...13 2.2.2 호스트 PC와 타겟보드의 연결 ...15 2.2. 호스트 PC...16 2.2.1 minicom...16 2.2.2 bootp...17 2.2.3 tftp ...19 2.2.4 bootp와 tftp 실행 ...19 2.2.5 nfs ...20 2.2.6 크로스 컴파일러 ...21

3.

부트 로더 ... 23

3.1. 부트로더 기능(empos-boot)...23 3.2. 부트로더 출력 ...24 3.3. 부트로더 명령어 ...24

(6)

3.5.3 포팅 ...38 3.6. 부트로더를 이용한 하드웨어 테스트 ...41

4.

커널 ... 43

4.1. 커널 개요 ...43 4.2. 리눅스 커널의 구조 ...44 4.3. 커널 Image 생성 ...45 4.3.1 커널 소스 구하기 ...45 4.3.2 ARM 패치 구하기 ...45 4.3.3 ARM 패치 적용 ...46 4.3.4 Xscale 패치 구하기 ...47 4.3.5 Xscale 패치 적용 ...47 4.3.6 EMPOSⅡ 보드 패치 적용 ...48 4.3.7 커널 컴파일 ...49 4.3.8 커널 포팅 ...50

5.

파일 시스템... 51

5.1. ext2 파일 시스템 ...51 5.2. Ramdisk...52 5.2.1 Ramdisk의 성질...52 5.2.2 Ramdisk의 수정...52 5.2.3 Ramdisk의 생성...53 5.3. JFFS 파일 시스템 ...53 5.3.1 JFFS 유틸리티 생성 ...54 5.3.2 JFFS 이미지 생성...54 5.3.3 JFFS2를 이용한 usr 이미지 생성 ...54

6.

응용 프로그램 작성 ... 55

6.1. 컴파일 방법 ...55 6.1.1 파일 작성 ...55 6.1.2 Makefile 생성...56 6.2. 응용 프로그램에서 I/O 제어 ...59 6.2.1 mmap함수를 이용한 I/O제어 ...60

(7)

7.1. Goahead 웹 서버 포팅 방법 ...63 7.2. 웹에서 EMPOSⅡ I/O 제어 ...65 7.2.1 Web에서 입력 값 전달 방식...65 7.2.2 C언어를 이용한 CGI 프로그래밍...66 7.2.3 Web을 이용한 LED 제어 프로그램 ...68

8.

디바이스 드라이버... 73

8.1. 디바이스 드라이버 프로그램 ...74 8.1.1 기본적인 문자 디바이스 드라이버의 형태 ...74 8.1.2 디바이스 드라이버의 커널 삽입 과정 ...76 8.1.3 디바이스 드라이버 구현 ...76 8.2. EMPOSⅡ에서 디바이스 드라이버 작성 ...79 8.2.1 LED I/O 출력 ...80 8.2.2 Segment Counter ...86 8.2.3 Text LCD 제어...99 8.2.4 버튼 스위치 ...114 8.2.5 GPIO OUTPUT ...122 8.2.6 GPIO INPUT ...128

9.

QT/E ... 135

9.1. Qt/E 특성...135 9.2. Qt/E 개발 환경...135 9.3. 컴파일러 재 설치 ...136 9.3.1 gcc-2.95.3 설치 ...136 9.4. QtX11, Qt Virtual FrameBuffer 설치...136 9.5. Qt/E 설치...138 9.5.1 x86용 Qt/E 설치...138 9.5.2 Qt/E 설치 테스트...138 9.5.3 ARM용 Qt/E 설치 ...139 9.6. tmake 설치 ...141 9.7. Qt 어플리케이션 작성...141

(8)

10.2. ARM용 Qtopia 설치...146 10.3. NFS를 이용한 Qtopia 테스트 ...148 10.4. Qt/E 프로그램을 Qtopia WM에서 실행하기...148

11.

커널 변경 및 EMPOSⅡ추가된 드라이버 내용... 151

11.1. 커널에서 변경된 내용들 ...151 11.2. 파일 추가 내용 ...155

11.3. HBE-EMPOSII Kernel Building...157

11.4. 디바이스 드라이버 테스트 방법 ...159

12.

부록 ... 161

12.1. 부트로더 ...161 12.1.1 부트로더 플로우 ...161 12.1.2 부트로더의 파일의 역할 ...162 12.1.3 주요 파일 설명 ...163 12.2. PCMCIA 무선 랜...186 12.2.1 PCMCIA 모듈 사용 방법 ...186 12.2.2 PCMCIA 모듈 컴파일 방법 ...188

(9)
(10)
(11)

1. EMPOS II Quick Start

HBE-EMPOSⅡ를 빠르게 실행해 볼 수 있도록 도와주기 위한 Getting Started 입니다. 기 타 자세한 설정 방법이나 사용방법은 EMPOS II 임베디드 시스템 가이드를 참조 하세요. .

1.1. 기능 및 활용 방안

1. EMPOS II는 Intel Xscale PXA255 CPU를 장착하여 Xscale의 모든 기능을 접해 볼 수 있도록 설계되었습니다.

2. 32MByte Flash Memory와 128MByte SDRAM 메모리와 SRAM 1MByte로 풍부한 메모리 환경에 응용프로그램을 동작 시킬 수 있습니다.

3. PCMCIA 슬롯1개 CF(Compact Flash) 슬롯1개를 제공하여 다양한 환경의 응용을 실험 할 수 있습니다.

4. 10/100Mbps Ethernet LAN91C111를 Primary와 Secondary로 네트워크 응용프로그램 개발에 활용할 수 있습니다.

5. AC97의 Audio CODEC을 이용하여 음성 및 음악 관련 멀티미디어 프로그램을 운영하 여 볼 수 있습니다.

6. 6.4인치 TFT LCD를 제공하여 다양한 형태의 멀티미디어 환경을 구축하여 볼 수 있습 니다.

7. SD(Secure Digital Memory Card) 또는 Multimedia Card Slot를 제공하여 메모리 모듈관 련 환경을 구축하여 볼 수 있습니다.

8. USB Client/Server(확장모듈) 각 Port 1개, IrDA 트랜시버 1개, 블루투스 UART 1 포트, I2C의 메모리와 I2C Bus 실험용 커넥터, Intel Companion Chip SA-1111칩 확장용 Expansion1 포트 등 다양한 환경 제공으로 폭 넓은 개발 환경을 제공합니다. 9. PS2 Keyboard/Mouse Controller, 4개의 7세그먼트 LED, 비트출력실험용 LED 8개, Push Button 스위치 8개, 20x2 Line 의 TEXT LCD 모듈 1개 등 다양한 주변장치를 제공 하여 임베디드 시스템을 처음 시작하는 사용자에게 쉽게 접근 할 수 있도록 하였습니다.

1.2. 패키지 콘텐츠

EMPOS II 패키지는 다음의 항목들이 모두 포함됩니다. 누락된 항목이 있으면, 당사 대리 점에 연락하십시오. 전원 케이블 (전원 인가용) ……… 1개 프린터 케이블 (Jtag 퓨징용) ……… 1개 Dongle (프린터 케이블과 연결) ……… 1개 serial 케이블 ……… 1개 크로스 LAN 케이블(EMPOS2와 PC 연결용) ……… 1개 다이렉트 LAN 케이블(EMPOS2와 HUB 연결용) ………… 1개 USB 케이블 ……… 1개

(12)

1.3. 사용 방법 및 실행 순서

1. 위 그림 과 같이 EMPOS II 키트 안에 포함된 cable을 그림과 같이 연결한 후 좌측의 전원 스위치를 On합니다. (이때 JTAG 케이블은 연결하지 않습니다.) 2. 하이퍼터미널을 다음과 같이 설정합니다. 비트/초(B) : 115200 데이터비트(D): 8 패리티(P): 없음 정지비트(S): 1 흐름제어(F): 없음

(13)

설정된 콘솔을 통해서 전원 인가 시 다음과 같은 메시지를 볼 수 있습니다.

This is EMPOS_boot version 0.1

This is free software, and undered GNU GPL license [eth0] Primary LAN91C111 is OK.!

Copy kernel from ROM to RAM ....

Copy ramdisk from ROM to RAM ... Autoboot in progress, press any key to stop. 3

* Type 'help' to get a list of commands * EMPOS #

empos_boot가 실행되면서 “Autoboot in progress, press any key to stop. 3” 가 디스플레 이 됩니다. 이때 3초 안에 키보드의 키를 누르시면 empos_boot의 commnad 모드로 들 어가게 되고 “EMPOS # “ 라는 사용자 입력을 받는 프롬프트가 뜨게 됩니다.

(14)

Autoboot in progress, press any key to stop. 1 Starting kernel...

Uncompressing

Linux... .... done, booting the kernel.

Linux version 2.4.19-rmk4-pxa2-empx1 (root@empos.hanback.co.kr) (gcc version 2.9

5.3 20010315 (release)) #1 금 10월 24 09:41:48 KST 2003 CPU: Intel XScale-PXA255 revision 6

Machine: Hanback Electronics EMPOS_X255 Development Platform : : 중략

eth0: SMC91C11xFD(rev:1) at 0xf4000300 IRQ:0 MEMSIZE:8192b NOWAIT:0 ADDR: 00:0b:

a8:03:12:34

Using /lib/modules/2.4.19-rmk4-pxa2-empx1/net/smc91111_sec.o

SMSC LAN91C111 Driver (v2.0), (Linux Kernel 2.4 + Support for Odd Byte) 09/24/01

- by Pramod Bhardwaj (pramod.bhardwaj@smsc.com)

eth1: SMC91C11xFD(rev:1) at 0xf5000300 IRQ:1 MEMSIZE:8192b NOWAIT:0 ADDR: 00:0b:

a8:03:56:78

Using /lib/modules/2.4.19-rmk4-pxa2-empx1/net/p80211.o Starting portmapper: portmap

Starting INET services: inetd Starting PCMCIA services: cardmgr.

COSMO Embedded Toolkit Configuration OK .! EMPOS login:

(15)

4. 리눅스 커널 부팅이 완료 되고 “EMPOS login: “ 이라는 메시지가 출력되면 사용자 아 이디로 “root”를 입력하면 패스워드 없이 바로 사용자 모드로 들어가면서 다음과 같음 메 시지가 출력 됩니다. 이때부터 사용자는 EMPOS II를 리눅스 머신으로 생각하면 됩니다.

1.4. TextLcd 프로그램 실행

앞 절에서는 웹 브라우저로 EMPOSII 보드에 있는 외부 I/O를 제어해보았다. 지금은 텍스 트 콘솔을 통하여 각각의 I/O를 제어하자.

TextLcd 프로그램은 램디스크에 ‘/bin’ 폴더에 textlcd라는 프로그램이 있다. 이것을 실행 시키면 텍스트 Lcd에 글자가 나타나는 것을 볼 수 있다. 실행 방법은 다음과 같다.

[root@EMPOS root]$textlcd "HBE Embedded System" "HBE-EMPOSII"

(16)

1.5. 7 Segment 프로그램 실행

7 Segment 제어 프로그램은 위의 절과 마찬가지로 램디스크의 ‘/bin’ 폴더에 stopwatch 라는 프로그램으로 제어된다. 이름에서 보듯이 7 세그먼트를 이용하여 스톱워치를 만들어 보았다. 실행방법은 아래와 같다. [root@EMPOS root]$ [root@EMPOS root]$stopwatch 7Segment Counter --- r for start the counter

s for stop the counter c for continue the counter q for exit

---

위에서 처럼 콘솔에 메뉴가 나오고 ‘r’, ‘s’, ‘c’, ‘q’를 입력하므로서 스톰워치 처럼 start, stop, continue, exit 등을 설정할 수 있다.

(17)

1.6. Led I/O 제어 프로그램 실행

[root@EMPOS root]$led

8bit LED IO Interface Procedure --- l for left shift

r for right shift q for exit --- [root@EMPOS root]$ 위의 프로그램은 존슨 카운트 로직처럼 led의 비트 값을 쉬프트 하면서 키보드의 값을 읽 어 들여 led의 쉬프트 방향을 바꾸는 프로그램이다. - 위의 led 프로그램이 실행된 모습

(18)

1.7. IP 설정 및 DEFAULT GATEWAY 설정 방법

IP 설정 및 Default Gateway 설정 방법은 리눅스의 설정과 같습니다. - IP 설정 및 제거 eth0 IP 설정 시 [root@EMPOSroot]$ifconfig eth0 192.168.123.165 up 또는

[root@EMPOS root]$ifconfig eth0 192.168.123.165 netmask 255.255.255.0 up eth0 IP 제거 시

[root@EMPOSroot]$ifconfig eth0 down

- 확인

[root@EMPOS root]$ifconfig

eth0 Link encap:Ethernet HWaddr 00:0B:A8:03:12:34

inet addr:192.168.123.165 Bcast:192.168.123.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Base address:0x300

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

- Default Gateway 설정

(19)

1.8. WEB SERVER 실행하기

IP설정이 끝나면 EMPOS II에서 실행 되고있는 Web server 기능을 이용하여 웹 브라우저 를 통해서 EMPOS II의 I/O Device를 제어 할 수 있습니다.

서버 설정이 끝나면 웹 브라우저의 주소란에 IP(http://192.168.123.165)를 적어 웹 서비 스를 확인 할 수 있습니다.

(20)

1.9. 사전 안전 조치

아래에 설명된 사전 안전 초치를 모두 따르면 뜻하지 않은 부상이나 장비 손상을 방지 할 수 있습니다. EMPOS II를 올바르게 사용하려면 사전 안전 조치 사항을 읽고 내용을 완전 히 이해해야 합니다. 내용을 읽은 후에는 편한 장소에 안전하게 보관해서 필요한 경우에 참조하십시오. 본 매뉴얼에는 당사 제품뿐 만 아니라 EMPOS II와 구성될 개인용 컴퓨터 의 일반 조작 시 사전 안전 조치에 대해서도 설명되어 있습니다. 본 Getting Started에 사용된 표시 및 기호의 의미 - 경고 표시 - 기호 =========================== ============================ 금지사항 손상, 처리, 과열시키거나 전원 케이블을 수리하려고 하지 마십시오. 화재 나 감전의 원인이 될 수 있습니다. -장비를 설치할 때는, 벽 사이 나 선반 같은 곳에 말아 넣거나 케이블을 잡아당기지 마십시 오. -전원 케이블 위에 무거운 물체를 놓거나 케이블을 잡아당기지 마십시오. -열원 가까운 곳에 전원 케이블을 놓거나 케이블을 과열시키지 마십시오. 인명 손상이나 부상을 일으킬 수 있는 위험한 상황을 나타냅니다 사소한 부상이나 장비 손상을 일으킬 수 있는 위험한 상황을 나타 냅니다. U이 기호는 경고 및 주의를 나타냅니다. 특별한 경고는 (U)기호 안이나 가 까운 곳에 표시됩니다. ;이 기호는 금지를 나타냅니다.(금지행동). 특별한 금지는(;)기호 안이나 가까운 곳에 표시됩니다. + z이 기호는 꼭 해야 하는 조치를 나타냅니다.(기본조치). 특별한 지시사항은 (z)기호 안이나 가까운 곳에 표시됩니다.

(21)

-전원 케이블이 연결된 상태로 장비를 움직이지 마십시오. -전원 케이블이 손상되면, 대리점에 문의하십시오. 해체금지 전문가가 아니면 HBE-EMnet을 해체하거나 수리하지 마십시오. 화재나 감전의 원인이 될 수 있습니다. 플러그 뽑 기 연기가 발생하거나 이상한 냄새, 소리가 나면, 전원 공급 플러그를 뽑으십 시오. 그런 상태에서 장치를 계속 사용하면, 누전이나 화재, 감전의 원인이 될 수 있습니다. 즉시 대리점에 문의하십시오. 플러그 뽑 기 본 제품을 떨어뜨리거나 심한 충격이 가해지면, 즉시 전원 공급 플러그를 제거 하십시오. 이 상태에서 장치를 계속 사용하면, 누전이나 화재, 감전의 원인이 될 수 있습니다. 즉시 대 리점에 문의하십시오. 플러그 뽑 기 장비에 용액이나 이 물질이 들어가면, 전원 공급 소켓에서 플러그를 뽑으 십시오. 이 상황에서 장치를 계속 사용하면, 누전이나 화재, 감전의 원인이 될 수 있습니다. 즉시 대 리점에 문의하십시오. 물기에 접근 금지 HBE-EMnet을 침실 혹은 수분이 많거나 습도가 높은 곳에서 사용하지 마십 시오. 이 상황에서 장치를 계속 사용하면, 누전이나 화재, 감전의 원인이 될 수 있습니다. 즉시 대 리점에 문의하십시오. 의무사항 장비를 어린이들이 전기 장비나 케이블, 커넥터의 내부를 만질 수 없는 곳 에 설치하십시오. 그렇지 않을 경우 부상을 당할 수 있습니다. =========================== ============================ 전원 케이블이 전원 소켓에 연결되어 있는 상황에서 젖은 손으로 장비를 다

(22)

의무사항 정전기로 인한 부상을 막으려면, 장비를 만지기 전에 먼저 금속성 물체(문 손잡이나 금속 창틀)를 만져서 신체에서 정전기를 방출하십시오. 신체의 정전기는 장비를 손상시키는 원인이 될 수 있습니다. 금지사항 다음과 같은 장소에는 HBE-EMnet을 설치하지 마십시오. 그럴 경우 감전이나 화제의 원인이 되거나 장비에 나쁜 영향을 줄 수 있습니다. -자기장의 영향이 강한 장소(장비 손상의 원인이 될 수 있습니다). -정전기가 있는 장소(장비 손상의 원인이 될 수 있습니다). -진동이 있는 장소(부상이나 장비 손상의 원인이 될 수 있습니다). -경사진 장소(장비가 구르거나 떨어질 수 있으며 부상을 당할 수 있습니다). -직사광선이 있는 장소(장비 손상이나 변형의 원인이 될 수 있습니다). -불에 가깝거나 열의 영향을 받는 장소(장비 손상이나 변형의 원인이 될 수 있습니다). -방전의 위험이 있는 장소(장비 손상의 원인이 될 수 있습니다). -누수의 위험이 있는 장소(장비 손상의 원인이 될 수 있습니다).

(23)

2.

개발

환경

설치

EMPOSⅡ의 개발 환경 설정은 타겟 보드가 되는 본 키트와 리눅스가 설치된 호스트 PC 를 설정해야 한다. 하드웨어의 설치가 선행으로 이루어 지고 호스트 PC의 개발 환경 설 정과 필요한 유틸리티 등을 설치하면 그때부터 EMPOSⅡ를 이용한 임베디드 리눅스의 개 발, 연구를 진행할 수 있다.

2.1. 타겟 (레퍼런스) 보드

리눅스의 포팅 대상이 되는 현 타겟 보드인 EMPOSⅡ의 설정을 위해 본 키트의 구성과 호스트 PC 사이의 연결 방법을 먼저 숙지하여야 한다. 2.1.1 EMPOSⅡ 보드 구성

(24)

1) Touch-screen panel controllers Burr Brown ADS7846

2) Graphic Display

LG Philips LB064v02 TFT LCD panel 6.4” Touch Screen

3) 20 x2 TEXT LCD * 1EA

2 line * 20 Character Text LCD (Back Light) 4) 7-Segment

4Digit 7Segment 제공 5) LED

8개의 LED 제공 6) Puch Button Switch

8개의 비트 입력을 위한 Push Button Switch 제공 7) SD or MMC Slot 1개

Secure Digital memory Card 또는 MultiMediaCard Slot 8) I2C to 24C16 EEPROM

9) Expansion Port

Intel SA-1111 companion chip 확장 및 일반 포트로 확장가능 10) Network Interface 2

10/100M secondary Ethernet controller (LAN91C111) 11) Network Interface 1

10/100M primary Ethernet controller (LAN91C111) 12) USB Interface

USB client port 제공 13) Real Time clock

Epson RTC 4513 Module 14) CPU

Intel Xscale PAX255 (over 400MHz) 15) Reset Switch

시스템 초기화를 위한 입력 버튼 16) VDD Fault Button

17) GPIO Led

GPIO 출력을 테스트 위해 제공 18) Batt Fault Button

19) GPIO Button

GPIO 입력 테스트를 위해 제공 20) Mouse Cntroller

21) PS2 Keyboard Controller 22) Full UART 1 Port

23) Bluetooth UART 1 Port

24) IrDA (infrared) transceiver 1 Port 25) 64 Mbyte SDRAM

26) 32 Mbyte Flash memory 27) Jtag Port

28) Audio CODEC : Cirrus CS4202 29) PCMCIA slot 1개

(25)

2.2.2 호스트 PC와 타겟보드의 연결

타겟 보드와 호스트 PC의 원활한 통신을 위해 보드의 손잡이가 몸 방향에 위치 시킨 후 보드의 여러 커넥터와 해당 케이블을 연결한다.

FFUART port: 모니터링에 사용하는 포트로 시리얼 라인을 연결한다

Jtag port : Jtag을 사용하여 flash Rom에 쓰기가 및 하드웨어 디버깅이 가능하도록 Jtag 케이블을 연결한다.

Primary Ethernet port: Ethernet을 이용하여 고속 전송을 하기 위해 LAN 케이블을 연결한 다. 타겟 보드에 해당 케이블의 연결이 완료 되었으면 각 케이블을 호스트 PC에 다음과 같이 연결 한다. 모니터링에 사용되는 시리얼 케이블은 9핀 시리얼 포트에 연결한다. Jtag케이블은 패러럴 케이블과 연결 후 프린터 포트에 연결한다 Ethernet 케이블이 크로스케이블일 때는 PC의 Ethernet 포트에 연결하고 스트레이트케이 블일 때는 허브에 연결한다.

(26)

2.2. 호스트 PC

호스트 PC란 타겟 보드의 개발에 사용되는 PC로서 필요한 유틸리티와 개발 툴을 설치하 여야 한다. 타겟 보드에 포팅의 대상이 되는 리눅스를 호스트PC에서 사용 할 수 있어야 하므로 주로 호스트 PC에 리눅스를 운영체제로 설치를 하게 된다. 2.2.1 minicom 타겟 보드에서 일어나는 진행 상황을 호스트 PC에서 볼 수 있게 모니터링 할 수 있는 통 신 프로그램으로써 리눅스에서는 minicom을 주로 사용하게 된다. 1) 설치 방법 호스트 PC에 설치한 리눅스에 minicom이 설치가 되어 있지 않을 경우 제공된 CD에서 rpm을 설치 한다. mount /mnt/cdrom cd /mnt/cdrom/Tools/minicom rpm –ivh minicom-2.00.0-6.i386.rpm 2) 환경 설정 방법 rpm이 성공적으로 설치가 완료 되었으면 다음 명령으로 환경 설정을 하게 된다. minicom –s -s 옵션을 주어 minicom을 위와 같이 실행하면 설정 메뉴가 아래와 같이 보여 진다.

출력된 메뉴의 Serial port setup으로 이동한 후 현재 타겟 보드와 통신이 가능한 상태로 설정을 하게 된다.

(27)

z A 항목을 /dev/ttyS0로 바꾼다. z E 항목을 115200 8N1으로 바꾼다 z F, G 항목을 No로 설정한다

환경 설정을 마친 후 Configuration 메뉴에서 저장 후 Exit로 이동하면 minicom 화면이 호스트 PC의 사용중인 터미널에 보여지게 된다. 이때 타겟 보드에 이미 부트로더 등이 Flash에 포팅이 되어 있다면 보드로부터 실행되는 내용이 minicom을 통해 보여질 것이다. 2.2.2 bootp bootp를 설치 함으로써 호스트 pc에서 타겟 보드에 포팅 된 리눅스 시스템에 유용한 IP 주소를 유동적으로 할당할 수 있다. 네트워킹에 기본이 되는 IP를 먼저 할당함으로써 차 후 설명될 tftp가 부트로더에서 사용 가능하게 된다. 1) 설치 방법 사용중인 호스트 PC에 bootp 프로그램이 설치되어 있지 않을 경우 제공된 CD로부터 해 당 rpm을 설치하여야 한다. mount /mnt/cdrom cd /mnt/cdrom/Tools/bootp rpm –ivh bootp-2.4.3-7.i386.rpm

(28)

:sm=255.255.255.0

empos :ht=1:ha=0x000B8A000001:tc=.default

파일의 설정에 따라 해당하는 MAC Address에 IP를 할당할 수 있다. 따라서 ha항목에는 타겟 보드에서 사용하는 MAC 주소를 정확히 기입하여야 한다. (해당 보드의 MAC Address는 박스에 부착되었다) 호스트로 지정된 empos의 실제 IP를 정의 하기 위해 /etc/hosts 파일에 empos에 대한 내용을 추가 한다. - /etc/hosts 192.168.123.200 empos.hanback.co.kr empos /etc/xinetd.d/bootp 파일을 생성하여 서비스를 제공할 bootp 데몬의 기본설정을 하여야 한다. bootp의 설치를 정확히 하였어도 본 파일은 생성 되지 않으므로, 편집기를 이용하 여 아래와 같은 내용이 기록된 파일을 생성하도록 한다. 또한 사용자의 편의를 위해 보드 와 함께 동봉된 CD에 본 파일을 포함 하였으므로 복사 사용해도 된다. - /etc/xinetd.d/bootp service bootps { disable =no

flags =REUSE NAMEINARGS socket_type =dgram protocol =udp wait =yes user =root server =/usr/sbin/bootpd server_args =-s

(29)

2.2.3 tftp 부트로더에서 용량이 큰 데이터를 다운 받기 위해서 사용하는 UDP 전송 데몬으로 본 프 로그램을 설치 함으로써 부트로더에서 Ethernet을 통해 쉽고 빠르게 파일을 호스트 PC에 서 타겟 보드로 전송시킬 수 있다. 1) 설치 방법 제공된 CD로부터 해당 rpm을 다음과 같이 설치한다. mount /mnt/cdrom cd /mnt/cdrom/Tools/tftp rpm -ivh tftp-server-0.29-3.i386.rpm rpm이 성공적으로 설치가 완료되면 bootp와 마찬가지로 설정 파일을 수정한다. - /etc/xinet.d/tftp service tftp { disable =no socket_type =dgram protocol =udp wait =yes user =root server =/usr/sbin/in.tftpd server_args =-s /tftpboot 본 파일을 수정 함으로써 tftp 데몬 실행을 위한 기본 설정이 완료 된다. 2.2.4 bootp와 tftp 실행 호스트 PC의 콘솔 터미널에서 다음과 같이 입력한다.

service xinetd stop service xinetd start

(30)

2.2.5 nfs nfs란 리눅스간 파일을 공유할 수 있는 파일 시스템으로써 본 기능을 이용하여 호스트 PC에서 작업한 내용을 곧바로 타겟보드 상에서 테스트 할 수 있다. 또한 한정된 타겟 보 드상의 메모리(Ramdisk) 공간을 호스트 PC와 연동하여 충분히 확장하여 사용하는 것이 가능하다. 1) 설치 방법 nfs는 보통 리눅스 배포판을 호스트 PC에 설치 시 기본으로 설치가 되며 하나의 설정 파 일을 생성 하여 mount 할 수 있는 디렉토리를 export해주어야 한다. - /etc/exports /nfs_resource 192.168.123.200 (rw, no_root_squash) 여기서 입력된 IP 주소 부분에 타겟 보드에서 할당 받는 IP를 입력함으로써 nfs을 통해 EMPOSⅡ의 특정 디렉토리(/mnt)에 호스트 PC의 /nfs_resource 디렉토리를 마운트 할 수 있다. 파일 수정이 완료 되었으면 nfs데몬을 시작한다. service nfs stop service nfs start 2) nfs 파일 공유 EMPOSⅡ에 리눅스 커널이 정상적으로 부팅이 되었다면 nfs를 이용한 파일 공유를 할 수 있다. 먼저 공유를 원하는 파일을 호스트 PC의 /nfs_resource에 복사한 후 EMPOSⅡ에서 마운트 하게 된다 Host PC cp zImage /nfs_resource Target Board mount -t nfs 192.168.123.187:/nfs_resource /mnt/nfs

192.168.123.187는 Host PC의 IP로써 콘솔에서 ifconfig명령으로 확인할 수 있다. 정상적 으로 nfs가 동작한다면. EMPOSⅡ의 /mnt/nfs 디렉토리에 호스트PC의 /nfs_resource 디 렉토리의 내용이 보여질 것이다.

(31)

2.2.6 크로스 컴파일러 호스트 PC에서 제작된 소스 코드를 실행 환경이 다른 타겟 보드에서 작동하기 위해서는 호스트 PC에 설치된 컴파일러가 아닌 ARM용으로 컴파일을 해주는 컴파일러, 링커, 라이 브러리 등이 필요하다. ARM용 컴파일러를 설치 하기 위해선, 제공된 CD의 압축 파일을 해제하고, PATH 설정 만으로 ARM용 크로스 컴파일러 툴 체인을 설치 할 수 있다. 1) 설치 방법 제공된 CD에서 툴 체인이 압축된 파일을 /usr에 복사 후 압축 해제 한다. mount /mnt/cdrom cd /mnt/cdrom/Tools/toolchain cp cross-tools.tgz /usr cd /usr tar xvfz cross-tools.tgz 압축 해제로 생성된 컴파일러를 어디에서든 사용 가능하도록 다음과 같이 경로를 설정한 다. - ~/.profile (혹은 ~/.bash_profile) … export PATH=/usr/cross-tools/bin:$PATH … 경로 설정 후 다음의 명령어로 호스트 PC에 적용시킨다. source /.profile 또는 source /.bash_profile - 생성된 툴 체인 확인

Tool Name Tool Description

arm-linux-add22line Convert addresses to file and line

arm-linux-ar Create, modify, and extract from

archives

arm-linux-as GNU assembler

arm-linux-c++ C++ compiler

(32)

arm-linux-ld GNU linker

arm-linux-nm List symbols from object files

arm-linux-objcopy Copy and translate object files arm-linux-objdump Display object information arm-linux-ranlib Generate index to archive

arm-linux-readelf Display the contents of ELF format files.

arm-linux-size List section sizes and total size arm-linux-strings List printable strings from files

arm-linux-strip Discard symbols

크로스 컴파일러 설치가 이상 없이 완료되었다면. 셈플 코드를 작성하여 컴파일 해 봄으 로써 동작 여부를 확인 할 수 있다. - hello.c #include <stdio.h> int main(void) { int i; for(i=0;i<5;i++)

printf(“Number : %d Hello World! n”,i);

arm-linux-gcc -o hello hello.c ./hello

bash: ./hello: cannot execute binary file

hello.c 라는 이름으로 임시 파일을 만들어 설치된 크로스 컴파일러로 컴파일 후 생성된 실행 파일을 호스트에서 실행 시 위와 같은 메시지가 출력이 되고 이것은 i386으로 컴파 일이 되지 않아서 나온 문장이다. 본 예제에서는 arm용으로 컴파일이 된 것이고 이것을 알 수 있는 방법은 다음과 같다. arm용 실행파일인지 확인하는 방법은 다음과 같다. file ./hello

hello: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.19, dynamically linked (uses shared libs), not stripped

(33)

3.

부트

로더

타겟 보드의 전원이 들어옴과 동시에 시작이 되어야 하는 부트로더는 일반 PC의 ROM BIOS를 대신하여 여러 하드웨어 설정을 담당하고, 커널의 로딩으로 이어지는 중요한 역할 을 하게 된다. 한번 설정된 하드웨어 설정은 다시 바꾸어 주지 않는 한 커널 로딩 후에도 계속 유효하므로 부트로더 포팅시 주의를 기울여 작성하여야 한다. 본 장에서는 본 보드 에 맞게 포팅 된 EMPOS_boot을 이용하여 부트로더의 기능과 역할 등을 이해함을 목적으 로 한다.

3.1. 부트로더 기능(empos-boot)

z z hardware 초기화 z Memory setting z CPU Clock setting z Serial setting

z MAC address 획득 및 Ethernet port setting z Flash 에서 RAM으로 memory copy z kernel image copy

z ramdisk image copy z 부트로더 자신 copy z Kernel booting z Command mode 제공

(34)

3.2. 부트로더 출력

EMPOSⅡ보드에서 사용되는 EMPOS_boot 부트로더가 보드에 포팅이 되어 있고, 보드와 호스트 PC의 연결이 정확하며, minicom에 이상이 없으면, 보드의 전원 공급과 동시에 minicom 화면에 다음과 같은 메시지가 출력될 것이다.

This is EMPOS_boot version 0.1

This is free software, and undered GNU GPL license Primary LAN91C111 is OK.!

Copy kernel from ROM to RAM ....

Copy ramdisk from ROM to RAM ... Autoboot in progress, press any key to stop. 1

* Type 'help' to get a list of commands * EMPOS #

위에 출력된 메시지의 내용을 통해 다음과 같은 정보를 알 수가 있다. z EMPOS_boot에 관한 간단한 Copyright 정보

z Ethernet을 사용하기 위해 장착된 LAN91C111 Controller의 초기화가 이상 없이 되다 는 내용

z kernel, ramdisk가 Flash에서 RAM 상으로 Copy가 이상 없이 진행되었다는 내용 z Autoboot를 하지 않고 Command mode를 사용하기 위해서는 key를 입력하라는 내용 z help 명령으로 현재 부트로더 에서 사용 가능한 명령어를 확인하라는 내용

3.3. 부트로더 명령어

부트로더에서 제공된 Command 모드에서는 tftp서버를 통한 kernel등을 다운로드 하여 RAM에 적재할 수 있으며 적재된 이미지를 Flash 메모리에 써 넣는 등 많은 사용자 편의 성을 부여한다. EMPOS_boot에서 제공하는 user command는 부트로더가 부팅되는 도중 (Autoboot in progress, press any key to stop..) Enter키를 입력하여 command모드로 들 어간 후 help명령을 입력하면 볼 수가 있다.

help명령을 통한 사용 가능한 명령어는 다음과 같다.

(35)

2. reset : Restart this bootloader at rom 3. bootp : Get IP by bootp

4. setip : Set IP on host and client 5. macwrite : Set MAC address on client 6. tftp : Download images by tftp 7. download : Download images by uuencode 8. read : Read value on a specific address 9. write : Write value on a specific address

10. flash : Write images that are previously downloaded 11. erase : Erase flash area

12. status : Print S/W, H/W and network status

13. help : Print help message for users to operate this program

14. test : Add your code in this function for S/W, H/W test

* Use 'help command' to get help on a specific command *

EMPOS # 해당 항목별 자세한 설명은 다음과 같다. z boot RAM 영역에 Copy된 커널로 점프한다 (커널 부팅) z reset 부트로더를 다시 실행 시킨다. z bootp 호스트 PC에서부터 bootp를 이용하여 호스트 PC로부터 IP주소를 받을 수 있는 명령이다. 본 명령이 정상적으로 동작하기 위해서는 호스트 PC의 bootp설정이 정확이 설정되어 가 동되고 있어야 한다. bootp명령이 성공적으로 종료하였을 경우 다음과 같은 메시지를 볼 수가 있다. EMPOS # bootp

Our Ethernet address : 000B A800 0000. Sending bootp packet...

(36)

Client (target) Ethernet : 000B A800 0000 Client (target) IP : 192.168.123.180 EMPOS # z setip bootp를 이용하지 않고 직접 ip를 설정하기 위해 본 명령을 사용한다. EMPOS # setip 192.168.123.123 192.168.123.180 Host (server) IP : 192.168.123.123 Client (target) IP : 192.168.123.180 EMPOS # 명령을 적용 하기 위해 처음 인자에 호스트 PC의 IP를 입력 하고 두 번째 인자에 보드에 할당될 IP를 입력하게 된다. 허브를 통해 여러 PC와 보드가 연결되어 있을 경우 본 명령 을 통해 원하는 보드로부터 tftp 패킷을 전송 받을 수 있다. z macwrite bootp를 이용하여 IP주소를 할당 받기 위해서는 고유한 물리적 주소를 넘겨 주어야 한다. 이때 사용되는 주소를 MAC 주소라고 하는데, 이는 EMPOSⅡ 보드일 경우 Flash Rom 0x80000에 Primary 와 Secondary 맥어드레스가 차례로 저장이 되어 있다. 저장된 MAC 주소의 변경이 필요할 경우에는 본 명령으로 쉽게 변경 할 수 있다.

다음은 macwrite명령으로 MAC주소를 변경하는 내용이다.

EMPOS # macwrite pri 000ba8000000

Primary MAC Address : 0x000B A800 0001 Secondary MAC Address : 0x000B A800 0002 New pri MAC Address : 0x000B A800 0000 New sec MAC Address : 0x000B A800 0002

Please reboot for new networking ....!

EMPOS #

위와 같이 Primary MAC주소가 0x000BA8000001에서 0x000BA8000 000로 변경이 되었음 을 알 수가 있다. Secondary MAC 주소를 변경하기 위해서는 pri대신에 sec를 사용하면 된다. MAC주소 변경 후 bootp 및 tftp등을 이용하기 위해서는 변경된 MAC주소에 맞게 이미 설정된 호스트 PC의 환경을 변경 적용 후 bootp명령을 통한 IP 할당이 가능하다.

(37)

보드에 부착된 MAC 주소는 유일한 MAC주소로 인터넷 어디든지 사용이 가능하므로 특별 한 경우가 아니다면 MAC 주소를 변경하지 않고 처음 그대로 사용하는 것을 권장한다. z tftp 본 명령은 고속전송이 가능한 Ethernet을 통해 데이터를 전송을 할 수 있다. 현재 유용한 IP 주소가 확보되지 않았을 경우에는 관련 함수의 내부에서 bootp함수를 먼저 호출하여 IP주소를 먼저 할당 받고, download를 시작한다. 이 또한 호스트 PC의 tftp설정이 정확하 게 동작하고 있어야 정상 동작이 가능하다. tftp의 help내용은 다음과 같다. EMPOS # help tftp

* Help for the 'tftp' *

tftp [file] [position] : Download images by tftp

* Arguments explain *

1. file : File name in tftp service directory

2. position {booter/kernel/ramdisk/usr : Saving position at ram

* Example use * 1. tftp zImage kernel EMPOS # 위에서 보는 봐와 같이 tftp는 2개의 인자 값으로 동작을 하게 되는데 처음 인자는 호스트 PC의 tftp설정 디렉토리(기본 /tftpboot)에 존재하는 파일명이고 두 번째 인자는 전송 받 는 RAM영역의 위치를 가리킨다. 따라서 본 명령을 실행시키기 이전에 호스트 PC에서 /tftpboot 안에 전송을 원하는 파일 이미지를 존재 시켜야 한다. 전송이 이상 없이 마무리 되었을 경우 다음과 같은 메시지를 보고 전송된 여러 정보를 확 인할 수 있다.

EMPOS # tftp zImage kernel Tftp start...

Host (server) IP : 192.168.123.123 Client (target) IP : 192.168.123.180 Loading Filename : zImage

(38)

0x000E1A14 (924180) bytes received. tftp done. EMPOS # z download Serial을 이용한 파일을 다운 받는다. help명령을 통한 download의 사용 설명은 다음과 같다.

EMPOS # help download

* Help for the 'download' *

download [position] : Download images by uuencode

* Arguments explain *

1. position {booter/kernel/ramdisk/usr : Saving position at ram

* Example use *

1. <client> download kernel

<host> uuencode zImage zImage >/dev/ttyS0 EMPOS #

위에서 보는 봐와 같이 Serial을 통한 다운로드를 원할 시 인자 값으로 booter, kernel, ramdisk. usr등을 주어 이미 설정된 RAM영역으로 다운로드를 할 수 있다.

실제 본 명령을 통해 호스트 PC로부터 데이터를 전송 하고자 한다면, 다음과 같이 부트로 더에 download 명령을 내려 호스트 PC로부터 전송 시작을 기다리게 된다.

EMPOS # download kernel

* Translate image by using uuencode in host PC *

minicom 터미널에서 보여지는 바와 같이 serial을 통한 다운로드는 타겟 보드에서는 호스 트 PC에서 전송을 시작하기를 대기 하게 되며, 호스트 PC에서 전송 데이터를 Serial을 통 해 전송을 시작해 주어야 한다.

호스트 PC에서 데이터를 전송해주는 방법은 다음과 같다.

uuencode zImage zImage > /dev/ttyS0

uuencode라는 명령으로 데이터전송을 시작하는데 zImage란 현재 PC에 저장되어 있고 전송을 원하는 파일명을 의미하며 호스트 PC의 COM1포트에 관한 device node인 /dev/ttyS0를 통해 전송을 하게 된다.

(39)

위의 모든 과정이 무난히 완료되면 다음과 같은 전송 내용을 minicom화면에 볼 수가 있 다.

EMPOS #

EMPOS # download kernel

* Translate image by using uuencode in host PC *

... ...

Received bytes : 0x000E1A14

EMPOS #

z read

특정 메모리 번지의 값을 확인 하기 위해 사용되는 명령이다. read의 help내용은 다음과 같다.

EMPOS # help read

* Help for the 'read' *

read {b8/b16/b32 [address] [len] : Read value on a specific address

* Arguments explain *

1. bit : read bit number per excute 2. address : Specific address to read 3. len : length to read, default is '0x1'

* Example use *

1. read b32 0x48000000 0xa 2. read b8 0x48000004

EMPOS #

(40)

다음은 read 명령으로 MDCNFC(0x48000000)의 값을 확인하는 내용이다.

EMPOS # read b32 0x48000000

address : 0x48000000 value : 0x00001ACB

z write

하나의 메모리 레지스터에 값을 변경하기 위해 본 명령을 사용할 수 있다. write의 help내용은 다음과 같다.

EMPOS # help write

* Help for the 'write' *

write {b8/b16/b32 [address] [value] : Write value on a specific address

* Arguments explain *

1. bit : read bit number per excute 2. address : Specific address to write 3. value : Value to write

* Example use * 1. write b32 0x4800000C 0x12BC5554 EMPOS # 명령어 함수에 전달되는 3개의 인자 중 첫번째 값으로 b8, b16, b32중 하나의 문자를 입 력하여야 하는데 이는 write하려는 비트 수를 의미한다. 하나의 레지스터 값을 변경하기 위해 서는 32bit값이 필요하므로 이곳에 ‘b32’을 입력한다. 두 번째 인자는 값을 변경할 주소이며 마지막 3번째 값은 write하려는 값을 의미한다. 사용 예는 다음과 같습니다. EMPOS # write b32 0x4800000C 0x12BC5554 previous value

address : 0x4800000C value : 0xA4413664

changed value

address : 0x4800000C value : 0x12BC5554 EMPOS #

(41)

이다.

flash의 help내용은 다음과 같다.

EMPOS # help flash

* Help for the 'flash' *

flash [position] : Write images that are previously downloaded

* Arguments explain *

1. position {booter/kernel/ramdisk/usr : Specific position to write

* Example use * 1. flash kernel

EMPOS #

위에서 보는 봐와 같이 flash 명령도 하나의 인자 값을 갖게 되는데 download시 사용한 인자 값과 일치한다.

먼저 flash명령을 통해 데이터를 Flash영역에 저장하려면 선행적으로 download나 tftp를 통한 데이터 전송이 이루어 져야 하며 그렇지 않을 경우에는 기존 이미지를 다시 flash 한다.

flash명령으로 데이터가 이상 없이 저장되었다면 다음과 같은 메시지를 minicom을 통해 볼 수가 있을 것이다.

EMPOS # flash kernel Saving kernel to flash...

Erased block range : 0x000C0000 0x001BFFFF Current block address : 0x00180000

Done.

Write to flash...

Current block address : 0x001C0000 Done.

(42)

z erase

flash rom에 있는 데이터를 삭제한다. erase의 help내용은 다음과 같다.

EMPOS # help erase

* Help for the 'erase' *

erase [position], [start addr] [len] : Erase flash area

* Arguments explain *

1. position {booter/kernel/ramdisk/usr : Specific position to erase

2. stat addr : Start address to erase 3. len : Erase length

* Example use * 1. erase kernel 2. erase 0x0 0xc0000

EMPOS #

위에서 보는 봐와 같이 erase 명령은 하나의 인자 또는 두개의 인자 값을 사용한다. 우선 하나의 인자 값을 사용 할 때는 booter, kernel, ramdisk와 usr중에 하나를 사용해야 하고 두개의 인자를 사용할 때는 삭제할 주소의 시작 번지와 길이를 설정하면 된다.

다음은 erase로 커널을 삭제하는 예를 보여준다.

EMPOS # erase kernel

Erased block range : 0x000C0000 0x001BFFFF Current block address : 0x00180000

Done.

EMPOS #

z status

Flash메모리의 해당 데이터(booter, kernel, ramdisk, usr)의 주소와 현재 보드에 할당 되고 사용하고 있는 IP와 tftp패킷 을 보낼 Host PC의 IP, 그리고 각각의 Ethernet Controller의 맥 어드레스 와 중요 레지스터를의 값들을 나타낸다.

(43)

* Memory Map *

bootloader) ROM : 0x00000000, RAM : 0xA3D00000, LENGTH : 0x0000C000 kernel) ROM : 0x000C0000, RAM : 0xA00C0000, LENGTH : 0x00100000 ramdisk) ROM : 0x00200000, RAM : 0xA0600000, LENGTH : 0x00600000 usr) ROM : 0x00900000, RAM : 0xA1600000, LENGTH : 0x01700000

* Network Status *

Host (server) Ethernet : 0xFFFF FFFF FFFF Host (server) IP : 0.0.0.0

Client (target) Ethernet : 0x000B A803 1001 Client (target) IP : 0.0.0.0

Primary (target) Ethernet : 0x000B A803 1001 Secondary (target) Ethernet : 0x000B A803 01C1

* Registers Value *

MDCNFG address : 0x48000000 value : 0x00001ACB MDREFR address : 0x48000004 value : 0x000BC018 MSC0 address : 0x48000008 value : 0x7FF42BF0 MSC1 address : 0x4800000C value : 0xA4417FF4 MSC2 address : 0x48000010 value : 0x7FF07FF4 MECR address : 0x48000014 value : 0x00000001 SXCNFG address : 0x4800001C value : 0x00040004 MCMEM0 address : 0x48000028 value : 0x00010504 MCMEM1 address : 0x4800002C value : 0x00010504 MCATT0 address : 0x48000030 value : 0x00010504 MCATT1 address : 0x48000034 value : 0x00010504 MCIO0 address : 0x48000038 value : 0x00004715 MCIO1 address : 0x4800003C value : 0x00004715 MDMRS address : 0x48000040 value : 0x00220032

(44)

z help

명령어에 대한 도움말을 표시하게 된다. 인자 값 없이 help만을 입력 시 사용 가능한 명 령어가 모두 출력이 되며 하나의 명령어에 자세한 도움말을 얻고 싶으면 인자 값으로 그 명령어를 입력하면 된다.

EMPOS # help bootp

* Help for the 'bootp' * bootp : Get IP by bootp

EMPOS #

z test

사용자가 본 명령으로 쉽게 하드웨어의 여러 구성 요소들을 테스트 해볼 수 있도록 하기 위하여 만들어 놓은 것으로 부트로더에 기본으로 보드에 부착된 LED를 테스트 하는 코드 가 삽입되어 있고 사용방법은 다음과 같다.

EMPOS # test led 0x11

(45)

3.4. 메모리 맵

EMPOSⅡ에는 32M의 Flash와 128M(보드 v1.1은 64M)의 RAM이 장착되어 있으며, Flash 에 bootloader, kernel, ramdisk, usr(jffs) 이미지가 저장되어 있다.

그림의 하단의 Flash ROM 영역에는 EMPOSⅡ에서 사용하는 여러 이미지 데이터가 저장 이 되어 있으며 부팅 시 부트로더에서 상위 RAM영역으로 복사(User Space 제외)한 후 RAM상에서 모든 동작을 하게 된다.

(46)

3.4.1 메모리 맵 선언

위와 같이 메모리는 부트로더의 하나의 파일에 모두 선언이 되어 있는데, 메모리 맵 뿐만 아니라 각종 메모리 설정 값, CPU Clock, Serial port 설정 등이 포함되어 있다.

따라서 본 부트로더를 이용한 타 보드 포팅을 위해서는 제일 먼저 다음 파일의 설정 값들 을 정확히 바꾸어 주어야 정상 동작을 볼 수가 있다. - empos_boot/header/config.h #ifndef SMART_CONFIG_H #define SMART_CONFIG_H /* 모니터링 시리얼 속도 정의 */ #define SERIAL_SPEED_RATE (0x00000008) //115200 /* 오토 부트 딜레이 */ #define BOOT_DELAY 3 //3초 /* 커널 Arch 번호 */

#define ARCH_NUMBER 241 //EMPOS 보드

/* 메모리 맵 정의 */

//이부분은 링크 스크립트와 연결되어 있다. 가급적 이 부분은 수정하지 //말고 수정 하기위해선 링크 스크립터(ld-xscale)도 수정해야 한다. #define BOOTLOADER_ROM_BASE 0x00000000

#define BOOTLOADER_RAM_BASE (0xA8000000 - 0x300000) #define BOOTLOADER_LENGHT (0xc000)

//(50*1024) 약50K byte

#define BOOTLOADER_RAM_RUNNING (0xA8000000 - 0x300000 + 0x100000)

#define STACK_POINTER(0xA8000000 - 0x300000 + 0x200000)

////////////////////////////////////////////////////////////////////// // 환경 변수 저장 주소

(47)

#define CONFIG_ROM_BASE (0x80000)

#define KERNEL_RAM_BASE 0xa00c0000 #define KERNEL_ROM_BASE 0x000c0000

#define KERNEL_LENGHT (1*1024*1024) //1M byte

#define RAMDISK_RAM_BASE 0xa0600000 #define RAMDISK_ROM_BASE 0x00200000

#define RAMDISK_LENGHT (6*1024*1024) //6M byte

#define USR_RAM_BASE 0xa1600000 #define USR_ROM_BASE 0x00900000

#define USR_LENGHT (0x2000000 – USR_ROM_BASE) // 23M byte -이하 생략

3.5. 부트로더 설치

EMPOSⅡ에 사용하는 부트로더를 이미 설치한 크로스 컴파일러를 이용하여 컴파일을 하 고, 타겟 보드에 포팅을 하는 방법을 이번 장에 소개한다. 3.5.1 압축 해제 먼저 제공된 CD안에 부트로더를 원하는 디렉토리로 복사한다. (작업 디렉토리를 /working 으로 가정하였을 경우) mount /mnt/cdrom cp /mnt/cdrom/Source/bootloader/empos_boot.tar.gz /working cd /working tar xvfz empos_boot.tar.gz 3.5.2 컴파일 압축이 해제된 디렉토리로 이동하여 컴파일을 시도한다.

(48)

make로 부트로더를 컴파일실행 시키면 다음과 같은 메시지를 출력한다.

arm-linux-gcc -O2 -Wall -march=armv4 -mtune=strongarm -fomit-frame-pointer -mapcs-32 -nostdinc -I./header -c main.c

arm-linux-gcc -I./header -O2 -Wall -march=armv4 -mtune=strongarm -fomit-frame-pointer -mapcs-32 -nostdinc -I./header -static -nostdlib -Wl,-T,./header/ld-xscale -o

empos_boot-elf32 start.o serial.o time.o lib.o smc91111.o net.o bootp.o tftp.o flash.o commands.o main.o -lgcc

arm-linux-objcopy -O binary -R .note -R .comment -S empos_boot-elf32 empos_boot [root@localhost empos-boot]# 3.5.3 포팅 컴파일이 이상 없이 종료가 되었다면 empos_boot 디렉토리 아래에 empos_boot이라는 파일이 생성이 된다. 현재 생성된 이미지 파일을 실제 보드에 포팅을 하면 본 이미지로 커널이 정상적으로 로딩하는 것을 볼 수 있을 것이다. 포팅은 2가지 방법을 이용하여 할 수가 있는데. 첫번째는 제공된 Jtagflash-xscale 프로 그램을 사용한다. 1) Jtag을 이용하여 다운로딩 Jtagflash-xscale 프로그램의 사용을 위해 CD에서 해당 파일을 PATH가 설정된 디렉토리 로 복사한다. mount /mnt/cdrom cp /mnt/cdrom/Tools/jtag/Jtagflash-xscale /usr/local/bin Jtag 케이블을 타겟 보드와 호스트 컴퓨터에 연결한 후, Jtagflash-xscale을 이용하여 다 운로딩 할 수 있다. 사용법은 Jtagflash-xscale 다음에 다운로딩할 부트로더 이름을 쓰면 된다. 아래는 empos_boot(bootloader)를 다운로딩하는 예이다.

[root@localhost empos-boot]# ./Jflash-Xscale empos_boot JFLASH Version 1.00 - HBE-EMPOS

COPYRIGHT (C) 2000, 2001 Intel Corporation JTAG Test Passed

ACT: 0110 1001001001100100 00000001001 1 EXP: **** 1001001001100100 00000001001 1

(49)

There are two 16-bit Flash devices in parallel

Characteristics for one device: Number of blocks in device = 128

Block size = 65536 0x10000 word(16-bit) Device size = 8388608 0x800000 word(16-bit)

Sample block to address list:

Block 0 = hex address: 00000000 Block 40 = hex address: 00500000 Block 80 = hex address: 00A00000 Block 120 = hex address: 00F00000

Starting erase Erasing done

Starting programming

Programming done hex address 5f40, 94.31% done Starting Verify Verification successful! [root@localhost empos-boot]# 위와 같이 Jtag포팅이 성공적으로 끝난 후 보드의 리셋버튼을 누르면 방금 포팅 된 부트 로더가 실행이 된다. 2) 부트로더에서 다운로딩 현재 정상적으로 제작된 부트로더가 부팅된 상태에서 명령어로 행할 수 있다. 즉 download나 tftp를 이용하여 호스트 PC에 다운을 받고 전송 받은 데이터를 flash 명령으 로 저장하면 된다.

EMPOS # tftp empos_boot booter

No IP. Run bootp first to get a valiable IP... Our Ethernet address : 000B A800 0000. Sending bootp packet...

(50)

Host (server) IP : 192.168.123.123 Client (target) Ethernet : 000B A800 0000 Client (target) IP : 192.168.123.180

Tftp start...

Host (server) IP : 192.168.123.123 Client (target) IP : 192.168.123.180 Loading Filename : empos_boot

Save Address : 0xA3D00000

Loading start...

0x00006500 (25856) bytes received. tftp done.

EMPOS # flash booter

Saving bootloader to flash...

Erased block range : 0x00000000 0x0000CFFF Current block address : 0x00000000 Done.

Write to flash...

Current block address : 0x00040000 Done.

(51)

3.6. 부트로더를 이용한 하드웨어 테스트

부트로더에 이미 만들어진 test명령어와 함수를 이용하여 하드웨어 테스트 등을 시행할 수가 있다.

다음은 보드에 내장된 8LED를 on/off 시키는 code를 해당 함수에 넣어 간단한 하드웨어 테스트 하는 법을 설명한 것이다. 수정을 해야 할 파일은 commands.c로써 파일 최하 단 의 DoTest 함수이며 기본으로 아래와 같이 입력되어 있다.

- commands.c

bool DoTest(int argc, char **argv) { if(StrCmp(argv[1], "led") ==0){ u16 val; if (!HexToInt(argv[2], &val, 8)){ return false; __REG8(0x10600000) = val; return true; 위의 소스를 살펴 보면 0x10600000번지가 LED를 제어하는 메모리 번지이며 이 번지 값 에 전달 받은 핵사 값을 넣음으로써, 보드에 장착된 8개의 LED의 제어를 확인 할 수 있 다. LED를 선택적으로 on 시키기 위해서는 입력되는 값을 변경함으로써 가능하고, 비슷한 방법을 통해 여러 하드웨어 테스트 또한 가능하게 된다.

(52)
(53)

4.

커널

부트로더로부터 제어권을 넘겨 받아 시스템의 운영을 담당하는 커널은 운영체제의 핵심이 다. 최근에 산업용 시스템, 라우터를 비롯한 네트워크 장비, 임베디드 시스템 등에 급속 도로 사용이 증가되고 있는 리눅스를 EMPOSⅡ에서도 사용하고 있으며 커널의 기본 이해 와 EMPOSⅡ에서 사용하는 2.4.19버전의 포팅 방법을 본 장에서는 설명한다.

4.1. 커널 개요

커널이란 운영체제를 구성하고 있는 핵심(core)로써 타겟보드의 DRAM에 상주하여, 시스 템의 구동에 필요한 환경 설정과 수행되는 프로세스들을 스케줄링 하는 소프트웨어이다. 커널은 크게 마이크로 커널(Micro Kernel)과 모놀리틱 커널(Monolithic)로 나눌 수 있으며, 마이크로 커널은 커널이 가져야 하는 핵심적인 기능만을 구현한 최소 커널로써 나머지는 서비스 프로세스로 이루어 진다. 모놀리틱 커널이란 커널 내부에 시스템 운영에 필요한 많은 서비스 루틴들을 포함한 구조를 가지고 있다. 이러한 모놀리틱 커널은 구현이 간단 하며 시스템 자원을 보다 효율적으로 관리할 수 있는 장점을 가지고 있지만 다양한 환경 의 시스템에 포팅하기 어렵고, 커널의 크기가 상대적으로 커진다는 단점을 가진다. 하지 만 마이크로 커널은 핵심 기능과 작은 서버 모듈로 나누어 설계되고, 최소기능만을 커널 내부에 포함하므로, 기능 확장 및 타 시스템 재사용이 쉬워진다. 하지만 서버에 메시지 전달 방식의 접근은 태스크 스위칭에 많은 오버헤드를 초래하며 자원의 효율적 이용도 낮 아진다. Solaris, AIX, HP-UX, Linux등이 모놀리틱 커널을 사용하며 Mach OS, sunsoft, Digital UNIX등은 마이크로 커널을 사용하고 있다.

(54)

4.2. 리눅스 커널의 구조

위의 그림과 같이 커널은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 디바이스 관리, 네트워크 관리의 5개의 기능 블록으로 구분할 수 있다. 해당 블록의 세부기능은 다음과 같 다. z 프로세스 관리 (Process Management) z 프로세스의 생성 및 소멸 z 프로세스 간의 통신(Signal, Pipe, LPC, 세마포어 등) z CPU 스케줄링 동기화 z 제한된 자원에 대한 다중 프로세서의 효율적인 관리 기법 제공 z 메모리 관리 (Memory Management) z 가상 메모리 관리 기법 제공 z 메모리 하드웨어의 효율적인 관리

(55)

z 파일 시스템 관리 (File System Management) z 가상 파일 시스템에 의한 여러 파일 시스템 타입 지원 z 디스크의 물리적 구조를 논리적 구조로 표현 하는 기법 z 파일(정규 파일, 장치 파일, 파이프), 디렉토리 관리 z 블록 입출력을 위한 버퍼 캐시 관리 기법 제공 z 디바이스 관리(Device Management) z 입출력 요청 검증 z 입출력 요청 작업의 스케줄링 z 주변장치와 메모리간의 자료전송 z 입출력 제어기 관리 z 인터럽트 요청 및 처리 z 네트워크 관리(Network Management) z 통신 프로토콜 구현 z 네트워크 라우팅 및 주소지정 (Address Resolution) z 네트워크 제어기 관리

4.3. 커널 Image 생성

EMPOSⅡ에서는 linux-2.4.19 버전의 커널을 사용하고 있다. 커널을 보드에 맞게 컴파일 하기 위해서는 먼저 해당 커널 압축파일을 다운로드 받고, Arm 패치, Xscale 패치 와 EMPOSⅡ 보드 패치를 각각 적용해야 한다. 4.3.1 커널 소스 구하기 리눅스 커널 소스는 http://www.kernel.org/pub/linux/kernel/v2.4/ 에서 linux-2.4.19.tar.gz를 받으면 된다. 4.3.2 ARM 패치 구하기 인터넷에서 받은 커널 소스를 EMPOSⅡ에서 사용하기 위해선 ARM 환경에 맞게 패치를 적용하여야 한다. 패치 파일은 EMPOSⅡ 보드와 같이 제공된 CD-ROM에서 포함되어 있 고. 인터넷을 통해 다운 받을 수 있는데 주소는 다음과 같다.

(56)

4.3.3 ARM 패치 적용

먼저 제공된 CD안에 커널 소스인 linux-2.4.19.tar.gz를 적당한 디렉토리에 압축을 해제하 고 patch-2.4.19-rmk4.gz를 복사하여 넣는다.

mount /dev/cdrom /mnt/cdrom mkdir /working/kernel cp /mnt/cdrom/Source/kernel/SRC/linux-2.4.19.tar.gz /working/kernel cd /working/kernel tar xvfz linux-2.4.19.tar.gz cd /mnt/cdrom/Source cp patch-2.4.19-rmk4.gz /working/kernel/linux-2.4.19 해제된 커널 소스에 ARM 패치를 적용한다. cd /working/kernel/linux-2.4.19 zcat patch-2.4.19-rmk4.gz | patch -p1

마지막 patch 옵션의 -p1는 패치 파일이 같은 디렉토리 경로에 존재할 때를 의미하며 한 단계 상위에 존재할 시에는 에는 p0을 입력한다.

패치가 이상 없이 적용이 되면 다음과 같은 메시지가 error없이 보여질 것이다

patching file CREDITS

patching file Documentation/Configure.help patching file Documentation/arm/Booting patching file Documentation/arm/ConfigVars patching file Documentation/arm/MEMC

patching file Documentation/arm/SA1100/SA1100_USB patching file Documentation/arm/SA1100/nanoEngine patching file Documentation/cpufreq

patching file Documentation/l3/structure patching file Documentation/serial/driver patching file MAINTAINERS

patching file Makefile

(57)

생략---4.3.4 Xscale 패치 구하기

Arm패치를 하는 동안에 arm 코어에 관련된 패치만 적용되고 xscale관련된 코어는 아직 패치가 되어 있지 않다. 그러므로 xscale cpu를 사용하기위해서는 다시 한번 더 xscale패 치를 해 주어야만 된다. 파일 패치는 ftp://ftp.arm.uk.linux.org/pub/linux/arm/people/nico/v2.4 에서 diff-2.4.19-rmk4-pxa2.gz를 받으면 된다. 4.3.5 Xscale 패치 적용 먼저 제공된 CD안에서 diff-2.4.19-rmk4-pxa2.gz을 위에 커널 패치 된 곳으로 복사하여 넣고 아래와 같이 패치를 적용하자. cp /mnt/cdrom/Source/diff-2.4.19-rmk4-pxa2.gz /working/kernel/linux-2.4.19 cd /working/kernel/linux-2.4.19

zcat diff-2.4.19-rmk4-pxa2.gz | patch –p1

패치가 이상 없이 적용되면 다음과 같은 메시지가 나타난다.

patching file Documentation/Configure.help

patching file Documentation/arm/XScale/PXA/USB-client patching file Makefile

patching file arch/arm/Makefile patching file arch/arm/boot/Makefile

patching file arch/arm/boot/compressed/Makefile patching file arch/arm/boot/compressed/head-xscale.S patching file arch/arm/boot/compressed/head.S

patching file arch/arm/config.in

patching file arch/arm/def-configs/cerfboard_pxa patching file arch/arm/def-configs/cerfpda_pxa patching file arch/arm/def-configs/lubbock patching file arch/arm/def-configs/pxa_idp

(58)

생략---4.3.6 EMPOSⅡ 보드 패치 적용

제공된 CD에서 EMPOSⅡ에 대한 패치 파일을 ARM 패치가 이루어진 커널 소스가 있는 디렉토리에 복사 후 패치를 적용 시킨다.

mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom/Source/

cp diff-2.4.19-rmk4-pxa2-empx1.gz /working/kernel/linux-2.4.19 cd /working/kernel/linux-2.4.19

zcat diff-2.4.19-rmk4-pxa2-empx1.gz | patch -p1

패치가 이상 없이 적용되면 다음과 같은 메시지가 나타난다.

patching file Makefile

patching file arch/arm/boot/compressed/head-xscale.S patching file arch/arm/config.in

patching file arch/arm/def-configs/empos patching file arch/arm/kernel/setup.c patching file arch/arm/mach-pxa/Makefile patching file arch/arm/mach-pxa/empos_x255.c patching file arch/arm/mach-pxa/irq.c

patching file arch/arm/mach-pxa/leds-empos_x255.c patching file arch/arm/mach-pxa/leds.c

patching file arch/arm/mach-pxa/leds.h patching file arch/arm/mach-pxa/lubbock.c patching file arch/arm/mach-pxa/usb_ctl.c patching file arch/arm/tools/mach-types

(59)

생략---4.3.7 커널 컴파일

필요한 패치가 모두 성공적으로 완료 되었으면 컴파일을 통한 커널 이미지를 생성하게 된 다. 보드 패치 에 EMPOSⅡ에 관한 모든 것이 적용되었으므로 소스 파일의 수정 없이. 다 음을 순서대로 컴파일을 실행하여 실질적인 kernel이미지를 생성 가능하다.

make empos_config

make oldconfig (make menuconfig) make dep

make clean (make distclean) make zImage 위 make 명령어 에 관한 내용은 다음과 같다. z make empos_config 커널의 컴파일 환경을 EMPOSⅡ에 맞게 적용한다. 본 명령을 통해 컴파일 목록이 보드에 맞게 갱신이 되어 곧바로 컴파일 과정을 진행할 수 있게 한다. z make oldconfig make empos_config를 통해 구성된 메뉴를 소스에 적용 시키는 과정이다. z make menuconfig make oldconfig를 실행 하였을 경우 본 과정을 생략 가능하다. 본 명령을 통해 커널 을 컴파일 할 때 추가 삭제 하여야 할 것을 선택할 수 있는 메뉴가 출력되어 커널에 서 필요 부분을 추가 삭제 할 수 있어 좀더 최적화된 커널을 만들 수 있다 패치를 통해 EMPOSⅡ 보드에 맞게 커널 구성을 맞추었으므로, 특별한 경우를 제외 하곤 본 메뉴에서 수정을 필요치 않으나, 사용자에 따라 커널의 테스트를 원하면 바 꾸어 가면서 컴파일을 진행 할 수 있다. z make dep 본 명령어는 커널 소스 사이의 코드 의존성을 검사하여 분석 후 .depend 라는 파일 로 저장을 하게 된다. .depend 파일 안에는 소스들의 패스정보 등 컴파일 필요 정보 들이 저장이 되게 된다. z make clean 본 명령어는 컴파일을 수행 후 생성된 여러 오브젝트 파일을 삭제해주는 명령어 이다. 소스를 수정한 후(주로 헤더파일) 컴파일 할 때 유용하게 사용할 수 있다.

(60)

arch/arm/boot 디렉토리에 zImage라는 이름으로 생성이 되며 zImage의 처음 부분에 압축을 해제하는 코드가 포함되어 있다.

컴파일이 성공적으로 수행되었다면 다음과 같은 메시지가 마지막에 출력된다.

arm-linux-objcopy -O binary -R .note -R .comment -S /working/kernel/linux-2.4.19/vmlinux piggy

gzip -9 < piggy > piggy.gz

arm-linux-ld -r -o piggy.o -b binary piggy.gz rm -f piggy piggy.gz

arm-linux-ld -p -X -T vmlinux.lds head.o misc.o head-xscale.o piggy.o /usr/cross-tools/lib/gcc-lib/arm-linux/2.95.3/libgcc.a -o vmlinux

make[2]: Leaving directory

`/working/kernel/linux-2.4.19/arch/arm/boot/compressed'

arm-linux-objcopy -O binary -R .note -R .comment -S compressed/vmlinux zImage

make[1]: Leaving directory `/working/kernel/linux-2.4.19/arch/arm/boot' [root@localhost linux-2.4.19]#

4.3.8 커널 포팅

컴파일을 통해 생성된 zImage를 타겟 보드에 포팅해보자

현재 EMPOSⅡ 보드에서는 부트로더를 통한 포팅만을 지원하고 있다.

아래와 같이 부트로더에서 tftp를 이용하여 커널을 타겟 보트에 전송한 후 flash 명령을 통해 RAM에 저장된 커널을 flash rom으로 복사한다.

EMPOS # tftp zImage kernel EMPOS # flash kernel

이것을 이용하기 위해서는 컴파일을 통해 생성된 zImage를 /tftpboot아래에 넣고 호스트 컴퓨터에서 tftp 서버를 구동 시켜야 된다.

(61)

5.

파일

시스템

파일 시스템이란 운영체제가 파티션이나 디스크에 파일들이 연속되게 하기 위해 사용하는 방법들이고 자료구조이다. 즉, 파일들이 디스크상에서 구성되는 방식이다. 파일시스템이라 는 말은 파일을 저장하는데 사용되는 파티션이나 디스크를 가리킬 때나, 파일 시스템의 형식을 가리킬 때 사용되기도 한다. 그래서 파일을 저장하는 2 개의 파티션을 가지고 있 다는 의미에서 어떤 사람은 “난 2개의 파일 시스템을 가지고 있다”고 말할지도 모르고, 파일 시스템 형식을 의미해서 “extended filesystem”을 그 사람이 사용하고 있을 것이다. 여기에서는 주로 파일 시스템의 형식을 가리킬 때 사용되고 있다.

5.1. ext2 파일 시스템

현재 리눅스에서는 NTFS, VFAT, UFS, NFS등의 여러 파일 시스템을 사용할 수 있으며 가 장 보편적으로 널리 사용되는 것으로는 ext2이다. 여러 파일 시스템이 가능하게 된 것이 VFS(Virtual File System)으로 실제 파일 시스템과 커널 사이에 가상 파일 시스템 층을 생 성하여 실 사용자들에게는 일관된 인터페이스를 제공하게 된다. ext2는 2GByte의 파일 크 기와 4TByte의 전체 파일 시스템 구성이 가능하며, 가변 블록 크기 및 확장가능 기능을 가지고 있다. 리눅스 파일 시스템의 디렉토리 구조는 아래와 같고, 각각의 디렉토리는 해 당 목적에 맞는 파일들을 보관 하고 있다. 디렉토리 설명 / 최상위 디렉토리인 루트 디렉토리 /bin 중요하고 꼭 필요한 기본 명령어가 위치한 디렉토리 /boot 커널 시스템 부팅에 관련이 있는 디렉토리 /dev 시스템 디바이스 드라이버 파일을 저장하는 디렉토리 /etc 시스템 각종 환경 설정 파일을 저장하는 디렉토리

(62)

는 가상 디렉토리 /root root의 홈 디렉토리 /sbin 시스템 관리자용 명령어를 저장하는 디렉토리 /tmp 임시 파일을 저장하는 디렉토리 /usr 사용자 어플리케이션이 설치되는 디렉토리 /usr/include C프로그램에 필요한 헤더파일 저장 디렉토리 /usr/lib 사용자 필요 추가 라이브러리 /usr/local 사용자 추가 어플리케이션 설치 디렉토리 /usr/sbin /bin에 제외된 사용자 추가 명령어 /usr/src 프로그램 소스 저장 디렉토리 /var 시스템 운용에 필요한 생성 삭제 파일 저장하는 디렉토리

5.2. Ramdisk

별도의 물리적 저장 장치가 없이 메모리의 한 부분을 할당하여 컴퓨터의 하드 디스크처럼 사용가능 하도록 한 것이 ramdisk이다. 따라서 별도의 디스크 저장 공간이 없는

EMPOSⅡ를 비롯한 여러 임베디드 보드에서 root파일 시스템으로 이러한 ramdisk를 보편 적으로 사용하고 있다. 5.2.1 Ramdisk의 성질 램 디스크는 램에서 실행 되므로 다음과 같은 성질이 있다. z RAM이 휘발성이므로 전원을 차단 시키면 모든 데이터가 사라진다. z RAM은 빠른 실행이 가능하다 z 압축방법(gzip)을 이용하므로 용량을 효율적으로 사용할 수 있다. 5.2.2 Ramdisk의 수정 EMPOSⅡ에서 제공하는 CD에 포함된 Ramdisk 파일 안에 사용자가 임의의 파일이나 디 렉토리를 추가, 삭제가 가능하다. 먼저 CD의 Ramdisk 파일을 압축 해제한 후 하나의 디 렉토리에 마운트를 하게 된다. mkdir /working/ramdisk mount /dev/cdrom /mnt/cdrom

cp /mnt/cdrom/Image/filesystem/ramdisk16.gz /working/ramdisk cd /working/ramdisk

(63)

mount -t ext2 -o loop ramdisk16 /mnt/ramdisk 위 과정을 통해 마운트가 정상적으로 이루어 졌는지는 mount명령을 통해 확인 할 수 있 다. 정상적인 마운트 완료 후 /mnt/ramdisk안에 들어 가면 현재 Ramdisk안에 있는 디렉 토리와 파일들이 출력이 되며, 이곳에 원하는 파일 등을 추가 또는 수정을 한다. Ramdisk 수정 후 umount 명령어로 현재 파일과 마운트 된 디렉터리를 해제하고, 다시 gzip으로 압축을 하면 타겟 보드에 포팅이 가능한 형태로 된다. umount /mnt/ramdisk gzip ramdisk-16m 5.2.3 Ramdisk의 생성 아래와 같이 dd명령을 통해 새로운 Ramdisk의 생성이 가능하다.

dd if=/dev/zero of=./empos.ramdisk.fs count=4096 bs=1024 mkfs -t ext2 empos.ramdisk.fs 1024byte의 한 블록을 4096번 반복하여 총 4MByte의 램디스크를 생성하게 된다. /dev/zero는 파일의 내용을 0으로 채우는 의미이다. ‘make -t ext2’ 명령은 ‘dd’ 명령으로 생성된 널 이미지에 파일시스템을 생성하는 과정이 다. 리눅스에서 많이 사용하는 ext2로 생성을 하였고, EMPOSⅡ의 루트 파일 시스템으로 사용이 되게 된다. 위와 같이 생성된 Ramdisk에 필요한 파일을 포함하기 위해선 mount명령을 통한 하나의 디렉토리에 마운트 하여 Ramdisk에 필요한 파일의 내용을 채우고, gzip으로 압축을 하면 포팅 가능한 Ramdisk가 만들어 진다.

5.3. JFFS 파일 시스템

JFFS는 스웨덴의 Axis Communications에서 개발한 저널링 플래시 파일 시스템

(Journalling Flash File System)으로 디스크가 없는 임베디드 장치에서 플래쉬 메모리를 이용한 전원/파손등에 안전한 파일 시스템이다. JFFS2로 버전이 업데이트 되면서 압축, 하드 링크 등 향상된 기능을 제공하며, 리눅스에서 제공하는 MTD 디바이스를 통해 접근 이 가능하다.

(64)

5.3.1 JFFS 유틸리티 생성 JFFS2 이미지를 생성하기 위해서는 이미지에 삽입할 내용을 미리 확보 정리하고 필요한 유틸리티를 설치하여야 한다. 필요한 유틸리티의 위치는 다음 주소에서 가져 올 수 있다. ftp://ftp.uk.linux.org/pub/people/dwmw2/mtd/cvs/ 다운로드가 완료/압축 해제 하였으면 생성된 util디렉터리로 이동 후 이미지 생성에 필요 한 유틸리티를 다음과 같이 생성한다. make mkfs.jffs2 5.3.2 JFFS 이미지 생성 관련 유틸리티가 확보되었으면 다음과 같이 jffs2 이미지를 만들 수 있다. cp mkfs.jffs2 /usr/local/bin/ mkfs.jffs2 -o usr.jffs -e 0x40000 -r tmpdir –p -o : 생성 파일 이름 -e : Flash erase 블록 사이즈 -r : 대상 디렉터리 지정(하위 디렉터리 포함) -p : 블록의 남는 공간을 채우기 위한 패딩 옵션 5.3.3 JFFS2를 이용한 usr 이미지 생성 먼저 제공된 CD에서 관련 소스를 가져와서 아래와 같이 jffs2이미지를 만들 수 있다. cp /mnt/cdrom/Source/filesystem/qtopia.jffs.tar.gz /working cd /working tar xvfz qtopia.jffs.tar.gz 압축 해제후 생성된 qtopia.jffs디렉터리에 필요한 내용을 수정한 후 다음과 같이 이미지 를 생성한다. mkfs.jffs2 -p -o Qtopia_test.jffs -e 0x40000 -r qtopia.jffs 정상적으로 jffs2이미지가 생성이 되었다면 부트로더의 tftp 기능을 이용하여 다운로드 하 여 사용할 수 있다.

참조

관련 문서

Input Serial Port to Sequencer Sync (Bits 3:2) Normally, the internal sequencer is synchronized to the incoming audio frame rate by comparing the internal program counter

- Khalifa Port Logistics 및 Khalifa Port’s South Quay 확장 공사가 내년 1분기 완료 예정이며, 특히 Abu Dhabi Terminals 확장 공사의 경 우 5개의 crane이

With the opening of the Songdo Bridge 4, IFEZ is looking forward to less congestion in traffic that connects from Songdo International City locations, including Incheon New

Even though one-stop service is critical in competitions with Northeast Asian ports as well as within Busan Port, we should keep in mind that the

본 연구에서 차세대 고속 터보프롭 항공기의 프로펠러 블레이드에 대한 공력 설계 및 성능 해석,그리고 구조 설계 및 해석을 수행하였다.블레이드 깃 요소 이론과

Secondly, the important factors to attract T/S cargo at Kwangyang Port are geographical location, promotion activity to introduce Port and expansion of

● 이더넷 케이블을 사용하여 프린터를 연결한 경우, 프린터가 전화 코드 또는 크로스오버 케이블로 네트 워크에 연결되어 있지는 않은지, 이더넷

I/O = bi-directional port with normal driving/sinking and Schmitt input mvI/O = multi voltage bi-direction port with Schmitt input. HSI = high speed serial interface with