460 likes | 707 Views
J2ME 의 이해. MIDlet (1/13). 개념 정의 무선상에서 배포되고 MIDP 호환 장비에서 실행되는 애플리케이션 MID(Mobile Information Device) 와 Applet 의 합성어 JAR 파일의 형태로 배포. MIDlet (2/13). MIDlet 을 위한 구성 요소 JAM(Java Application Manager) 미들릿 ( MIDlet ) 을 설치 , 실행 , 제거하는 기능을 수행하기 위해 만들어진 일종의 관리 소프트웨어 미들릿 ( MIDlet ) Suite
E N D
MIDlet (1/13) • 개념 정의 • 무선상에서 배포되고 MIDP호환 장비에서 실행되는 애플리케이션 • MID(Mobile Information Device)와 Applet의 합성어 • JAR 파일의 형태로 배포
MIDlet (2/13) • MIDlet을 위한 구성 요소 • JAM(Java Application Manager) • 미들릿(MIDlet)을 설치, 실행, 제거하는 기능을 수행하기 위해 만들어진 일종의 관리 소프트웨어 • 미들릿(MIDlet) Suite • 미들릿 어플리케이션의 모든 클래스 파일들을 JAR로 패키지화 • JAR파일은 하나 이상의 미들릿 어플리케이션을 포함 • 아이콘이나 이미지등과 같은 MIDlet이 사용하는 리소스 파일들을 포함
MIDlet (3/13) • Manifest • JAR파일의 내용, 이름, 버전, 벤더 등의 정보를 포함 • 미들릿 Suite의 JAR파일 내에 포함 • JAD • JAM에 JAR파일의 사전 정보를 제공 • J2SE기반의 JAR파일과 MIDP슈트를 포함한 JAR파일을 구분 • JAR파일을 다운 받기 전 JAD파일을 우선 다운 받아 검사
MIDlet (4/13) • MIDlet 라이프 사이클
MIDlet (5/13) • 프로그래밍 • jdk1.4 혹은 jdk1.3 설치 • Midp-fcs 1.0.3 설치 • 프로그램 작성 • 컴파일 • 사전 검증 • JAD(Java Application Descriptor)파일 생성 • JAR파일 생성 • 서버의 mime.type설정 • 테스트 및 웹 사이트를 통한 배포
MIDlet (6/13) • MIDP설치 및 환경 설정 • 썬마이크로스시템즈의 MIDP참조 구현 다운로드 http://java.sun.com/products/midp • 압축을 풀어 환경 변수 추가 • Preverify.exe와 midp.exe(에뮬레이터)가 위치한 디렉토리를 환경변수에 추가 • Ex) C:\j2me\midp\bin\ • 컴파일 및 사전 검증에 필요한 클래스 파일들이 포함된 경로를 환경변수에 추가 • Ex) C:\j2me\midp\classes
MIDlet (7/13) • 코딩 • 컴파일 및 사전 검증 • javac -d .\ -bootclasspath c:\j2me\midp\classes HelloMIDlet.java9 • preverify -classpath c:\j2me\midp\classes HelloMIDlet • 테스트 및 실행 • 패키징 및 JAD파일 작성 • cd output • jar cf ..\HelloMIDlet.jar *.class • cd .. • edit HelloMIDlet.jad • 테스트 및 Web/WAP사이트를 통한 배포 • midp -classpath HelloMIDlet.jar -descriptor HelloMIDlet.jad
MIDlet (8/13) • HelloMIDlet.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloMIDlet extends MIDlet implements CommandListener { private Command exitCommand; // The exit command private Display display; // The display for this MIDlet public HelloMIDlet() { display = Display.getDisplay(this); exitCommand = new Command("Exit", Command.EXIT, 1); } public void startApp() { TextBox t = new TextBox("HelloMIDlet", "Test string", 256, 0);
MIDlet (9/13) • HelloMIDlet.java (계속) t.addCommand(exitCommand); t.setCommandListener(this); display.setCurrent(t); } public void pauseApp() {} public void destroyApp(boolean unconditional) {} public void commandAction(Command c, Displayable s) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } } }
MIDlet (10/13) • HelloMIDlet.jad • MIDlet-Name: HelloWorld • MIDlet-Version: 1.0.3 • MIDlet-Vendor: Sun Microsystems, Inc. • MIDlet-Description: Sample Hello World MIDlet • MIDlet-Info-URL: http://java.sun.com/j2me/ • MIDlet-Jar-URL: http://127.0.0.1/hello.jar • MIDlet-Jar-Size: 1020 • MicroEdition-Profile: MIDP-1.0 • MicroEdition-Configuration: CLDC-1.0 • MIDlet-1: HelloWorld,, HelloMIDlet
MIDlet (11/13) • MIDP환경에서 컴파일과 실행
MIDlet (12/13) • J2ME Wireless Toolkit • MIDP애플리케이션 개발을 위한 통합 개발 환경 • 개발 과정 단순화 및 JAD파일 자동 생성 프로젝트 생성 Jad파일 생성 메뉴
MIDlet (13/13) • Demo Project빌드 및 실행
임베디드 시스템 개발 하드웨어 OS개발 또는 포팅 디바이스 드라이버 응용 프로그램 개발 임베디드 시스템 개발 구조 • 임베디드 시스템의 개발은 크게 3가지의 독립된 분야가 유기적으로 결합되어 있다
HOST TARGET GUI Development Tools Target Server Debug Agent Embeded Application Library Sub-system Core OS Simulation Environment Kernel 임베디드 소프트웨어 개발 환경 • 일반적인 임베디드 소프트웨어 개발 환경 구성
호스트 컴퓨터의 기본 소프트웨어 • 터미널 프로그램 • 타켓 보드에서 일어나는 진행 상황을 호스트 컴퓨터에서 볼 수있게 모니터링 할 수 있는 통신 프로그램 • bootp, tftp, nfs 프로그램 • 호스트 컴퓨터와 타켓 보드 사이의 통신을 원할 하게 해주는 응용프로그램 • Jtag 프로그램 • 호스트 컴퓨터에서 타켓 보드의 flash ROM에 직접 프로그램을다운 로딩하는 프로그램 • 크로스 컴파일러 툴 체인 • 호스트 컴퓨터와 타켓 보드에서 사용하는 프로세서가 다를 때 타켓 보드에서 실행될 수 있도록 프로그램을 컴파일 하는 툴 체인
EMPOS-II 개발 환경 설치 • minicom • bootp • tftp • nfs • 크로스컴파일러
minicom • 타켓 보드에서 일어나는 진행 상황을 호스트 PC에서 모니터링 할 수 있는 리눅스 기반의 소프트웨어 • 환경 설정 • minicom –s
bootp (1/2) • 타켓 보드에서 사용할 IP 주소를 유동적으로 할당 • 환경 설정 • /etc/bootptab • /etc/hosts
bootp (2/2) • 환경 설정 • /etc/xinetd.d/bootp
tftp • 부트로더에서 용량이 큰 데이터를 다운 받기 위해 사용되는 UDP • 환경 설정 • /etc/xinetd.d/tftp
nfs • 리눅스 간 파일을 공유할 수 있는 파일 시스템으로, 호스트 컴퓨터에서 작업한 내용이 곧 바로 타겟 보드에서 실행 가능 • 환경 설정 • /etc/exports • 타켓 보드에서 파일 공유
크로스 컴파일러 • 호스트 컴퓨터와 타겟 보드에서 사용하는 프로세서가 다를 때 타겟 보드에 실행될 수 있도록 작업한 프로그램을 컴파일 해 주는 프로그램 • 환경 설정 • tar xvfz cross-tools.tgz • /.profile ( 혹은 ~/.bash_profile )
타켓 보드의 기본 소프트웨어 • 부트로더 • 타켓 보드 부팅 시 하드웨어를 초기화하고, 커널을 램에 올린 후 실행권한을 커널로 전달하는 프로그램 • 리눅스 커널 • 타켓보드의 시스템 구동에 필요한 환경을 만들고, 타켓 보드에서 실행되는 프로그램을 관리하는 소프트웨어 • 파일 시스템 • 디스크의 섹터와 트랙, 실린더 등을 논리적으로 사용하기 위하여 블록 단위로 읽고 쓰는 메커니즘 • 디바이스 드라이버 • 주변 하드웨어를 제어하기 위한 프로그램 • 응용 프로그램
EMPOS-II 의 소프트웨어 구성 (1/2) • 부트로더 • EMPOS-BOOT v0.1 • 리눅스 커널 • kernel : linux-2.4.19 • ARM Patch : patch-2.4.19-rmk4 • Xscale Patch : diff-2.4.19-rmk4-pxa2 • 보드 Patch : diff-2.4.19-rmk4-pxa2-empx1 • 파일 시스템 • ramdisk-16m(ext2) • GUI • QT/E-2.3.2, Qtopia-1.4.0 • 개발 툴 • GNU Toolkit, Visual ESTO
EMPOS-II 의 소프트웨어 구성 (2/2) • 커널 삽입 디바이스 • TFT LCD, PCMIA/CF, PS2 Keyboard, Touch Screen • AC97 Audio, IrDA, FFUART, MMC 등 • 모듈 형태 디바이스 • SMC91111 Primary/Secondary Ethernet Driver • Prism2 Wireless Driver • IDE Disk Driver • Text LCD Driver • LED, Button Driver • 7 Segment LED Driver • GPIO Input, Output Driver
EMPOS-II 소프트웨어 구성 • 부트로더 • 부트로더 역할 • 부트로더 흐름도 • 부트로더 메모리 맵 선언 • 부트로더 명령어 • 부트로더 설치
부트로더 역할 • 타겟 보드 부팅 시 하드웨어를 초기화 하고, 커널을램에 올린 후 실행권한을 커널로 전달하는 프로그램 • 부트로더의 역할 • 하드웨어 초기화 • Memory Setting, CPU Clock setting, GPIO setting,Serian setting, MAC address 획득 및 Ethernet port setting • Flash 에서 RAM으로 Memory 복사 • Kernel image copy, ramdisk image copy, bootloader copy • Kernel booting • Command mode 제공 • 포팅의 편의를 위한 Debug 모드 제공
부트로더 메모리 맵 선언 (1/2) • 메모리 맵
부트로더 메모리 맵 선언 (2/2) • empos_boot/header/config.h
부트로더 명령어 • boot : 램 상에 존재하는 커널을 부팅한다 • reset : 롬 상에 존재하는 부트로더를 재시작 한다 • bootp : bootp를 통해 호스트로부터 IP를 할당 받는다 • setip : 호스트와 타겟 보드의 IP를 설정한다 • macwrite : Primary/Secondary Ethernet의 MAC 주소를 설정한다. • tftp: tftp를 통한 데이터를 전송 받는다. • download : 시리얼을 통한 데이터를 전송 받는다 • read : 특정 메모리 위치의 값을 읽어온다 • write : 특정 메모리 위치의 값을 변경한다 • flash : 전송 받은 데이트를 플래쉬에 저장한다 • erase : 플래쉬에 저장되어 있는 데이터를 삭제한다. • status : 메모리맵/ 레지스터/ 이더넷 설정 등을 출력한다. • help : 도움말을 출력한다. • test : 사용자 테스트 함수를 제공한다
부트로더 설치 • 압축 해제 및 컴파일 • tar xvfj empos_boot.tar.bz2 • make • 부트로더 포팅 • Jtag 을 이용한 포팅 • 부트로더에서 포팅
커널 • 커널의 역할 및 기능 • 커널의 구조 • 커널 컴파일 • 커널 포팅
커널의 역할 및 기능 • 커널의 역할 • 운영체제를 구성하고 있는 핵심(core)으로 타겟보드의 시스템 구동에 필요한 환경 설정과 수행되는 프로그램들을 스케줄링하는 소트프웨어 • 커널의 기능 • 프로세스 관리 • 메모리 관리 • 파일 시스템 관리 • 디바이스 관리 • 네트워크 관리
커널 컴파일 (1/2) • 커널 소스 확보 • http://www.kernel.org/pub/linux/kernel/v2.4/ • linux-2.4.19 • ARM 패치 적용 • ftp://ftp.arm.uk.linux.org/pub/linux/arm/kernel/v2.4/ • patch-2.4.19-rm k4.gz • Xscale 패치 적용 • ftp://ftp.arm.uk.linux.org/pub/linux/arm/people/nico/v2.4/ • Diff-2.4.19-rmk4-pxa2.gz • EMPOS-II 보드 패치 적용 • Diff-2.4.19-rmk4-pxa2-empx1-20030916.gz
커널 컴파일 (2/2) • make empos_config • 컴파일 환경을 EMPOS 보드에 맞게 설정 • make oldconfig • 설정된 환경을 소스에 적용 • make dep • 파일 의존성 검사 • make clean • 이미 컴파일된 오브젝트 삭제 • make zImage • 압축된 커널 이미지 생성 • make modules • 모듈 형태로 선택된 항목 컴파일
커널 포팅 • 생성된 zImage를 tftp 서비스 디렉토리로 복사 • 부트로더에서 포팅 • 호스트 컴퓨터에서 zImage 다운 후 • flash rom으로 복사 • 재 실행
램 디스크 • 램 디스크 • 리눅스 파일 시스템 • JFFS 파일 시스템
램 디스크 • 별도의 물리적 저장 장치가 없이 메모리의 한 부분을 할당하여 컴퓨터의 하드 디스크처럼 사용 가능 • 램디스크 생성 • 램디스크 수정
/root bin boot dev etc home lib mnt proc root sbin tmp usr var user1 user2 lib local sbin src include 리눅스 파일 시스템 (1/2) • 디스크의 섹터와 트랙, 실린더 등을 논리적으로 사용하기 위하여 블록 단위로 읽고 쓰는 메커니즘 • 리눅스 파일 시스템의 구조
리눅스 파일 시스템 (2/2) • / : 루트 디렉토리 • /boot : 부팅과정에 필요한 모든 구성 요소들이 포함 • /bin : 실행 파일이 포함 • /dev : 디바이스 드라이버 포함 • /etc : 리눅스 운영에 필요한 설정 파일 포함 • /home : 사용자의 홈 디렉토리 • /lib : 공유 라이브러리 모듈 저장 • /root : 시스템 관리자인 root의 홈 디렉토리 • /sbin : 시스템 관리를 위한 실행 유틸리티 저장 • /usr : 공유 가능한 대부분의 프로그램 설치
JFFS 파일 시스템 • 플래쉬 메모리를 이용한 전원/파손 등에 안전한 파일 시스템 • JFFS 이미지 생성 • -o : 생성 파일 이름 • -e : flash erase 블록 사이즈 • -r : 이미지 생성을 원하는 대상 디렉토리 지정