macでLuckfox picoの開発


#で始まるcodeはdocker内での作業 %で始まるのはmacでの作業

 この記事のコードで # と % でどちらの環境で作業しているか一目瞭然となるように心がけています
 あくまでもお気持ち表明で、記事がミスってるかもしんないのであまり信用しないでね
 Rosetta2の導入部分をすっ飛ばせば、たぶん Windows のdockerやLinuxのdockerでも動くんじゃないかな。たぶん。 

x86は世界の中心。アウトローはつらい

 カーネルのドライバーを作る気はあまりないんだけどpythonでアプリ開発すると電力を食うのでできればC言語とかGoで作りたい
 ということで、本家のwikiに書いてあったgitリポジトリからまずはクローンしてみる。

% git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git

 gitee.comというのは中国のgithubのようなもの。ここをgithub.comに書き換えればgithubからダウンロードできるけど、このリポジトリがデカい!700MByte弱ある
 最初githubから何度かgit pullしてたら転送制限にかかってしまったのかgit pullできなくなってしまった。こんなのはじめてww

 さて、クロスコンパイル環境なんだからgccのオプションで切り替えるんだろうな、と思ってた
 例えばwikiにあったgpioでLチカする例題のコンパイルは

% arm-rockchip830-linux-uclibcgnueabihf-gcc gpio.c -o gpio

とするんだけど、macだと動かない。えー?と思って file コマンドで素性を調べると

 % file /home/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc

/home/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc:
 ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
 dynamically linked, 
interpreter /lib64/ld-linux-x86-64.so.2, 
for GNU/Linux 2.6.32, BuildID[sha1]=53b31172f7385eb9d0580457f4e330e2a933f889, 
stripped

 arm-rockchip830-linux-uclibcgnueabihf-gccはエイリアスやshellスクリプトではなくて普通のx86バイナリー実行ファイルだった…なんてこったい
 組み込み系だから過去の資産とか色々事情があるのでしょう

Rosetta2 導入

 x86のLinuxマシンを用意してもいいんだけど、外出先でデモもしたいのでApple純正x86エミュレーターを導入する。要はRosetta2ね。
 mac買い替えの時にrosetta2環境は徹底的に排除したんだけど背に腹は変えられん

% softwareupdate --install-rosetta

この後の質問には「a」と答える。普通 y/N とかなんだけど、なんで a ?

Docker導入

 カッコつけてbrew とかで導入すると情報が足りなかったり、微妙に設定が違ってつまらん苦労をする(した)ので、普通にDocker.app を本家からダウンロード、実行、質問に答えていく
 アップデーターやらローカルのディスクドライブにアクセスする権限を求められるので、まぁyes / y / ok / はい で進める
 次にmacのターミナルを起動すればdockerコマンドが使えるハズ
 使えなかったらググ…最近のAIに聞いてみて

 SDKのコンテナをダウンロード(pull)しておきます

sudo docker pull luckfoxtech/luckfox_pico:1.0

Docker起動、停止、コンティニューメモ

 初回起動はこうしました。/UserMyHomeはmacの自分のホームディレクトリなので読み替えてください

% sudo docker run -it --name luckfox -v /Users/MyHome/luckfoxhome:/root luckfoxtech/luckfox_pico:1.0 /bin/bash

 /Users/MyHome/luckfoxhome というフォルダをDockerの/rootディレクトリーとしてマウントします
 元々あった/Users/MyHome/luckfoxhomeは消える(見えなくなる)ので、いままで存在しなかったフォルダー名にしましょう
 こうすることにより開発したファイルが永続的に管理できます
 また後述する gitからpullするSDK もここに入ります
 またVSCodeでソースを修正する時は、macのこのディレクトリに対して行うので色々楽ちん
 Dockerにログインしたあとexitすると停止するので、以下のようにして再起動、コンソールbashログインしてください

% docker start luckfox
% docker exec -it -w /root luckfox /bin/bash

Dockerファイルだから開発一式揃ってると思ったら違うのかよ

 おっと心の声が漏れてしまった
 gitコマンドとかmakeなどの開発環境が用意されているだけでした
 つまり apt install 何たらかんたら、しなくていいだけだった
 肝心のクロスコンパイラーは git pull で手にいれるものらしい
 だから700MByteもあるのか
 LFS使ってないっぽいからイニシエのドロドロしたクロスコンパイラーの残骸もローカルドライブに入ってるんだろうな(笑)

 とりあえず docker のshellに入ってgit pullする
 mac側でgit pullしてもいいけど念の為。パーミッションとかは問題ないとは思うけど、絶対パスでソフトリンクしてるかもしんないし
 

# git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git

で、環境初期化?なのかな?
 luckfox-pico/に移動して、./build.sh lunch とすると、どこかの何かのファイルを書き換えてくれるらしい。

root@0ea301bd929e:~# cd luckfox-pico/
root@0ea301bd929e:~/luckfox-pico# ./build.sh lunch 

You're building on Linux
  Lunch menu...pick the Luckfox Pico hardware version:
  选择 Luckfox Pico 硬件版本:
                [0] RV1103_Luckfox_Pico
                [1] RV1103_Luckfox_Pico_Mini_A
                [2] RV1103_Luckfox_Pico_Mini_B
                [3] RV1103_Luckfox_Pico_Plus
                [4] RV1106_Luckfox_Pico_Pro_Max
                [5] RV1106_Luckfox_Pico_Ultra
                [6] RV1106_Luckfox_Pico_Ultra_W
                [7] custom
Which would you like? [0~7][default:0]: 4
  Lunch menu...pick the boot medium:
  选择启动媒介:
                [0] SD_CARD
                [1] SPI_NAND
Which would you like? [0~1][default:0]: 0
  Lunch menu...pick the system version:
  选择系统版本:
                [0] Buildroot(Support Rockchip official features) 
                [1] Ubuntu(Support for the apt package management tool)
Which would you like? [0~1][default:0]: 0
[build.sh:info] Lunching for Default BoardConfig_IPC/BoardConfig-SD_CARD-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk boards...
[build.sh:info] Running build_select_board succeeded.
root@0ea301bd929e:~/luckfox-pico# 

 自分のは luckfox pico pro max で、デフォルトの謎linuxなので 4 , 0 , 0 としました。何かがサクセスしてくれた。
 クロスコンパイラーのPATHを.bashrcと.bash_profile に書いてくれるスクリプトがあるけど、dockerだとそもそもこのファイルがないのでtouchしておく

root@0ea301bd929e:~# cd ~  (/homeディレクトリに移動)
root@0ea301bd929e:~# touch .bashrc .bash_profile
root@0ea301bd929e:~# cd /root/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
root@[長い] # source env_install_toolchain.sh 

よし、確認

root@[長い] # cd ~
root@0ea301bd929e:~# cat .bashrc 
export PATH=/root/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH

 なんだよ、一行PATH設定しただけ? INCLUDEとかLIBのexportとか無いのか…
 sourceコマンドなので、もうpathもセットされているから wiki のgpio.c をVSCodeで 投入してコンパイルだ。macでファイルに書き込むとDockerの方にも反映してるからいちいち転送しなくて便利だね
 なげぇgccコマンドでコンパイルだ

root@0ea301bd929e:~# arm-rockchip830-linux-uclibcgnueabihf-gcc gpio.c -o gpio

これで gpio ってバイナリーができたので、今度はmacのadbコマンドでpico pro maxにファイルを押し込む

% adb push gpio /tmp
% adb shell
luckfox pico max のshellに入った
# ./tmp/gpio

 これでLEDがチカチカすればOK。元のソースは GPIOの55番なので私の記事(Lチカ)なら 56 (19番ピン) にCのソースコードを書き換えよう

これでmac + C言語で開発できるようになった!

 とりあえずmemcached.cとかコンパイルしてzabbixあたりから取得できるようにしようかな
 zabbix_agentd とかデカすぎるからkey:value程度のmemcachedあたりで良さげ。かるーいトランザクション制御もあるしね

おしまい

いいなと思ったら応援しよう!