KR100499050B1 - 이동통신을 위한 임베디드 시스템의 구현 방법 - Google Patents

이동통신을 위한 임베디드 시스템의 구현 방법 Download PDF

Info

Publication number
KR100499050B1
KR100499050B1 KR10-2003-0034322A KR20030034322A KR100499050B1 KR 100499050 B1 KR100499050 B1 KR 100499050B1 KR 20030034322 A KR20030034322 A KR 20030034322A KR 100499050 B1 KR100499050 B1 KR 100499050B1
Authority
KR
South Korea
Prior art keywords
kernel
embedded
environment
mobile communication
target system
Prior art date
Application number
KR10-2003-0034322A
Other languages
English (en)
Other versions
KR20040102735A (ko
Inventor
이명재
Original Assignee
주식회사 팬택
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 팬택 filed Critical 주식회사 팬택
Priority to KR10-2003-0034322A priority Critical patent/KR100499050B1/ko
Priority to US10/797,557 priority patent/US20040244008A1/en
Publication of KR20040102735A publication Critical patent/KR20040102735A/ko
Application granted granted Critical
Publication of KR100499050B1 publication Critical patent/KR100499050B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명의 이동통신을 위한 임베디드 시스템의 구현 방법은, 호스트에 임베디드 리눅스를 개발하기 위한 환경을 구축하고, 이를 토대로 타겟 보드에서 동작하는 커널과 푸트파일시스템을 이식함으로써, 효율적인 호스트와 타겟 시스템 설정으로 ARM용 크로스 개발환경에 기반하고, 임베디드 리눅스의 어플리케이션 개발시간을 단축시키는 이동통신을 위한 임베디드 시스템의 구현 방법을 제공하는데 그 목적이 있다.
상기 목적을 달성하기 위하여 본 발명은, 타겟 시스템 및 호스트 시스템을 포함하는 시스템에 적용되는 이동통신을 위한 임베디드 시스템의 구현 방법에 있어서, 상기 타겟 시스템에 대한 크로스 개발 환경을 구축하는 개발환경구축단계; 상기 타겟 시스템 및 상기 호스트 시스템의 네트워크 환경을 구축하는 네트워크환경구축단계; 상기 타겟 시스템의 부트 로더를 구성하는 부트로더구성단계; 상기 타겟 시스템에 커널을 구성하는 커널구성단계; 및 상기 타겟 시스템에 GUI 환경을 구성하는 GUI환경구성단계를 포함하고, 상기 커널은 임베디드 리눅스 커널인 것을 특징으로 한다.

Description

이동통신을 위한 임베디드 시스템의 구현 방법{METHOD FOR IMPLEMENTING EMBEDDED SYSTEM FOR MOBILE COMMUNICATION}
본 발명은 이동통신을 위한 임베디드 시스템의 구현 방법에 관한 것으로, 특히, 미리 정해진 특정 기능을 수행하기 위해 컴퓨터의 하드웨어와 소프트웨어가 조합된 임베디드 시스템에 있어서, 다양한 디바이스에 대한 지원성, 안정성, 신속하면서도 정확한 정보처리가 가능한 이동통신을 위한 임베디드 시스템의 구현 방법에 관한 것이다.
임베디드 시스템(Embedded System)이란 미리 정해진 특정 기능을 수행하기 위해 컴퓨터의 하드웨어와 소프트웨어가 조합된 전자제어 시스템을 말하며, 필요에 따라선 기계의 일부가 포함될 수 있다. 임베디드 시스템에서의 리눅스는 소스가 공개되어 있고 무료로 배포함으로써 가격 경쟁력이 있으며 다양한 디바이스에 대한 지원성, 안정성, 신속하면서도 정확한 정보처리가 가능하다. 또한 임베디드 리눅스는 리눅스 마이크로 커널을 사용할 경우 임베디드 시스템에서의 메모리 사용량을 상당부분 줄일 수 있다. 타겟보드에서 실행될 응용프로그램을 개발하기 위해서는 타겟보드의 기본적인 동작 환경인 루트 파일시스템과 개발환경인 TFTP, BOOTP, NFS등을 구성해주어야 한다. 그러나, 이런 설정들이 응용프로그램 개발과정에 있어서 상당부분 많은 시간을 소비해야 하는 문제점이 있다.
상기 문제점을 해결하기 위하여 안출된 본 발명은, 호스트에 임베디드 리눅스를 개발하기 위한 환경을 구축하고, 이를 토대로 타겟 보드에서 동작하는 커널과 푸트파일시스템을 이식함으로써, 효율적인 호스트와 타겟 시스템 설정으로 ARM용 크로스 개발환경에 기반하고, 임베디드 리눅스의 어플리케이션 개발시간을 단축시키는 이동통신을 위한 임베디드 시스템의 구현 방법을 제공하는데 그 목적이 있다.
상기 목적을 달성하기 위하여 본 발명의 이동통신을 위한 임베디드 시스템의 구현 방법은, 타겟 시스템 및 호스트 시스템을 포함하는 시스템에 적용되는 이동통신을 위한 임베디드 시스템의 구현 방법에 있어서, 상기 타겟 시스템에 대한 크로스 개발 환경을 구축하는 개발환경구축단계; 상기 타겟 시스템 및 상기 호스트 시스템의 네트워크 환경을 구축하는 네트워크환경구축단계; 상기 타겟 시스템의 부트 로더를 구성하는 부트로더구성단계; 상기 타겟 시스템에 커널을 구성하는 커널구성단계; 및 상기 타겟 시스템에 GUI 환경을 구성하는 GUI환경구성단계를 포함하고, 상기 커널은 임베디드 리눅스 커널인 것을 특징으로 한다.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 정도로 상세히 설명하기 위하여 본 발명의 가장 바람직한 실시예들을 첨부된 도면을 참조하여 설명하기로 한다.
도 1은 본 발명의 일 실시예에 의한 이동통신을 위한 임베디드 시스템의 구현 방법을 나타낸 동작흐름도로서, 이에 관하여 설명하면 다음과 같다.
먼저, 타겟 시스템에 대한 크로스 개발 환경을 구축한다(S101). 크로스 개발환경을 구축하기 위한 각 소프트웨어의 최신버전은 http://www.gnu.org/directory/에서 확인할 수 있다. 여기서 GNU 소프트웨어 목록을 계층적으로 분류해 추적할 수 있다. 소프트웨어의 제작자 및 각 프로젝트의 홈페이지 그리고 원시코드와 문서의 위치를 각 소프트웨어마다 알려주고 있다. 여기서, 주의해야할 사항은 GNU 소프트웨어는 개발초기부터 다중플랫폼을 염두에 두고 있지만 플랫폼별로 패치가 존재할 수 있다는 사실이다. 이러한 패치는 GNU 사이트가 아닌 다른 곳에 있을 가능성이 높기 때문에 찾기 쉽지 않다. 크로스 개발 환경을 구축하려면 GNU 소프트웨어 이외에 커널 원시 코드를 www.kernel.org 에서 가져와야 한다. 그리고 여기서도 GNU 소프트웨어처럼 패치가 필요하다. 크로스 개발환경을 구축하기 위해서는 필요한 소프트웨어를 먼저 구해야 한다. 원시코드형식의 소프트웨어의 종류와 내용은 다음과 같다.
시간이 부족하다면 RPM으로 만들어진 이진파일로 크로스 개발 환경을 꾸밀수도 있다. 미리 만들어놓은 이진파일은 다음과 같은 URL에서 구할수 있다.
개발환경 구축에 선행하여, 개발 호스트 플랫폼은 리눅스 운영체제를 탑재한 x86 PC일 수 있고, 임베디드(embedded)는 사용자계정, 작업경로는 /home/embedded/arm 그리고 설치 경로는 /usr/local/arm-dev/로 정할 수 있으며, 상기 타겟 시스템의 구성은 32bit Intel StrongARM SA1110 RISC Clock 206MHz, 32Mbyte SDRAM, 16Mbyte Flash를 포함할 수 있다. 또한, UART×2, CS8900(10Base-T) 이더넷 컨트롤러(Ethernet Controller), 7.5" STN(640*480) 칼라(color) LCD 기능을 가지고 있는 보드(Hyper 104 SA1110 Evaluation Board)를 사용할 수 있다. 이러한 타겟 시스템의 구성을 나타낸 예시도가 도 2에 도시되어 있다.
상기 타겟 시스템에 대한 크로스 개발 환경을 구축하는 단계에 있어서, binutils 컴파일과 설치를 위한 입력과정은 하기와 같다.
설치가 끝난후 /uer/local/arm-dev에 각종 디렉토리 생성 여부를 확인할 수 있다.
또한, 상술한 binutils 컴파일과 설치 이후에, gcc 컴파일 및 설치 과정이 수행되는데, gcc 컴파일에 앞서 arm용 리눅스 커널 원시 코드를 풀어야하고, gcc 패키지에 대한 패치작업을 해야한다. 커널 원시코드 압축풀기와 각종패치의 작업은 다음과 같다.
gcc 컴파일러를 컴파일하기 전에 커널 헤더 파일 디렉토리를 올바르게 링크시킨다.
리눅스 커널의 준비가 끝난후 gcc 초기 컴파일 단계로 들어간다.
여기서, gcc 초기 컴파일이 필요한 이유는 gcc 교차 컴파일러를 맨처음 컴파일할 때 필요한 환경이 제대로 갖춰져 있지 않기 때문이다. 즉, 타겟 플랫폼과 관련 있는 각종 헤더 파일과 glibc 라이브러리가 없는 상황에서 gcc 크로스 컴파일러의 컴파일이 불가능하기 때문이다. 이런 문제를 극복하는 방법은 처음부터 완벽한 gcc 크로스 컴파일러를 만드는 대신 헤더 파일과 라이브러리를 준비할 수 있는 기능만 탑재한 gcc 부트 스트랩 컴파일러를 만드는 것이다. gcc 2.95.3 계열의 부트 스트랩 컴파일러를 만드는 방식은 다음과 같다.
gcc 초기 컴파일이 끝나고 뒷부분에서 다룰 glibc 초기 컴파일이 끝나면 gcc 후기 컴파일 과정으로 들어갈 수 있다. gcc 후기 컴파일 과정에서는 부트 스트랩 컴파일 과정에서 설정한 크로스 컴파일 개발 환경을 최대로 사용해 C/C++과 같은 각종 컴파일러를 제대로 만들어 낸다.
또한, gcc 컴파일과 설치 이후에, glibc 컴파일과 설치 과정을 수행하는데, 부트 스트랩 컴파일러 준비가 끝나면 glibc 컴파일하는 작업을 진행한다. 초기와 후기 컴파일이 필요한 gcc 패키지처럼 glibc도 초기와 후기 컴파일이 필요한데, 이는 타겟 보드에 탑재할 라이브러리를 실행 경로를 바꿔 다시 만들어야 하기 때문이다. glibc 초기 컴파일 과정은 gcc에 비해 상당히 수월한데 그 순서는 다음과 같다.
gcc 후기 컴파일이 끝나면 glibc 후기 컴파일 작업으로 들어갈 수 있다. Glibc 후기 컴파일 작업에 있어서 make all 후에 make install 명령을 내리면 x86 플랫폼을 위한 glibc 라이브러리를 arm용으로 크로스 컴파일한 glibc 라이브러리로 교체됨으로서 시스템을 다시 설치해야 했었다. 따라서, install_root와 관련된 make 옵션의 충분한 검토가 필요하다. Glibc의 후기 컴파일 과정은 다음과 같다.
하기와 간단한 프로그램을 하나 컴파일해서 크로스 개발환경 설치를 검증할 수 있다.
file 명령의 결과로서 'hello: ELF 32-bit LSB executable, Advanced RISC Machines ARM, version 1, dynamically linked(uses shared libs), not stripped'와 같은 결과를 확인할 수 있다.
여기서, 기본적으로 GNU tool이 설치되어 있어야 하며, 크로스 컴파일러는 에서 최신 툴체인(toolchain)을 받아서 설치하였다. 툴체인(toolchain)이란 타겟 디바이스의 S/W 개발을 수행하는데 필요한 호스트 시스템의 크로스 컴파일 환경을 말한다. 툴체인(toolchain)은 여러 소스들을 컴파일하고 빌드(build)하여 실행파일을 생성하는데 필요한 각종 유틸리티 및 라이브러리의 집합체이다. 여기서는 GNU에서 제공하고 있는 GNU C, C++용 GCC compiler와 GNU binary utilities 그리고 GNU C library를 사용하였다. 또한, StrongARM에 사용하기 위한 ARM용 toolchain은 다음과 같이 호스트에 설치한 RPM 패키지이다.
그 후, 네트워크 환경을 구축한다(S102). 이러한 네트워크 환경의 구축은 TFTP, BOOTP/DHCP 설치와 환경설정, NFS 환경설정 미니컴(minicom) 설정으로 나눌수 있다.
Bootp는 TCP/IP상에서 자동부팅을 위한 최초의 표준으로써 diskless system이 부팅시 IP를 포함한 System configuration을 설정하는 방법이며 UDP와 TFTP를 사용한다. 이때, 이더넷(ethernet)을 이용한 tftp 방법이 상당히 시간절약 및 에러방지에 효율적이다. 리눅스(Linux)에서의 TCP/IP 통신은 inetd를 통해 이루어지며, 타겟보드는 호스트 시스템에 IP를 요청하면 호스트 시스템은 IP를 부여하게 된다.
Bootp 프로세스는 자신의 구성 화일을 읽어서 해당 MAC 어드레스(address)를 가진 항목이 있는가를 확인하고 항목이 존재한다면 들어있는 정보를 가지고 응답 패킷을 구성하게 되며, bootptab에 설정된 정보가 타겟 보드로 전송되어진다. Tftp는 ftp와 네트워크를 통한 파일 전송서비스라는 점은 비슷하지만 ftp는 tcp 전송방식을 사용하고 tftp는 udp를 통한 단방향 핸드쉐이킹 전송방식을 사용한다. upd는 신뢰성이 부족하지만 구조가 상당히 단순화되어서 빠른 전송이 가능하다. upd는 단지 메시지를 broadcast를 하게되어 타겟보드에서 수신하는지에 상관없이 타겟보드를 향해 데이터를 보낸다.
네트워크 구축 접근 방법을 상세히 살펴보면, 먼저, /etc/xinetd.d/tftp 파일을 다음과 같이 생성한다.
/etc/rc.d/init.d/xinetd를 재시작함으로써 환경설정파일을 다시 읽게한 후 GNU에서 나온 inetutils 패키지에 들어있는 tftpd를 다음과 같은 방법으로 컴파일한 후 설치한다.
테스트를 위해 tftp 최상위 디렉토리를 만들고 다음과 같은 테스트 파일을 생성한다.
개발 호스트에서 다음의 명령으로 tftp가 동작하는지 확인한다.
이제 bootp/DHCP 설치와 환경설정을 생각해보자. 만약, DHCP 서버를 설치하지 않았다면 다음과 같은 방법으로 DHCP 서버를 먼저 설치한다.
환경설정부분은 /etc/dhcp.conf 파일을 만들거나 이미 존재하면 필요한 부분을 추가/수정한다. 동일한 서브넷에 BOOTP/DHCP 서버를 둘이상 설치하면 클라이언트가 혼란을 일으킬 수 있으므로, BOOTP/DHCP 서비스는 반드시 호스트 하나가 담당하게 한다.
그 후, /var/state/dhcp/dhcpd.leases이나 /var/lib/dhcp/dhcpd.leases 파일을 확인한 후 해당 파일을 다음과 같이 생성하고 dhcpd를 시작한다.
설정이 모드 끝나면 동작 및 확인은 다음과 같이 할 수 있으며,
다음과 같은 결과출력을 볼 수 있다.
실제 구현과정에서 본 타겟보드로의 이미지 다운로드 중에 데이터의 유실이 많이 발생하였는데 파일이미지가 클수록 유실확률이 큰 것을 볼 수 있다. 본 구현중의 성공확률은 약 20% 정도였으며 호스트 시스템의 하드웨어 사양이나 설정방법에 따라 유동적인 모습을 나타내었다. 다음은 호스트환경에서 설정한 /etc/bootptab 및 /etc/inetd.d/tftp의 설정 정보이다.
/etc/export 파일 편집 또는 생성 후 공유 디렉토리를 외부로 엑스포트(export)시킨다. 또한, NFS 데몬이 앞서 지정한 디렉토리를 외부로 엑스포트 하도록 exportfs -a 명령을 내린다. 마지막으로 /etc/rc.d/init.d/nfs restart하면 된다.
개발 호스트에서의 동작확인은 서버와 클라이언트쪽에서 아래와 같이 각각 확인하면 된다.
임베디드 리눅스를 탑재한 타겟 보드는 콘솔을 사용하기 위해 대부분 직렬 포트를 통해 개발 호스트에 연결하게 된다.
그 후, 부트 로더를 구성한다(S103). 즉, 메모리에 적재하여 부팅하는 방법으로 설계하고, 이 이미지를 플래시 메모리에 저장하여 부트 ROM의 기능을 하게 된다. BIOS가 주축이 되는 x86환경과 달리 ARM 환경에서는 처음 전원이 들어오면 CPU가 호출하는 초기 엔트리 포인트 위치에 부트 로더를 위치시켜야 한다. 그리고 이렇게 플래시 메모리에 부트 로더를 구워주는 기능을 JTAG 소프트웨어가 담당한다.
JTAG 소프트웨어를 컴파일하기 전에 하드웨어 요구사항을 점검한다. 타겟 보드에는 연결 단자가 보통 세 개 있다. 하나는 콘솔 입출력을 위한 직렬 단자이고, 다른 하나는 JTAG를 위한 병렬 단자, 마지막 하나는 네트워크를 위한 RJ-45 단자이다. 부트 로더를 플래시 메모리에 굽기 위해서는 타겟보드에 있는 JTAG 단자와 개발 호스트에 있는 병렬 포트 단자 사이에 반드시 케이블을 연결해야 한다. JTAG 소프트웨어는 JTAG용 하드웨어가 동일하지 않으면 동작시킬수 없으므로 개발보드 회사에서 제공하는 소프트웨어를 쓰는 것이 무난하다.
부트로더의 이미지(blob)는 LART()에서 제공하는 blob을 JTAG를 이용한 플래시 퓨징(flash fusing) 방식으로 다운로드할 수 있고, H/W의 초기화, 리눅스의 부팅, 커널 혹은 램디스크 다운로드, 다운로드한 커널 및 램디스크를 플래시(flash)에 쓰기, TFTP를 통한 SDRAM에 다운로드가 가능하다. 또한, 호스트 시스템(host system)에서 동작하는 jflash라는 프로그램을 사용하였으며, 이 jflash는 병렬 포트(parallel port)를 이용하여 타겟 보드(target board)에서 필요로 하는 JTAG 신호를 생성한다. 호스트 시스템(host system)에서 생성된 JTAG 신호는 병렬 케이블(parallel cable)을 통해 동글(dongle)에 전달된다. 동글(Dongle)은 TTL 74HCT541을 사용하여 구현할 수 있으며, 이 기능은 단지 호스트 시스템(host system)의 병렬 포트(Parallel Port)에서 발생한 5V 전압을 SA1110에 적합한 3.3V 전압 레벨로 변환하는 기능이다.
동글(Dongle)을 통해서 전달된 JTAG 신호 중 TMS와 TCLK는 TAP에 전달되어 JTAG의 상태 머신(state machine)을 결정하고, TDO와 TDI는 JTAG의 명령의 상태에 따라 바이패스 레지스터(bypass register), 바운더리 스캔 셀(boundary scan cell), ID 레지스터(register) 등의 입력과 출력 부분에 연결된다. SA1110의 JTAG을 통해서 플래시(flash) 메모리가 필요로 하는 버스 타이밍(bus timing)을 발생하여 플래시(flash)에 전달한다.
호스트 시스템(host system)의 쉘(shell)에서 jflash blob을 입력하면 blob의 이진 코드(binary code)가 플래시(flash) 메모리의 0번지부터 퓨징(fusing)을 한다. 메모리에 쓰기 전에 기본적으로 쓰고자 하는 0번 블록(block)을 지우고, blob을 퓨징(fusing)한 후, 에러 없이 퓨징(fusing)되었는지를 검사하기 위해 검증을 한 후에 이상이 없으면 blob이 정상적으로 로딩(loading)을 완료하게 된다. 이 상태에서 직렬(serial) 통신 환경의 설정에 이상이 없다면 정상적으로 blobdl 동작하는 것을 볼 수 있다.
먼저 start.S를 통해 각종 하드웨어 초기화가 이루어지고 start.S에서 main.c의 c_main() 펑션으로 점프를 한다. c_main()에는 먼저 시리얼 및 타이머를 초기화하고 다음 커널(kernel)과 램 디스크(ram disk)를 sdram으로 리로딩(reloading)을 하고 커맨드를 기다린다.
만약, 아무 커맨드가 없으면 bootkernel() 함수를 통하여 바로 커널(kernel)이 실행되고 커맨드가 있다면 부트로더 명령을 할 수 있게 프롬프트가 떨어진다. 프롬프트상에서 명령을 기다리고 있다가 명령이 들어오면 GetCommand() 함수를 통해 명령을 분석하여 해당 펑션이 호출되어 해당 명령이 실행된다.
각종 명령은 bootkernel() 함수를 통해 커널이 부팅되고 download() 함수를 통해 호스트(Host)로부터 시리얼로 데이터가 sdram 영역으로 다운로딩이 되고 플래시(flash) 등등 여러 가지 기능이 수행된다.
Blob에 의한 부팅 과정은 터미널 에뮬레이터인 미니컴(minicom)으로 호스트에서 관찰할 수 있으며, 터미널에 대한 세팅은 115200 baud, 8 data bits, no parity, 1 stop bit, no start bits로 하였다.
blob의 설치는 다음과 같은 순서대로 진행한다.
1. blob을 받아서 압축을 푼다.
2. $ tar xzvf blob.tar
3. 크로스 컴파일러(Cross Compiler)를 설치할 때와 마찬가지로 /root의 .bash_profile profile을 편집한다.
4. 다음과 같이 실행하면 편집한 bash_profile을 사용할 수 있다.
$ source .bash_profile
5. 이후에 압축을 푼 폴더로 간다.
6. 아래와 같은 명령어를 실행하면 config가 자동 설정한다.
컴파일이 에러없이 수행되면 src/에 blob이라는 이진(binary) 파일이 생긴다. 이 파일을 jflash를 이용하여 타겟보드의 플래시(flash) 영역에 다운로드한다.
타겟시스템의 플래시(flash) 메모리 영역의 시작번지에는 부트로더가 있으며, 타겟시스템이 동작하기 시작할 때의 시작번지가 부트로더 영역이다.
그 후, 커널을 구성한다(S104). 커널 컴파일하는 과정은 x86 계열의 커널 컴파일하는 과정과 크게 다르지 않다. 커널구성은 make config, make menuconfig, make xconfig 등이 있다. 이중에서 가장 많이 사용되어지는 lxdialog를 이용하여 make menuconfig를 사용할 수 있으며, make dep; make zImage; make modules; make modules_install 과정순으로 진행한다. make zImage로 생성된 커널이미지는 arch/arm/boot에 존재하며 새로 생성된 zImage를 /tftp로 복사하여 부트로더에서 다운로드한다. 커널 이미지(zImage)는 도 3에 도시된 바와 같은 루틴에 의해 만든다.
타겟 보드는 두가지의 구성(configuration)이 존재한다.
첫째는 램 디스크(ramdisk)를 사용하는 방법이고 둘째는 cramfs를 루트 파일 시스템(root filesystem)으로 사용하는 방법이다. cramfs는 ROM 파일시스템(filesystem)으로 읽기 전용(read-only)으로만 사용가능하며 이 또한 데이터의 손실을 막을 수가 있는 장점이 있다. cramfs는 압축 알고리즘(gzip)을 사용하기 때문에 그만큼 용량을 줄일 수 있으며 플래시(Flash)에서 실행되기 때문에 램 디스크(ramdisk)에 비해 램의 사용량을 줄일 수가 있다. 이것을 플래시(flash) 메모리에 사용하였다.
그 후, GUI 환경을 구성한다(S105). 임베디드 리눅스(Embedded linux) 환경에서의 이동통신을 위한 어플리케이션 개발은 GUI 툴키트(toolkit)의 선택이 상당히 중요한데, 타겟 보드의 포팅(porting)에 사용되어지는 GUI 툴키트(toolkit)로서 Qt/embedded를 사용할 수 있다. 여기서, 상기 Qt/embedded는 X-window 없이 리눅스(linux) 커널이 제공하는 프레임 버퍼(Frame Buffer)를 이용하는 방식을 사용한다. QT/embedded를 구현하는 과정은 하기와 같다.
INSTALL 파일 내용을 확인하고, 자신의 환경설정에 맞게 수정한다.
또한, .bash_profile 환경설정파일에 다음부분을 추가한다.
추가가 끝났으면 #./configure한 후 하기의 과정을 거치면 Qt/embedded의 설치가 끝난다.
/usr/local/qte-2.3.2/lib에서 라이브러리를 다음과 같이 확인하면 된다.
위의 네 개의 파일이 존재하는지 확인하고 다시 로그인해서 #echo$QTDIR로 확인한다. 경로명은 /usr/local/qte-2.3.2일 수 있다. Qt Virtual FrameBuffer를 사용하기 위해서는 커널 컴파일 옵션에서 필요한 항목들을 설정한 후에 다시 커널 컴파일을 해야 한다. #cd/usr/src/linux 혹은 cd/usr/src/linux-2.X.X(커널이 존재하는 디렉토리)로 이동한 후 # make menuconfig한다.
여기까지 커널메뉴에서의 항목설정이다.
# make dep; make clean; make; make install; make modules; make modules_install 순서로 커널 컴파일을 다시 한다. Qt Virtual FrameBuffer를 사용하기 위해서는 x86에 설치된 리눅스에서 사용하여 개발해야 하기 때문에 Qt/X11용으로 컴파일된 Qt Virtual FrameBuffer를 설치해야 한다.
Source 주소는 ftp://ftp.trolltech.com/qt/source/qt-x11-2.3.2.tar.gz이다. 물론 그 이상의 버전을 받아도 무관하다. 계정을 하나 만들고(user는 embedded로 하였다.) 임베디드(embedded) 계정으로 로그인한다. 압축을 푼 후 임베디드(embedded) 홈 디렉토리에서(cd/home/embedded).bash_profile에서 다음과 같이 추가한다.
환경설정이 끝난 후 #./configure 실행한 후 라이센스 동의에 'yes'하고 컴파일이 끝난 후 qvfb 컴파일을 한다. 이제 qvfb를 실행한다.
x86에 리눅스를 설치하고 개발에 필요한 GUI 툴키트(Toolkit)인 Qt/Embedded를 설치하였고 임베디드 시스템(embedded system)의 에뮬레이터로 사용할 수 있는 Qt 가상 프레임 버퍼(Virtual FrameBuffer)를 설치할 수 있다. Qt 가상 프레임 버퍼를 사용하기 위해선 Qt/X11이 필요하므로 설치한다. 또한, .bash_profile에서 다음과 같이 추가한다.
#cp~/qtx-2.3.2/tools/qvfb/qvfb/qvfb ~/qtx-2.3.2/bin으로 복사해서 어느 디렉토리에서든지 사용가능하게 하였다. Qt 가상 프레임 버퍼 테스트는 루트(root)로 로그인한 후 아래와 같이 하면 된다.
이상에서 설명한 본 발명은, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 있어 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지로 치환, 변형 및 변경이 가능하므로 전술한 실시예 및 첨부된 도면에 한정되는 것이 아니다.
본 발명은 호스트에 임베디드 리눅스를 개발하기 위한 환경을 구축하고, 이를 토대로 타겟 보드에서 동작하는 커널과 푸트파일시스템을 이식함으로써, 효율적인 호스트와 타겟 시스템 설정으로 ARM용 크로스 개발환경에 기반하고, 임베디드 리눅스의 어플리케이션 개발시간을 단축시키는 장점이 있다.
도 1은 본 발명의 일 실시예에 의한 이동통신을 위한 임베디드 시스템의 구현 방법을 나타낸 동작흐름도,
도 2는 임베디드 시스템이 구현되는 타겟 시스템의 구성을 나타낸 예시도,
도 3은 커널 이미지(zImage)를 생성하는 루틴을 나타낸 동작흐름도.

Claims (4)

  1. 타겟 시스템 및 호스트 시스템을 포함하는 시스템에 적용되는 이동통신을 위한 임베디드 시스템의 구현 방법에 있어서,
    미리 설정된 URL로부터 다운로드된 소프트웨어 및 원시코드를 이용하여 상기 타겟 시스템에 대한 크로스 개발 환경을 구축하는 개발환경구축단계;
    이더넷을 이용한 TFTP 방식에 따라 상기 타겟 시스템 및 상기 호스트 시스템의 네트워크 환경을 구축하는 네트워크환경구축단계;
    부트로더를 구성하기 위한 소정 소프트웨어를 구동시켜 상기 타겟 시스템의 부트 로더를 구성하는 부트로더구성단계;
    상기 타겟 시스템에 커널을 구성하는 커널구성단계; 및
    상기 타겟 시스템에 GUI 환경을 구성하는 GUI환경구성단계
    를 포함하고,
    상기 커널은 임베디드 리눅스 커널인
    것을 특징으로 하는 이동통신을 위한 임베디드 시스템의 구현 방법.
  2. 제1항에 있어서, 상기 개발환경구축단계는,
    gcc 부트 스트랩 컴파일러에 의해 gcc 초기 컴파일 과정을 수행하는 단계
    를 포함하고,
    상기 gcc 부트 스트랩 컴파일러는 헤더 파일 및 라이브러리를 준비하는 기능을 탑재한
    것을 특징으로 하는 이동통신을 위한 임베디드 시스템의 구현 방법.
  3. 제1항에 있어서, 상기 네트워크환경구축단계는,
    소정 경로에 하기 프로그램을 생성하는 과정;
    bootp/DHCP 설치와 환결설정을 위한 프로그램을 수행하는 과정; 및
    NFS 환경설정을 위한 프로그램을 수행하는 과정;을 포함하여 구성되는 것을 특징으로 하는 이동통신을 위한 임베디드 시스템의 구현 방법.
  4. 제1항에 있어서, 상기부트로더구성단계는,
    읽기 전용 파일 시스템을 루트 파일 시스템으로 사용하여 상기 타겟 시스템의 부트 로더를 구성하는 단계인
    것을 특징으로 하는 이동통신을 위한 임베디드 시스템의 구현 방법.
KR10-2003-0034322A 2003-05-29 2003-05-29 이동통신을 위한 임베디드 시스템의 구현 방법 KR100499050B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR10-2003-0034322A KR100499050B1 (ko) 2003-05-29 2003-05-29 이동통신을 위한 임베디드 시스템의 구현 방법
US10/797,557 US20040244008A1 (en) 2003-05-29 2004-03-10 Method of implementing Linux-based embedded system for mobile communication

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2003-0034322A KR100499050B1 (ko) 2003-05-29 2003-05-29 이동통신을 위한 임베디드 시스템의 구현 방법

Publications (2)

Publication Number Publication Date
KR20040102735A KR20040102735A (ko) 2004-12-08
KR100499050B1 true KR100499050B1 (ko) 2005-07-04

Family

ID=33448292

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-0034322A KR100499050B1 (ko) 2003-05-29 2003-05-29 이동통신을 위한 임베디드 시스템의 구현 방법

Country Status (2)

Country Link
US (1) US20040244008A1 (ko)
KR (1) KR100499050B1 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409685B2 (en) 2002-04-12 2008-08-05 Hewlett-Packard Development Company, L.P. Initialization and update of software and/or firmware in electronic devices
US8479189B2 (en) 2000-11-17 2013-07-02 Hewlett-Packard Development Company, L.P. Pattern detection preprocessor in an electronic device update generation system
US7814474B2 (en) * 2000-11-17 2010-10-12 Hewlett-Packard Development Company, L.P. Updatable mobile handset based on Linux with compression and decompression techniques
US20070220499A1 (en) * 2003-07-23 2007-09-20 Silicon Laboratories Inc. USB tool stick with multiple processors
US8555273B1 (en) 2003-09-17 2013-10-08 Palm. Inc. Network for updating electronic devices
US7904895B1 (en) 2004-04-21 2011-03-08 Hewlett-Packard Develpment Company, L.P. Firmware update in electronic devices employing update agent in a flash memory card
CA2563786A1 (en) * 2004-04-28 2005-11-10 Openlogic, Inc. Tools for stacking uncoordinated software projects
US8526940B1 (en) 2004-08-17 2013-09-03 Palm, Inc. Centralized rules repository for smart phone customer care
KR100667700B1 (ko) 2004-12-02 2007-01-12 한국전자통신연구원 휴대 인터넷 시스템의 단말 장치와 단말 장치에서의 상향데이터 전송 방법
US20060167910A1 (en) * 2005-01-25 2006-07-27 /Moxa Technologies Co., Ltd./ [electronic device with an embedded linux application system]
TWI341992B (en) * 2005-02-22 2011-05-11 Lite On Technology Corp Method and system for quickly developing an embedded operating system through utilizing an automated building framework
US20060282815A1 (en) * 2005-06-09 2006-12-14 Finite State Machine Labs, Inc. System, method and computer program product for developing, configuring, installing and testing software
US7707362B2 (en) * 2005-06-30 2010-04-27 Seagate Technology Llc Context-free data transactions between dual operating systems embedded within a data storage subsystem
CN100343808C (zh) * 2005-12-15 2007-10-17 北京中星微电子有限公司 一种嵌入式***执行启动装载的方法
US8260968B2 (en) * 2006-01-23 2012-09-04 Lantiq Deutschland Gmbh Method and system for booting a software package on a network processor
WO2007146710A2 (en) 2006-06-08 2007-12-21 Hewlett-Packard Development Company, L.P. Device management in a network
WO2008014454A2 (en) 2006-07-27 2008-01-31 Hewlett-Packard Development Company, L.P. User experience and dependency management in a mobile device
US9244672B2 (en) * 2006-11-30 2016-01-26 Red Hat, Inc. Optimization utility for developing embedded systems
US9122553B2 (en) * 2007-12-01 2015-09-01 Sony Corporation Synchronous bus download of TV software update
US8498982B1 (en) 2010-07-07 2013-07-30 Openlogic, Inc. Noise reduction for content matching analysis results for protectable content
CN102385509A (zh) * 2010-08-31 2012-03-21 苏州大学 一种图形化嵌入式开发方法和平台
CN102447732A (zh) * 2011-10-11 2012-05-09 浪潮电子信息产业股份有限公司 一种在bmc开发中智能配置宿主机嵌入式环境的方法
WO2015012977A1 (en) * 2013-07-26 2015-01-29 Evernote Corporation Direct presentations from content collections
KR102156371B1 (ko) * 2013-11-27 2020-09-15 한국전자통신연구원 네이티브 빌드 기반의 임베디드 소프트웨어 개발 환경을 지원하기 위한 임베디드 소프트웨어 개발 도구 제공 방법 및 장치
CN105022645A (zh) * 2015-06-15 2015-11-04 山东超越数控电子有限公司 一种大规模更新管理模块固件的实现方法
KR102403117B1 (ko) * 2016-02-22 2022-05-27 삼성전자주식회사 동글 및 그의 제어 방법
CN105760201B (zh) 2016-02-29 2019-05-28 华为技术有限公司 一种嵌入式装置的启动方法和装置
CN107729091A (zh) * 2017-11-30 2018-02-23 天津光电通信技术有限公司 基于Zynq的嵌入式***平台及Linux内核相关文件生成方法
CN110457051A (zh) * 2019-08-15 2019-11-15 浪潮云信息技术有限公司 一种自动化快速安装部署v语言编译环境的方法及***
CN111722868A (zh) * 2020-05-20 2020-09-29 上海中科网威信息技术有限公司 一种申威防火墙快速移植高版本linux内核的方法
CN112486570B (zh) * 2020-11-06 2023-06-02 麒麟软件有限公司 一种不同类型CPU的Glibc兼容方法
CN112631897B (zh) * 2020-12-07 2023-08-08 麒麟软件有限公司 一种快速调试linux内核的方法
CN115981646A (zh) * 2022-12-29 2023-04-18 深圳市铨顺宏科技有限公司 一种交互界面快速开发方法、装置、设备及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6963981B1 (en) * 2001-01-29 2005-11-08 Akamai Technologies, Inc. Method and apparatus for remote installation of an operating system over a network connection
US20020188434A1 (en) * 2001-06-12 2002-12-12 Pauline Shulman System and method for providing cross-development application design tools and services via a network

Also Published As

Publication number Publication date
US20040244008A1 (en) 2004-12-02
KR20040102735A (ko) 2004-12-08

Similar Documents

Publication Publication Date Title
KR100499050B1 (ko) 이동통신을 위한 임베디드 시스템의 구현 방법
US20080178143A1 (en) System, Method and Computer Program Product for Developing, Configuring, Installing and Testing Software
Kurniawan Getting Started with Windows 10 IoT Core for Raspberry Pi 3
Dir OpenWrt Development Guide
Sampath et al. Efficient embedded software development using QEMU
CN113157329A (zh) 启动应用的方法、***、服务器和存储介质
Kasteleiner Principles of applying embedded linux on imote2
KR100463838B1 (ko) 유아이에이 시스템을 위한 부트로더의 프로그램 다운로드및 엔에프에스 개발환경 지원방법
Rand et al. CBC Hacking 2010 (Part 1)
Toivanen OpenDataPlane (ODP) as a Part of a Linux Operating System Image Built with Yocto Project
Sirotkin Roll your own embedded Linux system with buildroot
Lariviere et al. uClinux on the Altera DE2
Hellström SnapGear Linux for LEON
Norum Getting started with EPICS on RTEMS
Banik et al. Payload
Herman et al. Development of an embedded operating system based on the Linux kernel for SoC FPGA
Jones Embedded Linux on the PowerPC
Prasad et al. Development of System Level Computational Platform for IP-BTS Telecom Application
Almesberger kboot—A boot loader based on Kexec
CN118012759A (zh) 一种可视化远程调试方法、环境搭建方法、装置及设备
He et al. Software Implementation of the Data Acquisition System Based on µCLinux Embedded Operating System
Duret-Lutz et al. Using gnu autotools
Casey Linux on the ARM Integrator Compact Platform (CP)
Ni Electronic Photo Frame
McConkey Open source Coldfire IDE

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120604

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20130530

Year of fee payment: 9

LAPS Lapse due to unpaid annual fee