$30 off During Our Annual Pro Sale. View Details »

Raspberry Pi Zeroをストレージ無しで活用

Raspberry Pi Zeroをストレージ無しで活用

Kenichiro MATOHARA

May 14, 2022
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. Raspberry Pi Zeroを Raspberry Pi Zeroを ストレージ無しで ストレージ無しで 活用 活用

    Kenichiro Matohara(matoken) <maroken@kagolug.org> 1 / 27
  2. 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org https://matoken.org

    2 / 27
  3. 最近 最近 筍を折る OpenBSDデスクトップを試し中 鹿児島らぐ次回 2022-05-22(日) https://kagolug.connpass.com/event/246332/ 3 / 27

  4. Raspberry Pi Raspberry Pi UK製の小さなSBCシリーズ Linuxなどが動作する 一般的にストレージは(micro)SD cardを利用する 本体は余っているけど手持ちのストレージの空きがないので遊べ ない……

    4 / 27
  5. SD card以外のいくつかの起動方 SD card以外のいくつかの起動方 法 法 5 / 27

  6. ネットワーク起動(PXE) ネットワーク起動(PXE) LAN内のPXEサーバからの起動 対応機種 Raspberry Pi 3B, 3B+ and 2B

    v1.2(4?) 6 / 27
  7. インターネット起動 インターネット起動 インターネットから起動 Raspberry Pi 4/400 かつ新しいEEPROMが必要 7 / 27

  8. USBホスト起動 USBホスト起動 OSを導入したUSBストレージから起動 Raspberry Pi 3 model B以降はUSB起動も可能 3B+以降は標準でUSB起動OK 対応機種

    Raspberry Pi 3B, 3B+, 3A+, and 2B v1.2(4?) 3BはOTP(One Time Programmable)メモリの設定が必要 https://www.raspberrypi.com/documentation/computers/ pi.html#usb-host-boot-mode 8 / 27
  9. USBデバイス起動※今回のネタ USBデバイス起動※今回のネタ ホストPCからUSBデバイス経由でブートコードを転送して起動 対応デバイス Raspberry Pi Compute Module, Compute Module

    3, Raspb Zero, Zero W, A, A+, and 3A+(4?) https://www.raspberrypi.com/documentation/computers/ pi.html#usb-device-boot-mode 9 / 27
  10. ストレージがないけどPiZeroが余 ストレージがないけどPiZeroが余 っている っている ストレージがなくてもUSBデバイス起動で遊べるのでは? 10 / 27

  11. rpibootの用意 rpibootの用意 $ sudo apt install git libusb-1.0-0-dev $ git

    clone https://github.com/raspberrypi/usbboot $ cd usbboot $ make $ sudo ./rpiboot raspberrypi/usbboot: Raspberry Pi USB booting code, moved from tools repository 11 / 27
  12. PiZero1.2を接続した状態で実行 PiZero1.2を接続した状態で実行 dmesg $ sudo ./rpiboot RPIBOOT: build-date May 8

    2022 version 20220504~214218 5e0ae34d Waiting for BCM2835/6/7/2711... Loading embedded: bootcode.bin Sending bootcode.bin Successful read 4 bytes Waiting for BCM2835/6/7/2711... Loading embedded: bootcode.bin Second stage boot server Loading embedded: start.elf File read: start.elf Second stage boot server done [ +0.000798] usb 2-2: New USB device found, idVendor=0a5c, idProduct=2764, bcdDevice= 0.00 [ +0.000014] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=1 [ +0.000007] usb 2-2: Product: BCM2710 Boot [ +0.000005] usb 2-2: Manufacturer: Broadcom [ +0.000005] usb 2-2: SerialNumber: Broadcom [May13 23:02] usb 2-2: USB disconnect, device number 124 12 / 27
  13. microSD接続時 microSD接続時 [ +0.947679] usb 2-2: new high-speed USB device

    number 122 using xhci_hcd [ +0.148916] usb 2-2: New USB device found, idVendor=0a5c, idProduct=0001, bcdDevice= 0.01 [ +0.000019] usb 2-2: New USB device strings: Mfr=2, Product=1, SerialNumber=3 [ +0.000001] usb 2-2: Product: Compute Module [ +0.000002] usb 2-2: Manufacturer: Raspberry Pi [ +0.000001] usb 2-2: SerialNumber: e96d0f1a [ +0.575814] usb-storage 2-2:1.0: USB Mass Storage device detected [ +0.000232] scsi host6: usb-storage 2-2:1.0 [ +0.000114] usbcore: registered new interface driver usb-storage [ +0.006272] usbcore: registered new interface driver uas [ +0.997140] scsi 6:0:0:0: Direct-Access RPi-MSD- 0001 PQ: 0 ANSI: 2 [ +0.000374] sd 6:0:0:0: Attached scsi generic sg2 type 0 [ +0.000206] sd 6:0:0:0: [sdb] 31422464 512-byte logical blocks: (16.1 GB/15.0 GiB) [ +0.000141] sd 6:0:0:0: [sdb] Write Protect is off [ +0.000003] sd 6:0:0:0: [sdb] Mode Sense: 0f 00 00 00 [ +0.000131] sd 6:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO [ +0.001797] sdb: sdb1 [ +0.001095] sd 6:0:0:0: [sdb] Attached SCSI removable disk 13 / 27
  14. usbbootguiというものも usbbootguiというものも raspberrypi/usbbootgui: GUI for booting a Raspberry Pi device

    like Pi Zero or compute module as a device 14 / 27
  15. OSイメージをBuildrootで作成 OSイメージをBuildrootで作成 RAM 256MB〜なので標準のOSは大きすぎる Buildrootで作成することに  The maximum size for

    a ramdisk file is 96MB. Buildroot - Making Embedded Linux Easy https://www.raspberrypi.com/documentation/compute pi.html#configuration-properties-in-config-txt 15 / 27
  16. Buildroot環境用意 Buildroot環境用意  3ヶ月毎のリリースなのでそろそろ2022-05が出る? $ wget2 https://buildroot.org/downloads/buildroot-2022.02.1.tar.xz \ > https://buildroot.org/downloads/buildroot-2022.02.1.tar.xz.sign

    $ wget2 https://github.com/pweaver/buildroot/raw/master/buildroot_pubkey.gpg $ gpg --import ./buildroot_pubkey.gpg gpg: /home/ubuntu/.gnupg/trustdb.gpg: trustdb created gpg: key B025BA8B59C36319: public key "Peter Korsgaard <jacmet@uclibc.org>" imported gpg: Total number processed: 1 gpg: imported: 1 $ gpg --verify ./buildroot-2022.02.1.tar.xz.sign gpg: Signature made Mon 11 Apr 2022 09:51:18 PM UTC gpg: using DSA key AB07D806D2CE741FB886EE50B025BA8B59C36319 gpg: Good signature from "Peter Korsgaard <jacmet@uclibc.org>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: AB07 D806 D2CE 741F B886 EE50 B025 BA8B 59C3 6319 gpg: WARNING: not a detached signature; file './buildroot-2022.02.1.tar.xz' was NOT verified! $ tar tvf ./buildroot-2022.02.1.tar.xz | lv $ tar xf ./buildroot-2022.02.1.tar.xz $ cd buildroot-2022.02.1 16 / 27
  17. Raspberry Piのconfig Raspberry Piのconfig $ make list-defconfigs | lv $

    make list-defconfigs | grep rasp raspberrypi0_defconfig - Build for raspberrypi0 raspberrypi0w_defconfig - Build for raspberrypi0w raspberrypi2_defconfig - Build for raspberrypi2 raspberrypi3_64_defconfig - Build for raspberrypi3_64 raspberrypi3_defconfig - Build for raspberrypi3 raspberrypi3_qt5we_defconfig - Build for raspberrypi3_qt5we raspberrypi4_64_defconfig - Build for raspberrypi4_64 raspberrypi4_defconfig - Build for raspberrypi4 raspberrypi_defconfig - Build for raspberrypi raspberrypicm4io_64_defconfig - Build for raspberrypicm4io_64 raspberrypicm4io_defconfig - Build for raspberrypicm4io raspberrypizero2w_defconfig - Build for raspberrypizero2w 17 / 27
  18. build build とりあえずPi0の既定値 $ time make raspberrypi0_defconfig $ make menuconfig

    $ time make -j$( nproc ) 18 / 27
  19. 初回ビルド時間 初回ビルド時間 手元の端末(Intel i5-3320M)での初回ビルド時間 real 439m1.278s Oracle無料VPS(aarch64 4core)での初回ビルド時間 real 53m12.657s

    初回はsourceの取得&すべてのbuildで時間が掛かる 19 / 27
  20. images images sdcard.img をSD cardに書き込むと起動するはず 今回の環境ではVPSでbuildして成果物だけ貰ってくるのが良さそう $ du -hs output/images/*

    28K output/images/bcm2708-rpi-zero.dtb 8.8M output/images/boot.vfat 62M output/images/rootfs.ext2 0 output/images/rootfs.ext4 3.0M output/images/rpi-firmware 71M output/images/sdcard.img 5.8M output/images/zImage 20 / 27
  21. RAMFS利用 RAMFS利用 make menuconfig等で以下のあたりを設定 Filesystem Images → initial RAM filesystem

    linked into linux kernel (BR2_TARGET_ROOTFS_INITRAMFS) cpio the root filesystem (for use as an initial RAM filesystem) (BR2_TARGET_ROOTFS_CPIO) xz (BR2_TARGET_ROOTFS_CPIO_XZ) $ time make -j$( nproc ) 21 / 27
  22. boot dirを作成してファイルをcp boot dirを作成してファイルをcp $ ls boot bcm2708-rpi-zero.dtb cmdline.txt rootfs.cpio.xz

    boot.vfat config.txt start.elf bootcode.bin fixup.dat zImage 22 / 27
  23. BuildrootのイメージでUSB起動 BuildrootのイメージでUSB起動 USBと通信用にUARTを繋いで 起動 HostPC -- USB --- Pi0 +------

    UART ----+ $ sudo ./rpiboot -d boot 23 / 27
  24. 動画 動画 , , 0:00 / 2:55 Vimeo Bitchute niconico

    24 / 27
  25. USB-GadgetでSerial/Ethernet利用 USB-GadgetでSerial/Ethernet利用 USB-GadgetでSerialやEthernetを使うとUSBケーブル1本だ けでOKになるはず 未解決 dummy_hcd では読み込めるので恐らくPi0のHostUSB設定がおか しい # modprobe

    dwc2 # modprobe g_ether [ 58.491922] udc-core: couldn't find an available UDC - added [g_ether] to list of pending d 25 / 27
  26. まとめ まとめ 本来はOSインストール向けだと思われるUSBデバイス起動 小さめのイメージを流し込んで遊ぶのにも使えそう HostPC(PiでもOK)に繋がる環境でストレージ無しでサイネージな どにも使えそう データの保存がネック(PiZeroWやmicroSDなら) USB Gadgetを使いたい SerialやEthernet等が使えるようになる

    Buildrootとkernelをもう少し探索…… PiZero1.3+ではWebCamにすることもできそう 26 / 27
  27. 奥付 奥付 発表 発表者 利用ソフトウェア ライセンス 小江戸らぐ 5月のオフな集まり(第238回) Kenichiro Matohara(matoken)

    Asciidoctor Reveal.js CC BY 4.0 27 / 27