Slide 1

Slide 1 text

ちっちゃい SoC であそびたい、 その名は Lichee Pi Nano   その2  ~ ときどき Raspberry Pi~   OSC Spring   2021/03/06   reodon@ 鹿児島らぐ 

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

4 前回発表のおさらい 1) なぜ LicheePiNano か? 2) LicheePiNano の概要 3) LicheePiNano で実現したいこと 4) LicheePiNano で試したこと ● 起動確認 ● Lチカ ● 温湿度センサー

Slide 5

Slide 5 text

5 ( 復習 ) なぜ LicheePiNano か? ● Linux名刺の記事に触発さ れた方に,教えていただ いた – 仮想シリアルポート経由で Linux が動く – 材料費は約 315 円 ● 同じ CPU(Allwinner F1C100s) が乗っている

Slide 6

Slide 6 text

6 ( 復習 ) LicheePiNano の概要 ● SD カードサイズの超小型 Linux 開発ボード – ARM9 プロセッサを搭載 – メモリは 32MB ● お手頃価格 – 1,000 円 ( 秋月電子 ) – 1,045 円 (SwitchScience)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

9 はんだ付け ● USB から給電していたが, WiFi を使用するため に USB ドングルを取り付けたい ● GPIO のピンから給電すれば USB ポートが空く ● はんだ付けに挑戦! – 初めてではない,2回目

Slide 10

Slide 10 text

10 はんだ付け成功!? ● GPIO ピンへの 給電で起動 ● シリアル通信で ログイン成功 ● 他のピンは?

Slide 11

Slide 11 text

11 以下, RaspberryPi パート ● プリインストールされた Linux カーネルでは, WiFi-USB ド ングルを使用できない ● USB ホスト機能を有効にした Linux カーネルをビルドして インストールする必要がある ● 前述の Linux 名刺の作者が「Das U-Boot」のリポジトリと Linuxカーネルのリポジトリを公開してくれている ● U-Boot も Buildroot も使ったことが無い! – 情報が豊富な RaspberryPi 3 model B で試してみる – 環境は Ubuntu LTS 20.04

Slide 12

Slide 12 text

12 Buildroot (RasPi) 1 / 2 ● buildroot-2020.11.3 をダウンロードして展開 ● root ユーザのパスワードを admin に変更 $ cd buildroot-2020.11.3/ $ make raspberrypi3_64_defconfig $ make xconfig

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

23 U-Boot で mainline kernel を起動 (RasPi) 9/9 ● ルートファイルシステムのビルド – 参考にした Web ページでは Yocto を使用している – 使い方がわからず,ここで断念…

Slide 24

Slide 24 text

24 まとめ ● Buildroot は恐くない,とても簡単 ● 参考にした Web ページの手順をなぞっただけな ので,知識を深めるために詳しく調査したい – Buildroot の細かい設定など ● U-Boot から mainline kernel の起動ができなかっ たので,リベンジしたい!

Slide 25

Slide 25 text

25 参考 ● Buildroot を試す – 【Linux Tipsシリーズ】平凡なソフトウェア開発者 が自分Linuxを作ってみた - KUMICO ● U-Boot で mainline kernel を起動 – raspberry pi 3 b+ and u-boot and mainline kernel, and meta-fedora - φ(・・*)ゞ ウーン カーネルとか 弄ったりのメモ