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あたりで良さげ。かるーいトランザクション制御もあるしね
おしまい