ラズパイ
ubuntu18.04
RaspberryPi3B+

Raspberry Pi 3 Model B plus でUbuntu18.04を起動してみた。

はじめに

Raspberry Pi 3 Model B PlusにUbuntu18.04をインストールした時のまとめです.

結果

Ubuntu16.04などではubuntu-desktopをインストールするとうまく動作しなかったのですが、Ubuntu18.04ではUbuntu serverをインストールしてからデスクトップをインストールすると問題なく動作しました.
ファームウエアを書き換える必要がありますが、eth0とwlan0は問題なく使用することができました.
しかし変換したHDMIなどを使用するとディスプレイ出力ができませんでした.

使用環境

  • Raspberry Pi 3 Model B Plus + SDcard(16GB)
  • Raspberry Pi 3 Model B
  • MacBook (Mojave 10.14)

参考先

手順

1.ダウンロード

wget http://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ubuntu-18.04.1-preinstalled-server-armhf+raspi2.img.xz

2.書き込み

書き込む前にSDcardのフォーマットを行う.

  • GUIを使う場合
    Etcherを使うとやりやすいです.
    ダウンロードしたイメージをそのまま使えます.

  • CUIで行う場合
    dfコマンドで確認するとSDcardが確認できると思います.(環境によって変わる) *表示したディスクはフォーマットされていません.

ddの結果(抜粋)
Filesystem    512-blocks      Used Available Capacity iused               ifree %iused  Mounted on
/dev/disk2s1    60544960  27862400  32682560    47%  435350              510665   46%   /Volumes/UNKNOWN

フォーマット後にSDcardをアンマウント.

Example
sudo umount disk2s1

イメージを解凍する.

Example
unxz ubuntu-18.04.1-preinstalled-server-armhf+raspi2.img.xz

イメージを書き込む.
注意: ofに設定するものを間違えると大変なことになるので慎重に行ってください.

Example
sudo dd bs=4m if=ubuntu-18.04.1-preinstalled-server-armhf+raspi2.img of=/dev/rdisk2

Ubuntuなどで行う場合は、bs=4mbs=4Mにしてください

3.system-bootの書き換え

イメージを書き込むとsystem-bootと言う名前でSDcardがマウントされると思います.
このままではRaspberry Piでブートすると問題が発生するので、ファームウエアを書き換える必要があります.

まずファームウエアをダウンロードします.

git clone https://github.com/raspberrypi/firmware.git

次にsystem-boot内にあるconfig.txtを編集します.

config.txt
kernel=uboot.bin
device_tree_address=0x02000000

となっている部分を

config.txt
kernel=vmlinuz
initramfs initrd.img followkernel
#kernel=uboot.bin
#device_tree_address=0x02000000

に書き換える

先ほどダウンロードしたfirmwareの中にあるbootディレクトリ以下を全てsystem-bootに入れる.

cp -r firmware/boot/* /Volume/system-boot/

これでsystem-bootの書き換えは終わりになります.

4.Raspberry Pi 3 Model Bで起動する

なぜRaspberry Pi 3 Model B PlusではなくRaspberry Pi 3 Model Bでブートするのかというと、先ほどの書き換えだけでは、DHCPがIPを振ってくれないため、起動した際にログインまでたどり着きません.
なのでRaspberry Pi 3 Model Bで一度起動し、サービスを無効にする必要があります.

もしRaspberry Pi 3 Model Bが手元にない場合は、UbuntuなどでSDcardをマウントするとcloudimg-rootfsというパーティションが見えるようになるので以下で行う内容を手動で行えば問題ありません.

Raspberry Pi 3 Model Bで先ほどのSDcardを挿して起動します.
注意: 有線LANとキーボードとモニターを接続.
起動後のデフォルトusernameとpasswordはubuntuです. パスワードの変更を求められるので変更してください.
ログイン後、以下のコマンドを実行.

systemctl disable systemd-networkd-wait-online.service
systemctl mask systemd-networkd-wait-online.service

以上でRaspberry Pi 3 Mode B内での作業は終了です.

5.Raspberry Pi 3 Model B Plusで起動する

ログイン後、eth0にIPを振る.

sudo dhclient eth0

Raspberry Pi 3 Model B Plusのモデル名を調べる.

cat /proc/device-tree/model

モデル名を追記します 以下は今回の場合.

/usr/share/flash-kernel/db/all.db
Machine: BCM2710
Machine: Raspberry Pi 3 Model B Plus Rev 1.3
DTB-Id: bcm2710-rpi-3-b-plus.dtb
U-Boot-Script-Name: bootscr.rpi3
Required-Packages: u-boot-tools
Boot-DTB-Path: /boot/firmware/bcm2710-rpi-3-b-plus.dtb
Boot-Kernel-Path: /boot/firmware/vmlinuz
Boot-Initrd-Path: /boot/firmware/initrd.img
Boot-Script-Path: /boot/firmware/boot.scr

GPUのファームウエアを置き換える.

wget http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-bootloader_1.20180417-1_armhf.deb
dpkg-deb -x raspberrypi-bootloader_1.20180417-1_armhf.deb /tmp/pi-bootloader
sudo apt remove linux-firmware-raspi2
sudo cp /tmp/pi-bootloader/boot/* /boot/firmware/

Wifiのファームウエアを置き換える.

wget https://github.com/RPI-Distro/firmware-nonfree/raw/master/brcm/brcmfmac43455-sdio.bin
wget https://github.com/RPI-Distro/firmware-nonfree/raw/master/brcm/brcmfmac43455-sdio.clm_blob
wget https://github.com/RPI-Distro/firmware-nonfree/raw/master/brcm/brcmfmac43455-sdio.txt
sudo cp *sdio* /lib/firmware/brcm

デスクトップをインストールします.

sudo apt update
sudo apt install ubuntu-desktop

以上でデスクトップのインストールは終了です.

オプション

1.ネットワーク有線LANに自動でIPが振られるようにする

上記の状態では、起動毎にsudo dhclient eth0を実行しなければIPが振られないため自動に振られるようにする.
/etc/network/interfacesに以下の内容を追記します.

/etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp

そしてifupdownをインストールする.

sudo apt install ifupdown

これで再起動した際にも自動でeth0にIPが振られるようになったと思います.
もし静的IPを振る場合は、/etc/network/interfaceにstatic ipを追加しresolvconfをインストールしてください.