2013 년 2 학기 임베디드 프로그래밍
권장사양 HOST PC 권장사항 리눅스 배포판이 설치된 PC - 권장 배포판 : Asianux open edition3 ( 라곤 하지만 Ubuntu, Fedora, CentOS 등 다양한 리눅스 프랫폼이 가능 ) PC 사양 CPU : Pentium 2.4 G 이상 / AMD sempron 2400 이상 (x64 인 경우 32bit 용 배포판을 설치하여 사용한다 ) RAM : 256MB 이상 HDD : 1.5GB 이상의 여유공간 VGA : 리눅스 드라이버 호환 모델 ( ATI, Geforce, Matrox 등 ) Parallel : 1 port (xdb 사용시, *usb to parallel 사용 불가 ) Ethernet : 1 port (2 port 권장 ) Serial : 1 port (*usb to serial 사용가능 ) CD-rom : 32x 이상 즉, 요즘 컴퓨터에서는 다 돌아감
주의사항 리눅 설치 시 주의사항 파티션은 일반 ext3 로 포맷한 후 사용하며, 보안관련 체크를 하게 될 경우 NFS 등의 문제가 발생 할 수 있다. xinetd, tftp, NFS, minicom 등의 패키지는 개발 시 꼭 필요하므로 최초 설치 시 같이 설치하는 것이 좋다. ( 라곤 하지만 NFS 는 없어도 되는 듯 ) 주의 : VMWARE 를 이용하여 리눅스를 설치할 경우, Host PC 자원 분리로 컴파일 시간이 오래 걸리고 가상 PC 내에서 실제 디바이스 제어가 잘 안될 수 있다. ( 라곤 하지만 요즘 컴퓨터는 좋아서 괜춘 )
Ubuntu 에서 root 계정 사용 작업 시 root 로 로그인 하면 GUI 환경에서 작업하기 용이하고 sudo 등의 명령어를 입력할 필요가 없음 우분투에서는 보안상 이유로 인해 기본적으로 root 계정 로그인이 설정되어있지 않음 설치 시 생성하는 계정은 일부 super 유저 권한을 가진 주작업 계정이지 root 계정은 아님 터미널에서 sudo passwd root 를 입력해 root 계정의 암호를 설정한다 sudo geidt /etc/lightdm/lightdm.conf 를 입력하고 greeter-show-manual- loign=true 를 추가해 준다 이제 로그인화면에서 root 를 입력하고, 암호를 치면 root 로그인이 가능하다
필요프로그램 설치 minicom : apt-get install minicom gcc : apt-get install gcc automake : apt-get install automake ncurses-devel : apt-get install libncurses5-dev xinetd 설치 : apt-get install xinetd* 시작 : service xinetd start <- 이게 안되면 /etc/init.d/xinetd start <- 요거 실행 tftpd : apt-get install tftp tftpd
tftpd 설정 /etc/xinetd.d/tftp 파일수정 ( 없을시 생성 ) gedit /etc/xinetd.d/tftp tftpboot 디렉토리 생성 : mkdir /tftpboot 혹시모르니 chmod 777 /tftpboot disable= no server_args= -s /tftpboot
tftpd 설정 xinetd 재시작 : service xinetd restart <- 이게 안되면 /etc/init.d/xinetd restart <- 요거 실행 tftp 동작 확인 : netstat -au
보드연결 보드 연결 X-Hyper320-TKU 의 메모리, TFT LCD 및 CPU 등의 소형 칩셋은 작은 충격에도 손상될 우려가 있기 때문에 항상 조심히 다루어야 한다. 전원이 인가 된 후에는 LCD 및 케이블 등에 항상 유의하기 바란다.
보드연결 Serial 연결 시리얼 케이블을 연결한다. X-Hyper320-TKU 에는 그림과 같이 시리얼 케이블로 보드의 DEBUG1 이라고 쓰여져 있는 시리얼 커넥터와 호스트 PC 의 Com 포트에 연결해주면 된다.
보드연결 Serial 연결 시리얼 케이블을 연결한다. X-Hyper320-TKU 에는 그림과 같이 시리얼 케이블로 보드의 DEBUG1 이라고 쓰여져 있는 시리얼 커넥터와 호스트 PC 의 Com 포트에 연결해주면 된다.
보드연결 Ethernet 연결 이더넷 크로스 케이블 (Ethernet cross cable) 을 연결한다. X- Hyper320-TKU 의 이더넷 포트 (Ethernet port) (LAN) 와 Host PC 의 RJ45( 이더넷 카드 ) 를 제공한 크로스 (Cross) LAN 케이블로 연결한다 (X-Hyper320-TKU 를 이더넷 허브에 직접 연결하려면 일반 Direct LAN cable 을 연결하면 된다 ).
시리얼 세팅 Serial setting 리눅스에서 Serial setting 을 하기 위해서 –s 옵션으로 minicom 설정창을 띄운다.
시리얼 셋팅 Serial setting Minicom –S 명령을 입력하면 다음과 같은 화면을 볼 수 있다.
시리얼 세팅 Serial setting “Serial port setup” 에서 Bps N1, Hardware Flow Control : NO 로 세팅한다
시리얼 세팅 Serial setting * Serial Device 에서 /dev/ttyS0 는 COM1, /dev/ttyS1 은 COM2 이다 USB to serial 을 사용할 경우 /dev/ttyUSB0 로 시작된다. 설정이 모두 끝났으면 “Save setup as dfl" 로 저장하고 종료 한 후 다시 minicom 을 실행한다.
Tool-Chain 크로스 컴파일러란 ? 네이티브 (native) 컴파일러 PC 라는 동일한 환경에서 프로그램을 작성한다. PC 에서 프로그램을 짜고 컴파일하고, 실행 파일을 PC 에서 수행 크로스 (cross) 컴파일러 컴파일러가 동작하는 시스템과 컴파일러에 의해서 생성된 실행 파일이 동작
Tool-Chain 개발에 필요한 Compiler, 각종 Debugger, library, Util 등을 모아 놓았다는 뜻이다. 가장 중요한 것은 gcc 컴파일러이다. 또한 gcc 사용하기 위해 필요한 binutils 도 포함 binutils 는 바이너리를 다루는데 사용된다. C 라이브러리를 사용하는 것을 제외한 나머지 대부분의 커널을 컴파일 Tool-Chain
CD 전체의 내용을 320TKU 라는 폴더를 만들어서 복사한다 본인은 /root/320TKU/ 에 복사하였다 그런데 제조사에서 CD 체크를 안해서 간혹 재수없게 내용이 잘못된 경우가 있다. 그러므로 ftp://os2.sch.ac.kr 에 있는 320TKU.zip 파일을 다운받아 쓰길 추천한다.ftp://os2.sch.ac.kr CD 복사
호스트 PC 리눅스를 부팅 한 후치 터미널을 열어 “/usr/local/” 폴더에 “arm-linux tgz” 을 복사하고, 압축을 해제 한다. Tool-Chain 설치
Tool-Chain 설치 “/usr/local/arm-linux-4.1.1/bin” 폴더 내용을 확인 Tool-Chain
Tool-Chain 설치 및 PATH 설정 “/etc/environment” 내용을 geidt 를 이용해 조금 전 폴더의 위치인 “:/usr/local/arm-linux-4.1.1/bin/” 을 추가 Tool-Chain
“/etc/environment” 파일에서 PATH 를 수정한 후 수정된 내용을 “source /etc/environment” 로 적용시켜 준다 Tool-Chain 설치
PATH 가 적용된 것을 확인 어떤 경로에서건 해당 명령어를 실행 가능 Tool-Chain 설치
리눅스용 c 컴파일러 컴파일 명령어 : gcc -o gcc
컴파일된 프로그램의 실행 ‘.’ 으로 실행./ 실행파일경로 / 실행프로그램이름 gcc
컴파일을 자동화해주는 명령어 생성 프로그램 최종 목표 파일 (target file) 의 빌드 (Build) 과정을 정의해두면 필요한 작업만 수행하여 목표 파일을 생성 종속된 파일들의 상호 의존 관계를 명시한 목록 파일 (description file) 을 사용하여 목표 파일을 생성 원시 파일의 일부가 수정되면 목표 파일을 새롭게 생성하기 위해 다시 컴파일할 파일을 자동으로 판단, 필요한 명령어만 이용해 다시 컴파일하는 지능적인 유틸리티 다중 모듈 프로그램의 재사용성을 유지하고 프로그램 수정에 대한 재번역을 최소화 Make 유틸리티
목록 파일 – 컴파일 할 것들의 명령어 목록을 모아둠 기본적으로 Makefile 혹은 makefile 이라는 파일 이름을 사용 목표 파일, 부품 파일, 일련의 명령어로 구성 복수의 컴파일 명령어가 존재 가능 Make 유틸리티 my_hello: hello.c gcc -o hello hello.c
Make 유틸리티 Makefile 이라는 이름으로 저장 후 make 실행
Make 유틸리티의 사용 목록 파일 이름이 makefile 혹은 Makefile 라면 –f 옵션을 사용해 목록 파일임을 명시할 필요 없음 목표파일 : 목록 파일 안에 들어있는 이름들 중 하나 ( 청록색 ) hello 를 생성하기 위한 Makefile first_hello: hello_1.c gcc –o f_hello hello_1.c second_hello: hello_2.c gcc –o s_hello hello_2.c Make 유틸리티
부트스트랩 로더 (bootstrap loader) 의 준말로 컴퓨터를 사용자가 사용할 수 있도록 디스크나 플래시에 저장된 운영체제를 읽어 주기억장치에 적재해주는 프로그램 부트로더의 종류 LILO(LInux LOader) GRUB(GRand Unified Boot loader) NTLDR(NT LoaDeR) BOOTX ARMBOOT BLOB(Boot Loader Object) - 우리가 쓰는것 BOOTLDR PPCBOOT REDBOOT U-BOOT(Universal BOOTloader) 부트로더
부트스트랩 로더 (bootstrap loader) 의 준말로 컴퓨터를 사용자가 사용할 수 있도록 디스크나 플래시에 저장된 운영체제를 읽어 주기억장치에 적재해주는 프로그램 부트로더의 종류 LILO(LInux LOader) GRUB(GRand Unified Boot loader) NTLDR(NT LoaDeR) BOOTX ARMBOOT BLOB(Boot Loader Object) - 우리가 쓰는것 BOOTLDR PPCBOOT REDBOOT U-BOOT(Universal BOOTloader) 부트로더
부트로더를 생성하려면 툴체인이 설치되어 있어야 함 생성된 부트로더는 jflashmm 이나 이미 설치된 부트로더의 부트 명령을 이용해 타겟 시스템에 있는 플래시 메모리에 퓨징 BBOOT 소스 코드와 make 를 이용해 부트로더 이미지를 생성 부트로더
부트로더 빌드 (boot.bin) CD 다 복사했죠 ? 320TKU 폴더의 Kernel 폴더 안에 있는 linux.tar.gz 압축 해제, 320TKU 폴더의 Bootloader 폴더에 있는 Bootloader.tgz 압축도 해제
부트로더 빌드 (boot.bin) - blob 빌드 해제 후 320TKU 폴더의 Bootloader 폴더에 있는 blob 폴더로 이동 후 아래 명령 실행 export PATH=$PATH:/usr/local/arm-linux-4.1.1/bin 그다음./config.sh 라고 실행하면 좌르륵 컴파일이 진행됨 컴파일 된 결과는 어디 있냐면...
부트로더 빌드 (boot.bin) - blob 빌드 320TKU/Bootloader/blob/src/blob 에 blob 라는 파일이 컴파일 된 최종 결과물이다.
부트로더 빌드 (boot.bin) - mobm 빌드 이번에는 320TKU 폴더의 Bootloader 폴더에 있는 mobm 디렉토리로 이동 후 아래 명령 실행 export PATH=$PATH:/usr/local/arm-linux-4.1.1/bin 그다음 make 를 실행 그러면 뭐라 또 주르륵 컴파일이 됨 결과물은 어디있냐
부트로더 빌드 (boot.bin) - mobm 빌드 320TKU/Bootloader/mobm 폴더에 mobm 이라는 파일이 최종 컴파일 결과물
부트로더 빌드 (boot.bin) 이제는 blob 파일과 mobm 파일을 합쳐서 boot.bin 파일을 만들어야 할 차례 320TKU/Bootloader/image 에 있는 mk_boot.sh 를 실행하면 됨 얘가 무슨 일을 해주는건지 궁금한 사람들은 geidt 로 열어보면 대충 ‘ 두 개 파일을 복사해서 합치는거구나..’ 하고 알 수 있다
부트로더 퓨징 이제 위 처럼 boot.bin 파일을 만들었으니까 이걸 보드에 다운로드 해서 설치를 해야 함 혹시 전에 tftpboot 라는 폴더 만들었던거 생각나는지 ? boot.bin 파일을 그 폴더로 복사 함. 그리고 보드에 랜선, 시리얼케이블을 PC 와 연결하고 PC 터미널에서 minicom 실행한 다음에 보드 전원을 올리세요
부트로더 퓨징 임베디드 보드에서 (minicom 창 ) tftp boot.bin 을 실행하면 PC 로 부터 파일을 다운로드 함 nand_format 후 nand_reinit nand_write boot.bin 을 실행하면 퓨징 완료 reboot 를 입력하여 재부팅 BLOB 모드로 부팅 가능 이후 BLOB 모드에서 커널이미지 등을 다운 후 설치할것임
보드는 어떻게 작동 되나 ? dummy 라는 이미지가 있어서 이것이 부트로더 (boot.bin) 을 설치할 수 있게 해줌 부트로더가 설치되면 더미모드로는 부팅이 안됨 boot.bin 이 설치되어 있으면 blob 모드로 부팅해서 임베디드용 리눅스 이미지를 설치할 수 있게 해줌 리눅스 이미지까지 다 포팅이 되어 있으면 정상적으로 부팅 가능 실수로 부트로더를 망가뜨리면 윈도우에서 예전에 했던 작업을 해서 dummy 이미지를 설치해야함. 그 뒤 부트로더를 설치하고, 리눅스 이미지를 설치해야함.
ZMODEM 을 사용해 호스트 시스템과 타겟 시스템 사이의 직렬 통신이 가능 미니컴에서 ZMODEM 을 기동하여 파일 송수신 가능 ftp 를 이용하지 않고 시리얼 통신으로도 파일 전송 가능
a. ARM 용 실행 파일 hello-arm([ 실습 4-3] 에서 툴체인을 이용해 생성 ) 을 /embed/ex/05 디렉토리로 복사 a. 미니컴 실행 a. 타겟 시스템의 전원을 켜고 자동 부팅 b. [Ctrl] + [A] 와 [Z] 키 입력 → 미니컴 도움말 화면에서 [S] 키 입력 실습 5-1 실습 5-1 ZMODEM 을 이용한 이미지 전송 ① ② ③ ④
a. ARM 용 실행 파일 hello-arm([ 실습 4-3] 에서 툴체인을 이용해 생성 ) 을 /embed/ex/05 디렉토리로 복사 a. 미니컴 실행 a. 타겟 시스템의 전원을 켜고 자동 부팅 b. [Ctrl] + [A] 와 [Z] 키 입력 → 미니컴 도움말 화면에서 [S] 키 입력 실습 5-1 실습 5-1 ZMODEM 을 이용한 이미지 전송 ① ② ③ ④
a. ZMODEM 을 선택 후 [Enter] 키 입력 a. ARM 용 실행 파일이 있는 /embed/ex/05 디렉토리로 이동. 디렉토리 이동은 메뉴에서 [ ] 와 [ ] 키를 사용해 원하는 디렉토리로 커서를 옮긴 후 [Space] 키를 두 번 입력 실습 5-1 실습 5-1 ZMODEM 을 이용한 이미지 전송
전송할 파일로 이동 후 [Space] 키를 한 번 눌러 파일 선택 a. [Enter] 키를 눌러 선택한 파일 전송 a. 완료 후 아무 키나 눌러 타겟 시스템의 프롬프트가 나타나면 전송 받은 파일을 타겟 시스템에서 실행 실습 5-1 실습 5-1 ZMODEM 을 이용한 이미지 전송 ① ②
커널 환경 설정 유틸리티 make config make menuconfig make xconfig 커널 ( 리눅스이미지 ) 빌드 과정
커널 환경 설정 커널 빌드 과정
320TKU 폴더에 Kernel 폴더안에 압축을 풀었던것을 기억할것이다. Linux 폴더에 들어가보면 Makefile 이 있는데 이것을 수정해야한다. 450 번째줄에 config %config: scripts_basic outputmakefile FORCE 를 %config: scripts_basic outputmakefile FORCE 로 수정한다. 커널 빌드하기
make WENDERS_defconfig 를 실행하면 알아서 커널 빌드 옵션을 기본 설정으로 만들어준다 make meunconfig 를 실행하면 수동으로 하나하나 설정이 가능하다. 이후는 교재 95~122 를 진행하면 된다. 커널 빌드하기