101010

プログラミング備忘録とともに、ポエムってます。

Raspberry Pi Zero をモニター、キーボード使わずにインストールする

f:id:araemonz:20190316034845j:plain

Raspberry Pi Zero WH(以下ラズパイと略す)を初めて購入しOSのインストールまで行ったときの手順をメモしておく。なおモニターやキーボードは装着せず、SSHを使ったリモート操作となる。

OSイメージのダウンロード

ラズパイに入れるOSイメージをこちらからダウンロードする。 https://www.raspberrypi.org/downloads/raspbian/

今回GUIは使わないのでRaspbian Stretch Liteを選んだ。 ダウンロードした2018-11-13-raspbian-stretch-lite.imgを適当な作業用のディレクトリへ移しておく。

SDカードの場所を確認する

diskutilコマンドでSDカードの場所を確認する。

$ diskutil list


/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                         251.0 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         250.7 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +250.7 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            160.3 GB   disk1s1
   2:                APFS Volume Preboot                 45.0 MB    disk1s2
   3:                APFS Volume Recovery                512.4 MB   disk1s3
   4:                APFS Volume VM                      1.1 GB     disk1s4

SDカードを差し込んでから再度実行するとdisk2が現れた。

$ diskutil list

/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                         251.0 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         250.7 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +250.7 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            160.3 GB   disk1s1
   2:                APFS Volume Preboot                 45.0 MB    disk1s2
   3:                APFS Volume Recovery                512.4 MB   disk1s3
   4:                APFS Volume VM                      1.1 GB     disk1s4

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk2
   1:                 DOS_FAT_32 NO NAME                 7.9 GB     disk2s1

OSを焼く

ddコマンドでOSイメージを焼く。

SDカードを指した状態でアンマウントする必要がある。

diskutil unmountDisk /dev/disk2

次のコマンドで書き込んだ。rdisk2のrbs=1mをつけることで100倍速く書き込む事ができるようだ。

sudo dd if=2018-11-13-raspbian-stretch-lite.img of=/dev/rdisk2 bs=1m

Ctrl+Tを押せば進捗状況がかくにんできる。私のMac環境では2分程度で書き込むことが出来た。

spbian-stretch-lite.img of=/dev/rdisk2 bs=1m
load: 1.84  cmd: dd 3631 uninterruptible 0.01u 1.32s
1587+0 records in
1586+0 records out
1663041536 bytes transferred in 113.931717 secs (14596827 bytes/sec)
1780+0 records in
1780+0 records out
1866465280 bytes transferred in 127.921700 secs (14590685 bytes/sec)

SSHの設定を書き込む

SDカードのディレクトリへ移動する。/dev/disk2 ではなく /Volumes/boot/となっていることに中止する。

$ cd /Volumes/boot/

touch ssh で空のsshファイルを作成。llで確認しておこう。

$ ll
total 44286
-rwxrwxrwx  1 Mopipico  staff     1494  3  9  2018 LICENCE.broadcom
-rwxrwxrwx  1 Mopipico  staff    18693  3  9  2018 COPYING.linux
-rwxrwxrwx  1 Mopipico  staff    24087  9 19 18:06 bcm2710-rpi-cm3.dtb
-rwxrwxrwx  1 Mopipico  staff    25311  9 19 18:06 bcm2710-rpi-3-b.dtb
-rwxrwxrwx  1 Mopipico  staff    25574  9 19 18:06 bcm2710-rpi-3-b-plus.dtb
-rwxrwxrwx  1 Mopipico  staff    24115  9 19 18:06 bcm2709-rpi-2-b.dtb
-rwxrwxrwx  1 Mopipico  staff    22589  9 19 18:06 bcm2708-rpi-cm.dtb
-rwxrwxrwx  1 Mopipico  staff    22812  9 19 18:06 bcm2708-rpi-b.dtb
-rwxrwxrwx  1 Mopipico  staff    23071  9 19 18:06 bcm2708-rpi-b-plus.dtb
-rwxrwxrwx  1 Mopipico  staff    23315  9 19 18:06 bcm2708-rpi-0-w.dtb
-rwxrwxrwx  1 Mopipico  staff  4057956 11 12 17:25 start_x.elf
-rwxrwxrwx  1 Mopipico  staff  5120484 11 12 17:25 start_db.elf
-rwxrwxrwx  1 Mopipico  staff   678532 11 12 17:25 start_cd.elf
-rwxrwxrwx  1 Mopipico  staff  2857060 11 12 17:25 start.elf
-rwxrwxrwx  1 Mopipico  staff  4934912 11 12 17:25 kernel7.img
-rwxrwxrwx  1 Mopipico  staff  4688856 11 12 17:25 kernel.img
-rwxrwxrwx  1 Mopipico  staff     9895 11 12 17:25 fixup_x.dat
-rwxrwxrwx  1 Mopipico  staff     9895 11 12 17:25 fixup_db.dat
-rwxrwxrwx  1 Mopipico  staff     2621 11 12 17:25 fixup_cd.dat
-rwxrwxrwx  1 Mopipico  staff     6666 11 12 17:25 fixup.dat
-rwxrwxrwx  1 Mopipico  staff    52116 11 12 17:25 bootcode.bin
-rwxrwxrwx  1 Mopipico  staff     1590 11 13 13:19 config.txt
drwxrwxrwx  1 Mopipico  staff    12800 11 13 14:01 overlays
-rwxrwxrwx  1 Mopipico  staff      145 11 13 14:02 issue.txt
-rwxrwxrwx  1 Mopipico  staff      190 11 13 14:02 cmdline.txt
-rwxrwxrwx  1 Mopipico  staff    18974 11 13 14:02 LICENSE.oracle
drwxrwxrwx  1 Mopipico  staff      512  3 12 17:08 .fseventsd
drwxr-xr-x@ 4 root      wheel      128  3 12 17:08 ..
-rwxrwxrwx  1 Mopipico  staff        0  3 12 17:11 ssh
drwxrwxrwx@ 1 Mopipico  staff     2560  3 12 17:11 .

WiFiの設定

viで wpa_supplicant.conf というファイル名で新規作成し以下の内容を書き込む。 WifiのSSIDWifiのパスワード は自分の環境のものに書き換えること。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
 
network={
 ssid="WifiのSSID"
 psk="Wifiのパスワード"
 key_mgmt=WPA-PSK
}

ここまで出来てようやくSDカードをパソコンから取り出しラズパイにセットするが、デスクトップに表示されているbootアイコンを右クリックしてしっかり安全に取り出そう。

今後WiFi環境が変わったら、ここを書き換えればよいということになる。

SSHで接続

SDカードを差しこんだらPWR INの端子にUSBで電源供給をする。

しばらくすると自動でWiFi接続されるが、接続状態を確認するためルーターの管理画面に入る必要がある。

IPアドレス ホスト名
192.168.100.136 raspberrypi

このように確認できた。

ラズパイの初期設定は次のようになっている。

ユーザー名 パスワード
pi raspberry
$ ssh pi@192.168.100.136
The authenticity of host '192.168.100.136 (192.168.100.136)' can't be established.
ECDSA key fingerprint is SHA256:B6VHDmthKIkhogehogehogehogehogehogehogehogehogehoge
Are you sure you want to continue connecting (yes/no)? 

yesを押してデフォルトパスワードraspberryを入力する。

ターミナル表示が次のように変わったらSSHでラズパイにアクセス成功だ!

pi@raspberrypi:~ $ pwd
/home/pi

今後のためにもpiユーザーのパスワードを変えておこう。

$ passwd pi

SSHを終了させたいときはexitで可能だ。

Hello World

サンプルプログラムが用意されていたので実行してみる。

cd /opt/vc/src/hello_piでフォルダを移動し、./rebuild.shを実行する。

$ cat README

Building on Pi
++++++++++++++

To build the test apps on the pi, first build the libs:
make -C libs/ilclient
make -C libs/vgfont

then by entering each test app directory and run make. E.g.
  cd hello_world
  make
  ./hello_world.bin

Running ./rebuild.sh will rebuild the all libs and and apps.


Building on a different PC
++++++++++++++++++++++++++

If you want to build the samples on a different machine (cross-compile) then set:
SDKSTAGE=<path/to/firmware-directory> and CC=<path/to/cross-compiler>
before running make.

READMEによればhello_worldディレクトリへ移動し、./hello_world.binで実行可能なバイナリが出来上がっているという。

やってみよう。

$ cd hello_world
$ ./hello_world.bin
Hello world!

なんと、Hello world!に成功した!!!!⚡⚡⚡

冗談はさておき、他にもサンプルがたくさん収納されている。バリバリC言語といった感じの難しいコードがあったので機会があれば触れてみたい。

矢印キーが使えない

ラズパイに最初から入っているVimは vim-tiny という最小構成版のようで矢印キーが使えないらしい。

現在のVimをいったんアンインストールする。

$ sudo apt-get --purge remove vim-common vim-tiny

再度Vimをインストールすることで矢印キーが使えるようになった。

$ sudo apt-get install vim

はじめてのラズパイだったが、ここまでで大したトラブルなく1時間程度で設定を完了することができた。

参考