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

ちっちゃい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@ 鹿児島らぐ 

    View Slide

  2. 2
    発表の流れ
    1) 自己紹介
    2) 前回発表のおさらい
    3) 今回ためしたこと
    1) はんだ付け
    2) RaspberryPi パート
    1) Buildroot を試す
    2) U-Boot で mainline kernel を起動
    4) まとめ

    View Slide

  3. 自己紹介
    名前 : reodon
    職業 :エンジニア
    Twitter : reodon@reodon2
    ・組み込み初心者, Rustの勉強中です
    ・鹿児島のエンジニアサークル「ヒラマサ」で
    Flutterの勉強中です
    ・趣味
      - 運動,アニメ鑑賞,数学

    View Slide

  4. 4
    前回発表のおさらい
    1) なぜ LicheePiNano か?
    2) LicheePiNano の概要
    3) LicheePiNano で実現したいこと
    4) LicheePiNano で試したこと

    起動確認

    Lチカ

    温湿度センサー

    View Slide

  5. 5
    ( 復習 ) なぜ LicheePiNano か?

    Linux名刺の記事に触発さ
    れた方に,教えていただ
    いた
    – 仮想シリアルポート経由で
    Linux が動く
    – 材料費は約 315 円

    同じ CPU(Allwinner
    F1C100s) が乗っている

    View Slide

  6. 6
    ( 復習 ) LicheePiNano の概要

    SD カードサイズの超小型
    Linux 開発ボード
    – ARM9 プロセッサを搭載
    – メモリは 32MB

    お手頃価格
    – 1,000 円 ( 秋月電子 )
    – 1,045 円 (SwitchScience)

    View Slide

  7. 7
    ( 復習 ) LicheePiNano で実現したいこと

    スマートホーム
    – 課題

    洗濯物を乾かすために扇風機やエアコンを使用

    乾いたら電源を OFF
    – 解決策

    LicheePiNano に温湿度センサーを付けてモニター

    湿度がしきい値を下回ったら電源を OFF
    – 問題点

    LicheePiNano をネットワークに接続する方法がわからない
    – 赤外線の発信モジュールを付ければエアコンの操作はできるかも?

    View Slide

  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

    View Slide

  9. 9
    はんだ付け

    USB から給電していたが, WiFi を使用するため
    に USB ドングルを取り付けたい

    GPIO のピンから給電すれば USB ポートが空く

    はんだ付けに挑戦!
    – 初めてではない,2回目

    View Slide

  10. 10
    はんだ付け成功!?

    GPIO ピンへの
    給電で起動

    シリアル通信で
    ログイン成功

    他のピンは?

    View Slide

  11. 11
    以下, RaspberryPi パート

    プリインストールされた Linux カーネルでは, WiFi-USB ド
    ングルを使用できない

    USB ホスト機能を有効にした Linux カーネルをビルドして
    インストールする必要がある

    前述の Linux 名刺の作者が「Das U-Boot」のリポジトリと
    Linuxカーネルのリポジトリを公開してくれている

    U-Boot も Buildroot も使ったことが無い!
    – 情報が豊富な RaspberryPi 3 model B で試してみる
    – 環境は Ubuntu LTS 20.04

    View Slide

  12. 12
    Buildroot (RasPi) 1 / 2

    buildroot-2020.11.3 をダウンロードして展開

    root ユーザのパスワードを admin に変更
    $ cd buildroot-2020.11.3/
    $ make raspberrypi3_64_defconfig
    $ make xconfig

    View Slide

  13. 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. 19
    U-Boot で mainline kernel を起動 (RasPi) 5/9

    SD カードのパーティション設定
    – パーティション 1

    Fat32, 64M
    – パーティション 2

    Ext4, 残り全て
    ● RasPi のファームウェアをパーティション 1 にコピー
    – boot/ 以下
    ● Start*, fixup*, overlays/, bootcode.bin

    View Slide

  20. 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
    にコピー

    View Slide

  21. 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

    View Slide

  22. 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

    View Slide

  23. 23
    U-Boot で mainline kernel を起動 (RasPi) 9/9

    ルートファイルシステムのビルド
    – 参考にした Web ページでは Yocto を使用している
    – 使い方がわからず,ここで断念…

    View Slide

  24. 24
    まとめ

    Buildroot は恐くない,とても簡単

    参考にした Web ページの手順をなぞっただけな
    ので,知識を深めるために詳しく調査したい
    – Buildroot の細かい設定など

    U-Boot から mainline kernel の起動ができなかっ
    たので,リベンジしたい!

    View Slide

  25. 25
    参考

    Buildroot を試す
    – 【Linux Tipsシリーズ】平凡なソフトウェア開発者
    が自分Linuxを作ってみた - KUMICO

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

    View Slide