Target System을 개발하기 위해 Host System에 환경을 구축하자.
목 차 5.1 Minicom 설정 5.2 BOOTP 설정 5.3 TFTP 설정 5.4 NFS 설정
5.1 Minicom 설정 타겟보드 콘솔을 위한 시리얼 통신을 셋팅한다.
5.1 Minicom 설정 TARGET은 출력을 위한 별도의 터미널을 가지고 있지 않음 일반적으로 serial port/LAN 을 통한 터미널 emulator 이용 Linux에서는 일반적으로 minicom 이용 Windows 에서는 Hyper-Terminal 등을 이용 Minicom을 이용하여 serial 통신으로 hello라는 파일 전송
5.1 Minicom 설정 설치 준비 Host와 Target을 minicom으로 연결하기 위해 아래와 같은 환경 필요 Serial Cross Cable(9 pins) 1EA Linux가 설치되어 있는 PC(Host) XHYPER270-TKU 실습보드(Target) Cross cable의 한쪽은 Host의 COM1에 연결하고 다른 한쪽은 Target의 COM1에 연결한다. Minicom 역할 Target에 대한 가상 터미널 Hyperterminal과 동일한 기능 Linux상의 text 기반 가상 터미널 Target 임베디드 보드에 대한 명령과 작동결과를 모니터링
5.1 Minicom 설정 Minicom 실행하기 만들어진 hello object 파일을 target에 download하기 위해 minicom이라는 emulator(가상터미널)를 이용 Minicom은 RS232C 통신을 이용 Minicom을 실행하기 전 통신 포트 설정을 해야 함. 컴퓨터에 미니컴 패키지가 설치되어 있는지 확인하자. 대부부의 배포판에는 기본적으로 포함이 되어있지만, 시스템에 없을 수 있다. 만약 없다면 소스를 구해 설치해야한다. -rpm source 구하기 site : http://www.rpmfind.net/linux/RPM 에서 minicom을 검색하여 최신 rpm버젼을 받아 설치하면 된다. - rpm –ivh <minicom rpm source>
5.1 Minicom 설정 Minicom 실행하기 Serial port setup으로 커서를 옮긴 후 enter를 입력
5.1 Minicom 설정 Minicom 실행하기 Linux에서는 COM1은 ttyS0, COM2는 ttyS1로 표시함. A를 눌려서 Serial 케이블이 연결된 포트를 설정. Host와 Target의 Baud rate는 115200, data bit은 8, stop bit 1, parity bit은 1로 설정 Hardware Flow Control은 NO로 설정
5.1 Minicom 설정 Minicom 실행하기 설정을 default로 저장하고 나옴.
5.1 Minicom 설정 Minicom 실행하기 타겟보드에 전원을 인가하거나 리셋을 시킨다. 위의 화면은 boot loader가 올라가고 커널이 SDRAM에 풀리고 root file system이 적재되는 것을 보여줌.
5.1 Minicom 설정 Minicom 실행하기 tool chain 설치에서 만들었던 hello라는 object 파일을 host 에서 Target으로 download하려고 한다. CTRL과 A를 동시에 누른 후 Z키를 입력하면 아래와 같은 화면이 나옴. 파일을 host로부터 target으로 전송하기 위해 S를 입력.
5.1 Minicom 설정 Minicom 실행하기 S를 입력 후 Zmodem을 선택하면 아래와 같은 화면이 나옴. 스페이스키를 눌려 디렉토리 이동
5.1 Minicom 설정 Minicom 실행하기 Tool chain 설치 시에 만들었던 hello 파일을 선택한 뒤에 enter를 치면 파일이 host로부터 target으로 download 수행
5.1 Minicom 설정 Minicom 실행하기 파일 전송이 성공하면 위와 같은 화면 나옴.
5.1 Minicom 설정 Minicom 실행하기 ls 명령을 이용하여 hello 파일이 전송되었는지 확인 해보고 실행시켜보자.
프로그램 다운로드를 위해 타겟보드에 ip를 할당한다. 5.2 bootp 설정 프로그램 다운로드를 위해 타겟보드에 ip를 할당한다.
5.2 BOOTP 설정 Bootp는 tcp/ip상에서 자동 부팅을 위한 최초의 표준으로, 디스크 장치가 없는 클라이언트를 구동시키기 위한 프로토콜로 개발되었다. 하위 프로토콜로 udp와 ip 프로토콜을 사용한다. 개발보드에서는 tftp와 함께, Bootloader에서 Kernel과 파일시스템 Image를 Host PC에서 Target으로 다운로드하기 위해 사용한다. Bootp는 Target 보드가 tftp를 통한 파일 전송을 위해서 Target 보드의 IP와 Host에 대한 정보를 Host PC에서 가져오기 위해 사용한다. 타겟보드에 커널이 올라가기 전에는 ip 셋팅이 되어 있지 않다. 이 경우 이더넷을 통한 데이터 전송을 할 수 없기 때문에 사용되는 방법이 부트로더상에서 bootp를 통한 ip 설정과 tftp를 통한 데이터 전송을 할 수 있다.
Bootp Bootp protocol Bootp Request : Target board가 host에게 IP를 요구함 IP요청 packet을 생성하여 호스트에 전송함. Bootp Reply : Host는 Target 보드의 IP 주소를 전달한다. IP 요청 packet을 inetd가 수신한다. inetd는 bootpd에게 IP요청 packet을 넘긴다. IP 응답 packet을 bootpd는 bootptab을 참조하여 IP응답 packet을 전달한다. Bootp reply Bootp request Host Target
5.2 BOOTP 설정 5.2 BOOTP 설정 bootpd 가 설치었는지는 다음의 명령어로 확인할 수 있다.
5.2 BOOTP 설정 bootp 설치 bootpd 가 설치되어 있지 않다면 bootp rpm설치로 데몬을 설치한다. * CD 안에 rpms 디렉토리 bootp rpm이 존재한다.
5.2 BOOTP 설정 bootp rpm이 설치가 되면 /usr/sbin/bootpd 파일이 생성된다. 생성된 bootpd파일은 xinetd 프로그램에 의해 실행된다. xinetd 프로그램에 의해 bootpd가 실행될 수 있도록 /etc/xinetd.d/bootp파일을 만들어야 한다.
5.2 BOOTP 설정 /etc/xinetd.d/bootp 파일을 아래와 같이 만든다.
5.2 BOOTP 설정 bootptab 파일 설정 타겟보드의 bootp요청이 있을 때 Host PC에 설치 한 bootp서버(bootpd)는 /etc/bootptab에 정의된 client 정보를 기반으로 bootp reply packet을 만들어 응답한다. 그래서 bootp를 사용하기 위해서는 이 /etc/bootptab에 client의 MAC Address와 할당할 IP등의 정보가 입력되어 있어야 한다.
5.2 BOOTP 설정 bootptab 파일은 bootpd(the Internet Bootstrap Protocol Server)를 위한 환경설정 데이터베이스 파일이다. host의 매개변수로, 대소문자를 구분하는 두 개의 문자로 된 tag symbols를 사용한다. hostname:tg=value:tg=value:tg=value: hostname에는 bootp client(or a "dummy entry")의 실제 이름이 들어가고, tg는 두 개의 문자로 구성된 tag symbol이다. 각각의 symbol에 해당하는 값은 value에 들어간다. 더 많은 내용은 man bootptab 로 확인할 수 있다.
5.2 BOOTP 설정 bootptab 생성 xhyper270tku은 hostname. ht (Hardware Type)는 10Mb Ethernet을 사용하므로 1 (=ehternet). ha (Hardware Address)는 Bootp Request를 보낼 Target(Bootp Client)의 Mac Address. ip는 Target에 할당할 IP Address. sm (subnet mask)는 Host (Bootp Server)와 동일하게 적어주면 된다.
5.2 BOOTP 설정 Bootloader에서 bootp 명령 실행하기 Host 에서 xinetd 를 재시작. (/etc/rc.d/rc.sysinit/xinetd restart) Target 에서는 bootp 명령 수행.
5.3 TFTP 통신
5.3 TFTP 통신 TFTP? TCP 를 사용하여 신뢰성있는 file 전송을 제공하는 ftp와 달리 UDP를 사용하여 file을 전송하는 protocol이다. Data 의 전송 중에 오류가 날 확률이 극히 적은 근거리에서 빠르게 file을 전송받고자 할 경우에 사용한다. Embedded system 개발중 개발한 kernel image나 ramdisk를 boot loader를 통해 target board로 전송하기 위해 많이 사용한다. Linux용 TFTP 프로그램 www.rpmfind.net 에서 tftp로 검색하면 해당 rpm을 받을 수 있다. 또는 제공된 하이버스 CD 안에 /rpms에 있는 tftp rom을 설치하면 하면 된다.
5.3 TFTP 통신 설치 확인 설치 TFTP rpm을 설치하기 전에 host에 이미 설치가 되어있나 확인한다. 설치가 되어 있으면 설치과정 생략. # rpm –qa | grep tftp 설치 Host에 설치가 되어있지 않으면 다음과 같이 설치한다. # cd /PXA270/rpms # rpm –ivh tftp-server-0.17-9.i386.rpm
5.3 TFTP 통신 TFTP Server 구동 TFTP Server는 xinetd daemon에서 관리한다. TFTP Server를 구동시키기 위해 /etc/xinet.d/tftp 파일을 다음과 같이 설정한다. service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot } 전송될 파일이 있는 디렉토리
5.3 TFTP 통신 TFTP Server 구동 (cont’) 파일을 전송할 때 사용하는 디렉토리를 /tftpboot 로 만든다. # mkdir /tftpboot TFTP 설정 파일을 편집한 후에는 xinet daemon에 적용 시키기 위해 xinet daemon을 재시작 해주어야 한다. # /etc/init.d/xinetd restart TFTP가 현재 제대로 동작하고 있는가 확인한다. # netstat –au | grep tftp tftp가 포함된 행이 보인다면 제대로 동작하고 있는 것이다. netstat 명령은 현재 시스템의 socket 상태를 보여 주는 것이다. local system의 어느 포트가 외부의 어느 포트와 연결 되어 있는지, queue의 상태는 어떠한지 등의 정보를 보여준다. 출력되는 정보는 순서대로 다음과 같다. Proto: 사용하는 protocol Recv-Q: receive queue에 대기중인 packet 수 Send-Q: send queue에 대기중인 packet 수 Local Address: service 가 사용하는 local system의 IP address와 port number Foreign Address: local system에 접속된 외부 system의 IP address와 port number State: 현재 접속 상태 grep 은 표준 입력으로 부터 지정된 문자열을 포함하고 있는 line만을 출력하는 filter 프로그램이다.
5.3 TFTP 통신 TFTP 사용 예 전송할 파일을 /tftpboot에 복사한다. # cp /PXA270/images/* /tftpboot/ Minicom을 실행시킨다. # minicom Target board에 전원을 인가 한후 다음 메시지가 나오기 전에 임의이 key를 누르면 “hybus>” prompt 가 뜨는 것을 확인할 수 있다.
5.3 TFTP 통신 hybus>tftp zImage kernel hybus>flash kernel TFTP 사용 예 (cont’) tftp “전송할 파일명” “해당 영역” hybus>tftp zImage kernel hybus>flash kernel hybus>tftp rootfs.img root ttftp 명령에 대해서는 5.3.3 장 ramdisk 설치에서 설명한다. 일단 server에서 설정한 디렉토리(여기서는 /tftpboot 로 설정하였었다.) 에서 두번째 인자에 해당하는 이름을 가진 파일을 sdram의 ramdisk 용으로 정해진 영역에 copy한다는 정도만 알아 두면 될 것이다.
5.4 NFS 설정
5.4 NFS 설정 NFS 구성하기 … NFS Client NFS Server Host File System Ethernet을 사용한 NFS 통신 Host에서 실행이 안되었던 hello 파일이 target에서는 실행됨. /root /bin /lib /kernel /etc /net /arch … /driver /sbin /mm /exam Host File System NFS Server NFS Client
5.4 NFS 설정 NFS 구성하기 192. 168. 1. * Host 192.168.1.100 Target 192.168.1.101 Host에서 실행이 안되었던 hello 파일이 target에서는 실행됨.
5.4 NFS 설정 설치 준비 NFS 설정을 위해 아래와 같은 환경이 필요하다. Cross Lan Cable(ethenet cable) Linux가 설치되어 있는 PC(Host) XHYPER270-TKU 실습 보드(Target) 중간에 허브를 사용할 경우에는 direct cable을 사용한다.
5.4 NFS 설정 NFS– nfs용 공유 disk 만들기 NFS(network file system)란 client가 server상에 있는 file혹은 file system에 대하여 여과 없는 접근 권한을 가지게 됨. NFS 방식으로 hello_arm 이라는 파일을 host에서 target으로 download 해보자. - Ftp와 다른점 : ftp는 파일에 대한 복사 권한만을 가진다. - NFS는 기능상 삼바와 비슷하지만 가장 큰 차이는 커널에서 NFS를 지원한다는 점이다. - Portmap설치 역시 NFS를 사용하기 위해서는 필수적인 프로그램이다. Portmap은 포트 요청이 있을 때 새로운 포트를 할당해 주고 맵핑해주는 역할을 하게 된다. 즉 NFS에 접근한 시스템이 있으면 NFS 포트에서는 인증을 하고 파일을 주고 받는 포트는 새로운 포트 할당하게 되는 것이다. - 웹서버나 ftp 서버와는 다르게 데몬 프로세스가 특정 네트워크 포트를 점유하면서 동작하여 접속을 대기하고 있는 것이 아니라 portmapper라는 프로그램을 이용해서 네트워크 포트를 할당 받는다. Portmapper는 111번 포트를 점유하면서 데몬 상태로 대기하고 있다가 NFS 서비스를 요구하는 접속이 들어오면 nfsd에게 포트번호를 바꾸어 접속을 연결시켜준다.
5.4 NFS 설정 #lokkit NFS– nfs용 공유 disk 만들기 (1) Host와 target의 통신을 위해서 host의 방화벽 설정을 변경한다. #lokkit --> no firewall로 설정
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(2) 일반적으로 lan card가 1개이므로 광대역 IP를 같이 쓰면서 target과 사설 ip로 통신하기 위해서 IP aliasing이 필요하다. IP aliasing 설정 파일을 아래와 같이 copy한다 IP aliasing - 하나의 네트워크 장치에 여러 개의 IP주소 설정이 가능하며 이것을 IP aliasing이라고 한다. IP aliasihg을 할경우 해당 장치파일은 eth0에 또 하나의 IP를 설정할 경우 eth0:0로 생성된다. 그러한 이유로 IP aliasing 관련 설정 파일 /etc/sysconfig/network-scripts/ifconfig-eth0:0를 생성한 후 네트워크 초기화 스크립트(/etc/init.d/network)를 재구동하면 된다.
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(3) 아래 그림과 같이 copy한 파일을 편집한다.
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(3) 먼저 Host에서 nfs 마운트를 위한 디렉토리를 만든다.
5.4 NFS 설정 NFS– nfs용 공유 disk 만들기 (4) 만들어진 directory를 export시켜야 한다. Client로부터의 mount 요청을 처리하는 데몬으로 /etc/exports의 내용을 읽어 어떤 호스트에게 마운트를 허가하고 어떤 제한을 주어야 하는지를 판단하게 된다. Exportfs파일은 마운트될 디렉토리와 허가 대상, 제한을 명시하며 또한 NFS client는 서버의 exports파일을 사용하기 이전에 명확하게 허가된 파일 또는 디렉토리를 마운트해야한다. 서버에서는 마운트를 허가해주기 이전에 인증을 거쳐 올바른 사용자인지를 판단하며 이를 masic cookie라고 한다. 리눅스는 BSD와 비슷한 동작을 취하게 되는데, 그 동작은 mountd라는 client의 요청이 있으면, /etc/exports의 내용을 읽어 호스트에 접속을 허가하고 디렉토리에 제한을 두게 된다.
Root는 아니지만 root의 권한을 가진다는 의미 5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(5) 만들어진 디렉토리를 export 할 수 있도록 vi를 이용하여 /etc/exports 파일을 다음과 같이 편집한다. 192.168.1.0 대신 *로 하면 모든 ip에서 접속 가능 ro : 읽기 전용 rw: 읽기/쓰기 가능 root=n : n으로 표시된 계정의 uid를 루트권한으로 사용 가능케 한다. insecure : 이 머신에서 인증받지 않은 access를 허용 root_squash : client uid 0에서의 request를 서버의 uid(-2)로 매핑함으로써 지정된 호스트의 슈퍼유저의 access를 거부하는 보안기능 no_root_squash : uid 0 로부터의 request를 매핑하지 않는다. Default 옵션 Root는 아니지만 root의 권한을 가진다는 의미 Read/ write
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(6) 또는 다음과 같은 명령을 사용해도 된다. % service nfs restart
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(7) NFS로 mount시킬 target의 디렉토리를 만든다. 타겟보드에서 호스트 pc의 nfs 서비스를 해주는 디렉토리로 마운트한다. xhyper270]# mkdir /mnt/nfs xhyper270]# mount –t nfs 192.168.100.1:/home/share /mnt/nfs
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(10) 설치가 끝나면 Host의 /home/share와 Target의 /mnt/nfs는 같은 디렉토리의 의미를 가지게 됨. Host의 /home/share 에 미리 만들었던 hello_arm을 복사하여 옮겨놓고 Target의 /mnt/nfs 에서 ls 명령어를 사용하면 폴더내에 생성된 것을 확인할 수 있음.
5.4 NFS 설정 NFS – nfs용 공유 disk 만들기(12) umount 명령을 이용하여 mount 해제 Xhyper270]#umount 192.168.1.100:/home/share