임베디드리눅스개발환경실습 Jo, Heeseung
타겟보드모니터링동작실습 호스트 PC 에서시리얼포트를통해서타겟보드를모니터링 타겟보드가프로그램을실행하는동안일어나는일을시리얼포트로메시지를출력하면호스트 PC 에서는시리얼포트를통해메시지를수신하여이를화면에출력 minicom 프로그램사용 - minicom 이정상적으로설정이되고, 타겟보드에최소한부트로더가올라간상태라면 minicom 실행화면에부트로더메시지가출력 2
타겟보드모니터링동작실습 부트로더의커맨드모드실행 타겟보드정보를출력 리눅스커널로넘어가기전에카운트 - 만약, 카운트가완료되기전에키보드입력을하게되면부트로더커맨드모드로전환 - 그렇지않으면, 리눅스커널로부팅 U-Boot 2010.03 (Oct 26 2011-17:48:41) for SM5S4210 Linux APLL = 1000MHz, MPLL = 800MHz PMIC: ARM 1.30V, INT 1.15V, G3D 1.10V Board: sm5s4210 POP type: POP_B DRAM: 1 GB OneNAND: 0 kb MMC: This CLOCK is Not Support: 0 7580 MB *** Warning - using default environment 1 In: serial Out: serial Err: serial Checking Boot Mode... SDMMC board_late_init Hit any key to stop autoboot: 0 SM5S4210 # 2 3
타겟보드모니터링동작실습 리눅스로부팅하기 리눅 SM5S4210 login: - root 를입력한후에 Enter 키 4
크로스컴파일러사용 크로스컴파일러사용실습 hello.c 코드작성 - 디렉터리로이동한후에 hello.c 파일을생성하여코드작성 root@ubuntu:# mkdir /working root@ubuntu:# cd /working root@ubuntu:/working# vi hello.c --------------------- 다음과같이수정한다 --------------- 001: #include <stdio.h> 002: int main(void){ 003: int i; 004: for(i=0;i<5;i++) 005: printf( Number : %d Hello World!\n,i); 006: return 0; 007: } -------------------------- 저장하고종료한다 ----------------- root@ubuntu:/working# 5
크로스컴파일러사용 크로스컴파일러사용실습 ARM 용크로스컴파일러로컴파일하기 - hello.c 를크로스컴파일러 (arm-linux-gcc) 로컴파일하여 hello 라는실행파일을생성 root@ubuntu:/working# arm-linux-gcc -o hello-arm hello.c root@ubuntu:/working#./hello-arm ---------------- 다음과같은메시지가출력된다 ----------------- -bash:./hello-arm: cannot execute binary file - file 명령어로 hello 파일의종류확인!! root@ubuntu:/working# file hello-arm ------------------ 다음과같은메시지가출력된다 ----------------- hello-arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped 6
크로스컴파일러사용 크로스컴파일러사용실습 호스트 PC(i386) 용컴파일러로컴파일하기 - hello.c 를호스트용컴파일러 (gcc) 로컴파일하여 hello 라는실행파일을생성 root@ubuntu:/working# gcc -o hello-i386 hello.c root@ubuntu:/working#./hello-i386 ------------------ 다음과같은메시지가출력된다 ----------------- Number: 0 Hello World! Number: 1 Hello World! Number: 2 Hello World! Number: 3 Hello World! Number: 4 Hello World! root@ubuntu:/working# 7
크로스컴파일러사용 크로스컴파일러사용실습 file 명령어로 hello 파일의종류확인!! root@ubuntu:/working# file./hello-i386 -------------32bit ubuntu 의경우다음과같은메시지가출력된다 -------------- hello-i386: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped -------------64bit ubuntu 의경우다음과같은메시지가출력된다 ------------- hello-i386: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped 8
크로스컴파일러사용 타겟보드에서어플리케이션실행파일다운로드 타겟보드의리눅스로로그인 (root) 후 lrz 명령실행 10
크로스컴파일러사용 타겟보드에서어플리케이션실행파일다운로드 lrz 명령어를실행시키면데이터수신대기상태로전환 lrz 명령어는리눅스에서 X, Y, Z modem 프로토콜을통하여파일전송에사용되는명령어 [root@sm5s4210 ~]$ lrz 11
크로스컴파일러사용 타겟보드에서어플리케이션실행파일다운로드 수신대기상태에서 ctrl+a 키를누른후에곧바로 z 키를누르면 minicom 의 command 모드가실행 이상태에서 s 키를누르면전송프로토콜선택창이뜸 12
크로스컴파일러사용 타겟보드에서어플리케이션실행파일다운로드 전송프로토콜로 ymodem 선택 13
크로스컴파일러사용 타겟보드에서어플리케이션실행파일다운로드 전송할부트로더이미지파일을선택 파일전송이완료되면 "READY: press any key to continue..." 메시지가출력 엔터키를눌러전송모드를빠져나옴 14
크로스컴파일러사용 타겟보드에서어플리케이션실행파일다운로드 수신된파일 (hello-arm) 을확인하고실행 15
이더넷을이용한다운로드실습 이더넷을이용하는방법 tftp, nfs, samba 등을이용하는방법 부트로더에서는 tftp 밖에는사용할수없음 tftp 를제외한 nfs 나 samba 등은호스트 PC 의파일들을공유디렉터리를통해서곧바로엑세스할수있음 16
이더넷을이용한다운로드실습 TFTP Trival file transper protocol FTP와비슷하지만, 훨씬단순함 특정목적을위해서만사용됨 tftp server install apt-get install tftpd mkdir /tftpboot vi /etc/xinetd.d/tftp - '=' 앞뒤로빈칸이있어야함 /etc/init.d/xinetd restart service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no } 17
이더넷을이용한다운로드실습 tftp 를이용한이미지다운로드실습 tftp 서버디렉터리 - 상기설정한 /tftpboot 디렉터리 - 본인 VM 에없다면생성 (mkdir /tftpboot) 리눅스에서애플리케이션실행파일다운로드 - 타겟보드리눅스로로그인한후에 ifconfig 명령어로 IP 를확인 [root@sm5s4210 ~]# ifconfig eth0 Link encap:ethernet HWaddr 00:0B:A8:03:13:01 inet addr:192.168.0.150 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1020 (1020.0 B) TX bytes:0 (0.0 B) Interrupt:75 Base address:0x1000 DMA chan:ff 18
이더넷을이용한다운로드실습 tftp 를이용한이미지다운로드실습 다음과같이타겟보드의 IP 를확인 변경하고자할때 - 서버 IP 와 3 자리가같은 192.168.0 을사용하고마지막 IP 를바꿔주면된다. [root@sm5s4210 ~]$ ifconfig // IP 확인 [root@sm5s4210 ~]$ ifconfig eth0 192.168.0.150 up // IP 변경 [root@sm5s4210 ~]$ ifconfig wlan0 192.168.0.12 up [root@sm5s4210 ~]$ iwconfig wlan0 essid "XXXX" 19
이더넷을이용한다운로드실습 tftp 를이용한이미지다운로드실습 tftp 명령어를실행하여 hello-arm 실행파일을다운로드 -r 옵션은파일명, -g 옵션은 tftp 서버 IP 옵션 - hello-arm 파일은 VMWare Linux 의 /tftpboot 디렉터리에존재해야함 [root@sm5s4210 ~]# tftp -r hello-arm -g 192.168.0.100 using server '192.168.0.100:69', remotefile 'hello-arm', localfile 'hello-arm' sending 18 bytes 00 01 68 65 6c 6c 6f 2d 61 72 6d 00 6f 63 74 65 74 00 received 516 bytes: 0003 0001 sending 4 bytes 00 04 00 0c 20
이더넷을이용한다운로드실습 tftp 를이용한이미지다운로드실습 hello 를실행 [root@sm5s4210 ~]# ll -rw-r--r-- 1 root root 5807 Oct 20 18:48 hello-arm [root@sm5s4210 ~]# chmod 777 hello-arm [root@sm5s4210 ~]#./hello-arm Number : 0 Hello World! Number : 1 Hello World! Number : 2 Hello World! Number : 3 Hello World! Number : 4 Hello World! [root@sm5s4210 ~]# 21
이더넷을이용한다운로드실습 NFS 사용실습 nfs 서버동작확인을위한준비작업 - 호스트 PC에서 hello 실행파일을 NFS 공유디렉터리로복사 - 타겟보드에서 NFS 공유디렉터리를마운트하여실행파일을실행 nfs mount 방법은이전슬라이드참조 22
이더넷을이용한다운로드실습 NFS 사용실습 hello-arm 실행파일복사 - hello-arm 실행파일을 nfs 공유디렉터리로복사 root@ubuntu:/working# ls hello-arm ------------------ 다음과같은메시지가출력된다 ----------------- hello-arm root@ubuntu:/working# cp hello-arm /nfs_resource root@ubuntu:/working# ls /nfs_resource ------------------ 다음과같은메시지가출력된다 ----------------- hello-arm 23
이더넷을이용한다운로드실습 NFS 사용실습 mount 명령어를사용하여 NFS 공유디렉터리를마운트 [root@sm5s4210 ~]$ mount -t nfs 192.168.0.100:/nfs_resource /mnt/nfs -o nolock,rsize=8192,wsize=8192,tcp hello-arm 를실행 - ls 명령어로마운트된 /mnt/nfs 디렉터리의내용확인 - hello-arm 실행 [root@sm5s4210 ~]# ls /mnt/nfs/hello-arm /mnt/nfs/hello-arm [root@sm5s4210 ~]# /mnt/nfs/hello-arm Number : 0 Hello World! Number : 1 Hello World! Number : 2 Hello World! Number : 3 Hello World! Number : 4 Hello World! 24