log

라즈베리파이3 B에 우분투 18.04 64bit OS(arm64) 설치하기

라즈베리파이3 B에 우분투 18.04 64bit OS(arm64) 설치하기


라즈베리파이3 B는 32bit OS(라즈비안)를 사용한다.


ARM Cortex-A 시리즈를 사용하기 때문에 64bit를 지원하는데, 일반적인 방법으로는 32bit OS밖에 설치할 수 없다.


따라서 라즈베리파이3의 기능을 온전하게 사용하기 위해서는 64bit OS를 설치해야 한다.


64bit OS를 설치하기 위해서 아래의 과정을 거친다.


튜토리얼 :https://www.raspberrypi.org/forums/viewtopic.php?t=220079


준비물은 아래와 같다

 - 라즈베리파이3 b(b+)

 - micro SD카드

 - micro SD카드 USB 리더기

 - 키보드, 모니터

 - 리눅스 환경(VMware 이용)


아래의 절차대로 작업을 진행한다.


튜토리얼을 보고 헷갈리는 부분이나, 정확하게 써있지 않은 부분을 최대한 쓰려고 노력했으나,


제 환경과 다른 환경이 완전하게 똑같지 않을것이기에, 


이름이나 설정등이 조금씩 다르게 나타날 수 있으므로 적당히 자신에게 알맞게 수정해가면서 참고하길 바랍니다. 



리눅스 환경(VMware)가 실행되고 있는곳에 microSD를 장착한 USB 리더기를 삽입해 주고, lsblk 명령으로 SD카드가 제대로 인식 되었는지 확인한다.

kwon@kwon:/home/kwon$ lsblk NAME       MAJ:MIN RM     SIZE RO TYPE MOUNTPOINT sda 8:0    0   223.6G 0 disk ├─sda1 8:1    0     190M 0 part /boot/efi ├─sda2      8:2    0     1.9G 0 part /boot ├─sda3      8:3    0   195.6G 0 part / └─sda4      8:4    0      26G 0 part [SWAP] sdb 8:16   1    14.9G 0 disk ├─sdb1 8:17   1     128M 0 part └─sdb2 8:18 1    14.7G 0 part

현재 sdb의 이름으로 SD카드가 인식된 것을 확인할 수 있다.


이제 sdb의 파티션을 나누어 준다.


kwon@kwon:/home/kwon$ fdisk /dev/sdb

여기서 권한 문제로 실행되지 않는다면 명령의 앞에 sudo를 붙이거나, sudo su 명령을 입력한 뒤 진행한다.


sudo su
sudo fdisk /dev/sdb


잡혀있는 파티션을 전부 지우고, 1번 파티션을 128MB의 크기에 FAT32모드로 설정해 준다.


kwon@kwon:/home/kwon$ sudo fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 15.9 GB, 15931539456 bytes 64 heads, 32 sectors/track, 15193 cylinders, total 31116288 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1d8c09f0 Device Boot Start End Blocks Id System /dev/sdb1 2048 131071 64512 c W95 FAT32 (LBA) /dev/sdb2 131072 31116287 15492608 83 Linux #지금 설정되어있는 파티션을 제거한 뒤 새롭게 파티션을 구성해준다. Command (m for help): d Partition number (1-4): 2 Command (m for help): d Selected partition 1 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-31116287, default 2048): 8192 Last sector, +sectors or +size{K,M,G} (8192-31116287, default 31116287): 270335 Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (1-4, default 2): 2 First sector (2048-31116287, default 2048): 270336 Last sector, +sectors or +size{K,M,G} (270336-31116287, default 31116287): Using default value 31116287 # 1번 파티션에 부트플래그를 설정해준다. Command (m for help): a Partition number (1-4): 1 Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): c Changed system type of partition 1 to c (W95 FAT32 (LBA)) Command (m for help): p Disk /dev/sdb: 15.9 GB, 15931539456 bytes 64 heads, 32 sectors/track, 15193 cylinders, total 31116288 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1d8c09f0 Device Boot Start End Blocks Id System /dev/sdb1 8192 270335 131072 c W95 FAT32 (LBA) /dev/sdb2 270336 31116287 15422976 83 Linux Command (m for help): w The partition table has been altered! # 파티션 설정을 저장한다

이 작업이 끝나면 USB(micro SD)를 제거한 뒤에 다시 삽입하고 아래의 작업을 진행한다.

root@kwon:/home/kwon# mkfs.vfat /dev/sdb1
mkfs.fat 3.0.26 (2014-03-07)
root@kwon:/home/kwon# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
964768 inodes, 3855744 blocks
192787 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3951034368
118 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
              32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

파티션을 mount할 폴더를 생성하고, mount한 뒤에 파티션에 넷 인스톨러를 설치한다.


root@kwon:/home/kwon# mkdir /ras64 //모든 작업 진행할 폴더 생성, 기호에 따라서 생략 가능하다 root@kwon:/home/kwon# cd /ras64 root@kwon:/ras64# mkdir mnt // sdb1을 마운트할 폴더를 생성한다. root@kwon:/ras64# mount /dev/sdb1 mnt

root@kwon:/ras64# wget http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-bootloader_1.20180417-1_armhf.deb root@kwon:/ras64# mkdir pi-bootloader root@kwon:/ras64# dpkg-deb -x raspberrypi-bootloader_1.20180417-1_armhf.deb pi-bootloader root@kwon:/ras64# cp -afr pi-bootloader/boot/* mnt


부트로더(Uboot) 설치하기


root@kwon:/ras64# apt-get install build-essential bison flex git make gcc gcc-aarch64-linux-gnu root@kwon:/ras64# git clone --progress git://git.denx.de/u-boot.git root@kwon:/ras64# cd u-boot root@kwon:/ras64/u-boot# make rpi_3_defconfig root@kwon:/ras64/u-boot# make CROSS_COMPILE=aarch64-linux-gnu- root@kwon:/ras64/u-boot# cp u-boot.bin ../mnt/kernel8.img

DTB(Device Tree Blob, .dtb)파일을 가져온다. 

root@kwon:/ras64# wget http://ports.ubuntu.com/dists/bionic/main/installer-arm64/current/images/device-tree/bcm2837-rpi-3-b.dtb
root@kwon:/ras64# mkdir -p mnt/dtb/broadcom 
root@kwon:/ras64# cp bcm2837-rpi-3-b.dtb mnt/dtb/broadcom

net 인스톨러인 mini-iso 파일을 다운로드 받고 SD카드에 복사한다

root@kwon:/ras64# mkdir mini-iso root@kwon:/ras64# mount -o loop mini.iso mini-iso root@kwon:/ras64# cp -rT mini-iso mnt root@kwon:/ras64# mkdir efi-img root@kwon:/ras64# mount -o loop mini-iso/boot/grub/efi.img efi-img root@kwon:/ras64# cp -rT efi-img mnt

root@kwon:/ras64# sync

모든 작업이 끝났으니, umount를 해준다.

root@kwon:/ras64# umount efi-img root@kwon:/ras64# umount mini-iso root@kwon:/ras64# sync root@kwon:/ras64# umount mnt

이렇게 해서 라즈베리파이3 B에서 64bit ubuntu 18.04를 설치하기 위한 SD카드 설정이 완료되었다.


이제는 라즈베리파이에 SD카드를 장착하고 커맨드를 입력하기 위한 키보드와 화면을 출력하기 위한 모니터를 연결한 뒤에 전원을 연결한다.


부팅이 된다면, Install을 누르고 설치를 진행한다.


라즈베리파이가 부팅이 되지 않거나, Install을 누르는 화면으로 넘어가지 않는다면 처음부터 다시 진행한다.


1. 언어, 자신의 지역, 키보드를 적절히 설정한다.


2. 사용자 설정을 추가한다.(ID, password)를 적절히 생성해준다.


3. 네트워크 시간을 설정한다 (Asia/Seoul로 지정한다)


4. Partition disk 설정(기존 파티션을 설정하기 위해서 이 작업을 진행한다.)

  • Select Manual
  • Select Device(partiotn 2)
    • 파일 시스템 타입을 Ext4로 지정해 준다. Set File System Type (Ext4)
    • 현재 파티션에 마운트 포인트를 지정해 준다. Set Mount Point(/)

5. 위의 설정이 끝났다면 다음을 계속 진행하며 base system을 설치한다.(약 30분 이상 소요됨)


6. 특정 소프트웨어를 선택하여 설치한다. (Select and Install Software) (약 30분 이상 소요됨)

  • openssh
  • Basic Ubuntu Server

7. 이 모든 과정을 진행하면, 설치 도중 Grub fails이 발생한다. 무시하고 진행한다.

  • continue without bootloader

8. 라즈베리파이의 로컬 시간을 UTC로 지정한다. 디폴트가 UTC라 계속 continue만 눌러서 진행해도 무방하다


라즈베리파이를 재부팅한다.


지금까지의 작업이 정상적으로 진행 되었다면, 재부팅 되었을 때 Grub 커맨드라인 환경으로 진입된다.


아래와 같이 Grub 설정을 해 준다.

> ls
> set root=(hd0,msdos2)     //자신의 환경에 맞춰서 적절하게 선택한다.
> ls /
> linux /boot/vmlinuz root=/dev/mmcblk0p2
> initrd /boot/initrd.img
> boot

위의 작업을 진행하고 재부팅이 정상적으로 진행된다면, ubuntu 18.04가 실행된다.


아래의 작업을 진행하여 우분투를 업그레이트 해주고 설치를 마친다. 


kwon@ubuntu:~$ sudo grub-install --no-nvram [sudo] password for kwon: Installing for arm64-efi platform. Installation finished. No error reported. kwon@ubuntu:~$ kwon@ubuntu:~$ sudo update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.15.0-30-generic Found initrd image: /boot/initrd.img-4.15.0-30-generic done


라즈베리파이의 IP를 설정해 준다. (선택)

kwon@ubuntu:~$ sudo vi /etc/netplan/01-netcfg.yaml
[sudo] password for kwon:

# This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: enxb827eb8985a0: dhcp4: yes

위와 같이 설정되어 있는 파일을 아래와 같이 설정하여 IP를 설정해 준다.

# This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: enxb827eb8985a0: dhcp4: no addresses: [192.168.100.50/16] gateway4: 192.168.255.254 nameservers: addresses: [168.126.63.1,8.8.8.8]

kwon@ubuntu:~$ sudo netplan apply

여기까지 진행되었다면 설정한 IP(192.168.100.50)으로 SSH 접속이 가능해진다.


이제 우분투를 업그레이드 해 준다.

kwon@ubuntu:~$ sudo mkdir -p /etc/flash-kernel/dtbs
kwon@ubuntu:~$ sudo cp /lib/firmware/4.15.0-39-generic/device-tree/broadcom/bcm2837-rpi-3-b.dtb /boot/efi/bcm2837-rpi-3-b.dtb
kwon@ubuntu:~$ sudo cp /boot/efi/bcm2837-rpi-3-b.dtb /etc/flash-kernel/dtbs/.
kwon@ubuntu:~$ sudo mkdir /boot/firmware
kwon@ubuntu:~$ sudo apt update
kwon@ubuntu:~$ sudo apt upgrade
kwon@ubuntu:~$ sudo apt-get -y install bison flex build-essential


이제 우분투가 모두 설치되었다. 


진행과정중 잘못된 부분이나, 오타가 있을 수 있으므로 혹시나 발견하시면 댓글로 알려주시면 감사하겠습니다.


설치하느라 수고 많으셨습니다!