Embedded Linux/Raspberry Pi

라즈베리파이와 PC에서 개발환경을 꾸미는 방법에는 여러가지가 있다.

보통 ssh, scp나 rsync를 사용하는데, 개인적으로는 RSYNC를 사용하는 방법을 선호한다.

ssh나 scp는 target board(라즈베리파이) 에 소스코드를 보관하고 원격에서 접속해서 소스코드를 수정하는 방식이고, rsync는 target board와 host pc 양쪽에 소스코드를 보관하면서 동기화 하는 방식이다.

(Target board) — (Network) — (Windows 10 PC)

PC에서는 보통 VS Code를 사용해서 editing을 하는데, extentions를 활용해서 개발환경을 더 쉽게 꾸밀 수 있다.

rsync를 선호하는 다른 이유는 예전 프로젝트에서 MIPS 아키텍쳐의 target 보드에서 개발했는데, VS Code extentions의 ssh 가 arm과 x86 계열만 지원했기 때문에 rsync에 익숙해져서이기도 하다.

준비

  • Windows PC
    • WSL(Windows Subsystem for Linux)
    • VS Code

VS Code, WSL 설치

여기서 다룰 내용은 아님. Ubuntu 20-04를 설치함.

WSL에 sshpass 설치

PC에서 라즈베리파이로 rsync로 동기화 하려면 ssh를 기본적으로 사용한다. 때문에 라즈베리파이의 username/password 가 필요하다.

물론 인증서 기반으로 할 수도 있겠지만, VS Code에서 자동으로 동기화 하려니까 어떻게 하는지 모르겠다..

설치 방법은 WSL을 실행한 후에 아래 명령을 입력한다.

$ sudo apt install sshpass
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  sshpass
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.5 kB of archives.
After this operation, 30.7 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/universe amd64 sshpass amd64 1.06-1 [10.5 kB]
Fetched 10.5 kB in 1s (10.1 kB/s)
Selecting previously unselected package sshpass.
(Reading database ... 32169 files and directories currently installed.)
Preparing to unpack .../sshpass_1.06-1_amd64.deb ...
Unpacking sshpass (1.06-1) ...
Setting up sshpass (1.06-1) ...
Processing triggers for man-db (2.9.1-1) ...

VS Code에 sync-rsync extension 설치

VS Code에서 rsync를 사용하는 방법은 WSL이나 cygwin 을 설치해야한다.

위에서 WSL을 설치 했다.

settings.json 수정

sync-rsync 연결을 위해서 setting.json에 관련 내용을 추가한다.

{
    "sync-rsync.shell": "sshpass -p \"raspberry\" ssh -p 22",
    "sync-rsync.remote": "pi@<ip-address>:/home/pi/work/",
    "sync-rsync.local": "/mnt/c/workspace/", 
    "sync-rsync.onSave": true, 
    "sync-rsync.onSaveIndividual": true, 
    "sync-rsync.exclude": [ 
           ".vscode", 
           ".git", 
           ".gitignore",
           ], 
     // 파일과 디렉토리의 권한 설정 
     "sync-rsync.chmod": "D2775,F664", 
     "sync-rsync.flags": "rlptv", 
     "sync-rsync.useWSL": true, 
 }

위에 처럼 설정하면 라즈베리파이의 "/home/pi/work/" 디렉토리와 PC의 "/mnt/c/workspace" 를 동기화 할 수 있다.

"/mnt/c/" 는 WSL에서 windows의 C 드라이브를 mount 해 놓은 것이다.

파일 동기화 하기

VS Code에서 작업 디렉토리 "/mnt/c/workspace" 를 오픈한 후에 "F1"을 눌러 command 창을 띄운다.

여기서 sync-rsync를 입력하면 몇가지 기능이 나온다.

  • Sync Remote to Local: target(라즈베리파이)의 파일을 PC로 가져와 동기화 한다.
  • Sync Local to Remote: PC의 파일을 target에 동기화 한다.

자동 동기화

파일을 수정하고 저장(Ctrl+S) 하면 자동으로 동기화가 진행된다.