Bootp 란?
  • Bootp는 tcp/ip상에서 자동 부팅을 위한 최초의 표준으로, 디스크 장치가 없는 클라이언트를 구동시키기 위한 프로토콜로 개발되었다.
  • 하위 프로토콜로 udp와 ip 프로토콜을 사용한다.
  • 개발보드에서는 Tftp와함께, Bootloader에서 kernel과 파일시스템 Image를 Host PC에서 Target으로 다운로드 하기 위해 사용한다. Bootp는 Target 보드가 Tftp를 통한 파일 전송을 위해서 Target 보드의 IP와 Host에 대한 정보를 Host PC에서 가져오기 위해 사용한다.
bootpd 설치
bootpd를 사용하기 위해 먼저 xinetd가 설치 되어있어야한다. xinetd rpm이 설치되어 있지 않다면 설치 하도록 하자. xinetd설치 방법은 인터넷 검색을 해 보자. 쉽게 설치 할 수있다.
bootp는 CD의 모든 파일을 옮겨왔으므로 /home/embed/xhyper/RPM에 있다. rpm에 대해서는 검색을 통해 알아보길 바란다. 또한 RPM 설치를 위해서 root권한으로 접근해야 한다.
rpm에 의해 설치된 bootpd 파일은 /usr/sbin/에 위치한다. bootpd 파일은 xinetd 프로그램에 의해 실행된다. 그러므로 /etc/xinetd.d/bootp 파일을 만들어 줘야 한다. 아래 설정과 같이 bootp 파일을 만들자.
#su -l
Passwd:
#rpm -qa | grep xinetd
xinetd-2.3.10-6
#cd /home/embed/xhyper/RPM
#rpm -Uh bootp-2.4.3-7.i386.rpm
경고: bootp-2.4.3-7.i386.rpm: V3 RSA/MD5 signature: NOKEY, key ID cba29bf9
########################################### [100%]
########################################### [100%]
#cd /etc/xinetd.d/
#vi bootp
service bootps
{
   disable = no
   socket_type = dgram
   protocol = udp
   wait = yes
   user =root
   server = /usr/sbin/bootpd
}


bootptab 파일 설정
타겟보드의 bootp요청이 있을 때 Host PC에 설치 된 bootp서버는 /etc/bootptab에 정의된 Client 정보를 기반으로 bootp reply packet을 만들어 보낸다.
그래서 bootp를 사용하기 위해서는 이 /etc/bootptab에 client의 Mac Address와 할당할 IP등의 정보가 입력 되어 있어야 한다.

#vi /etc/bootptab
xhyper255:\
ht=1:\
ha=0x123456789ABC:\
ip=192.168.0.10:\
sm=255.255.255.0
xhyper -> hostname
ht(hardware type) -> 100Mb Ethernet 사용하므로 1
ha(hardware address) -> Bootp Request를 보낼 때 Target의 Mac Address
ip -> Target에 할당 할 IP Address
sm(subnet mask)

Bootloader에서 bootp 명령 실행
먼저 설정된 파일을 Host쪽 bootpd 데몬을 실행하자
#/etc/init.d/xinetd restart

Target Board의 Bootlarder에서 bootp 명령을 입력하면 Host PC로부터 타겟보드의 IP를 얻을 수있다. 이전에 cross lan cable이 연결되어 있어야 하며, serial 연결 한 다음 minicom을 통해 Bootloader를 볼 수 있어야 한다.

'X-Hyper255A' 카테고리의 다른 글

Tftp 설정  (0) 2006.08.10
개발 환경 구축에 대한 문제점  (0) 2006.08.10
JTAG Compile  (0) 2006.08.09
Toolchain Test  (0) 2006.08.09
Toolchain 설치  (0) 2006.08.08
JTAG란?
이반적으로 JTAG라는 말 보다는 Boundary-Scan이란 말을 더 많이 사용한다. JTAG는 칩 내부에 Boundary Cell이란 것을 두어 외부의 핀과 일대 일로 연결시켜 프로세서가 할 수있는 동작을 중간에  Cell을 통해 모든 동작을 인위적으로 수행할 수 있어 여러가지 하드웨어 테스트나 연결 상태 등을 체크 할 수있다.

JTAG 기능
프로세서 상태와는상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어 들일 수 있는 기능을 제공한다.
  • 디바이스 내에서 모든 외부와의 연결점을 가로챈다.(외부로 나가는 각각의 핀들과 일대 일로 연결)
  • 각각의 sell은 serial-regisher(boundary scan register)형성하기 위해서 서로 연결되어 있다.
  • 전체적인 인터페이스는 5개의 핀에 의해서 제어된다 (TDI, TMS, TCK, nTRST, TDO)
  • 회로의 배선과 소자의 저기적 연결상태 Test
  • 디바이스간의 연결상태 Test
  • Flash memory fusing

JTAG Building
#cd /home/embed/xhyper/Jflash-PXA255
#vi Compile_switches.h
/*****************************************                                                                   
**  FILENAME:       Compile_switches.h
**
**  PURPOSE:        collects the optional switches for this program.
**
**  LAST MODIFIED:  2003.06.03
*****************************************/
//#define DEBUG
//#define INSIGHT_JTAG
#define PARALLEL_JTAG
                                              
/*
* HyBus pxa255 board platform
*/
#define XHYPER255A   // 16bit flash memory
//#define XHYPER255B   // 32bit flash memory

레드헷 리눅스 9.0에서는 void main() 함수를 쓰지 않고 int main() 함수를 씀으로 바꿔줘야 한다. 아래 빨간색 int로 바꿔 주자.
#vi main.c
/*
*******************************************************************************
*
* FUNCTION:         main
*
* DESCRIPTION:      Entry point for utility
*
* INPUT PARAMETERS: uses optional input parameters:
*                       argv[1] = filename to flash (binary files only)
*                       argv[2] = program options, currently only 'P' for Program
*                       argv[3] = block number (used to compute base_address)*
* RETURNS:          void
*
*******************************************************************************
*/
int main( int argc, char *argv[] )
{
   time_t start;
       DWORD fsize = 0;
       DWORD last_non_zero = 0 ;
       DWORD last_non_ff = 0;
//      DWORD li;
       int block_number = 0;
#make clean
rm -f *.o Jflash-Xhyper255
#make
g++ -O2 -s -g -D__linux__ Jflash.cpp -o Jflash-Xhyper255
/tmp/ccp8kA4v.o(.text+0x42b): In function `main':
/home/embed/xhyper/Jflash-PXA255/Jflash.cpp:199: the `gets' function is dangerous and should not be used.
#ls
Compile_switches.h  Jflash.dsw  RelNote_Jflash_CL.htm  jflash
Debug               Jflash.h    SWLicense.pdf          jflash_cl.exe
Giveio.zip          Jflash.ncb  giveio.inf             load_sample.bat
Jflash-Xhyper255    Jflash.opt  giveio.ini             xhyper255jtag.h
Jflash.cpp          Jflash.plg  giveio.sys
Jflash.dsp          Makefile    instdrv.exe

Jflash-Xhyper255 바이너리 파일이 만들어 져 있을 것이다. Bootloader Compile 한 후 간단한 사용 방법을 보자.

'X-Hyper255A' 카테고리의 다른 글

개발 환경 구축에 대한 문제점  (0) 2006.08.10
Bootp 설정  (0) 2006.08.09
Toolchain Test  (0) 2006.08.09
Toolchain 설치  (0) 2006.08.08
임베디드 리눅스 교육과정  (0) 2006.08.05
Toolchain을 이용하여 compile 해보자. hyper 디렉토리 밑에 test 디렉토리를 만들어 테스트 하였다.
#mkdir /home/embed/xhyper/test
#cd /home/embed/xhyper/test
#vi hellow.c
#include <stdio.h>

int main()
{
   printf("hellow world");
   return 0;
}
#gcc -o hellow hellow.c
#arm-linux-gcc -o hellow-arm hellow.c
#file hellow
hellow: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
#file hellow-arm
hellow-arm: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
#./hellow-arm
bash: ./hellow-arm: cannot execute binary file
#./hellow
hellow world

만들어진 binary file을 확인하여 보면 서로 다른 것을 알 수 있다. 또한 파일을 실행시켜 보면 hellow-arm file은 실행이 안된다. 보드에 커널 부팅후 다운로드하여 실행하면 hellow world가 출력 될 것이다.
embeded board에 다운 로딩 하는 과정은 나중에 배우겠다.


'X-Hyper255A' 카테고리의 다른 글

개발 환경 구축에 대한 문제점  (0) 2006.08.10
Bootp 설정  (0) 2006.08.09
JTAG Compile  (0) 2006.08.09
Toolchain 설치  (0) 2006.08.08
임베디드 리눅스 교육과정  (0) 2006.08.05

+ Recent posts