임베디드 시스템 개발 환경 (1) Lecture #3
목 차 교차 개발 환경 Host와 Target의 연결 Host 및 Target 사양 Host 개발 환경 구축 Toolchain(Cross-Compiler Tool) 설치 Minicom 설정 및 사용 방법 JTAG 설치 및 사용 방법 TFTP 서버 설치 및 구동 NFS 서버 설치 및 구동
교차 개발 환경 (1) 교차 개발 환경이란? Target system에서 응용 프로그램을 개발할 수 없다 하드웨어 구성이 소프트웨어 개발환경으로 부적합 저성능 CPU 및 메모리 용량 부족으로 컴파일 실행에 무리 소프트웨어 개발 생산성 저하 Target system 개발 방법 Target system보다 성능이 좋은 Host system을 이용하여 target system에서 동작하는 프로그램을 생성 프로그램 작성 및 컴파일은 Host system에서, 프로그램 실행은 Target system에 수행 Target system과 Host system이 서로 다른 형태의 프로세서를 사용하는 경우 cross compiler가 필요 주로 Host system이 target system의 console로 동작 이러한 개발 환경을 교차 개발 환경이라고 함 처음 하드웨어를 만들어 커널을 올리는 작업을 할 때 만들어진 하드웨어엔 아무 프로그램도 올라가 있지 않기 때문에 다른 곳에서 커널을 만들어 하드웨어에 심어줘야 한다. 그러므로 target에서 돌아가는 프로그램을 host에서 만들어 이식해 주어야 하는데, host와 target에 사용되는 processor가 다른 경우 실행은 host에서 되지만 만들어진 코드는 target system에서 돌아갈 수 있는 컴파일러가 필요해 진다. 이 때 cross 개발 환경이 필요하게 되는데 보통 cross compiler 라고 이야기를 한다. 일반적인 작업은 PC나 솔라리스 등과 같은 유닉스 시스템 혹은 워크스테이션과 같이 포팅하려는 타켓 시스템보다 성능이 좋은 시스템에서 수행되어진다. 호스트 시스템을 이용해 다른 프로세서가 잇는 타겟 시스템에서 동작하는 프로그램을 생성해야 하는데 이러한 작업을 할 ㅜ 있는 환경을 교차 개발 환경이라고 한다.
교차 개발 환경 (2) 프로그램 실행 프로그램 작성 및 컴파일 수행 Target system 실행 상태 디스플레이 처음 하드웨어를 만들어 커널을 올리는 작업을 할 때 만들어진 하드웨어엔 아무 프로그램도 올라가 있지 않기 때문에 다른 곳에서 커널을 만들어 하드웨어에 심어줘야 한다. 그러므로 target에서 돌아가는 프로그램을 host에서 만들어 이식해 주어야 하는데, host와 target에 사용되는 processor가 다른 경우 실행은 host에서 되지만 만들어진 코드는 target system에서 돌아갈 수 있는 컴파일러가 필요해 진다. 이 때 cross 개발 환경이 필요하게 되는데 보통 cross compiler 라고 이야기를 한다. 일반적인 작업은 PC나 솔라리스 등과 같은 유닉스 시스템 혹은 워크스테이션과 같이 포팅하려는 타켓 시스템보다 성능이 좋은 시스템에서 수행되어진다. 호스트 시스템을 이용해 다른 프로세서가 잇는 타겟 시스템에서 동작하는 프로그램을 생성해야 하는데 이러한 작업을 할 ㅜ 있는 환경을 교차 개발 환경이라고 한다. 프로그램 작성 및 컴파일 수행 Target system 실행 상태 디스플레이 프로그램 실행
교차 개발 환경 (3) Host 시스템 Target 시스템 (=KIT) 임베디드 소프트웨어를 개발하는 시스템 일반 PC에 Linux 운영체제를 설치하여 사용 Cross compile 환경 필요(toolchain 설치) Target 시스템에 연결하는 소프트웨어 설치 (minicom, JTAG 프로그램 등) Target 시스템 (=KIT) 개발된 임베디드 소프트웨어가 실제 수행되는 시스템 Target CPU가 탑재된 시스템에 Linux 운영체제 porting Bootloader 및 특별한 flash 메모리용 file system 설치
교차 개발 환경 (4) Host 시스템와 target 시스템의 연결 Serial 선 -Console 연결, zmodem을 이용한 파일 전송 JTAG 선 - Hardware debugging, Flash memory programming USB 선 – 빠른 속도의 파일 전송 지원 Ethernet 선 - 빠른 속도의 파일 전송, NFS 지원
Host 시스템 사양 Host 시스템 CPU Pentium IV 3GHz Memory 512M Disk 160G CD-ROM CD: x48 I/O Serial / JTAG Network 10/100 BaseT O/S Red Hat Linux 9
Target 시스템 H/W 사양 CPU: Intel XScale PXA255 400MHz RAM: Samsung SDRAM 128MB ROM: Intel Flash 32MB Screen: 6.4’’ TFT LCD (640 x 480) Touch Panel: BBADS7846E I/O: Serial, JTAG, USB 1.1(host/client), PCMCIA, Buttons, CMOS camera, IrDA, MIC, MMC Ethernet: CS8900A 10BaseT Audio: CS4202-JQ Cables: Power, Serial, Parallel, USB, Ethernet Case: Aluminum
Target 시스템 S/W 사양 O/S: Linux 2.4.19 kernel Device Drivers: CS8900A Ethernet, Frame buffer, BBADS7846E(Touch Screen), USB(host/client), PCMCIA, IrDA, CS4202-JQ stereo audio File System: Ramdisk, JFFS2
Target 시스템 (PXA255-PRO3)
Host와 Target의 연결 serial 케이블 JTAG 케이블 USB 케이블 Ethernet 케이블
Toolchain 설치 및 테스트 Cross-Compiler 개요 Toolchain 설치 Toolchain 테스트
Cross compile 환경 Embedded 시스템은 매우 제한된 H/W 및 S/W resource를 가지고 있기 때문에 여기서 Embedded S/W를 개발할 수는 없다 (S/W 개발은 Host 시스템에서) Host 컴퓨터의 processor와 Embedded 시스템의 processor는 다르기 때문에 Host 컴퓨터의 compiler를 사용하여 Embedded S/W를 compile할 수는 없다 Host 컴퓨터에서 작성된 프로그램을 Embedded 시스템에서 수행시키기 위하여 "Host to Embedded 시스템" cross compiler (교차 컴파일러)가 필요하다 일반적인 Linux 시스템에는 cross compiler가 설치되어 있지 않기 때문에 개발에 필요한 cross compiler는 개발자가 설치하여야 한다
Toolchain이란? Target 시스템에서 수행되는 소프트웨어를 개발하기 위해 필요한 Host 시스템의 cross compile 환경 소스 코드를 compile & link하여 binary 실행 파일을 생성하는데 필요한 각종 utility 및 library의 모음 기본적으로 assembler, C compiler, linker, C library 등으로 구성되어 있다. GNU에서 제공하는 Toolchain을 사용 GNU GCC for C, C++ : gcc GNU binary utilities: assembler, linker various object file utilities : binutils GNU C library : glibc
CD-ROM 장치를 /mnt/cdrom 디렉토리에 mount Toolchain 설치하기 (1) HUINS에서 제공하는 CD를 삽입하고 CD-ROM을 mount한다. CD를 넣으면 자동으로 mount가 됨. mount가 되지 않았을 경우 아래와 같이 실행 - 레드핫 9.0 X-window에서는 일반적으로는 자동으로 mount됨. - 마운트를 해제하게 위해서는 umount /mnt/cdrom 을 입력하면 됨. CD-ROM device name Read only option CD-ROM 장치를 /mnt/cdrom 디렉토리에 mount
Toolchain 설치하기 (2) cd 명령을 이용하여 mount 된 CD-ROM 으로 이동한다. ls 명령을 치면 CD의 내용을 볼 수 있음 - Mount는 root 권한에서만 가능하기 때문에 일반 계정으로 로긴 했을 경우에는 su -l 명령을 이용하여 root로 재로긴해야함 Tool Chain file
Toolchain 설치하기 (3) cp 명령을 이용하여 Tool Chain 파일을 /usr/local/arm으로 copy ls 명령으로 copy가 잘 되어 있는지 확인 후 usr/local/arm 디렉토리로 이동 arm directory 생성 주의 할 점은 꼭 /usr/local/arm에 tool chain을 풀어야 하는데 그 이유는 kernel compile할 때 makefile안에 cross compiler의 경로가 /usr/local/arm으로 되어 있기 때문. 다른 경로에 풀면 kernel compile할 때 에러 발생. Kernel source의 makefile안에서 tool chain의 경로가 /usr/local/arm으로 되어 있기 때문에 반드시 이 경로에 tool chain을 설치해야 함
Toolchain 설치하기 (4) tar 명령을 이용하여 압축을 풀면 Tool Chain은 자동으로 설치됨. 설치 후 ls 명령으로 잘 설치 되었는지 확인 j 옵션은 bunzip2의 확장자를 가진 압출 파일을 풀 때 사용 Bunzip2로 압축된 파일은 bz2라는 확장자를 가진다. tar 옵션 중에 j는 bz2를 풀 때 사용하는 옵션. bunzip2 pxa255-toolchain.tar.bz2 로 bunzip을 푼 후 tar xvf pxa255-toolchain.tar로 풀어도 됨.
Toolchain 설치하기 (5) 다음으로 path를 잡아주어야 함. cd를 쳐서 자신의 root 디렉토리로 이동 .bashrc 을 vi로 open. /usr/local/arm/bin 에 arm-linux-gcc compiler가 설치되어 있는데 이를 모든 디렉토리에서 사용 가능하게 하기 위해 path를 잡아주어야 함. 자신 계정의 root 디렉토리에 가서 ls –a를 치면 .bashrc가 있음.
/usr/local/arm/bin에 tool chain에서 설치한 여러 compiler가 있음. PATH 를 아래와 같이 설정해줌. /usr/local/arm/bin에 tool chain에서 설치한 여러 compiler가 있음. PATH 부분에 콜론을 삽입 한 뒤에 cross compiler가 있는 /usr/local/arm/bin 경로를 지정해줌.
Toolchain 설치하기 (7) 수정된 .bashrc는 source 명령을 사용하여 적용됨 Source 명령은 수정한 .bashrc을 적용시킬 때 사용.
Toolchain 설치하기 (8) hello.c 라는 Test file을 만든다.
Hello라는 object file이 생성 Toolchain 설치하기 (9) 설치된 arm용 cross compiler를 이용하여 compile한다. hello라는 object 파일이 만들어졌는지 확인한다. arm용 cross compiler Arm-linux-gcc 는 arm용 cross complier. /usr/local/arm/bin에 위치. Hello라는 object file이 생성
Toolchain 설치하기 (10) 만들어진 hello object 파일을 실행시켜본다. 아래 그림처럼 error가 발생하면 설치 성공. file이라는 명령어를 이용하여 file의 속성을 확인 Hello object 파일은 arm용 컴파일러를 통하여 컴파일 했기 때문에 i386계열 PC에서는 동작이 안됨. File 명령어를 이용하여 결과를 보면 arm용 object 파일이라는 것을 알 수 있음. ARM용 object 파일 의미
Minicom 설치 및 실행 터미널 에뮬레이터 개요 Minicom 설치 및 실행
터미널 에뮬레이터 - 개요 필요성 Minicom 소프트웨어 Host 컴퓨터가 Taget 보드의 콘솔로 동작 Linux 운영체제에서 기본적으로 제공하는 터미널 에뮬레이터 소프트웨어 텍스트 기반의 인터페이스를 제공 다양한 터미널 에뮤레이터 모드를 제공 다양한 파일 전송 프로토콜을 제공
터미널 에뮬레이터 – 설치(1) Minicom 동작 환경 Minicom을 이용하여 serial 통신으로 hello라는 파일 전송
터미널 에뮬레이터 – 설치(2) Host와 Target을 minicom으로 연결하기 위해 아래와 같은 환경 필요 Serial Cross Cable(9 pins) 1EA Linux 운영체제가 설치되어 있는 PC(Host) PXA255-pro 실습보드(Target) Cross cable의 한쪽은 Host의 COM1에 연결하고, 다른 한쪽은 Target의 COM1 연결한다. Minicom 역할 Target에 대한 가상 터미널 Hyperterminal과 동일한 기능 Linux상의 text 기반 가상 터미널 Target 임베디드 보드에 대한 명령과 작동결과를 모니터링
터미널 에뮬레이터 - 실행(1) 만들어진 hello object 파일을 target에 download하기 위해 minicom이라는 emulator를 이용 Minicom은 RS232C 통신을 이용 Minicom을 실행하기 전 통신 포트 설정을 해야 함 Minicom 실행 : ‘-s’ 옵션 사용 컴퓨터에 미니컴 패키지가 설치되어 있는지 확인하자. 대부부의 배포판에는 기본적으로 포함이 되어있지만, 시스템에 없을 수 있다. 만약 없다면 소스를 구해 설치해야한다. -rpm source 구하기 site : http://www.rpmfind.net/linux/RPM 에서 minicom을 검색하여 최신 rpm버젼을 받아 설치하면 된다. - rpm –ivh <minicom rpm source>
터미널 에뮬레이터 - 실행(2) Serial port setup으로 커서를 옮긴 후 enter를 입력하여 serial port setup 모드를 실행
터미널 에뮬레이터 - 실행(3) COM1은 ttyS0, COM2는 ttyS1로 Linux에서는 표시함. A를 눌려서 Serial cable이 연결된 포트를 설정. Host와 Target의 연결 설정: 115200 bps, 8 bit, no parity, 1 stop bit Flow Control은 모두 NO로 설정
터미널 에뮬레이터 - 실행(4) 설정을 default로 저장하고 나옴.
터미널 에뮬레이터 - 실행(5) 설정을 마친 후 target 보드의 전원을 on 시키면 아래와 같은 화면을 보게 됨. Boot loader loading Kernel loading ramdisk loading 위의 화면은 boot loader가 올라가고 커널이 SDRAM에 풀리고 root file system이 적재되는 것을 보여줌. Blob(boot loader)는 0x00000000에 적재 되어 있음 Kernel image는 0x00080000에 적재 되어 있음 Ramdisk는 0x00080000에 적재 되어 있음. zImage는 piggy.o와 head_armv.S로 이루어져 있음. Piggy.o는 vmlinux를 압축해놓은 파일이고 Head_armv.S는 압축을 푸는 코드이다. Kernel uncompressing
터미널 에뮬레이터 - 실행(6) Root를 입력 후 login한다. 위의 화면은 boot loader가 올라가고 커널이 SDRAM에 풀리고 root file system이 적재되는 것을 보여줌.
터미널 에뮬레이터 - 실행(7) Toolchain 설치 과정에서 만들었던 hello라는 object 파일을 host에서 target으로 download하려고 한다. CTRL과 A를 동시에 누른 후 Z키를 입력하면 아래와 같은 Minicom command 모드가 실행됨. 파일을 host로부터 target으로 전송하기 위해 S를 입력.
터미널 에뮬레이터 - 실행(8) 파일 전송 명령 S를 입력하면 아래와 같은 화면이 나오며, 파일 전송 프로토콜 중에서Zmodem을 선택한다. 스페이스키를 눌려 디렉토리 이동
터미널 에뮬레이터 - 실행(9) Toolchain 설치 시에 만들었던 hello 파일을 선택한 뒤에 enter를 치면 파일이 host로부터 target으로 download됨 파일 목록에서 원하는 파일 선택을 space 키를 사용
터미널 에뮬레이터 - 실행(10) 파일 전송이 성공하면 위와 같은 화면 나옴.
터미널 에뮬레이터 - 실행(11) ls 명령을 이용하여 hello 파일이 전송되었는지 확인
터미널 에뮬레이터 - 실행(12) Hello 파일을 실행 Host에서 실행이 안되었던 hello 파일이 target에서는 실행됨.
JTAG - 설치 및 사용법 JTAG 개요 JTAG I/F 프로그램 설치 및 실행
타겟 보드의 플래시 메모리에 부트로더, 커널 이미지 등을 fusing JTAG 개요 (1) JTAG 인터페이스 구성 Host에서 실행이 안되었던 hello 파일이 target에서는 실행됨. 타겟 보드의 플래시 메모리에 부트로더, 커널 이미지 등을 fusing
JTAG 개요 (2) JTAG 란? Joint European Test Access Group 기본 구조 JTAG은 PCB와 IC를 테스트 하기 위한 목적으로 1985년 조직된 JTAG(Joint Test Action Group)에 의해 제정된 표준이다. Boundary Scan Test 기본 구조 보드 내 소자의 외부 연결점에 하나의 셀을 설치 각각의 셀은 시리얼 쉬프트 레지스터(바운더리 스캔 레지스터)를 형성하고 서로 연결됨 전체적인 인터페이스는 5개의 핀에 의해서 제어 (TDI, TMS, TCK, nTRST, TDO) 칩 내부에 Boundary Cell이란 것을 두어 외부의 핀과 일대 일로 연결시켜 프로세서가 할 수 있는 동작을 중간에 Cell을 통해 모든 동작을 인위적으로 수행할 수 있어 여러 가지 하드웨어 테스트나 연결 상태 등을 체크할 수 있다.
JTAG 개요 (3) Boundary-Scan Test Interface JTAG Diagram Flash 메모리 write 셀 소자의 연결 상태 점검 Digital Chip Flash 메모리 write Registers TAP
JTAG 개요 (4) JTAG 기능 프로세서(CPU)의 상태와는 상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어 들일 수 있는 기능을 제공 회로의 배선과 소자의 전기적 연결상태 test 디바이스간의 연결상태 test Flash memory fusing jtag의 위 기능중 blob를 flash memory에 download 하기위해 flash memory fusing을 사용할 것이다.
JTAG I/F Program 설치 및 실행 (1) pxa255-pro의 JTAG 호환 장치(cpu)의 구조 BSR BSC cpu의 각각의 pin은 BSC (Boundary-Scan Cell)에 연결되어 있고, 이 BSC가 BSR (Boundary-Scan Register)를 이루게 된다. BSC : 각 pin에 대한 bit 단위의 값(혹은 상태)를 가지게 된다. BSR : 모든 BSC이 연결 되어 하나의 Register를 이루게 된다. TDI로부터 입력된 데이터가 shift작업을 통해 적절한 위치에 값을 위치시키거나, 가져올 수 있게 되며, TDO를 통해 이 값이 출력된다. JTAG이 테스트 상태일 경우에 동작하며, IC 동작 상태 일 경우에는 동작 불능 상태가 된다. PXA255-PRO V1.0 보드에서는 CPU의 각 핀의 출력을 SIMULATION 하기 위해서 JTAG를 사용한다. CPU의 각 PIN에 1BIT를 저장할 수있는 CELL(BSC)을 연결하고, 이 CELL 들을 연결하여 하나의 레지스터(BSR)를 구성한다. JTAG가 테스트 상태일 경우 BSR에 값을 기록하여 각 CPU의 각 PIN 의 출력을 원하는 값으로 설정하여 주변 장치에 출력해 줄 수 있다. 이러한 기능을 이용하여 FLASH MEMORY에 ADDRESS, READ/WRITE 신호, DATA 신호를 를 전달하여, DATA 를 FUSING 하거나 저장되어있는 DATA를 읽어 올 수 있다.
JTAG I/F Program 설치 및 실행 (2) PC를 통한 JTAG 호환 장치의 제어
JTAG I/F Program 설치 및 실행 (3) PXA255-PRO V1.0에서 Host 와 Target의 JTAG Interface Host의 parallel port JTAG port PXA255-PRO V1.0 에서는 host 의 parallel port 와 target 의 J17(JTAG) port를 연결한다. 이때 cable의 빨간 선이 J17 port의 1번 pin에 연결되도록 해야 한다. PC의 parallel port의 주소는 일반적으로 0x378이다.
JTAG I/F Program 설치 및 실행 (4) Host PC에서 jtag interface를 통하여 target system의 flash memory에 data를 fusing 하는 작업을 간편하게 해주는 프로그램 ftp://ftp.arm.uk.linux.org/pub/linux/arm/people/xscale/lubbock/jtag/ 에서 jtag.0624.tar.bz2를 다운 받을 수 있다. PXA255-PRO V1.0 실습 보드에서는 이 보드에 맞게 수정되어 huins에서 제공 하는 jtag 프로그램을 사용하여야 한다
JTAG I/F Program 설치 및 실행 (5) jtag 소스파일(pxa255-jtag.tar.gz)을 임시 디렉토리에 복사한다. Example에서는 /usr/local/pxa255에 복사 압축풀기 % tar xfvz pxa255-jtag.tar.gz 소스 파일이 있는 디렉토리로 이동 % cd pxa255-jtag/jtag-0.4 configure (Makefile 생성) % ./configure --prefix=/usr/local/pxa255/pxa255-jtag --with-include=/usr/local/pxa255/pxa255-jtag/include-0.2.3 compile & install % make; make install configure 에서 -–prefix 옵션은 make를 통해 컴파일 되어 생성된 각 실행 파일 및 설정 파일 등을 make install 명령으로 install 할 때에 어느 디렉토리 아래에 install 할 것인가를 결정하게 된다. 이 옵션을 지정해 주지 않으면 make install 명령에 의해 실행 파일은 대부분 /bin 또는 /usr/bin 에 복사되고 설정 파일은 /etc 또는 그 밖의 default 로 설정된 디렉토리에 복사되게 된다. --with-include 옵션은 컴파일할 때 include할 헤더파일이 있는 위치를 지정하는 것이다. 반드시 절대 경로로 지정한다. 하위 디렉토리에도 적용되기 때문
JTAG I/F Program 설치 및 실행 (6) /usr/local/pxa255/pxa255-jtag 디렉토리로 이동하여 bin 폴더와 share폴더가 생성되었는지 확인한 후, 제대로 되었다면 bin디렉토리를 PATH에 등록한다 또는, 실행 파일 jtag를 기존의 실행 파일을 모아둔 ‘/bin’ 디렉토리로 복사해 둠으로써 언제든지 접근할 수 있도록 한다 다시 로그인할 때에도 path에 JTAG 디렉토리가 등록 되도록 하려면 자신의 HOME 디렉토리에 있는 .bashrc 파일에 위 내용을 추가해 주면 된다. %vi ~/.bashrc export PATH=$PATH:/usr/local/pxa255/pxa255-jtag/bin/ %source ~/.bashrc
JTAG I/F Program 설치 및 실행 (7) 이전에 생성한 blob 이미지가 있는 곳으로 이동한 후 jtag를 실행한다.
JTAG I/F Program 설치 및 실행 (8) 다음과 같은 명령을 주어 blob를 flash 메모리의 0번지에 올린다(약 3~5분 정도 걸린다) cable: 은 사용할 jtag cable을 선택하는 것이다. 0x378이 일반적인 PC의 parallel 포트이다. PXA255는 cable을 type을 정하는 것으로 huins에서 제작한 PXA255-PRO V1.0보드를 위해서 PXA255라고 적어준 것이다. detect: cable이 제대로 연결되어있는가를 확인하는 것이고 flashmem 0 blob: flashrom 0번지에 blob 파일(jtag를 실행한 디렉토리에 있는)을 저장하겠다는 것이다.
TFTP 서버 설치 및 구동 TFTP 개요 TFTP 서버 설치 및 구동
TFTP 서버 설치 및 실행 (1) TFTP? Linux용 TFTP 프로그램 TCP 를 사용하여 신뢰성있는 file 전송을 제공하는 ftp와 달리 UDP를 사용하여 file을 전송하는 protocol Data의 전송 중에 오류가 날 확률이 극히 적은 근거리에서 빠르게 file을 전송 받고자 할 경우에 사용한다 Embedded system 개발 과정에서 kernel image나 ramdisk와 같이 용량이 큰 데이터를 bootloader를 통해 target board로 빠르게 전송하기 위해 많이 사용한다 Linux용 TFTP 프로그램 www.rpmfind.net 에서 tftp로 검색하면 해당 rpm을 받을 수 있다
TFTP 서버 설치 및 실행 (2) 설치 확인 설치 TFTP rpm을 설치하기 전에 host에 이미 설치가 되어있나 확인한다. 설치가 되어 있으면 설치과정 생략. % rpm –qa | grep tftp 설치 Host에 설치가 되어있지 않으면 다음과 같이 설치한다. % rpm –ivh tftp-0.32-4.i386.rpm tftp-server-0.32-4.i386.rpm
TFTP 서버 설치 및 실행 (3) 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 per_source = 11 cps = 100 2 flags = IPv4 }
TFTP 서버 설치 및 실행 (4) TFTP Server 구동 (cont’) 파일을 전송할 때 사용하는 디렉토리를 /tftpboot 로 만든다. % mkdir /tftpboot TFTP 설정 파일을 편집한 후에는 xinet daemon에 적용 시키기 위해 xinet daemon을 재시작 해주어야 한다. % /etc/init.d/xinetd restart TFTP가 현재 제대로 동작하고 있는가 확인한다. % netstat –a | 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 프로그램이다.
TFTP 서버 설치 및 실행 (5) TFTP 사용 예 전송할 파일을 /tftpboot에 복사한다. 예> cd의 ramdisk.gz 복사 % cp /mnt/cdrom/ramdisk.gz /tftpboot/ Minicom을 실행시킨다. % minicom Target board에 전원을 인가 한후 다음 메시지가 나오기 전에 임의의 key를 누르면 “boot>” prompt 가 뜨는 것을 확인할 수 있다.
TFTP 서버 설치 및 실행 (6) TFTP 사용 예 (cont’) tftp “전송할 파일명” ramdisk 를 실행하여 파일을 전송한다. ttftp 명령에 대해서는 5.3.3 장 ramdisk 설치에서 설명한다. 일단 server에서 설정한 디렉토리(여기서는 /tftpboot 로 설정하였었다.) 에서 두번째 인자에 해당하는 이름을 가진 파일을 sdram의 ramdisk 용으로 정해진 영역에 copy한다는 정도만 알아 두면 될 것이다.
NFS 구축 및 실행 NFS 구축 환경 NFS 실행
NFS 구축 (1) NFS – 구성(1) Ethernet을 사용한 NFS 통신 Host에서 실행이 안되었던 hello 파일이 target에서는 실행됨. Ethernet을 사용한 NFS 통신
NFS 구축 (2) 192. 168. 1. * NFS – 구성(2) Host 192.168.1.100 Target 192.168.1.101 Host에서 실행이 안되었던 hello 파일이 target에서는 실행됨.
NFS 구축 (3) 설치 준비 - NFS 설정을 위해 아래와 같은 환경이 필요 LAN Direct Cable Linux 운영체제가 설치되어 있는 PC(Host) PXA255-pro 실습 보드(Target) Lan cable은 direct나 cross cable 모두 사용가능하나 이 자료에서는 direct cable을 사용한다.
NFS 구축 (4) NFS– nfs용 공유 disk 만들기 (1) NFS(network file system)란 client가 server상에 있는 file 혹은 file system에 대하여 여과 없는 접근 권한을 지원하는 네트워크 파일시스템 NFS 방식으로 nfs_success라는 파일을 host에서 target으로 download 해보자 - Ftp와 다른점 : ftp는 파일에 대한 복사 권한만을 가진다. - NFS는 기능상 삼바와 비슷하지만 가장 큰 차이는 커널에서 NFS를 지원한다는 점이다. - Portmap설치 역시 NFS를 사용하기 위해서는 필수적인 프로그램이다. Portmap은 포트 요청이 있을 때 새로운 포트를 할당해 주고 맵핑해주는 역할을 하게 된다. 즉 NFS에 접근한 시스템이 있으면 NFS 포트에서는 인증을 하고 파일을 주고 받는 포트는 새로운 포트 할당하게 되는 것이다. - 웹서버나 ftp 서버와는 다르게 데몬 프로세스가 특정 네트워크 포트를 점유하면서 동작하여 접속을 대기하고 있는 것이 아니라 portmapper라는 프로그램을 이용해서 네트워크 포트를 할당 받는다. Portmapper는 111번 포트를 점유하면서 데몬 상태로 대기하고 있다가 NFS 서비스를 요구하는 접속이 들어오면 nfsd에게 포트번호를 바꾸어 접속을 연결시켜준다.
NFS 구축 (5) NFS– nfs용 공유 disk 만들기 (2) Host와 target의 통신을 위해서 host의 방화벽 설정을 변경한다.
NFS 구축 (6) NFS– nfs용 공유 disk 만들기 (3) Host와 target의 통신을 위해서 host의 방화벽 설정을 변경한다.
NFS 구축 (7) NFS – nfs용 공유 disk 만들기 (4) 일반적으로 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)를 재구동하면 된다.
NFS 구축 (8) NFS – nfs용 공유 disk 만들기 (5) 아래 그림과 같이 copy한 파일을 편집한다.
NFS 구축 (9) NFS – nfs용 공유 disk 만들기 (6) 먼저 Host에서 nfs 디렉토리를 만든다.
NFS 구축 (10) NFS– nfs용 공유 disk 만들기 (7) 만들어진 directory를 export시켜야 한다. Client로부터의 mount 요청을 처리하는 데몬으로 /etc/exports의 내용을 읽어 어떤 호스트에게 마운트를 허가하고 어떤 제한을 주어야 하는지를 판단하게 된다. Exportfs파일은 마운트될 디렉토리와 허가 대상, 제한을 명시하며 또한 NFS client는 서버의 exports파일을 사용하기 이전에 명확하게 허가된 파일 또는 디렉토리를 마운트해야한다. 서버에서는 마운트를 허가해주기 이전에 인증을 거쳐 올바른 사용자인지를 판단하며 이를 masic cookie라고 한다. 리눅스는 BSD와 비슷한 동작을 취하게 되는데, 그 동작은 mountd라는 client의 요청이 있으면, /etc/exports의 내용을 읽어 호스트에 접속을 허가하고 디렉토리에 제한을 두게 된다.
Root는 아니지만 root의 권한을 가진다는 의미 NFS 구축 (11) NFS – nfs용 공유 disk 만들기 (8) 만들어진 디렉토리를 export 할 수 있도록 vi를 이용하여 /etc/exports 파일을 다음과 같이 편집한다. Root는 아니지만 root의 권한을 가진다는 의미 Read/ write 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 옵션
NFS 구축 (12) NFS – nfs용 공유 disk 만들기 (9) nfs 데몬을 재 시작한다. 또는 다음과 같은 명령을 사용해도 된다. % service nfs restart
NFS 구축 (13) NFS – nfs용 공유 disk 만들기 (10) NFS로 mount시킬 target의 디렉토리를 만든다. NFS server와 target의 디렉토리를 nfs 파일 시스템 형으로 mount 시킨다. Host IP address
NFS 구축 (14) NFS – nfs용 공유 disk 만들기 (11) cat /etc/mtab 을 이용하여 mount 성공여부 체크 Mount 전 mtab는 mount table을 의미
NFS 구축 (15) NFS – nfs용 공유 disk 만들기 (12) Mount 후
NFS 구축 (16) NFS – nfs용 공유 disk 만들기 (13) 설치가 끝나면 Host의 /home/share와 Target의 /mnt/nfs는 같은 디렉토리의 의미를 가지게 됨. Host의 /home/share 에 nfs_success라는 파일을 만들면 Target의 /mnt/nfs 에서 이 file을 ls 명령어로 확인할 수 있음. Host에서 nfs_success라는 파일을 제작
NFS 구축 (17) NFS – nfs용 공유 disk 만들기(14) Target에서 nfs_success라는 파일을 확인
NFS 구축 (18) NFS – nfs용 공유 disk 만들기(15) umount 명령을 이용하여 mount 해제