실험시간 컴퓨터에 xinetd 가 설치 되어 있지않아 타겟보드와 TFTP를 이용 할 수 없었다. 그리하여 인터넷을 용하여 설치 하려고 하였다. 설치된 리눅스가 페도라 4. http://rpmfind.net/linux/RPM/Red_Hat_(FC-4).html 에서 페도라용 xinetd rpm을 다운 받았다.

# wget ftp://download.fedora.redhat.com/pub/fedora/linux/core/4/SRPMS/xinetd-2.3.13-6.src.rpm
# rpm -ivh xinetd-2.3.13-6.src.rpm
# service xinetd restart
xinetd 를 정지함:                                          [  실패  ]
xinetd (을)를 시작합니다:                                  [  실패  ]
# rpm -qa | grep xinetd


설치 완료 되었다는 메세지가 출력되었다. 데몬을 돌릴려고 하니 안된다. 제대로 설치 되었는지 검색을 해 보았다. 왜 그런지 없다. 분명 설치 되었다고 메세지를 보냈는데... 결국 소스까지 받아서 컴파일 해 설치 했는데 설치가 되지 않는다.


다른 방법을 찾아 보았다. yum 을 통한 설치가 있었다.

# yum install xinetd


설치가 된다. 검색을 하니 정상적으로 rpm이 설치 되었다. xinetd가 설치 되었기에 tftp-server를 설치하여 정상적으로 타겟보드와 TFTP 성공.
실험실 root 계정의 비밀번호가 변경되어 버렸습니다. 실습 도중 학생이 실수로 변경 한 거 같습니다.
부트로더 GRUB을 이용한다면 다음과 같이 하면 됩니다.

처음 부트로더 GRUB이 뜬다면 원하는 커널을 선택하고 'e'를 누릅니다. Edit Mode로 들어 가게 됩니다.
두번 째 Kernel=..... 이라고 뜬 줄을 선택하고 'e'를 눌러 해당 옵션을 수정합니다.
세번 째 어떻게 수정 하느냐. 에디트 화면에서 제일 뒤에 '1' 또는 'single'이라고 입력후 엔터
네번 째 'b' 누르게 되면 커널 부팅을 합니다.  
다섯번 째 부팅을 하게 되면 'sh3.00$'과 같은 기본 쉘이 뜹니다. 'passwd' 암호변경 명령어를 입력하면새로운  root 비밀번호를 입력하라고 합니다. 수정 후 'exit' 명령어를 치게 되면 변경된 암호로 커널이 부팅되게 됩니다.

이렇게 해서 root 비밀번호를 변경 할 수 있습니다.

'Linux' 카테고리의 다른 글

QNAP 공유폴더에 우분투 gitlab-ee 백업하기  (0) 2020.09.08
xinetd 설치하기  (0) 2007.03.27
하드디스크 추가하기  (0) 2007.03.05
minicom 설치  (0) 2006.08.11
파일을 찾자 : find  (0) 2006.08.10

SCSI하드드시크 하나를 사용중 추가로 SCSI하드디스크하나를 더 장착하여 커널에 인식시킨후에 파일시스템을 만들고 만든 파일시스템을 포맷하여 마운트시킬 디렉토리를 만든다음 이 디렉토리에 생성된 파일시스템을 마운트시키는 작업. 그리고 이 작업이 끝난후에 부팅시 자동마운트되도록 /etc/fstab에 설정추가한다.


1. 현재 사용중인 하드디스크 확인(추가전)


먼저, 현재 사용중인 하드디스크를 확인해 보도록 하자.
/etc/fstab이라는 파일은 리눅스부팅시에 자동으로 마운트시키기위한 "파일시스템테이블(file system table)"이다.

즉, 리눅스가 부팅이 되면서 이 파일을 참조하여 설정된 내용대로 마운트를 시켜 사용가능토록하는 것이다.


[root@duwon ~]# cat /etc/fstab
/dev/sda3               /                       ext3    defaults,noatime      1 1
/dev/sda1               /boot                   ext3    defaults,noatime      1 2
none                    /dev/pts                devpts  gid=5,mode=620        0 0
none                    /proc                   proc    defaults,noatime      0 0
none                    /dev/shm                tmpfs   defaults        0 0
/dev/sda2               swap                    swap    defaults,noatime      0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0                /mnt/floppy             auto    noauto,owner,kudzu 0 0


위의 /etc/fstab은 하드디스크가 추가되기전의 /etc/fstab 용이다.

보시는 바와 같이 /dev/sda라는 하드디스크 하나만이 장착되어 있음을 짐작할 수 있다.

그리고, 아래와 같이 "df -k"로 현재 사용중인 파일시스템정보를 확인해본 것이다.

확인해 본 바와 같이 현재 사용중인 파일시스템은 sda의 하드디스크 하나를 몇 개의 파일시스템으로 나누어 사용중인 것을 확인할 수 있다.

[root@duwon ~]# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             15947024   2810760  12326188  19% /
/dev/sda1               505605     13764    465737   3% /boot
none                    516364         0    516364   0% /dev/shm

좀더 확실히 확인키위해 mount라는 명령어로 현재 리눅스서버에 마운트된 파일시스템이 어떤 것들이 있는가를 정확히 확인해 본 것이다.

[root@duwon ~]# mount
/dev/sda3 on / type ext3 (rw,noatime)
none on /proc type proc (rw,noatime)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
devfs on /dev type devfs (rw)
/dev/sda1 on /boot type ext3 (rw,noatime)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)

위에서 본 바와 같이 sda라는 하드디스크를 몇 개의 파일시스템으로 나누어서 사용중임을 확인할 수 있다.

위의 그림3개에서 확인된 내용을 추가 하드디스크를 장착하여 파일시스템을 만들고 마운트까지 마무리한후의 내용과 비교해 보기바란다.


2. 추가할 HDD를 HDD확장슬랏에 장착한다.

일반적으로 핫스왓방식이 지원되는 시스템이라면, 장착과 동시에 운영체제에서 인식이 바로된다.하지만, 여기서는 설명을 하기위해 핫스왓방식이 지원되지않은 경우로 가정하겠다.
서버용도로 사용하는 거의 모든 HDD는 스카시(SCSI)방식일 것이다.
정식으로 서비스하기위한 용도로 사용되는 서버라면 SCSI방식을 사용해야한다.
물론, IDE방식도 가능하지만, 1년 365일 쉬지않고 돌아가는 서버의 안정성을 위해
반드시 SCSI방식의 HDD를 사용토록 해야한다.


3. 새로운 HDD를 장착한 후에 서버를 재부팅한다.

  재부팅시에 메시지를 자세히 살펴보면 새로운 HDD에 관련된 메시지를 볼수가 있다.


4. 재부팅이 끝나고 나면 dmesg란 명령어를 사용하여 장착된 SCSI HDD의 정보를 확인한다.

  dmesg는 텍스트파일로 재부팅될때마다 새로 생성이 되며 위치는 /var/log/dmesg에 있다.

  명령어의 위치는 리눅스의 경우 대부분 /bin/dmesg이다.

  자, 다음과 같이 dmesg란 명령어를 입력하여 새로추가된 HDD의 SCSI ID를 확인토록한다.


[root@duwon ~]# dmesg | grep SCSI
SCSI subsystem driver Revision: 1.00
scsi0 : Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev 6.2.36
       <Adaptec aic7896/97 Ultra2 SCSI adapter>
       aic7896/97: Ultra2 Wide Channel A, SCSI Id=7, 32/253 SCBs
scsi1 : Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev 6.2.36
       <Adaptec aic7896/97 Ultra2 SCSI adapter>
       aic7896/97: Ultra2 Wide Channel B, SCSI Id=7, 32/253 SCBs
  Type:   Direct-Access                      ANSI SCSI revision: 02
  Type:   Direct-Access                      ANSI SCSI revision: 03
  Type:   Processor                          ANSI SCSI revision: 02
SCSI device sda: 35565080 512-byte hdwr sectors (18209 MB)
SCSI device sdb: 35916548 512-byte hdwr sectors (18389 MB)


추가로 하드디스크를 장착하였기 때문에 sda외에 sdb라는 하드디스크를 커널이 인식하였음을 알 수 있다.

이제 이 sdb라는 추가 하드디스크를 사용키위해 파일시스템을 만들고 fdisk를 하여 파티션생성후에 마운트를 시켜 이 하드디스크를 사용하도록 할 것이다.


5. SCSI ID를 확인했다면 이제 fdisk를 실행시켜 파티션을 생성해 줘야한다.

위에서 확인한 추가 하드디스크의 SCSI ID는 /dev/sdb이다.

따라서 이 SCSI ID를 사용키위해 먼저 fdisk로 파티션을 생성하여야한다.

아래예와 같이 fdisk라는 명령어를 이용하여 파티션생성작업을 하여보자.


파티션을 생성하기 위해서는 fdisk 실행후에 실린더번호를 정확히 입력하고

사용코자하는 용도대로 설정하면 된다.

참고 : fdisk 명령어

  a   toggle a bootable flag

  b   edit bsd disklabel

  c   toggle the dos compatibility flag

  d   delete a partition

  l   list known partition types

  m   print this menu

  n   add a new partition

  o   create a new empty DOS partition table

  p   print the partition table

  q   quit without saving changes

  s   create a new empty Sun disklabel

  t   change a partition's system id

  u   change display/entry units

  v   verify the partition table

  w   write table to disk and exit

  x   extra functionality (experts only)


p라는 fdisk 명령어는 현재 파티션정보를 보고자함이다.

만약 새로운 파일시스템을 생성하려면 아래의 예와 같이 n이라는 fdisk명령어를 이용하여 사용할 파티션번호를 입력하면 된다.


6. 작성된 파티션을 사용키위해 파일시스템을 생성한다.

  mke2fs /dev/sdb

이제 생성된 파티션을 사용키위해 mke2fs라는 리눅스명령어를 사용하여 파일시스템을 생성한다.

"mke2fs 생성할 파일시스템명"으로 입력해주면 아래의 예와같이 파일시스템을 생성하여 준다.

mke2fs라는 명령어의결과 생성되는 파일시스템결과에서 알 수 있는 내용은 다음과 같다.

. Block size 크기
. Fragment size 크기
. inode의 수
. 수퍼유저가 사용할 block의 수(전체 block의 5%를 차지함)
. 첫 번째 데이터블럭
. Block group의 수
. 그룹당 블록수
. 그룹당 fragment의 수
. 그룹당 inode의 수

물론 위의 정보들을 처음접하게 되는 분들이라면 뭐가뭔지 이해하지 못할 수도 있다.

하지만, 파일시스템에 대한 정확한 이해를 하려면 위의 정보들이 어떤 의미를 가지고 무엇을 의미하는지는 정확히 알아야할 필요성은 있다.

물론, 단순히 하드디스크를 추가장착하는 것만이 목적이라면 위의 정보에 대한 의미를 구체적으로 몰라도 관계는 없다.

필자가 강조하고자 하는 것은 진정한 서버관리자, 즉 진정한 수퍼유저라고 한다면 이런 메시지뿐아니라 모니터에서 흐르는 모든 메시지들을 좀더 정확히 분석하고 이해하는 노력이 필요하다는 것이다.

7. 준비된 파티션을 마운트를 시키기 위해 디렉토리를 작성하고 마운트를 시킨다.

  mkdir /home2

  mount -t ext2 /dev/sdb /home2

  리눅스에서 사용하는 파일시스템은 ext2라는 파일시스템이며, 생성한 home2라는 디렉토리와

  물리적인 파티션인 /dev/sdb를 마운트시키면 이제부터는 기존에 있던 디렉토리처럼 마음대로 사용이

  가능하다.

8. 부팅시 자동마운트되게 하기위한 파일시스템테이블 수정

 

  지금까지 한 작업은 일시적으로 사용할수는 있지만, 부팅시마다 적용하기 위해서는

  부팅시 자동마운트되는 파일시스템테이블(/etc/fstab) 수정을 해야한다.

[root@duwon /]# vi /etc/fstab
/dev/sda3               /                       ext3    defaults,noatime      1 1
/dev/sda1               /boot                   ext3    defaults,noatime      1 2
none                    /dev/pts                devpts  gid=5,mode=620        0 0
none                    /proc                   proc    defaults,noatime      0 0
none                    /dev/shm                tmpfs   defaults        0 0
/dev/sda2               swap                    swap    defaults,noatime      0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0                /mnt/floppy             auto    noauto,owner,kudzu 0 0
/dev/sdb                /home2                  ext2    defaults            1 2



위의 예와 같이 작업된 후에는 시스템재부팅시에도 마운트할 필요없이 그대로 사용할수 있다.  

기존의 내용과  다른점은 맨 마지막줄에 /dev/sdb가 /home2에 마운트되게끔 설정이 추가되었다는 것이다.

9. 파일시스템 생성 최종확인

이제 df -k로 파일시스템정보를 다시 확인한 것이다.

추가작업하기 전의 내용과 달라진 부분을 확인해 보기바란다.

[root@duwon home2]# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             15947024   2810664  12326284  19% /
/dev/sda1               505605     13764    465737   3% /boot
none                    516364         0    516364   0% /dev/shm
/dev/sdb              17674512        20  16776580   1% /home2


즉, 맨 마지막 줄의 /dev/sdb라는 파일시스템이 생성되어 /home2라는 디렉토리에 마운트되어 있음을 볼 수 있다.  

 

이제 마지막 확인을 하기위해 "mount"라는 명령어로 현재 마운트된 정보를 확인해본 것이다.

[root@duwon home2]# mount
/dev/sda3 on / type ext3 (rw,noatime)
none on /proc type proc (rw,noatime)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
devfs on /dev type devfs (rw)
/dev/sda1 on /boot type ext3 (rw,noatime)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
/dev/sdb on /home2 type ext2 (rw)
[root@duwon home2]# mount
/dev/sda3 on / type ext3 (rw,noatime)
none on /proc type proc (rw,noatime)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
devfs on /dev type devfs (rw)
/dev/sda1 on /boot type ext3 (rw,noatime)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
/dev/sdb on /home2 type ext2 (rw)



추가하기전에는 보이지 않았던 /dev/sdb라는 파일시스템이 /home2에 마운트되어 있다는 것을 확인할 수 있을 것이다.

'Linux' 카테고리의 다른 글

xinetd 설치하기  (0) 2007.03.27
부트로더 GRUB에서의 root 암호 변경  (0) 2007.03.13
minicom 설치  (0) 2006.08.11
파일을 찾자 : find  (0) 2006.08.10
ssh2 설치  (0) 2006.08.03
minicom은 시리얼 통신 하기 위해서 필요하다.
http://alioth.debian.org/projects/minicom 이곳에서 다운 로드 할 수 있다.
#wget http://alioth.debian.org/download.php/123/minicom-2.1.tar.gz
#tar -xzvf minicom-2.1.tar.gz
#cd minicom-2.1
#./configure
#make && make install
#minicom -s

이제 시리얼 통신을 하기 위해 셋팅을 해 보자. minicom -s 명령으로 다음과 같은 화면을 뛰울 수 있다. 3번째 시리얼 포트 셋업을 선택한다.

A 를 누르면 시리얼 디바이스를 선택 할 수 있다. COM1 을 사용 하려면 ttyS0 으로 바꿔주면 된다. 처음 설치시 ttyS1으로 되어 있을 것이다. F를 눌러 하드웨어 흐름 컨트롤을  No 로 바꾸자. 그 다음   E 를 눌러 전송속도와  기타 설정을 바꿔 주자
아래와 같이 설정을 바꿔 주자. 앞의 앞파벳을 사용하면 바꿀 수 있다.
모든 설정이 끝났으면 아래와 같이 저장한 후 빠져 나가자.
이제 minicom을 사용 할 수 있다. minicom 처음 화면이 나왔을 때 당황한다. 어떻게 사용 해야 할 지 모르기 때문이다. 사용 설명서를 읽어보자.
minicom 사용 설명서 다운로드

* 아무리 시리얼 통신을 하고자 하여도 아무런 반응이 없었다. 윈도우에서는 정상 작동하는데 Linux에서는 작동하지 않는 것이다. BIOS 셋업에서 시리얼을 사용하지 않는다고 설정 해 놨었다.

* /dev/ttyS0 이 root 권한으로 설정되어 있기 때문에 다른 이용자는 시리얼 포트를 사용 할 수 없다. 그러므로 chmod 755  /dev/ttyS0 으로 다른 이용자도 사용 가능하게 바꿔 줄 수있다. 나도 아직 초보이므로 여러사람이 쓰는 컴퓨터 일경우 보안상 어떤 문제가 있는지 모르겠다.

'Linux' 카테고리의 다른 글

부트로더 GRUB에서의 root 암호 변경  (0) 2007.03.13
하드디스크 추가하기  (0) 2007.03.05
파일을 찾자 : find  (0) 2006.08.10
ssh2 설치  (0) 2006.08.03
wget  (0) 2006.08.03
#find -help
출력하여 도움말을 보아도 처음 보는 화면이라 어떻게 사용해야 되는지 모른다. 웹 사이트를 찾아 도움을 받았다.


1. /home 디렉토리 밑의 a.a 파일을 찾아 출력 해 보자.

find [디렉토리] -name [파일명] -print
-> find /home/ -name a.a -print

2. /home 디렉토리 밑의 a.a 파일을 찾아 삭제 하자

find [디렉토리] -name [파일명] -exec rm {} \;
-> find /home/ -name a.a -exec rm {} \;

rm 뒤에 옵션을 붙여도 된다.

'Linux' 카테고리의 다른 글

하드디스크 추가하기  (0) 2007.03.05
minicom 설치  (0) 2006.08.11
ssh2 설치  (0) 2006.08.03
wget  (0) 2006.08.03
[펌] 리눅스 디렉토리 구조와 파티션 관리의 기본  (0) 2006.08.03
Tftp 란?
  • Tftp(Trivial File Transfer Protocaol)은 ftp와같은 파일 전송 프로토콜이다.
  • 하위 프로토콜로 ip, udp 프로토콜을 사용한다
  • 개발보드에서는 Bootloader에서 kernel과 파일시스템 Image를 Host에서 Target으로 이더넷을 통하여 고속으로 다운로드 하기 위해 사용한다.

Tftp 설치
CD로부터 복사 하여 사용하므로 /home/embed/xhyper/RPM 폴더에 있다. tftp프로그램은 bootp와 마찬가지로 xinetd에 의해 실행된다. xinetd에 의해 tftp가 실행되게 하기 위해 /etc/xinetd.d/tftp 파일을 수정 해 줘야 한다. RPM을 설치 해야 하므로 root권한으로 접근하자
#su -l
Password :
#cd /home/embed/xhyper/RPM
#rpm -i tftp-server-0.17-9.i386.rpm
#rpm -qa | grep tftp
tftp-server-0.17-9
#mkdir /home/embed/tftpboot
#chown embed:embed /home/embed/tftpboot
#vi /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
       socket_type             = dgram
       protocol                = udp
       wait                    = yes
       user                    = root
       server                  = /usr/sbin/in.tftpd
       server_args             = -s /home/embed/tftpboot
       disable                 = no
}

server-args를 /home/embed/tftpboot 로 설정 하였기 때문에 Bootloader에서 파일을 받을려면 Host PC의 /home/embed/tftpboot 폴더에 파일이 위치 해 있어야 한다. tftp로 다운로드 하고자 하는 kernel 과 파일시스템 Image는 이곳에 있어야 한다.

tftp 이용
먼저 minicom이 설치 되어 있어야 한다. 다음으로 확인 해야 할 것은 netstat -au 명령으로 bootp 와 tftp가 실행되어 있는지 살펴보자.
Target Board 의 전원을 켜자. Bootloader 상태에서 bootp 명령어를 사용하여 Host PC로부터 Target Board의 ip를 얻어오자. 이제 tftp를 사용하여 파일을 Target Board에 다운로드 할 수 있다.
tftp zImage kernel 이란 명령어로 kernel 이미지를 kernel 영역에 다운로드 할 수 잇다. 그전에 Host PC의 /home/embed/tftpboot 에 커널 이미지가 있어야 한다.

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

개발 환경 구축에 대한 문제점  (0) 2006.08.10
Bootp 설정  (0) 2006.08.09
JTAG Compile  (0) 2006.08.09
Toolchain Test  (0) 2006.08.09
Toolchain 설치  (0) 2006.08.08
아무것도 모른 상태에서 시작 하려니 힘들다. 개발 환경 구축하는데 1주일이 넘게 걸리고 있다. 이러다 임베디드 보드 사용하지도 못하고 포기하게 생겼다.

hybus에서 발행한 강의자료에는 root권한으로 작업을 하게 되어 있다. 그러나 나는 embed라는 ID를 사용하여 개발 환경을 만들었다. 그러다보니 간단하게 구축하게 될 작업 환경을 리눅스 명령어를 공부하는 투자하고 있다.

1. embed권한으로 minicom 실행이 안된다. 권한을 변경 해 줘야 하는데 모르겠다.
2. 커널 컴파일 중 arm-linux-gcc 컴파일러가 /usr/local/hybus-arm-linux-R1.1/bin 폴더에 위치 해 있어야 한다. 나는 /home/usr/embed/xhybus/Toolchain/hybus-arm-linux-R1.1/bin 폴더에 있다. 컴파일 할 때 컴파일러 위치를 어떻게 변경 해야 하는지 모르겠다.
3. PATH 설정까지 모두 했음에도 arm-linux-gcc가 올바르게 작동하지 않는다. 처음 설치시 작동 되었는데 지금은 install problem...... cpp0:????????? 라는 에러를 내뱉는다.
4. 모든 설정을 책과 같이 했음에도 불구하고 tftp를 통해 Target으로 다운로드 되지 않는다.

이것 말고도 알 수 없는 문제가 발생한다. 처음부터 root 권한을 이용하여 시작해야 하는가.

해결 방법
1. 시리얼 제어 권한이 없기 때문이다. 그래서 보안 문제가 생길지 모르나 권한을 변경했다.
#su -l
Password :
#chmod 766 /dev/ttyS0

2. Makefile 파일의 CROSS_COMPILE 의 경로를 변경 했다.
#cd /home/embed/xhyper/Kernel
#vi Makefile
CROSS_COMPILE = /home/embed/xhyper/Toolchain/hybus-arm-linux-R1.1/bin/arm-linux-

3. 책과 같이 hybus-arm-linux-R1.1 폴더를 /usr/local/ 위치에 옮겨 버렸다. 그리고 컴파일러 위치를 다시 수정 해 줬다. 2번 문제가 같이 해결된다.
#su -l
Password :
#mv /home/usr/embed/xhybus/Toolchain/hybus-arm-linux-R1.1 /usr/local/
#vi /home/embed/.bash_profile
#vi /home/embed/xhyper/Kernel/Makefile

4. 디렉토리 설정 까지 완벽 하다면 방화벽 설정을 확인 해 봐야 한다. 방화벽 설정으로 자동으로 비활성화 될 수 있기 때문이다. lokkit 명령어를 사용하여 eth0 를 활성화 하자.

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

Tftp 설정  (0) 2006.08.10
Bootp 설정  (0) 2006.08.09
JTAG Compile  (0) 2006.08.09
Toolchain Test  (0) 2006.08.09
Toolchain 설치  (0) 2006.08.08
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