라즈베리파이4 SD카드 이미지 백업

kenGwon·2024년 2월 10일
0

[Embedded Linux] BSP

목록 보기
2/36

이미지 백업 받아놓기

이제부터 우리는 커널을 만질거기 때문에, 잘못하면 부팅이 아예 안되는 불상사가 발생할 수 있다. 그래서 우리는 시리얼 케이블을 통해서 현재 잘 동작하고 있는 라즈베리파이 이미지를 백업 받아놓겠다. 문제가 생기면 백업 이미지를 다시 SD카드에 write해서 돌아가겠다는 것이다.

그러기 위해서는 우선 시리얼 콘솔을 뚫어놔야 한다.
기존에 사용하던 ssh 원격 콘솔은 라즈베리파이를 재부팅 시키거나 할 때 네트워크가 끊어져버려서 터미널의 내부 동작을 더이상 확인할 수 없게 된다.
우리는 커널을 개발할건데 커널이 동작하는 순간은 대부분 부팅이 되는 그 순간에 해당한다. 그 상황에 발생하는 터미널 메세지를 봐야하는데 기존의 ssh 네트워크를 통한 콘솔로는 그것을 볼수 없다는 것이다. 그래서 우리는 시리얼 통신을 통해서 콘솔을 뚫어서 부팅 시퀀스 도중에 발생하는 터미널 메세지들을 확인하겠다는 것이다.




putty 시리얼 콘솔 뚫기

항상 모든 시리얼 통신의 기준점은 동일한 그라운드 연결이다.
그리고 나서 비로소 PWM이나 UART같은 것들이 연결이 가능해지는 것이다.

시리얼 통신은 transistor to transistor 통신이기 때문에 보통 3.3V 혹은 5V를 사용하게 된다.

우리는 컴퓨터와 라즈베리파이 간에 시리얼 통신을 할꺼다.
근데 컴퓨터에는 RX,TX가 관련 모듈이 없다. 그래서 컴퓨터쪽은 usb를 통해서 RX,TX를 대체하도록 하는 작업이 필요하다. 즉 밑작업이 필요한 것이다.

  1. 우선 케이블을 연결한다. (usb to serial 케이블)

    • 우리가 받은 케이블의 시리얼 점퍼쪽을 보면 4개의 점퍼가 있다.
      • 빨간색(전원공급): 사용안함
      • 검정색(그라운드): GPIO 그라운드 포트(GND)
      • 흰색(RX): GPIO 8번 포트(TX)
      • 초록색(TX): GPIO 10번 포트(RX)
  2. 장치 관리자를 켜서 "포트"부분의 아래 사진 부분을 "디바이스 제거"한다. 반드시 아래의 체크박스를 체크하고 제거해야 한다.

  3. 교수님이 주신 프로그램 깔기

    • (PL2303_Prolific_DriverInstaller_v1_12_0.zip) 압축파일을 풀어준다.
    • 인스톨러로 인스톨 해준다.
  4. 컴퓨터를 재시작한다.

  5. 그러면 장치관리자에 usb to serial 케이블로 연결된 라즈베리파이가 잡힌 것을 볼 수 있다.

  6. putty를 켠다. 지금부터 시리얼 콘솔용 새로운 세션을 만들 것이다.

  7. Serial탭에 들어간다. 그리고 설정을 아래와 같이 바꿔준다.

  8. 세션 탭으로 돌아간다. 그리고 아래와 같이 설정하여 세션을 저장해준다.

  9. 이렇게 해놓고 그냥 푸티에서 더블클릭하면 아무것도 안된다. 라즈베리단에서 설정이 한번 더 들어가야 한다. 라즈베리파이 푸티를 켜자.

  10. 아래 명령어로 boot config 파일 들어가서, 맨 아랫줄에 "enable_uart=1"을 추가해준다. (절대 사이사이 빈 줄이 들어가면 안된다.)

    $ sudo vi /boot/config.txt

    enable_uart=1

  11. 아래 명령어로 boot cmdline 파일 들어가서, 파일 내용을 아래와 같이 수정한다. (절대 사이사이 빈 줄이 들어가면 안된다.)

    $ sudo vi /boot/cmdline.txt
    #console=serial0,115200 console=tty1 root=PARTUUID=f729bde1-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=GB
    console=serial0,115200 console=ttyS0 root=PARTUUID=f729bde1-02 rootfstype=ext4 fsck.repair=yes rootwait
  12. 그리고 나서 푸티로 아까 만들었던 UART 세션을 열어준다.

  13. 그리고 나서 라즈베리 푸티에서 sudo reboot을 입력해주면, 라즈베리파이가 재부팅되면서 뜨는 메세지들이 UART 세션 쪽에 쭈르륵 뜨게 된다.

  14. 다시 말해 라즈베리파이 세션 콘솔은 ssh 원격 콘솔이지만, UART 세션 콘솔은 유선 serial 콘솔이 된 것이다!!!

진짜 이미지 백업 시작

이제 비로소 SD 카드를 백업할 준비가 되었다. 진짜 라즈베리파이 커널 빌드 실습을 위한 모든 준비가 끝났다.(위의 푸티 시리얼 콘솔까지 뚫는게 셋팅의 최종 목표였다.)
자세한 방식은 여기를 따라하겠다.

  1. 라즈베리파이에서 SD카드를 제거한다.

  2. 제거한 SD카드를 리더기에 껴서 컴퓨터에 꽂는다.

  3. 우분투 가상환경 버츄얼 머신에서 아래 옵션을 클릭해준다.

  4. 그렇게 되면 컴퓨터에 꽂은 usb가 윈도우가 아닌 우분투에 물리게 된다. 그리고 나서 우분투 터미널에서 "df" 명령어를 입력해보면 맨 아래에 "/dev/sdb1 522232 115690 406542 23% /media/ubuntu/bootfs"가 잡혀있는 것을 볼 수 있다.

  5. 우분투 터미널에서 아래 명령어를 순서대로 입력한다. (위에 블로그 따라가는 것)

    $ sudo apt install gparted pv dcfldd
    $ df -h
    $ sudo umount /dev/sdb1
    $ sudo umount /dev/sdb2
    $ df -h
    $ sudo dd if=/dev/sdb of=sdimage.img status=progress
  6. 이미지 파일의 권한을 ubuntu로 바꾸자. 그래야 나중에 쓸 때 일일이 계~~~속 sudo sudo 해줄 필요가 없다.

    $ sudo chown ubuntu:ubuntu sdimage.img

  7. 아래 명령어를 친다.

    $ sudo fdisk -l sdimage.img

  8. 이 파일을 마치 디스크처럼 마운트 시킬 수가 있다. df 명령어를 쳐보고 /dev/loop 이후의 섹터번호를 봐서 비어있는 섹터번호에다가 라즈베리파이 이미지 파일을 할당한다.

    $ df
    $ sudo losetup /dev/loop12 sdimage.img
  9. 아래의 명령어는 우분투 가상환경 GUI에서 쳐야 한다.

    $ sudo partprobe /dev/loop12
    $ sudo gparted /dev/loop12

  10. 위 그림을 보면 굉장히 빈공간이 많다는 것을 알 수 있다. 저 빈공간을 줄이겠다는 것이다 .

    위 그림에서 "Resize/move" 버튼을 클릭한다.

    그리고 나서 뜬 GUI에서 위와 같이 7GB만 남게 줄여놓고 확인버튼을 누른다.
    그리고 나서 밖으로 나온 원래의 GUI 상에서 초록색 체크 버튼을 누르면 된다.

  11. 이제 모든 창을 닫고 아래의 명령을 푸티에서 실행한다.

    $ sudo losetup -d /dev/loop12
    $ fdisk -l sdimage.img

    그리고 아래의 명령은 정말 주의해서 입력해야 한다. 파티션을 자르는 작업이다. 진정으로 필요한 부분만 빼고 나머지 영역은 날려버리겠다는 것이다.

    $ truncate --size=$[(15736831+1)*512] sdimage.img 
  12. 이로써 이미지파일 백업이 끝났다. 만약 라즈베리파이에 문제가 발생해서 다시 백업 이미지를 써야 할 일이 생긴다면, RaspberryPi imager 프로그램으로 이미지를 write할 때 custom image로 이 백업이미지를 넣어주면 된다.

profile
스펀지맨

0개의 댓글