LuckFox Pico ProでUbuntuを使ってみる

Ubuntuのインストール

AliExpressで気になるLinuxボードを見つけました。
LuckFox Picoと言う製品で、SoCにRockchip RV1103/1106を採用したLinuxです。
RV1103/1106はいずれもMCUにCortex-A7を採用したSoCです。
Cortex-A7は2011年に発表されたARMv7-Aアーキテクチャを実装したMCUで、
Raspberry Pi2のBCM2836やOrangePi PCのAllwinner H3に実装されているMCUです。
BCM2836やAllwinner H3は、このMCUを4個内蔵していますが、RV1103/1106は1個だけ内蔵しています。
右がLuckFox Pico Mini、左がLuckFox Picoで、どちらもRV1103が搭載されています。


右上がLuckFox Pico Pro(RV1106)で左上がLuckFox Pico Plus(RV1103)です。



各製品のスペックはこ ちらに公開されています。
今回入手したのはLuckFox Pico Maxで、256MBのMemoryと256MBのSPI NAND FLASHが搭載されています。
LuckFox Pico Proもメモリが小さいだけで、それ以外の機能は全く同じです。


裏面にSPI NAND FLASHが実装されています。


OSイメージへのリンク(Google Cloud Link)がこ ちらに公開されていて、ubuntuとbuildrootのイメージを使用することができます。
ubuntuはSDカード、buildrootはSDカード、あるいはSPI NAND FLASHから起動することができます。
今回は「Luckfox_Pico_Pro_Max_Ubuntu_SDCard.zip」を使い、SDカードから起動してみました。
このイメージはPico Pro/Pico Maxのどちらでも使うことができます。
SDカードへの書き込みツール(SocToolKit.exe)と、書き込み手順がこ ちらに公開されています。
注意点としてSDカードを刺した状態で書き込みツール(SocToolKit.exe)を起動すると、SDカードを認識しません。
書き込みツール(SocToolKit.exe)起動後に、SDカードを刺すと、SDカードを認識します。
また、提供されているイメージにはupdate.imgが含まれていますが、このファイルは書き込み対象から除外する必要が有ります。

SDカードの書き込みは結構時間が掛かります。
書き込みを始めると右側に進捗状況が表示されますが、rootfsの書き込みですごく待たされます。


辛抱強く待つとrootfsの書き込みが始まります。


書き込みが終了するとこの様な画面になります。


SPI NAND FLASHが実装されているボードでは、buildrootをSPI NAND FLASHから起動から起動することができます。
SPI NAND FLASHから起動する場合は、こ ちらの手順でFLASHにOSを書き込みます。

SDカードが準備できたら、USB-TTL変換アダプターを本体のデバッグポートに接続します。
GPIOのピン配置はこちらに 公開されていますが、デバッグポートはピン番号1(TX)、2(RX)です。
USB-TTLアダプターをWindowsマシンに接続し、TeraTermを起動してから、ボードのUSB経由で電源を供給します。
ずらずらとブートメッセージが表示されて、ログインプロンプトが表示されます。
イメージは圧縮されているので、初回だけはイメージの伸張を行います。
root/rootとpico/luckfoxのユーザが事前に登録されています。


提供されているUbuntuのバージョンはUbuntu 22.04.3です。


IPアドレスもDHCP経由で正しく取得できています。


ifconfig(net-tools)も最初からインストールされていました。


パッケージの更新も問題なくできます。


パッケージを更新したらUbuntuが22.04.3→22.04.4になりました。


提供されているubuntuはRNDIS機能が最初から有効になっていて、USBポートに対して「172.32.0.70」のIPアドレスがアサ インされます。
WindowsやLinuxホストのIPアドレスを同じセグメントに変更することで、USBポートを使ったネットワークが使えるようになります が、
このモデルはEthernetを持っているので、このデバイスの使い道は有りません。


簡単なCソースをコンパイルしてみました。
$ cat a.c
#include <stdio.h>
int main() {
        printf("hoge\n");
        return 0;
}

$ cc a.c
/usr/bin/ld: cannot find -lgcc: No such file or directory
/usr/bin/ld: cannot find -lgcc: No such file or directory
collect2: error: ld returned 1 exit status

$ cc --version
cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gccのインストールが不完全なようです。
以下のコマンドでインストールできるgccを調べることができます。
$ sudo apt search '^gcc-[0-9]+$'
Sorting... Done
Full Text Search... Done
gcc-10/jammy-updates,jammy-security 10.5.0-1ubuntu1~22.04 armhf
  GNU C compiler

gcc-11/jammy-updates,jammy-security,now 11.4.0-1ubuntu1~22.04 armhf [installed,automatic]
  GNU C compiler

gcc-12/jammy-updates,jammy-security 12.3.0-1ubuntu1~22.04 armhf
  GNU C compiler

gcc-9/jammy-updates,jammy-security,now 9.5.0-1ubuntu1~22.04 armhf [installed,automatic]
  GNU C compiler

そこで、以下の手順でgcc-12とlibc6-devをインストールし、update-alternativesでバージョンを切り替えてみま した。
$ sudo apt install g++-12

$ sudo apt --reinstall install libc6-dev

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12

$ gcc --version
gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cc a.c

$ ./a.out
hoge

無事にビルドが成功しました。
g++のバージョンも切り替えます。
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11

$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12

$ g++ --version
g++ (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ a.cpp

$ ./a.out
hello

続く....