사용하는 임베디드 시스템에 DRAM 이 있다면, 보드상이나 칩에 DRAM 컨트롤러가 내장되어야 한다. DRAM 컨트롤러는 프로세서와 메로리 칩사이에 별도로 존재하는 하드웨어로서, 주요 기능은 DRAM 의 데이터를 유지하기 위해 리프레시를 하는 것이다. 그러나 리프레시를 잘 하기 위해서는 몇가지 작업을 해야 한다.

소프트웨어가 제일 먼저 해야 할 작업은 DRAM 컨트롤러를 초기화하는 것이다. 만약  시스템에 다른 종류의 램이 없다면 스택이나 힙을 만들기 전에 이를 초기화 해야한다. 초기화 코드는 주로 어셈블리어로 작성되며 하드웨어의 초기화 모듈 내에 존재한다.

DRAM 컨트롤러는 대부분 하나 또는 그 이상의 셋업 명령으로 구성된 간단한 초기화 시퀸스를 필요로 한다. 셋업 명령은 컨트롤러에게 DRAM과의 하드웨어 인터페이스와 데이터가 얼마나 자주 리프레시 해야 하는 가를 설정하게 된다. 각각의 시스템마다 필요한 초기화 시퀀스를 결정하려면 보드를 설계한 사람과 이야기를 하거나, DRAM 과 DRAM 컨트롤러에 대해 설명한 데이터 북을 읽어야 한다. 만약 시스템이 DRAM 이 제대로 동작하지 않는다면 DRAM 컨트롤러가 초기화되지 않았거나, 잘못 초기화된 경우이다.


'정리없는자료 > Embedded System' 카테고리의 다른 글

DRAM 컨트롤러  (0) 2007.04.24
GPIO 레지스터  (0) 2007.04.22
팜, 리눅스기반 운영체제 개발  (0) 2007.04.20
Boa web server의 이해  (0) 2007.04.19
디바이스 드라이버 커널에 포함  (0) 2007.04.17
파일 시스템(FILE SYSTEM)  (0) 2007.04.16
GPLR; GPIO가 input으로 설정 되었을때 level state를 나타냄
GPDR; GPIO의 input or output 방향 설정
CPSR; GPIO가 output으로 설정 되었을 때 set pi level high
CPCR; CPIO가 output으로 설정 되었을 때 clear pin level low
GRER, GFER, GEDR, GAFR

- output 제어방법
CPIO82,83을 output 방향으로 설정; GPDR|= 0xC0000
GPIO82.83을 GPIO용도로 설정; GAFR2_U & = ~0xFF0
LED를 ON 시키기 위해 0을 출력; GPCR2 |= 0xC0000
LED를 OFF 시키기 위해 1을 출력; GPSR2 |= 0xC0000

'정리없는자료 > Embedded System' 카테고리의 다른 글

DRAM 컨트롤러  (0) 2007.04.24
GPIO 레지스터  (0) 2007.04.22
팜, 리눅스기반 운영체제 개발  (0) 2007.04.20
Boa web server의 이해  (0) 2007.04.19
디바이스 드라이버 커널에 포함  (0) 2007.04.17
파일 시스템(FILE SYSTEM)  (0) 2007.04.16
팜 CEO 에드 콜리건(Ed Colligan)이 휴대 단말기용으로 리눅스 기반의 운영 체제를 개발 중이라고 밝혔다.

콜리건은 10일, 수년간의 개발 기간을 거쳐 완성한 새로운 운영 체제를 올해 안에 팜 「트레오(Treos)」 단말기에 탑재할 계획이라고 발표했다. 팜은 이를 통해 자사 스마트 폰의 안정성을 개선하는 한편 성능을 크게 향상시킬 수 있을 것으로 기대하고 있다.

콜리건은 "올해 안에 공개할 계획으로 새로운 시스템 소프트웨어를 개발해 왔다. 이를 통해 팜 OS의 기능을 향상시키고 현대화하여 이용자 및 개발자 커뮤니티로 하여금 리눅스가 갖는 가치의 정수로 한발 다가서게 할 계획이다"고 말했다.

이어서 그는 "중요한 점은 팜이 자체 기술을 가졌다는 점이다"고 덧붙였다.

콜리건은 리눅스 기반의 새 OS를 탑재한 트레오와 더불어 MS의 윈도우 모바일 플랫폼에 기반을 둔 트레오스도 계속 출시할 계획이라고 전했다.

콜리건은 리눅스 기반의 플랫폼들이 팜 제품의 안정성과 성능 및 신뢰도를 개선할 것이라고 말하며, 다른 전화기 제조업체들에 라이선스적용이 불가능하고 자사 제품에만 적용 가능하다고 강조했다.

한편, 「가넷(Garnet)」으로 알려진 기존 팜 OS 유통업체인 일본의 액세스(Access)도 리눅스 기반의 플랫폼을 자체 개발하고 있는데, 이는 타사 제품에 라이선스가 가능한 플랫폼이라고 한다.

콜리건은 음성과 데이터의 동시 전송 기능을 탑재하는 등, 팜의 새 플랫폼이 크게 업데이트될 것이라고 밝혔다. 물론 기존의 팜 응용 프로그램에의 지원도 계속할 예정이라고 전했다.

그는 이 플랫폼이 단말기 프로그램과 웹 기반 응용프로그램 모두에서 개발 작업을 용이하게 해줄 것이라며 개발자 커뮤니티에 대한 팜의 관심과 헌신에 대해 강조했다.

팜이 최근 공개한 재무제표에 따르면 매출은 증가했지만 수익은 줄어든 것으로 나타났다. 콜리건은 이를 단말기 가격 하락에 의한 것으로 분석했다.

10일, 그는 팜이 특허와 상표권 확보를 통해 비용을 줄일 수 있을 것이라고 주장하였다. 액세스는 2006년 팜에 팜 OS를 다시 재 라이선싱한 바 있다.

프리폼 다이내믹스(Freeform Dynamic)의 데일 바일(Dale Vile)은 모바일 리눅스를 향한 이 같은 팜의 행보는 매우 흥미롭다고 지적하며 그 이유로 오픈소스 OS들이 그 동안 대량 판매 시장에 향상된 데이터 용량을 제공하고자 했던 제조업체들에 더 매력적인 것이었기 때문이었음을 들었다.

바일은 또 지난 해, 심비안과 윈도우 모바일과 함께 오픈 소스를 향후 주요 개발 목표로 제시한 바 있는 보다폰 등의 이동통신 사업자들의 리눅스에 대한 수용도를 높일 필요가 있다고 지적하기도 했다. @

출처 : ZDNet

'정리없는자료 > Embedded System' 카테고리의 다른 글

DRAM 컨트롤러  (0) 2007.04.24
GPIO 레지스터  (0) 2007.04.22
팜, 리눅스기반 운영체제 개발  (0) 2007.04.20
Boa web server의 이해  (0) 2007.04.19
디바이스 드라이버 커널에 포함  (0) 2007.04.17
파일 시스템(FILE SYSTEM)  (0) 2007.04.16
Boa web server

- 단일 Task 작업을 수행
- 매 연결시마다 fork()를 이용하여 새로운 task를 형성
- CGI, 디렉토리관리, gunzip등을 위해서만 fork()를 수행
- 빠르고 단순
- 타켓에 접속해서 서비스를 받게됨

+ 관련 홈페이지 http://www.boa.org
*fork() : PID와 PPID만이 다른 자식프세스 생성

Boa web server 설치

Source : http://boa.org, https://sourceforge.net/project/boa
Compile :
#tar xvfz boa-x.x.x.tar.gz
#cd boa[tab]/src
#ac_cv_func_setvbuf_resersed=no CC = arm-linux-gcc ./configure --target=arm-linux
#make

휴인스에서 제공되는 CD의 소스를 사용

디바이스 드라이버 복사
#cd /temp_cd/led_full/
#cp ./led_driver.c /temp_cd/Kernel/linux-2.4.19-pxa255_pro3/drivers/char/

Makefile 수정
#cd /temp_cd/Kernel/linux-2.4.19-pxa255_pro3/drivers/char
#vi Makefile
obj-$(CONFIG_LED)+=led_driver.o 포함

Config.in 파일 수정
#vi Config.in
"bool'LED GPIO' CONFIG_LED" 추가

커널컴파일 시 led_gipo 드라이버 선택
#cd /temp_cd/Kernel/linxu-2.4.19-pxa255_pro3
#make menuconfig
Character devices -> LED GIPO 체크
#make dep; make clean ; make zImage

실행
타겟 보드로 커널이미지를 퓨징후 장치노드를 생성한뒤 테스트

File system
보조기억장치와 그 안에 저장되는 파일을 관리하는 알고리즘 및 자료구조의 통칭

램디스크
임베디드 시스템과 같이 별도의 보조장치를 둘 수 없을 때 사용
하드디스크와 같이 별도의 물리적 저장 장치 없이 메모리의 한 부분을 파일 시스템으로 사용하는 파일시스템

램디스크 생성
#dd if=/dev/zero of=ramdisk bs=1024 count=16384(16MB)
#mke2fs ramdisk
#mkdir ramdisk_p
#mount -t ext2 -o loop ramdisk ramdisk_p
#cd ramdisk_p
----파일추가
#cd ../
#umount ./ramdisk_p
#gzip -9 ramdisk

램디스크 수정
#gunzip ramdisk.gz
#mkdir ramdisk_p
#mount -t ext2 -o loop ramdisk ./ramdisk_p
#cd ramdisk_p
----수정
#cd ../
#umount ./ramdisk_p
#gzip -9 ramdisk



'정리없는자료 > Embedded System' 카테고리의 다른 글

Boa web server의 이해  (0) 2007.04.19
디바이스 드라이버 커널에 포함  (0) 2007.04.17
파일 시스템(FILE SYSTEM)  (0) 2007.04.16
[펌]Embedded C++ GUI Programming with Qt - Qt포팅  (0) 2007.04.16
커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
아직 QT를 설치할 단계는 아니지만 ...

Qt포팅


Qt를 포팅한다고 하는것은 Embedded기기 위에서 Qt로 작성된 프로그램을 실행하기 위한 과정입니다.
Embedded를 한다고 하면 가장 흔히 접할 수 있는 단어중 하나가 포팅이라는 단어라 생각합니다.
이것은 주로 Embedded기기 자체가 x86이 아닌 ARM, PPC, MIPS 등을 사용하기 때문에 CPU마다 명령어의 차이로 인해
해당 CPU에 맞는 바이너리를 생성하기 위해서 필요한 작업이며,
Qt역시 마찬가지로 해당 CPU에 맞게 컴파일을 해야합니다.
많은 Embedded 관련 서적과 사이트등에서 이러한 포팅에 대한 howto가 제공되고 있습니다.
저 역시 그러한 자료를 참조해서 Embedded Linux환경에서 속도가 그다지 만족스럽지는 못하지만 cross compiler를 통해 Embedded 기기보다 훨씬빠른 x86 기기에서 build를 해서 Embedded기기에 이식을 했습니다.
많은 시행과 착오를 겪었고 모든 포팅을 완수했으나 이러한 일련의 일에 대해서 필자 개인적인 생각은 아주 짜증스럽다고 밖에 표현할 수 밖에 없습니다.
반드시 해야할 일임에는 분명하나 작업하고 나서 남는것은 하나도 없고(물론 정리되면 howto문서 몇개는 남긴하지만 별 의미가 없는것 같습니다.)
정작 본인이 해야할 일은 프로그램 개발인데 대체 뭐하는 일인가 싶기도 했습니다.
이와 비슷한 맥락으로 디바이스 드라이버 개발을 빼놓을 수 없는데, 처음 임베디드 개발에 입문하는 사람들을 보면 대부분이 커널, 드라이버작업을 선호한다는 사실입니다.
필자 역시 처음 임베디드 개발에 입문하고서 가장 하고 싶었고 특별한 기술처럼 느껴졌던것이 사실이었으나 시간이 지날수록 필자와 같은 S/W 엔지니어가 할 분야는 아니라고 판단을 했습니다.
드라이버를 작성하는데 있어서 수십에서 수백페이지에 달하는 Datasheet를 펼쳐놓고서 이 레지스트러 한번 읽어보고 저 레지스트터 한번 값을 써보고의 반복은 S/W엔지니어 입장에서 알수없는 하드웨어의 특성은 여간 답답하고 짜증나는 작업이 아닐 수 가 없었습니다.
욕심을 버리고 H/W 분야에서 일하시는 분을 신뢰하고 그 분들의 영역을 근접치 아니하는것이 맞는거라고 생각합니다.
필자와 같은 S/W 엔지니어는 드라이브로 부터 올라오는 데이타를 효과적으로 처리해서 가공하는 Bussiness Logic 작성이 더 잘 할 수 있는 일일 것입니다.

포팅에 관련되어서, 드라이버 작성에 관련되어서 S/W엔지니어는 전체적인 흐름을 파악하고 이와 유사한 상황에 대비할 수 있는 훈련을 하는것이 맞을 것으로 생각됩니다.

이러한 맥락에 비추어 Qt포팅역시 어떻게 옵션을 주고 어떻게 컴파일 하며 또 에러가 나면 어떻게 대처하는지에 대한 howto 보다는 좀 더 근원적인 방법론이 필요할 것이라고 생각합니다. 아래에서는 qt를 컴파일 할때 어떤 옵션을 주고서 컴파일 해야하는지에 대한 내용보다는 인터넷 사이트등에서 쉽게 구할 수 있는 howto문서들의 과정이 왜 필요한것인지에 대한 내용위주로 설명할 생각입니다.

3.1 시작하기

Qt는 여타 프로그램을 포팅하는 것과 마찬가지로 cross compiler에 맞게 환경설정을 한후 bulid를 해서 embedded기기에 이식을 하는 과정을 거칩니다.
일반적인 리눅스 프로그램 컴파일과 크게 다르지 않으며 단지 cross compiler를 이용한다는 차이점 하나만 존재합니다.

보통의 컴파일 방법은 아래와 같습니다.
./configure --> make --> make install

./configure는 시스템내의 gcc, g++등의 위치와 컴파일 하려면 프로그램에서 요구하는 각종 헤더파일과 라이브러리를 자동으로 찾아 Makefile을 생성합니다.
가령 프로그램에서 curses라이브러리를 참조한다면 curses 라이브러리 헤더파일과 라이브러리 파일을 찾고 없다면 에러를 발생시킵니다.
cross compile도 마찬가지입니다. 차이점은 요구하는 라이브러리가 반드시 cross compile되어 있는 라이브러리여야 한다는 사실입니다.
(일치하지 않는경우 컴파일 최종 과정에서 링크할때 binary type이 일치하지 않는다는 에러 메세지가 표시됩니다.)
따라서 해당 프로그램이 무엇을 요구하는지 부터 정확하게 인지하고 있어야 합니다.

Qt의 경우 libjpeg, libz, libpng등등(이외에 더 있습니다만 생략합니다...)을 요구합니다. libjpeg, libpng는 jpeg, png이미지 포맷에 대한 압축을 해제하기 위한 라이브러리 이며, libz는 libjpeg, libpng등에서 사용하고 있는 압축 알고리즘에 대한 라이브러리 입니다.
필자가 운영하는 질문게시판에는 jpeg을 지원하기 위한 질문을 볼 수 있는데, 이 역시 이러한 부분을 이해하고 있다면 쉽게 해결 할 수 있습니다.
보통 프로그램이 어떠한 라이브러리를 참조하는지는 REAME파일등에 기술되어 있거나, ./configure등을 수행하면 출력되는 log에 표시가 되기도 하므로 이를 참조하시면 됩니다.

cross compile 하기위해서는 이와 더불어 컴파일러 프로그램을 cross 컴파일러로 지정해 주어야 합니다.
보통 --host --cross 옵션을 붙이거나 CC, GCC, CXX등의 환경변수를 직접 바꾸어 줍니다.
아마도 이러한 원칙만 아신다면 어떠한 프로그램도 쉽게 포팅하실 수 있을 것이라고 생각합니다.
그런데, qt소스코드를 받아서 빌드해보신분들은 아시겠지만 qt는 위와같은 방법과 약간 다르게 빌드를 하도록 되어 있습니다.

./configure & qmake --> make --> make install
./configure와 qmake라는것을 같이 이용하도록 되어 있는데, qmake는 trolltech에서 제공하는 Makefile생성 유틸리티입니다.
qmake는 qt자체가 다중 플랫폼 지원을 위해 개발된 것인만큼, 다중 플랫폼 지원을 위한 Makefile 생성과, Makefile의 복잡한 문법을 모르고 있어도
쉽게 Makefile을 생서해주기 위한 유틸리티입니다.
qmake의 동작방식을 살펴보면 QMAKESPEC이라는 환경변수를 참조하여 Makefile을 생성하는데, 이 환경변수가 가르키고 있는 곳은, qt 소스코드내의 mkspec 디렉토리내를 가르키도록 되어 있습니다.(만약 QMAKESPEC 환경변수가 없다면 기본적으로 x86, g++로 되어 있습니다.) mkspec디렉토리를 살펴보면 각종 컴파일러와 cpu들이 명시가 된 디렉토리가 있는데, 이 디렉토리내의 파일에 해당 컴파일러 cpu별로 컴파일러 명령과 옵션들이 정의되어 있고, 이를 추가/수정하면 쉽게 다른 기기로 이식할 수 있는 상태를 만들 수 있습니다.
보통 qt를 configure할때에 ./configure --embedded arm .... 이라고 옵션을 주는데, 여기서 arm이라는 옵션자체가 qmake로 전달되어 mkspec/qws/linux-arm-g++/qmake.conf 파일을 참조해서 Makefile을 생성합니다.
속도를 위해 컴파일러 최적화 옵션을 변경할때에 위의 해당 디렉토리를 직접 열어서 컴파일 옵션을 바꾸어 줄 수 도 있고, mips나 powerpc등으로 컴파일 할때에도
linux-ppc-g++ 이나 linux-mips-g++등을 참조하면 됩니다.

3.2 Customize library
Qt/E는 Embedded를 목적에 두고 만들어진 라이브러리로서 Embedded 특성에 맞게 최대한 작은 사이즈의 라이브러리를 만들기 위한 build시스템을 갖추고
있습니다. 가령, Qt내의 network 기능을 사용하지 않고 라이브러리내에서 제거하려면 ./configure할때나 qconfig.h 파일등을 편집에서 소스코드레벨에서 제외시킬 수가 있습니다.

먼저 ./configure옵션으로 제외시킬 수 있는것들은 ./configure --help 명령을 통해 확인한후에 ./configure -no-zlib ... 와 같이 기술하여 zlib를 빼내버릴 수 있습니다. 이와 마찬가지로 ./configure --help를 통해 자신이 기기에서 필요없다고 판단되는 부분들은 제거하시면 속도나 메모리 사용측면에서의 이점을 살릴 수가 있습니다.

이외 또 하나의 방법으로는 ./configure -qconfig minimal 옵션을 통해 qt소스코드내의 qconfig-minimal.h 파일을 참조해서 필요없는 라이브러리를 제거시킬 수가 있습니다. qconfig 방법은 앞서 설명한 방법보다 좀더 세밀하게 여러가지 기능을 뺄 수가 있습니다.

qconfig에 관련된 파일은 qconfig-small.h, qconfig-medium.h, qconfig-large.h ... 등등의 파일이 있는데 이파일들은 직접 수정을 가해도 되고 새롭게 작성해서 저장한다음(qconfig-hello.h로 저장했다고 예를 든경우) ./configure -qconfig hello 라는 형식으로 qconfig-hello.h 파일을 지정할 수 도 있습니다.
qconfig-xxx.h 파일을 열어보면 각종 #define 등이 정의됨을 볼 수 있는데, 이곳에 정의가 된 모듈을 빼겠다는 의미로 사용됩니다.
만약 특정한 루틴을 사용하고자 한다면 주석처리하면 됩니다.
단, 한가지 문제점이 이러한 방식이 용량을 줄일수 있는 가장 좋은 방법이나 모듈간의 dependancy로 말이암아 컴파일 도중에 에러가 나거나 , 컴파일 완료후 runtime실행시 그냥 멈추는 증상이 생길 수 있습니다.
따라서 이 부분을 하기 위해서는 많은 인내심이 필요한데(필요없는 기능을 빼고 컴파일 해서 실행해보고의 반복), 이 단순반복 방법을 약간 줄이기 위해서 필자는 qt/e기반으로 작성된 qtopia의 qconfig-qpe.h 파일을 가지고와서 qte에 넣고 컴파일 하는 방법을 이용합니다.
이미 trolltech에서 qt/e를 이용해서 qtopia라는것을 만들었으므로 충분히 검증되었다라고 할 수 있을 것 이기 때문입니다.
하지만 qtopia는 현재 qte 2.x혹은 qte 4.x밖에 없으므로 qte 3.x에서는 사용할 수 없음을 유의해야 합니다.

3.3 Customize device
qt는 x-windows없이 독립적으로 운영되는 시스템으로서, framebuffer, mouse(touch screen), keyboard등에 대한 드라이버코드가 있습니다.

여기서 말하는 드라이버란 kernel에서 운영되는 일반적인 드라이버가 아닌 qt상의 드라이버를 말합니다.
framebuffer의 경우 qt내에서 그려지는 작업들이 모두 framebuffer를 통해서 그려지는데, 통상 해당 embedded 기기에서 linux framebuffer용 driver 를 제공 한다면 특별한 작업없이 수행이 가능하나, framebuffer의 특성상 graphic chipset이 가진 많은 성능좋은 기능들이 제대로 사용되지 못하게 됩니다.

이에 대해서 추가적으로 기본 framebuffer에 없는 가속 연산에 대해서 직접 해당 드라이버에 접근해서 연결해 주면 좋은 성능을 기대할 수 있습니다.
이에 대해서는 기존에 qt내에 구현된 다른 그래픽 카드 드라이버를 참조하면 됩니다.

mouse의 경우 일반적인 USB마우스나 touch screen등을 지원하도록 처리되어 있는데, USB마우스나 PS2마우스등은 특별히 고려안해도 모두 잘 동작하며 다만 qt프로그램을 실행할때 QWS_MOUSEPROTO 환경변수를 참조해서 이를 처리하도록 되어 있습니다.
터치스크린과 관련된 자세한 사항은 필자의 홈페이지에 이미 정리된 강좌가 있어서 이를 통해 대신합니다.
http://www.korone.net/bbs/board.php?bo_table=qt_lecture&wr_id=294&sca=&sfl=wr_content&stx=touch&sop=and

keyboard 는 흔히 일반 PC에서 사용하는 키보드와 일반 PDA나 특정 장치에서 사용되는 특수한 버튼들을 모두 처리할 수 있도록 되어 있습니다.
일반 PC에서 사용하는 키보드들은 앞전에 설명한 mouse의 경우와 비슷하게 QWS_KEYBOARD 환경변수를 참조하도록 되어 있으며 특수한 키 역시 touch screen과 마찬가지의 경우로 처리되게 되어 있어서 쉽게 처리할 수 있습니다.
가령 제품에 remocon이 있는 경우 serial등을 통해서 수신된 remocon 키 값을 parsing 해서 qt key로 변환해 주면 실제 qt application내에서는 remocon과 관계없이 일반적은 프로그래밍처럼 동작시킬 수 있습니다.

조병완
korone @ gmail . com
http://www.korone.net
+부트로더 추가
명령어
boot[Kernel iptions] : boot linux with optional Kernel options
tftp : download blob/kernel/ramdisk image to RAM
flash : copy blob/kernel/ramdisk from RAM to flash
help : get this help
reblob : restart blob from RAM
reboot : reboot system
reset : reset terminal
speed : set download speed
status : display current status
btp : get ip
Set : set MAC&IP

Kernel : process,memory,file system, device, network management

PXA255-pro 커널소스생성
#cd /temp_cd/Kernel/src
#tar xvfj linux-2.4.19.tar.bz2
#cd linux-2.4.19
#zcat ../diff-2.4.19-rmk4-pxa1-huins.gz | patch -p1 #휴인스패치

커널 이미지
#cd /temp_cd/Kernel
#tar xvfj linux-2.4.19-pxa255_pro3.tar.bz2
#cd /temp_cd/Kernel/linux-2.4.19-pxa255_pro3
#make menuconfig
#make dep; make clean; make zImage

이미지 퓨징
#cd /temp_cd/Kernel/linux-2.4.19-pxa255_pro3/arch/arm/boot
#cp zImage /tftpboot
#minicom
boot> btp
boot> tftp zImage kernel
boot> flash kernel
boot> boot

'정리없는자료 > Embedded System' 카테고리의 다른 글

파일 시스템(FILE SYSTEM)  (0) 2007.04.16
[펌]Embedded C++ GUI Programming with Qt - Qt포팅  (0) 2007.04.16
커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
임베디드 공개 프로젝트 공모전  (0) 2007.04.15
bootp, tftp  (0) 2007.04.13
보드구입하거나 임대시 생략해도 됨..

부트로더의 기능

+ target board 초기화
-Memory setting
-MAC address 획득
-CPU Clock setting (over 400, nomal 200)
-GPIO setting
-serial setting
+ target board 상태점검

부트로더 이미지 생성
#cd /temp_cd/Kernel
#tar xvfj linux-2.4.19-pxa255.tar.bz2
#cd ../Bootloader
#tar xvfj blob-20070416.tar.bz2
#cd blob
#chmod 755 configure
#./configure --with-linux-prefix=/temp_cd/Kernel/linux-2.4.19-pxa255 \
--with-board=pxa255_prp
#make clean;make

타겟보드에 부트로서 퓨징
#cd /temp_cd/Bootloader/blob/src/blob
#jtag
jtag) cable parallel 0x378 PXA255
jtag) detect
jtag) flashmem 0 blob

'정리없는자료 > Embedded System' 카테고리의 다른 글

[펌]Embedded C++ GUI Programming with Qt - Qt포팅  (0) 2007.04.16
커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
임베디드 공개 프로젝트 공모전  (0) 2007.04.15
bootp, tftp  (0) 2007.04.13
2. JTAG, Minicom  (0) 2007.04.13
  1. egg 2007.04.16 01:40 신고

    임베디드쪽을 공부하시나바요..
    정규수업 프로젝트로 해본게 전부인 저로써는.. ^^;;

    • rails 2007.04.16 01:46 신고

      아 전에 임베디드 프로젝트를 하나
      해서 그때 공부한 내용들이에용^^
      현재는 아무것도 몰라용^^

에프에이리눅스(주)에서는 임베디드 오픈 소스 활성화를 위하여 임베디드 공개 프로젝트 공모전을 매년마다 총 4회에 걸쳐 나누어 개최 합니다.
현재 제3회 공모전이 진행중입니다. 3회 공모전은 지정 공모를 하게 됩니다.

지정 공모 주제는 다음과 같습니다.
플래쉬 플레이어, 마메, PIMS (개인 스케줄 관리) : 베이스 SDL (X에서 동작이 아닙니다.)

링크 참조..http://www.falinux.com/open_project.php

'정리없는자료 > Embedded System' 카테고리의 다른 글

커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
임베디드 공개 프로젝트 공모전  (0) 2007.04.15
bootp, tftp  (0) 2007.04.13
2. JTAG, Minicom  (0) 2007.04.13
Host환경 설정 및 Cross compiler 설치  (0) 2007.04.13
bootp는 네트워크에서 장치에 자동으로 IP를 할당하기 위한 프로토콜로서
클라이언트의 MAC 주소와 IP의 테이블 설정이 필요하다.

Bootp 데몬설치
#cd /temp_cd/Application
#tar xvfz bootpd-2.4.tar.gz
#cd bootpd-2.4
#make clean;make;make install
/usr/etc에 설치된다.

Bootp 설정
#vi /etc/bootptab
.deault:\
:hd :/tftpboot:bf=null:\
:sm = 255.255.255.0
pxa255_pro : ht=1 ha=MAC 주소:tc=.default:ip=IP주소:
#vi /etc/hosts
127.0.0.1 ~~~~~~
192.168.1.xx pxa255_pro <-추가
Bootpd 실행 및 확인
#iptables -F <-------방화벽해제
#ifconfig eth0 192.168.1.xx up
#cd /usr/etc
#./bootpd
#netstat -a | grep bootp <--확인

tftp는 사용자 인증이 불필요하고, 디렉토리를 보여주지 않아도 되는 곳에 사용되며
UDP를 사용하고 빠르게 파일을 전송하고자 할 경우 사용된다.(embedded 시스템 개발중 개발한 Kernel image나 ramdisk를 부트로더를 통해 board로 전송하기 위해서 사용된다.)

리눅스 설치시 전체 설치하면 자동으로 설치가 된고 데몬만 구동시켜주면된다.
#ntsysv ----> Tftp 선택
이미지를 복사후
재구동 시킨후 부트로더를 통해 board로 전송하면된다.
#cd /etc/init.d
#./xinetd restart

Boot>tftp zImage Kernel <-------------SDRAM에 저장후
Boot>flash Kernel <------------flash memory에 저장한다.

NFS도 있는데 그닥 필요치가 않았다.

'정리없는자료 > Embedded System' 카테고리의 다른 글

커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
임베디드 공개 프로젝트 공모전  (0) 2007.04.15
bootp, tftp  (0) 2007.04.13
2. JTAG, Minicom  (0) 2007.04.13
Host환경 설정 및 Cross compiler 설치  (0) 2007.04.13
용도
내부코어테스트, PCB 테스트, FPGA, Flash Fusing

JTAG pin
TCK : Test Clock input
TMS : Test Mode Select
TDI : Test Data input
TDO : Test Data Output
nTRST : Test Reset


JTAG Fusing 프로그램 설치
#cd /temp_cd/Application
#tar xvfz pxa255-jtag.tar.gz
#cd pxa255-jtag
#cd jtag-04
#./configure -with-include = /temp_cd/Application/pxa255-jtag/include-0.2.3 --prefix=/temp
#make;make install
#cd /temp/bin
#cp jtag /usr/bin
#jtag

JTAG 사용방법
#cd /temp_cd/Image
#jtag
 jtag)cable parallel 0x378 PXA255
 jtag)detect
 jtag)flashmem 0 <파일명>

Minicom
linux 시스템의 시리얼 터미널
#minicom -s

'정리없는자료 > Embedded System' 카테고리의 다른 글

커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
임베디드 공개 프로젝트 공모전  (0) 2007.04.15
bootp, tftp  (0) 2007.04.13
2. JTAG, Minicom  (0) 2007.04.13
Host환경 설정 및 Cross compiler 설치  (0) 2007.04.13
pxa-255 pro3 보드와 webcam을 이용한 CCTV구현

1. Host 환경 설정 및 Cross compiler 설치

정의
소스를 컴파일하여 바이너리 실행 파일을 생성하기 위해 필요한 컴파일러 및 라이브러리,
바이너리 유틸리티 모음

구성요소
GCC,Bunutils,Glibc,kernel

환경설정중비작업
휴인스(pxa-255 pro3보드)에서 제공되는 CD
#rm -rf /temp_cd
#mkdir /temp_cd
#mount -t iso9660 /dev/cdrom /mnt/cdrom
#cp -rf /mnt/cdrom/Toolchain /temp_cd
#cp -rf /mnt/cdrom/Application /temp_cd
#cp -rf /mnt/cdrom/Bootloader /temp_cd
#cp -rf /mnt/cdrom/Kernel /temp_cd
#cp -rf /mnt/cdrom/Image /temp_cd
#cp -rf /mnt/cdrom/DDriver_ExamCode/led_full /temp_cd

Toolchain 설치
제공된 CD의 Toolchain폴더의 arm-cross-compiler.tar.bz2를 /usr/local에 압축해제
패스설정 : /root/.bash_profile -> "PATH = $/HOME/bin:/usr/local/arm-linux/bin
#cd /temp_cd/Toolchain
#tar xvfj arm-cross-compiler.tar.bz2
#cp -rf arm-linux /usr/local
#vi /roo/.bash_profile
#source /root/.bash_profile

Toolchain 시험
#vi hello.c
#include <stdio.h>
main(void)
{
printf("this is test compile ");return 0;
}
#arm-linux-gcc -o hello hello.c
#file hello(./hello)

- gcc 와 arm-linux-gcc를 비교

'정리없는자료 > Embedded System' 카테고리의 다른 글

커널 Kernel  (0) 2007.04.16
부트로더(Boot loader)  (2) 2007.04.16
임베디드 공개 프로젝트 공모전  (0) 2007.04.15
bootp, tftp  (0) 2007.04.13
2. JTAG, Minicom  (0) 2007.04.13
Host환경 설정 및 Cross compiler 설치  (0) 2007.04.13

+ Recent posts