LoginSignup
2

More than 1 year has passed since last update.

posted at

F1C100sは平凡Linuxユーザーが組み込み開発の夢をみれるか?

こんにちは、普段はWeb系エンジニアのuzullaです。低レベル勉強会という勉強会で勉強させてもらっています。

これは「日本Androidの会秋葉原支部ロボット部 Advent Calendar 2020」のアドベントカレンダー記事で、組み込み、電子工作的な話であり、Webの話はしません。知り合いがWeb系が多いので、知ってる人には冗長な所もあるでしょうがご了承を。

以下は「最初からこれがわかっていたら、自分は楽だったなーというリンク集」です(そうなってしまった)。

F1C100s/200sが気になっている(1年くらい)

image.png

F1C100sAllwinner社の販売している、(組み込み向け)Arm(プロセッサ)がのったSoC(というかDRAMを考えるとSIP())です(雑に言えばSoC/SIPというのは一つの「チップ」に色々なチップがはいってシステムになっているチップです)。もともとタブレットやメディアプレイヤー用につくられたもので、歴史あるチップらしいです。

最近だとゲームギアミクロでつかわれていたり、Lichee Nano というSDカードサイズの開発ボードが出て、ちょっと有名になったかなと思います。

なぜ気になるのか?

私もみなさんも(?)ガジェットは好きですよね、私も好きです。買うなりしてきましたが、そろそろ作りたくなるのが人情です。

私は昔電子名札をBuildersconというカンファレンスで配布してとても楽しかった、これはラズパイでつくられていたが、原価が高い!あと木工!

それを反省(?)して、電子名札の後にはESP32REAL FMというものもつくったりした。ビルコンで展示した後、Tsukuba Mini Maker Faire 2020で展示したりしたのだが、やっぱりコストが高いしESP32は開発が(Web系の人間には)面倒くさいな!モダンな言語で書きたい!っていうかLLで書きたい!っていうかPHPをうごかしたい!ファイルシステムをくれ!となり、やっぱりLinuxがほしいなあとなるのは自然。

そんなところ知ったこのチップは、CPU+DRAM(100s:32Mbyte, 200s:64Mbyte)で構成されており、あとはSPI Flash()かSDカードくらいを線で繋げばLinuxが走る(はず)です。実際、Linuxが動く名刺という前例があり、部品点数がかなり少なく、F1C100s以外のチップは汎用部品で成り立つのがわかります。つまり安く、簡単につくる(基盤から)ことができる(はず)。性能的には、ゲームギアミクロやハンドヘルドエミュレーターに使われているのだから、まあなんとか色々できるはず。

っていうかDRAMがちゃんと動くような基盤のパターン引ける気しないんですよね…。ということでSIPのチップを使いたい!回路図もあるしね!オープンソース最高!BOMらしきもある!

既存SBCをつかえばいいのでは?

さて、LinuxのSBCといえばRaspberry piです(諸説ある)。ラズパイは本当〜によくできていて、まず安い、国内で簡単に手に入る。しかし本当の凄さはそこではなく、(Raspbianから名前が変わった)Raspberry Pi OSが存在する事だと思います。RPiOSは「最近のカーネルで、完全にドライバーが追従しており、ユーザーランド(パッケージといえばいい?)がちゃんと更新されつづけている」所かなと思います、これは本当にすごい。

(そして、「なぜそれを他社がマネできないのか、『本物』のRPクローンはなぜないのか?」というところに行き着くんですが…あのチップ(BroadcomのBCM2XXX)がでてこないんでしょうが。ブートローダも非OSSらしいし

しかし、安いといってもばら撒くには高い!Raspberry pi zero(非 w/wh)が600〜700円で、こいつが大量に手に入れば(まだ)安いんですが、教育用ということで数が手に入らない!

RPi以外も、案外「Linuxがうごく『安い』SBC」はあんまりない、悲しい。自作するしかないよね…。

しかし新しくも古い

さて、ということで(?)F1C100sをつかうとなると苦しいのが環境が「古い」こと。まず、Kernelが古い。「Linux対応」と歌われている開発ボードやチップは、(大抵は)メーカーがどっかのバージョンのLinuxをForkしてドライバを当てて、BSP(そのボードでLinuxを動かすソフト一式)として提供され、そこで終わるようである(継続的なアプデは無い、有償でサポートしている所もある)。(licheepi nanoのbspはこちら baidoのストレージサービスなのですごくDLがふべん)

たとえば、F1C100sドキュメント上で公式カーネルは(4.14)である。よくよくブランチを掘るとなんとnano-5.2-flashというのもあってやった〜!と思うのだが、そのままではUSBデバイスを認識できないなどあるらしい。このあたりの情報はイマイチ公式にはかいてないので(つらい)フォーラムなどを念入りに掘るとかしないといけない。

カーネルが古いと、最近のコード(というより、libc周りなのか?)がしれっとうごかなくてつらい。LinuxはABI(LSB)をすごく守るので(カーネルにかかわらない)古いソフトはうごくが、新しいソフト(ライブラリ)がうごかないこともある。そんで、ドライバもあったりなかったりする。

話を戻すが、つまり(チップメーカー、ボードメーカー)公式の提供はカーネルのバージョンアップに「あんまり」ついてこないので、Linux 5.10がでている今でも、フル機能サポートには4系となる。有志のメンテで本家Mainline統合や追従もあったりしますが(AllWinner系だとSunxi)、まあやっぱり全部の機能ははいっていない(たとえばF1C100sは、オーディオもビデオもドロップ?)。

そして(普通の人が指すところのOSである)ディストリビューションも難しい。たとえば、組み込み向けLinuxディストリビューションは色々あり、RPiOSみたいなフルスペック(?)っぽいものでいうと Armbianとかあるが、BeagleBoardOrange PiとかHardKernelのだしているODROIDとかの高い板はいいけど、やっぱりF1C100sとかで使えるようなものではない。「インストーラー」は無いし(カスタムして使う)、Distroによってはarmelに対応していなかったり(あるいはもっと細分化していたり)なんだりすることもある。

余談:Armはarm(ここまでOABI),(ここからEABI)armel,armhf,AArch64(≒Arm64)とあり…いや実際のパッケージはもっとバラバラで…まあ詳しくはWikipediaみてほしいが、F1C100sはARM9ファミリーのv5TEJアーキティクチャのARM926EJ-S とかいうコアなので、armelという微妙な(非力な)ゾーンである、余談おわり。

「Linux動く!」というのはまあそうなんだけど、普段PCのLinuxを使っている感覚の「最近のLinuxがちゃんとうごく!インストーラーがある!」みたいなのは期待ができないのであった。

ということで、「最初から提供されているLinuxを諦めて使い続ける」か、「全部自分でビルド」しないといけない

ビルド

Linux環境があるなら前述の通り、どこからカーネルをもってきて、どういうパッチを宛てるかということをクリアできれば、昨今ビルドは非常に簡単に(…ソースがこわれていなければ)できる。いろんなツールやソースコードをいれないといけない&ビルドは重い処理なので、おすすめはLinux on Dockerである。というか、公式がdocker imageで一式配布している

arm-linux-gnueabiとかでググるとコンパイラはaptではいることがわかるし、普通にmake menuconig…もしなくてよくて、大抵公式がconfigファイルを提供しているのでそれをコピーして、make oldconfigしてmake all arch=ARM CROSS_COMPILE=arm-none-eabi-すればクロスコンパイルができる。このあたりは情報が本当に多いので省略

無事ビルドが通るとarch/arm/boot/zImageみたいなのが生成され、initramfsをつくり、[イメージ]をつくって](http://www.vjiot.net/typecho/index.php/archives/53/)m[icroSDに焼くなど](https://linux-sunxi.org/Bootable_SD_card)します。

あ、あとLinuxのローダーとしてu-bootが必要ですね、公式のforkにブランチあります

と、いうところで

u-boot, linux kernel, initramfsをビルドし、
QEMUのArmエミュレータで実機レスでテストし、
そこからmicroSDイメージをつくって実機でうごかし、
さらにはOTGコネクタでUSBデバイスこと技適Wifiドングルを認識してTCPIPを…ということをお話したいんです、が。

アドベントカレンダーには締切があるのですまん、次回にさせてくれ!(途中まで進捗しているが、再試し、文字におこせていません、師走ェ…)

そしてユーザーランド(ワールド)を手組(自前ビルド)して、できればOpenWrtやArmbianあたりにのっかってラクラクパッケージ管理したい…。

昔はこういう手組をやってたんで、できるっしょ!って慢心してたんですが、x86環境は本当にイージーモードだったと認識しております。Arm(ブート周りが)なにもかもわからん。

尻切れトンボ(首切れトンボ?)ですみません。

なんとか新しい、Linuxの動く謎ガジェットを設計して世に出したい。今後も頑張っていきます、進捗でたらまた。

以下蛇足

こういうのがF1C100sで実際うごいている、という例

image.png

違うCPUもみてはいる

高いから諦め気味だけど、違うCPU(RockChip系)だけど、これくらい(メモリ1GB、4コア)スペックあると楽なんだよな…
image.png

image.png
最終的には、これくらいつくれるとうれしいですよね。(いまはなき、Pocket CHIP)

しかし謎ガジェットつくってると、こういう中国/韓国/UK系のエミュレータが、「なんでこんな安く作れるんだ?」って気分になりますよね。

異常蛇足でした。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2