AllwinnerタブレットのOSを作ってみる (途中版)

32
2015年:謎の蟹推しでした

Transcript of AllwinnerタブレットのOSを作ってみる (途中版)

Page 1: AllwinnerタブレットのOSを作ってみる (途中版)

2015年:謎の蟹推しでした

Page 2: AllwinnerタブレットのOSを作ってみる (途中版)

体制一新:新ビルドサーバ

Page 3: AllwinnerタブレットのOSを作ってみる (途中版)

新ビルドサーバ

● Core i7マザーボード, Memory 12GB, 電源(あひるさん寄贈)

● 3TB HDD, 256GB SSD, ケース(しまだ)

● 家のNetwork回線が貧弱なため、ほたさん(@lindwurm) 宅に設置を委託

● おーぷんここんと、ほたさん(Android mod系のディストリビューションビルドに使用)の共同利用

Page 4: AllwinnerタブレットのOSを作ってみる (途中版)

その結果

● ビルド時間が大幅に短縮– ここん:6時間 → 3時間 (ベンチを基にした推計値)

– Android mod:2〜3時間 → 1時間

● 対応プラットフォームを増やすことが可能に(3 → 10以上)

Page 5: AllwinnerタブレットのOSを作ってみる (途中版)

ということで2016年一発目のネタ

Page 6: AllwinnerタブレットのOSを作ってみる (途中版)

今年のザ・旧型コンピュータは...

Page 7: AllwinnerタブレットのOSを作ってみる (途中版)

AllwinnerタブレットのOSを作ってみる(途中)

SHIMADA Hirofumi,@shimadah

Page 8: AllwinnerタブレットのOSを作ってみる (途中版)

事の発端:遅いAndroid Tablet

● 帰省中、お蔵入りしていた Android Tablet を発見– だいぶ前に、妹(スティーブ・ココンの作者↓)が購入し

た教材に付いてきたらしい– しかし、動作が大変モッサリとしていたので余り使わな

かったらしい

● 正常に動いているため、貰って何かに遊べるか調べることにした

Page 9: AllwinnerタブレットのOSを作ってみる (途中版)

こういうマシンです

Page 10: AllwinnerタブレットのOSを作ってみる (途中版)

Androidは大変モッサリなので

● なにか適当なLinux環境を作って動かせば、割と使えるようになるんじゃないか

● Allwinnerはそんなに難しくない、みたいな話を以前聞いたことがある

● タブレット版ここんみたいなのができればいいかも● ということで調べてみた

Page 11: AllwinnerタブレットのOSを作ってみる (途中版)

Allwinner

● 中国のチップメーカー。安価なARMプロセッサを出している

● BagleBone, ODROID, C.H.I.P., Orange Pi 等、安価な RasPi もどきのボードコンピュータに大抵搭載されている

● (最近はあまり見ないが)安価なAndroidタブレットにも搭載されている

● HDMIスティック等にも搭載されていることがある

Page 12: AllwinnerタブレットのOSを作ってみる (途中版)

linux-sunxi コミュニティ

● Allwinner マシン向けの Kernel, u-boot 等のメンテナンスと Upstream への反映を行っている

● Allwinner マシンのデータベースを持ち、Hack の仕方などをまとめているhttp://linux-sunxi.org/Identification_guide

● 繰り返し GPL 違反をする Allwinner に対し開示要求をしたり調査したりも行っているようだhttp://linux-sunxi.org/GPL_Violations

Page 13: AllwinnerタブレットのOSを作ってみる (途中版)

調査開始

● Android 4.1

● 機種名しかわからず、手がかりがない

Page 14: AllwinnerタブレットのOSを作ってみる (途中版)

そういうときはバラしましょう

Page 15: AllwinnerタブレットのOSを作ってみる (途中版)

ヒントは?

Page 16: AllwinnerタブレットのOSを作ってみる (途中版)

わかったこと

● Allwinner A13● 基盤にある文字:ET_Q8_V1.2

→この情報を基に、linux-sunxi サイト内を探す

Page 17: AllwinnerタブレットのOSを作ってみる (途中版)

調べてみると

● Q8 というフォームファクタのタブレットである

“ The 7" tablet format is a very popular case style which is/was used for the cheapest tablets from 2012 through 2014. “http://linux-sunxi.org/Format_Q8

● 外観は概ね似たような感じであるが、中身は物により、微妙にchipが異なり、しかも多くの種類があるらしい– 案の定、 ET_Q8_V1.2 という名前のタブレットが無かったもの

の、近そうなタブレットならあった

Page 18: AllwinnerタブレットのOSを作ってみる (途中版)

どうやってディストリを作るか?

● OpenEmbedded + meta-sunxi の組み合わせ

(meta-sunxi も Linux-sunxi コミュニティでメンテナンスされている。)

https://github.com/linux-sunxi/meta-sunxi

● (ここんとしては)慣れている OpenEmbedded でさくっとできればいいよね

● とりあえずは Kernel が動くところまで

Page 19: AllwinnerタブレットのOSを作ってみる (途中版)

復習:Device Treeとは?

● PCと異なり、ハードウェアの自動認識が難しく、設定ファイルを当てて認識させる必要がある

● 「ハードウェアの情報を記述するためのデータ構造」– レジスタ、割り込み、メモリ、各種パラメータ、使用するドライバ等

● Linux 3.7 よりARMで導入– PowerPC には以前からあった

● Kernel ツリーの arch/arm/boot/dts/ 以下に、 ソースとなる *.dts ファイルがある– コンパイル後は dtb ファイルができる。これを実際にブートローダ

に、Kernelとともに読み込ませる

Page 20: AllwinnerタブレットのOSを作ってみる (途中版)

ARMの状況:いわゆるISAバス(Cバス)

http://pc.watch.impress.co.jp/docs/article/diy9712/3/3_2/052.jpg

Page 21: AllwinnerタブレットのOSを作ってみる (途中版)

Sunxi の Device Tree事情

● 以前から sunxi の Linux kernel では、 FEX という独自の Device Tree + α 的な仕組みを持っている– Linux-sunxi ツリーは、 Linux 3.4 に FEX を追加搭載している。

● Device Tree との互換性はない

● 最近の Linux では Device Tree の方が推奨されているため、 Device Tree へのコンバート作業が進んでいる。

● meta-sunxi では、FEX と Device Tree の両方に対応しており、デバイスの対応状況によって Kernel などを切り替えて build することができる。

Page 22: AllwinnerタブレットのOSを作ってみる (途中版)

conf/machine/q8.conf

#@TYPE: Machine#@NAME: Q8 Tablet#@DESCRIPTION:

require conf/machine/include/sun5i.inc

KERNEL_DEVICETREE = "sun5i-a13-q8-tablet.dtb"UBOOT_MACHINE = "q8_a13_tablet_defconfig"SUNXI_FEX_FILE = "sys_config/a13/pov_tab_p703.fex"

Page 23: AllwinnerタブレットのOSを作ってみる (途中版)

conf/machine/q8.conf#@TYPE: Machine#@NAME: Q8 Tablet#@DESCRIPTION:

require conf/machine/include/sun5i.inc

KERNEL_DEVICETREE = "sun5i-a13-q8-tablet.dtb" ↑ DeviceTree (Linux)UBOOT_MACHINE = "q8_a13_tablet_defconfig" ↑ u-boot の config (Linux-sunxi, Linux共通)SUNXI_FEX_FILE = "sys_config/a13/pov_tab_p703.fex"↑ FEXファイル (Linux-sunxi)

Page 24: AllwinnerタブレットのOSを作ってみる (途中版)

Q8でのLinux Kernel

● Linux-sunxi では既にサポートされている

● (Upstream) Linux では 4.4 から各種対応がマージされた

Page 25: AllwinnerタブレットのOSを作ってみる (途中版)

buildする

$ ./oebb.sh config q8

$ . ./opencocon

$ bitbake linux u-boot

※詳しい方法はまとまり次第どこかに書きます(すんません)

Page 26: AllwinnerタブレットのOSを作ってみる (途中版)

Sunxi-tools

● ホスト側マシンに sunxi-tools をインストールする。

● FELモードでタブレットを起動する(このマシンの場合、USBケーブルを外して、[電源]+ [Volume +]を長押しすることでFELモードで起動する。画面は何も映らない。)

● タブレットとホスト側マシンを、データが通るmicroUSBケーブルでつなぐ● 接続確認

$ lsusb

Bus 001 Device 006: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode...

● テスト通信

$ sudo ./sunxi-fel version

AWUSBFEX soc=00001625(A13) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000

Page 27: AllwinnerタブレットのOSを作ってみる (途中版)

u-bootを転送する

● Ubootだけを転送して起動する$ sudo ./sunxi-fel uboot u-boot-sunxi-with-spl.bin write

● Kernelも含めて転送する

$ sudo ./sunxi-fel -v uboot u-boot-sunxi-with-spl.bin \

write 0x42000000 uImage \

write 0x43000000 uImage-sun5i-a13-q8-tablet.dtb \

write 0x43100000 boot-q8.scr \

write 0x43300000 rootfs.cpio.lzma.uboot

Page 28: AllwinnerタブレットのOSを作ってみる (途中版)

u-boot : ペンギン登場

Page 29: AllwinnerタブレットのOSを作ってみる (途中版)

u-boot → Kernel

Page 30: AllwinnerタブレットのOSを作ってみる (途中版)

しかし、ここからが問題

● touchscreen等のチップが微妙に異なり、部分的に動かない可能性がある

● 既に rtc が動いていないのが気になる

● keyboardが使えるわけではないため、正しく動くことを確認するためには、まだ時間がかかりそう

● コードを反映させるにも時間がかかりそう

Page 31: AllwinnerタブレットのOSを作ってみる (途中版)

上周りはどうする?

● 本当はタブレット版Xfceみたいなポジションのものが望ましい

● KDE Plasma もある http://plasma-mobile.org/technology/

● Enlightment (EFL) もあるけど、実際はどうやろか?

● ほかには?

Page 32: AllwinnerタブレットのOSを作ってみる (途中版)

まとめ

● 安物タブレットマニアが海外に多いらしい● 俺Linuxを動かすまでは割と簡単であった

● Linux kernel への反映はまだ途上だが、緩やかに続いている

● ディストリ作ろうぜ!!