Edited at

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をインストールしてください.