RaspberryPi 개발환경구축 III 1 제 03 강 개발환경구축 III Tool Chain( 크로스컴파일러 ) 설치크로스컴파일및호스트컴파일 NFS 서비스리눅스명령어참고 ) 한글사용환경구축
IP 주소설정 ( 계속 ) RaspberryPi 개발환경구축 III 2 * 가상머신에 IP 주소설정 ( 192.168.0.20 ) : VMware Player의 network adapter 설정에서반드시 Bridged, Replicate... 로선택 : 앱아이콘 - Settings - Network - Wired 해 ( ) 클릭후,
IP 주소설정 ( 계속 ) * 가상머신의 IP 주소설정 ( 계속 ) : ipv4탭 manual 선택하여 : IP 주소정보및 DNS 설정후, Apply 클릭 : DNS는 168.126.63.1 RaspberryPi 개발환경구축 III 3
IP 주소설정 ( 계속 ) * 가상머신의 IP 주소확인 RaspberryPi 개발환경구축 III 4 : 앱아이콘 - Settings - Network - Wired 해 ( ) 클릭후, : Details 탭에서확인
RaspberryPi 개발환경구축 III 5 IP 주소설정 ( 계속 ) * 가상머신의 IP 주소확인 : 터미널창에서 ifconfig로 ip 주소확인 : 디바이스명 ens33 유의 root@ubuntu:~# apt install net-tools // 미설치시 root@ubuntu:~# ifconfig ens33: flags=4163<up,broadcast,running,multicast> mtu 1500 inet 192.168.0.20 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::2c4:b745:7608:3d0a prefixlen 64 scopeid 0x20<link> ether 00:0c:29:af:fc:38 tx...
IP 주소설정 ( 계속 ) * 가상머신의네트워킹확인 : Firefox 웹브라우저통해특정사이트접속 RaspberryPi 개발환경구축 III 6
RaspberryPi 개발환경구축 III 7 툴체인 (tool-chain) * 필수패키지설치 root@ubuntu:~# apt-get update // 설치된패키지를최신버젼으로업데이트 ( 다운로드 ) root@ubuntu:~# apt-get upgrade // 다운로드된최신버젼패키지설치 ( 업그레이드 ) : 32 비트호환라이브러리패키지 root@ubuntu:~# dpkg --add-architecture i386 root@ubuntu:~# apt-get install lib32z1 // 숫자 1임 root@ubuntu:~# apt-get install lib32ncurses5 root@ubuntu:~# apt-get install lib32ncurses5-dev : 개발을위한패키지설치 root@ubuntu:~# apt-get install build-essential
RaspberryPi 개발환경구축 III 8 툴체인 ( 계속 ) * 툴체인 ( 크로스컴파일러 ) 설치 root@ubuntu:~# apt-get install gcc-arm-linux-gnueabihf Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: libqpdf13... : /usr/arm-linux-gnueabihf 디렉터리에설치됨 * 설치확인 ( 버전정보출력옵션 ) root@ubuntu:~# arm-linux-gnueabihf-gcc --version arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
RaspberryPi 개발환경구축 III 9 툴체인 ( 계속 ) * 크로스컴파일러경로설정 (.bashrc 파일편집 ) root@ubuntu:~# gedit.bashrc # 파일의끝에다음을추가 # Arm Cross Compiler... raspberry pi export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- *.bashrc 파일변경반영 root@ubuntu:~# source.bashrc root@ubuntu:~#
RaspberryPi 개발환경구축 III 10 툴체인 ( 계속 ) * 간단한 C 소스작성하여툴체인테스트 : 간단한메시지출력기능 root@ubuntu:~# gedit hello.c #include <stdio.h> int main(void) { printf("hello...\n\n"); } return 0;
RaspberryPi 개발환경구축 III 11 툴체인 ( 계속 ) * 타깃용 ( 라즈베리파이 ) 크로스컴파일 root@ubuntu:~# arm-linux-gnueabihf-gcc o t_hello hello.c root@ubuntu:~# ls t_hello hello.c * 실행 root@ubuntu:~#./t_hello bash:./hello: cannot execute binary file: Exec format error root@ubuntu:~# file./t_hello // 라즈베리파이용./hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=605ab13e2935cea088c3bc9d91fd43718e8d02a2, not stripped
RaspberryPi 개발환경구축 III 12 툴체인 ( 계속 ) * 호스트용 ( 가상머신 ) 컴파일 ( gcc ) root@ubuntu:~# gcc -o h_hello hello.c root@ubuntu:~# ls h_hello t_hello hello.c * 호스트용을실행 root@ubuntu:~#./h_hello Hello... root@ubuntu:~# file./h_hello // 가상머신용./h_hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=6f55ff519eceb3a255ebcb3eb29620dad454ece9, not stripped
RaspberryPi 개발환경구축 III 13
RaspberryPi 개발환경구축 III 14 NFS 서비스 * NFS(network file system) : 네트워크상의동종시스템의 FS 자원을공유하는서비스 : NFS 패키지설치 root@ubuntu:~# apt-get install nfs-kernel-server Reading package lists... Done... : NFS 환경설정 ( /etc/exports 파일편집 ) root@ubuntu:~# gedit /etc/exports /nfs *(rw,sync,no_root_squash,no_subtree_check) // 괄호속공백문자없이작성할것, * : 동일망내모든시스템 : 외부에서공유할디렉터리 ( /nfs ) 생성 root@ubuntu:~# mkdir /nfs : 재부팅 root@ubuntu:~# reboot
RaspberryPi 개발환경구축 III 15 NFS 서비스 ( 계속 ) * NFS 서버측에서 ( 계속 ) : 파일을 NFS 서비스위한디렉터리 ( /nfs ) 로복사 root@ubuntu:~# cp *_hello /nfs root@ubuntu:~# ls /nfs
RaspberryPi 개발환경구축 III 16 NFS 서비스 ( 계속 ) * NFS 클라이언트측에서 : target 보드로 putty 접속후 : 마운팅포인트생성 $ sudo mkdir /share ; 마운트포인트 : 마운팅 $ sudo mount -t nfs 192.168.0.20:/nfs /share ;192.168.0.20(VM) /nfs 를타깃보드의 /share 에마운트 : 공유공간내용확인 $ sudo ls /share ; 호스트영역공유확인
RaspberryPi 개발환경구축 III 17 NFS 서비스 ( 계속 ) * NFS 클라이언트측에서 ( 계속 ) : 공유자원활용 ( 파일실행 ) $ sudo cd /share $./t_hello ; 정상적으로실행 $./h_hello ; 실행불가
Linux 명령 * 다음관련명령 : 유용한기능들 : 파일시스템관련 : 검색관련 : 네트워킹및기타관련 RaspberryPi 개발환경구축 III 18 * 실습을진행하면서추가명령숙지
RaspberryPi 개발환경구축 III 19 Linux 명령 ( 계속 ) * 유용한기능 : 히스토리기능 // 기존사용했던명령을유지, 자판의상하키활용 : 자동완성기능 // 긴파일명혹은디렉터리명의자동완성기능 // 선두문자입력후 <tab> 키활용 : 파이프기능 // 한명령의표준출력을다음명령의표준입력으로전달 // 로명령간구분 $ ls -al /usr/bin more // /usr/bin의파일목록을페이지단위출력 $ ls /usr/bin sort less // 파일목록을소팅하여페이지단위출력
: 절대경로및상대경로 // 절대경로는 / 부터명시 // 상대경로는. 혹은.. 로시작하여지정 RaspberryPi 개발환경구축 III 20 * 파일시스템관련 : 파일및디렉터리속성, ls l 로확인 pi@raspberrypi:~ $ ls -l drwxr-xr-x 2 pi pi 4096 Nov 13 2018 Desktop // 첫글자 : 파일유형 (d디렉터리, -일반파일, c문자장치, b블록장치,...) // 다음 3자리씩 (rwx) : 접근권한 (owner, group, others 별 3자리 ) : ls 명령 $ ls // 현재디렉터리의파일목록 $ ls -a // 모든파일 ( 히든파일포함 ) $ ls -l // 속성까지상세하게 $ ls -al // 모든파일 ( 히든파일포함 ) 을자세하게
RaspberryPi 개발환경구축 III 21 $ ls /usr/bin // /usr/bin/ 디렉터리의파일목록 $ ls *.txt // 특정파일만 ( 파일명이.txt로끝나는모든파일 ) $ ls -l /usr/bin/a* : pwd(present working directory) 명령 pi@raspberrypi:~ $ pwd /home/pi : mkdir(make directory) 명령 $ mkdir mydir $ mkdir p mydir/subdir/tmp // parents, 서브디렉토리까지생성 : cd(change directory) 명령 $ cd // 사용자의홈디렉터리로이동 $ cd.. //.. 은현디렉터리의부모디렉터리를의미 $ cd mydir // 현디렉터리내의서브디렉터리 mydir로 // $ cd./mydir과동일
$ cd /usr/bin // /usr/bin 로이동 ( 절대경로 ) RaspberryPi 개발환경구축 III 22 $ cd./../usr/bin // 홈디렉터리에서위명령과동일효과 ( 상대경로 ) : rmdir(remove directory) 명령 $ rmdir mydir $ rmdir p mydir/subdir // 여러계층의디렉터리삭제, 비어있어야함 : touch 명령 // 빈파일의생성혹은기존파일의생성일시를현시점으로통일 $ touch test1 test2 // 빈파일들을생성 $ touch * // 모든파일의생성일시를현재일시로변경 : nano 명령 $ nano test.c // 파일편집기, 가상머신에선이외에 gedit 제공 : more/less 명령
RaspberryPi 개발환경구축 III 23 // 파일의내용을한화면씩 (24라인) 보여줌, <space>, <b> 키활용 $ more test $ less test // more 명령과동일기능 : head 명령 $ head test // 기본 10 라인보기 $ head -20 test // 20 라인보기 : tail 명령 $ tail test // 기본 10 라인보기 $ tail -2 test // 끝의 2 라인보기 : rm(remove) 명령 // 파일및디렉터리삭제 $ rm test // test 파일삭제 $ rm -i test // 삭제확인질의후 $ rm -r mydir // 디렉터리삭제시
$ rm -rf mydir // mydir 와그하부를삭제 RaspberryPi 개발환경구축 III 24 : cp(copy) 명령 $ cp test testcopy // 파일복사 $ cp -r mydir yourdir // 디렉터리복사 $ cp -a /home/sample/tests. // 파일의속성유지한채복사, archive : mv(move) 명령 $ mv aaa bbb./mydir //./mydir은디렉터리로두파일이동 $ mv /etc/*./mydir // /etc/ 하부모든파일을./mydir로이동 $ mv test mytest // test를 mytest로변경, 파일혹은디렉터리 $ mv mydir yourdir // mydir 디렉터리명을 yourdir로변경 : chmod(change mode) 명령 $ chmod go-w filedir // filedir에 group, others의기록권한삭제 $ chmod a+x filedir // filedir에모두에게실행권한설정 $ chmod 755 filedir // filedir에 octal 표현, -rwxr-xr-x 설정
RaspberryPi 개발환경구축 III 25 $ chmod R 777./filedir // 하부디렉터리까지설정 : chown/chgrp 명령 $ chown root /home/pi/test // owner를 root로 $ chgrp root /home/pi/test // group을 root로 $ chown root.root /home/pi/test // 소유자및그룹함께변경 : ln(link) 명령 $ ln aaa.txt atext // 하드링크, 두파일내용동일유지, 별도공간 $ ln -s./mydir/subdir/test ltest // 심볼릭링크 $ cat ltest // 다른경로에있는파일을쉽게접근 $ ln -s /mnt/share/ share // 심볼릭링크, 디렉터리지정 $ ls share // 파일목록보기 $ cd share // /mnt/share 로이동
RaspberryPi 개발환경구축 III 26 : unzip 명령 $ unzip tools.zip : tar(tape archive) 명령 // 옵션시 붙이지않음 $ tar cvf my.tar./my //./my의모든파일을 my.tar파일로묶음 $ tar tvf my.tar // 풀지않고포함목록만확인 $ tar xvf my.tar // 풀기 $ tar cvfz my.tar.gz./my // 묶기와 gzip 동시에,.gz 확장자 $ tar xvfz my.tar.gz // 압축복원과풀기동시에 * 검색관련 : grep 명령 $ grep hello abc.txt // 파일내에 hello포함라인검색 $ ls -al grep test // 파일목록중에 test 포함된것출력
RaspberryPi 개발환경구축 III 27 : whereis 명령 pi@raspberrypi:~ $ whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz : find 명령 // 지정경로하부에서특정패턴의파일검색 pi@raspberrypi:~ $ find /usr -name wiringpi* /usr/include/wiringpii2c.h /usr/include/wiringpi.h /usr/include/wiringpispi.h * 네트워킹및기타관련 : ifconfig 명령 $ ifconfig // 현재 NIC의설정정보보기 $ ifconfig eth0 172.18.14.xx // IP 주소변경
RaspberryPi 개발환경구축 III 28 : ping 명령 $ ping 192.168.0.40 : hostname 명령 $ hostname : uname 명령 // 프로세서, 커널버젼등의정보확인 $ uname -a // 시스템의모든정보보기 $ uname -p // 프로세서확인 $ uname -r // 커널버젼확인
실습과제 [ 실습 1] 개발환경구축 : 개발환경구축과정에따라실습진행 : 관련리눅스명령어숙지 RaspberryPi 개발환경구축 III 29 [ 실습 2] Linux 명령 : 제시된기본리눅스명령을충분히숙지토록실습 [ 실습 3] 한글표시및입력가능환경 : 라즈베리파이보드에서한글표시및입력가능하게 : 관련리눅스명령어숙지 : 아래내용참조
RaspberryPi 개발환경구축 III 30
RaspberryPi 개발환경구축 III 31 한글관련패키지설치 * 기존패키지업데이트및업그레이드 $ sudo apt-get update $ sudo apt-get upgrade * 한글폰트 ( 한글표시 ) 패키지설치 $ sudo apt-get install fonts-unfonts-core * 한글입력패키지설치 $ sudo apt-get install ibus-hangul * 재부팅 $ sudo reboot
한글관련패키지설치 ( 계속 ) * 한글패키지설치확인 RaspberryPi 개발환경구축 III 32 : 산딸기 - Preferences - ibus preferencs 항목확인 : 우상단삼태극아이콘등록확인 : 웹서핑통해한글깨짐현상없어짐을확인!!
한글관련패키지설치 ( 계속 ) * 한글입력기등록등설정 RaspberryPi 개발환경구축 III 33 : 삼태극아이콘을우클릭후, Preferences 선택 : 혹은, 산딸기 Preferences-iBUS preferencs 항목을선택 : 창의 Input Method 탭에서 Add 버튼클릭 Korean- Hangul 항목선택후, Add 버튼클릭 : 내정된한영전환키는 Shift+Space
시스템환경에서한글표시 RaspberryPi 개발환경구축 III 34 * 시스템의메뉴항목등을한글로보이게 $ sudo raspi-config : 4 localisation Options 항목을선택 : 서브화면에서 I1 Change Locale 항목을선택 : ko_kr.utf-8 UTF-8 을스페이스바눌러선택후, Ok : 등록된언어들중시스템환경에사용할언어선택후, Ok
시스템환경에서한글표시 ( 계속 ) * 기타항목 ( 타임존, 키보드등 ) RaspberryPi 개발환경구축 III 35 : I2 Change Timezone 항목 : Area에 Asia를, Location에 Seoul을선택 : I3 Change Keyboard Layout 항목 : 자판설정 : I4 Change Wi-Fi Country 항목 : 디폴트로영국설정되어있음 ( 그대로둘것 ) : 변경시 Wi-Fi를사용할수없게되므로유의
시스템환경에서한글표시 ( 계속 ) * 재부팅 $ sudo reboot RaspberryPi 개발환경구축 III 36 : 시스템메뉴에한글표시확인!!
이하제거!!!! RaspberryPi 개발환경구축 III 37
가상머신의 IP 주소설정 ( 계속 ) RaspberryPi 개발환경구축 III 38 * 가상머신 (Ubuntu) 의 IP 주소설정 ( 방법 2,OK, 비권고 ) : 터미널창에서 ifconfig 로 ip 주소확인 ( 디바이스명 ens33 유의 ) : 이방법의경우, 조치후방법 1 의 Wired 항목이나타나지않음!!! root@ubuntu:~# gedit /etc/network/interfaces auto lo iface lo inet loopback auto ens33 iface ens33 inet static address 192.168.0.20 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 220.68.64.1 root@ubuntu:~# gedit /etc/resolv.conf nameserver 127.0.0.53 // 재부팅시원상복구됨
RaspberryPi 개발환경구축 III 39 nameserver 220.68.64.1 root@ubuntu:~# systemctl restart networking.service root@ubuntu:~# reboot 참고 ) 웹서핑불가시아래와같이편집하여저장후웹서핑시도할것!! root@ubuntu:~# gedit /etc/resolv.conf nameserver 127.0.0.53 nameserver 220.68.64.1 // 재부팅시원상복구됨
RaspberryPi 개발환경구축 III 40 가상머신 (Ubuntu) 의 IP 주소설정 ( 계속 ) * 가상머신 (Ubuntu) 의 IP 주소설정 ( 방법 2) : 터미널창에서 ifconfig 로 ip 주소확인 ( 디바이스명 ens33 유의 ) root@ubuntu:~# apt install net-tools // 미설치시 root@ubuntu:~# ls /etc/netplan/ 01-network-manager-all.yaml root@ubuntu:~# gedit /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager ethernets: ens33: # 드라이버명 addresses: - 192.168.0.20/24 # 설정할 IP 주소
gateway4: 192.168.0.1 nameservers: addresses: [220.68.64.1] RaspberryPi 개발환경구축 III 41 root@ubuntu:~# netplan apply // 변경정보반영 root@ubuntu:~# ifconfig // 설정 IP 주소확인 : security 탭에서 ON 선택후, 망관리자계정명 / 암호설정
RaspberryPi 개발환경구축 III 42