Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ちっちゃいSoCであそびたい、その名はLicheePiNanoその2~ときどきRaspberryPi~

reodon
March 06, 2021

 ちっちゃいSoCであそびたい、その名はLicheePiNanoその2~ときどきRaspberryPi~

reodon

March 06, 2021
Tweet

More Decks by reodon

Other Decks in Technology

Transcript

  1. ちっちゃい SoC であそびたい、 その名は Lichee Pi Nano   その2  ~

    ときどき Raspberry Pi~   OSC Spring   2021/03/06   reodon@ 鹿児島らぐ 
  2. 2 発表の流れ 1) 自己紹介 2) 前回発表のおさらい 3) 今回ためしたこと 1) はんだ付け

    2) RaspberryPi パート 1) Buildroot を試す 2) U-Boot で mainline kernel を起動 4) まとめ
  3. 自己紹介 名前 : reodon 職業 :エンジニア Twitter : reodon@reodon2 ・組み込み初心者,

    Rustの勉強中です ・鹿児島のエンジニアサークル「ヒラマサ」で Flutterの勉強中です ・趣味   - 運動,アニメ鑑賞,数学
  4. 4 前回発表のおさらい 1) なぜ LicheePiNano か? 2) LicheePiNano の概要 3)

    LicheePiNano で実現したいこと 4) LicheePiNano で試したこと • 起動確認 • Lチカ • 温湿度センサー
  5. 5 ( 復習 ) なぜ LicheePiNano か? • Linux名刺の記事に触発さ れた方に,教えていただ

    いた – 仮想シリアルポート経由で Linux が動く – 材料費は約 315 円 • 同じ CPU(Allwinner F1C100s) が乗っている
  6. 6 ( 復習 ) LicheePiNano の概要 • SD カードサイズの超小型 Linux

    開発ボード – ARM9 プロセッサを搭載 – メモリは 32MB • お手頃価格 – 1,000 円 ( 秋月電子 ) – 1,045 円 (SwitchScience)
  7. 7 ( 復習 ) LicheePiNano で実現したいこと • スマートホーム – 課題

    • 洗濯物を乾かすために扇風機やエアコンを使用 • 乾いたら電源を OFF – 解決策 • LicheePiNano に温湿度センサーを付けてモニター • 湿度がしきい値を下回ったら電源を OFF – 問題点 • LicheePiNano をネットワークに接続する方法がわからない – 赤外線の発信モジュールを付ければエアコンの操作はできるかも?
  8. 8 ( 復習 ) LicheePiNano で試したこと • (成功!) 起動確認 –

    プリインストールされているLinuxに,シリアル通信でログイン • (成功!) Lチカ # echo 131 > /sys/class/gpio/export # echo out > /sys/class/gpio/gpio131/direction # echo 1 > /sys/class/gpio/gpio131/value • (失敗…) 温湿度センサー(DHT11) # echo 131 > /sys/class/gpio/export # echo in > /sys/class/gpio/gpio131/direction # cat /sys/class/gpio/gpio131/value 1
  9. 9 はんだ付け • USB から給電していたが, WiFi を使用するため に USB ドングルを取り付けたい

    • GPIO のピンから給電すれば USB ポートが空く • はんだ付けに挑戦! – 初めてではない,2回目
  10. 11 以下, RaspberryPi パート • プリインストールされた Linux カーネルでは, WiFi-USB ド

    ングルを使用できない • USB ホスト機能を有効にした Linux カーネルをビルドして インストールする必要がある • 前述の Linux 名刺の作者が「Das U-Boot」のリポジトリと Linuxカーネルのリポジトリを公開してくれている • U-Boot も Buildroot も使ったことが無い! – 情報が豊富な RaspberryPi 3 model B で試してみる – 環境は Ubuntu LTS 20.04
  11. 12 Buildroot (RasPi) 1 / 2 • buildroot-2020.11.3 をダウンロードして展開 •

    root ユーザのパスワードを admin に変更 $ cd buildroot-2020.11.3/ $ make raspberrypi3_64_defconfig $ make xconfig
  12. 13 Buildroot (RasPi) 2 / 2 $ make linux-menuconfig #

    変更せず $ make -j$(nproc) $ sudo dd bs=4M if=./output/images/sdcard.img of=/dev/mmcblk0 conv=fsync
  13. 14 起動成功! • Raspberry Pi 3 Model B に SD

    カードを挿して電源を ON • USER : root PASS : admin ログイン成功 # uname -a Linux buildroot 5.4.72-v8 #1 SMP PREEMPT Fri Mar 5 20:47:29 JST 2021 aarch64 GNU/Linux
  14. 15 U-Boot で mainline kernel を起動 (RasPi) 1/9 • Linux

    カーネル v5.11.2 を git clone $ sudo apt install gcc-aarch64-linux-gnu $ make ARCH=arm64 CROSS_COMPILE=aarch64- linux-gnu- defconfig
  15. 16 U-Boot で mainline kernel を起動 (RasPi) 2/9 ・有効にした設定 USB_LAN78XX,RFKILL,BRCMFMAC,RCMFMAC_PROTO_BCDC,BRCMFMAC_

    PROTO_MSGBUF,BRCMFMAC_SDIO,BCMFMAC_USB,BRCMFMAC_PCIE,CFG 80211,CFG80211_REQUIRE_SIGNED_REGDB,CFG80211_USE_KERNEL_REG DB_KEYS,CFG80211_DEFAULT_PS,CFG80211_DEBUGFS,CFG80211_CRDA_S UPPORT,CFG80211_WEXT,ARCH_BCM2835,SERIAL_8250_BCM2835AUX,HW_ RANDOM_BCM2835,I2C_BCM2835,SPI_BCM2835,SPI_BCM2835AUX,PINCTRL _BCM2835,BCM2835_THERMAL,BCM2835_WDT,,SND_BCM2835_SOC_I2S,M MC_BCM2835,DMA_BCM2835,BCM2835_VCHIQ,SND_BCM2835,VIDEO_BCM2 835,BCM2835_MBOX,BCM2835_POWER,PWM_BCM2835,HW_RANDOM_BCM 2835,ROCKCHIP_DW_HDMI,ROCKCHIP_INNO_HDMI,ROCKCHIP_RK3066_HD MI,DRM_SUN4I_HDMI_CEC,DRM_MSM_HDMI_HDCP,DRM_VC4_HDMI_CEC,H DMI,FB_SIMPLE,LOGO,LOGO_LINUX_CLUT224
  16. 17 U-Boot で mainline kernel を起動 (RasPi) 3/9 $ make

    -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- olddefconfig $ make -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- $ make -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs
  17. 18 U-Boot で mainline kernel を起動 (RasPi) 4/9 $ git

    clone https://github.com/raspberrypi/firmware.git $ git clone https://kernel.googlesource.com/pub/scm/linu x/kernel/git/firmware/linux-firmware.git
  18. 19 U-Boot で mainline kernel を起動 (RasPi) 5/9 • SD

    カードのパーティション設定 – パーティション 1 • Fat32, 64M – パーティション 2 • Ext4, 残り全て • RasPi のファームウェアをパーティション 1 にコピー – boot/ 以下 • Start*, fixup*, overlays/, bootcode.bin
  19. 20 U-Boot で mainline kernel を起動 (RasPi) 6/9 • Linux

    カーネルをパーティション 1 にコピー – arch/arm64/boot/Image – arch/arm64/boot/dts/broadcom/bcm2837- rpi-3-b-plus.dtb • ビルドした u-boot.bin をパーティション 1 にコピー
  20. 21 U-Boot で mainline kernel を起動 (RasPi) 7/9 • パーティション

    1 に config.txt を作成 [all] boot_delay=1 kernel=u-boot.bin arm_control=0x200 upstream_kernel=1 audio_pwm_mode=0 enable_uart=1 gpu_mem=16 mask_gpu_interrupt1=0x100
  21. 22 U-Boot で mainline kernel を起動 (RasPi) 8/9 • boot.cmd

    を作成 fatload mmc 0:1 ${kernel_addr_r} Image fatload mmc 0:1 ${fdt_addr} bcm2837-rpi-3-b-plus.dtb setenv bootargs dwc_otg.lpm_enable=0 earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 rootwait booti ${kernel_addr_r} - ${fdt_addr} $ mkimage -C none -A arm64 -T script -d ./boot.cmd パーティション1 /boot.scr
  22. 23 U-Boot で mainline kernel を起動 (RasPi) 9/9 • ルートファイルシステムのビルド

    – 参考にした Web ページでは Yocto を使用している – 使い方がわからず,ここで断念…
  23. 24 まとめ • Buildroot は恐くない,とても簡単 • 参考にした Web ページの手順をなぞっただけな ので,知識を深めるために詳しく調査したい

    – Buildroot の細かい設定など • U-Boot から mainline kernel の起動ができなかっ たので,リベンジしたい!
  24. 25 参考 • Buildroot を試す – 【Linux Tipsシリーズ】平凡なソフトウェア開発者 が自分Linuxを作ってみた -

    KUMICO • U-Boot で mainline kernel を起動 – raspberry pi 3 b+ and u-boot and mainline kernel, and meta-fedora - φ(・・*)ゞ ウーン カーネルとか 弄ったりのメモ