480 likes | 769 Views
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 이상의 여유공간
E N D
권장사양 • 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 38400 8N1, 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 • Tool-Chain • 개발에 필요한 Compiler, 각종 Debugger, library, Util 등을 모아 놓았다는 뜻이다. • 가장 중요한 것은 gcc 컴파일러이다. • 또한 gcc 사용하기 위해 필요한 binutils도 포함 • binutils는 바이너리를 다루는데 사용된다. • C 라이브러리를 사용하는 것을 제외한 나머지 대부분의 커널을 컴파일
CD 복사 • CD 전체의 내용을 320TKU라는 폴더를 만들어서 복사한다 • 본인은 /root/320TKU/에 복사하였다 • 그런데 제조사에서 CD 체크를 안해서 간혹 재수없게 내용이 잘못된 경우가 있다. 그러므로 ftp://os2.sch.ac.kr에 있는 320TKU.zip 파일을 다운받아 쓰길 추천한다.
Tool-Chain 설치 • 호스트PC 리눅스를 부팅 한 후치 터미널을 열어 “/usr/local/” 폴더에 “arm-linux-4.1.1.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가 적용된 것을 확인 어떤 경로에서건 해당 명령어를 실행 가능
gcc 리눅스용 c 컴파일러 컴파일 명령어 : gcc -o <아웃풋파일이름> <소스파일이름>
gcc 컴파일된 프로그램의 실행 ‘.’으로 실행 ./실행파일경로/실행프로그램이름
Make 유틸리티 • 목록 파일 – 컴파일 할 것들의 명령어 목록을 모아둠 • 기본적으로 Makefile 혹은 makefile이라는 파일 이름을 사용 • 목표 파일, 부품 파일, 일련의 명령어로 구성 • 복수의 컴파일 명령어가 존재 가능 my_hello: hello.c gcc -o hello hello.c
Make 유틸리티 Makefile 이라는 이름으로 저장 후 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로 열어보면 대충 ‘두 개 파일을 복사해서 합치는거구나..’ 하고 알 수 있다
부트로더 퓨징 • 임베디드 보드에서 (minicom 창) tftp boot.bin 을 실행하면 PC로 부터 파일을 다운로드 함 • nand_format 후 nand_reinit • nand_write boot.bin 을 실행하면 퓨징 완료 • reboot를 입력하여 재부팅 • BLOB 모드로 부팅 가능 • 이후 BLOB모드에서 커널이미지 등을 다운 후 설치할것임
보드는 어떻게 작동 되나? • dummy라는 이미지가 있어서 이것이 부트로더(boot.bin)을 설치할 수 있게 해줌부트로더가 설치되면 더미모드로는 부팅이 안됨 • boot.bin 이 설치되어 있으면 blob모드로 부팅해서 임베디드용 리눅스 이미지를 설치할 수 있게 해줌 • 리눅스 이미지까지 다 포팅이 되어 있으면 정상적으로 부팅 가능 • 실수로 부트로더를 망가뜨리면 윈도우에서 예전에 했던 작업을 해서 dummy이미지를 설치해야함. 그 뒤 부트로더를 설치하고, 리눅스 이미지를 설치해야함.
ftp를 이용하지 않고 시리얼 통신으로도 파일 전송 가능 • ZMODEM을 사용해 호스트 시스템과 타겟 시스템 사이의 직렬 통신이 가능 • 미니컴에서 ZMODEM을 기동하여 파일 송수신 가능
① ② ③ ④ 실습 5-1 ZMODEM을 이용한 이미지 전송 • ARM용 실행 파일 hello-arm([실습 4-3]에서 툴체인을 이용해 생성)을 /embed/ex/05 디렉토리로 복사 • 미니컴 실행 • 타겟 시스템의 전원을 켜고 자동 부팅 • [Ctrl] + [A]와 [Z] 키 입력 → 미니컴 도움말 화면에서 [S] 키 입력
① ② ③ ④ 실습 5-1 ZMODEM을 이용한 이미지 전송 • ARM용 실행 파일 hello-arm([실습 4-3]에서 툴체인을 이용해 생성)을 /embed/ex/05 디렉토리로 복사 • 미니컴 실행 • 타겟 시스템의 전원을 켜고 자동 부팅 • [Ctrl] + [A]와 [Z] 키 입력 → 미니컴 도움말 화면에서 [S] 키 입력
실습 5-1 ZMODEM을 이용한 이미지 전송 • ZMODEM을 선택 후 [Enter] 키 입력 • ARM용 실행 파일이 있는 /embed/ex/05 디렉토리로 이동. 디렉토리 이동은 메뉴에서 []와 [] 키를 사용해 원하는 디렉토리로 커서를 옮긴 후 [Space] 키를 두 번 입력
① ② 실습 5-1 ZMODEM을 이용한 이미지 전송 전송할 파일로 이동 후 [Space] 키를 한 번 눌러 파일 선택 • [Enter] 키를 눌러 선택한 파일 전송 • 완료 후 아무 키나 눌러 타겟 시스템의 프롬프트가 나타나면 전송 받은 파일을 타겟 시스템에서 실행
커널(리눅스이미지) 빌드 과정 • 커널 환경 설정 유틸리티 • 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를 진행하면 된다.