11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

日本Androidの会秋葉原支部ロボット部Advent Calendar 2020

Day 15

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

Posted at

こんにちは、普段は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系のエミュレータが、「なんでこんな安く作れるんだ?」って気分になりますよね。

異常蛇足でした。

11
2
0

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
  3. You can use dark theme
What you can do with signing up
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?