임베디드리눅스개발환경구축 Jo, Heeseung
개발환경 HBE-SM5-S4210 개발환경 타겟보드와리눅스가설치된호스트컴퓨터가필요 임베디드리눅스개발환경 - 호스트컴퓨터환경설치 - 호스트와타겟연결 - 디버그환경 호스트컴퓨터는임베디드시스템의동작을모니터링하는디버깅환경으로서의역할도수행 임베디드시스템을위한소프트웨어를개발하기위해서호스트시스템에구축하는개발환경 교차개발환경 - Toolchain 2
호스트컴퓨터소프트웨어구성 소프트웨어개발도구 리눅스 : ARM용툴체인 (arm-2009q3) gcc 4.4.1 타겟보드모니터링도구 리눅스 : minicom, gtkcomm 등 윈도우 : Teraterm, Hyper Terminal 등 3
호스트컴퓨터소프트웨어구성 파일전송도구 리눅스 - 시리얼 : minicom - 이더넷 : tftp 서버 / nfs 서버등 - USB: fastboot( 부트로더및커널업데이트 ) 윈도우 디버깅도구 - 시리얼 : Teraterm 등 - 이더넷 : tftp - USB: fastboot( 부트로더및커널업데이트 ) 리눅스 : GDB 윈도우 : RealView, CodeViser, Trace32 4
타겟보드소프트웨어구성 HBE-SM5-S4210 보드에서동작하는소프트웨어 부트로더 / 커널과같은시스템소프트웨어 임베디드리눅스용디바이스드라이버 애플리케이션소프트웨어 시스템소프트웨어 부트로더 : uboot-s4210 리눅스커널 : linux-2.6.35-s4210 루트파일시스템 : glibc-2.10.1, busybox-1.9.1 등 서버용소프트웨어 웹서버 : GoAhead Peripheral 용프로그램 Peripheral 용디바이스드라이버 Peripheral 용예제프로그램 프레임버퍼제어, 네트워크, 멀티미디어, Sensor, Database 예제프로그램 5
호스트 PC 와타겟보드의연결 호스트 PC 와타겟보드의연결구성 Serial: 모니터링에사용하는포트로시리얼라인을연결 Ethernet port: Ethernet 을이용하여고속전송을하기위해 LAN 케이블을연결 USB OTG Cable: USB 를이용하여이미지를업데이트하는데사용하기위해서연결 Serial Adapter USB OTG Ethernet 6
리눅스개발환경은 Ubuntu 를사용 배포 CD 에서 Ubuntu 가설치된 VMWare 이미지파일을제공 CD 에는 32-bit 개발환경용 Ubuntu 이미지와 64-bit 용 Ubuntu 이미지파일이모두포함 크로스컴파일러 (Toolchain) 부트로더 / 커널 / 디바이스드라이버 / 임베디드애플리케이션등을빌드하기위한빌드툴 제공되는 VMWare 리눅스개발환경에는 arm-2010q1/arm-2009q3 툴체인이설치되어있음 7
Toolchain (Cross-Compiler) 다른컴퓨터또는시스템의 S/W 를빌드하는데사용되는컴퓨터프로그램개발도구들의집합 e.g. compilers for target board 8
Cross-Compiler install /tmp 폴더로이동 WinSCP를이용하여 CD의툴체인을복사 - arm-2009q3.tar.bz2 - arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 압축해제 - tar xvfj arm-2009q3.tar.bz2 - tar xvfj arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 /opt 폴더로해제한파일을이동 - mv arm-2009q3 /opt - mv arm-2010q1 /opt 10
PATH 설정 - export PATH=/opt/arm-2009q3/bin:$PATH - export UBOOT_CROSS_COMPILE=/opt/arm-2010q1/bin -.bashrc 파일에적어둘것 확인 - arm-linux-gcc -v 64bit Linux 를사용하고있다면, - apt-get install gcc-multilib 또는 ia32-libs 를설치 11
실습 : cross compile 사용 실습 기존에작성한프로그램을 cross compiler 로컴파일해보자 gcc -o a.out a.c file a.out arm-linux-gcc -o b.out a.c file b.out file 명령어는해당파일의종류를알려줌 12
호스트 PC 를위한 com port 설정 USB com port 를 PC 에연결 PL2303_64bit_Installer.exe 설치 Windows 10 에서동작가능한버전 13
호스트 PC 를위한 com port 설정 USB com port 를 Linux VM 에연결 14
Minicom 시리얼을통한모니터링프로그램 apt-get install minicom 리눅스에서 minicom 을실행 root@ubuntu:# minicom -s 15
Minicom 실행및설정확인 Serial port setup 메뉴 16
Minicom 실행및설정확인 Save setup as dfl을선택하여설정을저장 Exit으로이동 17
Minicom 종료 ctrl + a q Minicom 재실행 설정을위하여 minicom -s 로작업한이후에는 minicom 명령만으로실행 Minicom trouble shooting 간혹 minicom 이정상적으로실행되지않는경우 - VMware 에서 usb 을 disconnect 후다시연결 보안프로그램의 usb 검사해제 18
실습 타겟보드부팅 타겟보드에전원을연결하여부팅을하면, 로그인메시지 (login: ) 가나타난다. 이곳에 "root" 를입력 19
Comport using putty Window 에서 putty 로 comport 사용법 VMWare 로연결된 comport USB 연결을해제 20
NFS (Network File System) Created by Sun in 1985 Originally designed for diskless clients Version 2 is slow Write operation is not complete until receiving ACK from the server Version 3 permits async writes Faster Version 4 Supports strong security, ACLs, unicode filenames, replication and migration, etc. 21
NFS (Network File System) Uses RPC Remote Procedure Call a system-independent way for process communication over a network Could be UDP and TCP Now, TCP is preferable 22
NFS (Network File System) 원격지의컴퓨터에있는파일을마치자신의컴퓨터에있는것처럼이용 임베디드시스템개발시가장편리한방법 /root /bin /lib /etc /bin /lib /sbin /root /bin /lib /sbin NFS Server /net /mm /kernel /driver /arch /exam Host File System NFS Client /mm /driver /exam 23
NFS (Network File System) NFS Client/Server 구성도 user process local file access NFS client NFS server local file access kernel client kernel TCP/UDP IP TCP/UDP IP UDP port 2049 server kernel local disk local disk 24
NFS 서버설치및설정확인 두가지패키지설치 - nfs-common - nfs-kernel-server apt-get 명령어사용 - nfs-kernel-server 도동일한명령어로설치 25
NFS 서버설치및설정확인 mkdir /nfs_resource 로디렉토리생성 nfs 서버설정 root@ubuntu:~# vi /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /nfs_resource *(rw,sync,no_root_squash,no_all_squash,no_subtree_check) 26
NFS 서버설치및설정확인 nfs 서비스를재시작 root@ubuntu:~# /etc/init.d/nfs-kernel-server restart * Stopping NFS kernel daemon [ OK ] * Unexporting directories for NFS kernel daemon...[ OK ] * Exporting directories for NFS kernel daemon...[ OK ] * Starting NFS kernel daemon [ OK ] 27
네트워크설정 VMware 의네트워크설정을다음그림과같이 Bridged 로변경 28
NFS 서버설치및설정확인 Host pc 의 ip 확인 - Ex. 192.168.0.10 - cmd 창에서 ipconfig VM linux 의 ip 설정변경 - 192.168.0.11 - ping 으로확인후없는 ip 로설정 nfs 로 mount 되는지확인 - mount 192.168.0.11:/nfs_resource /mnt - ls -afl /mnt - umount /mnt root@ubuntu:/> cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.11 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 8.8.8.8 타겟보드의 network interface on 30
Board WIFI 설정 간단한 script 로만들어둘것 ifup.sh ifconfig wlan0 192.168.0.12 up iwconfig wlan0 essid "XXXX" chmod 755 ifup.sh nfsmount.sh mount -t nfs 192.168.0.11:/nfs_resource /mnt/nfs -o nolock,rsize=8192,wsize=8192,tcp chmod 755 nfsmount.sh 31
특정 IP 가사용되고있는지확인 apt-get install nmap nmap 192.168.0.12 아래예는사용되지않는경우 root@ubuntu:/> nmap 192.168.0.12 Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-30 18:15 KST Note: Host seems down. If it is really up, but blocking our ping probes, try - Pn Nmap done: 1 IP address (0 hosts up) scanned in 3.09 seconds 32
특정서비스데몬이동작하고있는지확인 ps -ef grep XXX root@ubuntu:/> ps -ef grep nfs root 664 2 0 08:00? 00:00:00 [nfsiod] root 3818 2 0 18:17? 00:00:00 [nfsd4] root 3819 2 0 18:17? 00:00:00 [nfsd4_callbacks] root 3823 2 0 18:17? 00:00:00 [nfsd] root 3824 2 0 18:17? 00:00:00 [nfsd] root 3825 2 0 18:17? 00:00:00 [nfsd] root 3826 2 0 18:17? 00:00:00 [nfsd] root 3827 2 0 18:17? 00:00:00 [nfsd] root 3828 2 0 18:17? 00:00:00 [nfsd] root 3829 2 0 18:17? 00:00:00 [nfsd] root 3830 2 0 18:17? 00:00:00 [nfsd] root 3840 3713 0 18:17 pts/0 00:00:00 grep -i --color=auto nfs 33
특정네트워크포트가열려있는지확인 netstat -na grep 3306 root@ubuntu:/> ps -ef grep 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 896/mysqld 34
NFS 서버설치및설정확인 타겟보드에서 nfs 접속 [root@sm5s4210 ~]$ mount -t nfs 192.168.0.11:/nfs_resource /mnt/nfs -o nolock,rsize=8192,wsize=8192,tcp [root@sm5s4210 ~]$ mount ------------------------< 출력내용 >------------------------------- rootfs on / type rootfs (rw) /dev/root on / type yaffs2 (rw) /proc on /proc type proc (rw) /sys on /sys type sysfs (rw) /sys on /sysfs type sysfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) 192.168.0.11:/nfs_resource on /mnt/nfs type nfs (rw,vers=2,rsize=8192,wsize=8192,namlen=255,hard,nointr,nolock,proto=tcp,timeo=70,retr ans=3,sec=sys,addr=192.168.0.100) ---------------------------------------------------------------- 35
실습 기존에 cross compiler 로 build 한 getprime 프로그램을 nfs 로실행 cp getprime /nfs_resource./getprime 37