帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)

33
帰ってきた すごい謎マシン SHIMADA Hirofumi, @shimadah

Transcript of 帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)

帰ってきたすごい謎マシン

SHIMADA Hirofumi,@shimadah

opencoconとは

旧型PCをシンクライアント

として再利用する

Linuxディストリビューション

ユーザインターフェイス

● 流行りに左右されない Matchbox + TUI メニュー● 余計なものは

ほとんど無し

それでいて色々できる

● シンクライアント:X, VNC, RDP, SPICE● Webブラウザ:midori● VPNクライアント:SSH (Port Forwarding),

SoftEther ほか

● NTPクライアント、音量調節、タッチパッド調整など

Libretto 50 で Windows8

v9gでは何が変わった?

● 細かいバグ修正– netbootがうまく動いていなかった不具合の修正

– 自動接続まわりにいくつかあったバグを修正– 一部の謎端末への対応

これらすべてフォーラムで報告頂いた不具合です(ありがとうございます)

ハイライト:HP Thin-Client 2533t

http://www.atmarkit.co.jp/news/200806/23/hp.html

ハイライト:YABAI (でも直した)

https://www.flickr.com/photos/38449766@N03/3602195819/

v9はそろそろにして...

状況

● ウィンドウマネージャの変更 : 微妙– なかなか良い選択肢が見当たらない...

– FreeRDP ClientまわりをGTK+ベースにする等したほうが早い気がしてきた

● PC版の Kernel : 3.10→3.18ベースになります

– Longterm が打たれたのでこれでいきます

– なので検証し直しですねorz

● あとは概ね計画通りになるはず?

ところで:ARM対応ってどうよ?

● ディストリ屋泣かせ● ブートローダや、ブート方法がデバイスによって違う● Kernelもデバイスによって状況が違う

● ユーザランドはそう問題ないとは思うんだけど...

Kernel

● 昔は...– カーネルにパッチを沢山当てるのが当たり前– パラメータがハードコーティングしてある事例も多かった

ため、Kernel のバージョンを上げづらかった

– そのため Kernel の断片化が進んだ

– Linusがその状況にキレた

● 近年は Device Tree の導入によって、その障壁が下がった

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

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

Device Treeとは?

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

バ等● Linux 3.7 よりARMで導入

– PowerPC には以前からあった

● Kernel ツリーの arch/arm/boot/dts/ 以下に、 ソースとなる *.dts ファイルがある

– コンパイル後は dtb ファイルができる。これを実際にブートローダに、Kernelとともに読み込ませる

Device Treeの壁

● Linux 3.7以降、ARM マシンで Linux Kernel の対応を入れるには、 Device Tree がほぼ必須

● その状況はデバイスによりまちまち

どのぐらい対応してる?

● 対応

Raspberry Pi, Dynabook AZ, LinkStation, Linux Zaurus, Chromebook, GuruPlug, NetWinder, Nokia N900, RiscPC などなど

● まだ非対応

NetWalker, SHARP IS01, 古いAndorid Tablet など

ソースコードの読み比べタイム

本日のお題

Dynabook AZとは

● 初代Tegra、メモリ 512MB● Android 2.2 搭載のノートPC● Ubuntuの偉い人がベタ褒めしたことから、その界

隈では非常にメジャーなARMマシンとなった

● OSの書き換えが非常に容易

● 海外ではAC100と呼ばれている

– Linuxから見た内部的なマシン名は paz00

これでopencoconを....?

● 実は何度かトライしていたが、諦めていた● v9時代:OpenEmbeddedの問題に当たり、基本的

なライブラリさえ作れなかった– 安定版でも地雷なのはいつものこと

● 最近もう一度試してみた

ところで、巷のAZは

● Ubuntuを使っている例が非常に多い

– ArchとかSlackwareもいけるらしい

● Kernelは少し古いケースが多い

– AZ独自部分があるため、それ用のカーネルツリーを使う

– 昔は 2.6.38 がよく使われていた

– Ubuntu は確か 3.0

– 多くの人はどちらかを使っているはず

最近は?

● 3.10 ツリーがある

● 3.15 より、アップストリームに入った

– Device Tree に対応し、関係するドライバもすべて整ったため、めでたくマージ

– つまり、ビルドする際の障壁は大幅に下がったはず

試してみた

● Linux 3.18 カーネルをベースに、適当なテストディストリを作ってみた

– といっても initramfs だけ

● 新しいバージョン OpenEmbedded のツリーでリトライしたら、そこそこ普通にビルドできた– 今回はu-bootに入れ替えをせず、abootimg フォーマットに変換したイメージ

を LNX パーティションに転送した

– bootloader:fastboot は Device Tree に対応する前のものなので、 Kernel の後ろに tegra20-paz00.dtb を結合した

– $ abootimg --create test2.abootimg -f bootimg.cfg -k zImage -r initrd.img

– # nvflash --bl /usr/lib/nvflash/fastboot.bin --download 6 test2.abootimg

しかし動かない

仕方ないので改造してみた

シリアルコンソール付きAZ

改造方法

● 基本的には以下のページにある内容そのまま

http://ac100.grandou.net/serial_port_modification

● ただ、手元にNokiaケーブルは無いので、その代わり USB-UART アダプタを大須で購入して結線した

● USB-UART側から 3.3V を供給しなくても動く

– 逆に言うと、USB-UART側で電圧を加えてはならない

で、なんて表示されたかというと

==== Debug Console(Jul 29 2010 19:07:27) ==== Checking for android ota recovery d d x | T .

Error: unrecognized/unsupported machine ID (r1 = 0x00000d05).Available machine support: ID (hex) NAME ffffffff Generic DT based system ffffffff NVIDIA Tegra SoC (Flattened Device Tree) Please check your kernel config and/or bootloader.

解決法

● machine id を変更する

– これは Device Tree 以前の世代で有効な手法であることに注意

– 今でも有効なのかもしれない?

● Kernel に内蔵している dts をうまく読みに行っていない?–

なんかオチがあった

● これが必要だった

Kernel の後に結合する dtb ファイルを読み込むには、以下を有効にする必要があった

– CONFIG_ARM_APPENDED_DTB=y

– CONFIG_ARM_ATAG_DTB_COMPAT=y

– CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND=y

Kernelが動き出した

まとめ

● Device Tree は、これからの ARM Linux にとって重要

● とりあえずAZイメージはできた– ただ、その先も地雷が多そうなのでまだまだ

僕らはARMという山に登り始めたばかりだ!