ThinkPad X1 YogaにAndroid 11を入れてみる #2
公開日:
この記事の続きです。
前回で画面は出るようになりましたが実機のログが確認出来ません。
これではめちゃくちゃデバッグしづらいです。
Wi-Fiも繋がらなければUSBでPCと繋いでも反応すらしません。
非常に困ったのですが私を救ってくれた救世主がここにいました。
イーサネットです。この謎のケーブルでX1 YogaをLANに接続させることが出来るようになりました。
ただ、Androidにそれを認識させるにはこのファイルをコピーする必要がありました。
# Ethernet
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.ethernet.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.ethernet.xml
Android側の/vendor/etc/permissions
にこのようなxmlファイルを置くことでAndroid側の機能を有効にできるようです。他にもwifiとかbluetoothとかいろいろあります。
Android側の設定アプリからIPアドレスを確認出来るのでPCからadbで接続します。
adb connect IPアドレス:5555
adb shell
完璧ですね。これでlogcatやdmesgが見れるようになりました。
試しにlogcat *:E
してみるとヤバそうなエラーがたくさん並んでいました。
とはいえこれでログが簡単に見れるのでデバッグが捗りそうです。イーサネットが無いx86のマシンだとどうすれば良いんでしょうね。UART・・・?
ディスプレイのバックライト
ログも出るようになったのでいざWi-FiやBluetoothの対応をしようとしましたがもはやコードを書くことは免れません。
なのでコードを書く必要があって簡単そうなやつからやってみようということでディスプレイのバックライトの制御からやってみることにしました。
さっそくどうやって制御するのか調べたところ思ったとおり/sys/class/backlight/intel_backlight/brightness
に値を書き込むだけで簡単に出来るようでした。
試しにadbから
echo 0 > /sys/class/backlight/intel_backlight/brightness
してみると画面が真っ暗になりました。
バックライトの制御はAndroidではLightsServiceとやらがやっているようなのでそれが参照出来るようにコードを書いておしまいです。
書いたコードはこちら。https://github.com/mrtska/device_mrtska_thinkpad-x1-yoga-gen5/tree/master/light
ディスプレイのバックライトをAndroid側で制御出来るようになった pic.twitter.com/s8dy1lrAoZ
— mrtska (@m__gl) December 28, 2020
このモジュールでキーボードバックライトとか通知LEDとかも制御出来るみたいですが現時点ではキーボードバックライトだけ実装しています。
必要になったら増やそうかなと。
少し慣れてきたので次はWi-Fi対応をやってみたいと思います。幸いカーネルドライバはあるのでカーネルとAndroidを繋ぐ部分を書く感じですね。(カーネルドライバも無かったらほぼ詰んでますがね・・・)
おまけ
Androidのソースコードを読まないと分からない部分が多々ありますが、https://cs.android.com がめちゃくちゃ便利でした。
関数をクリックすると定義に飛べたり出来るので非常に捗ります。
欠点は検索時に強制的にmasterブランチにされるところでしょうか。
まあ全ブランチインデックスしてたらヤバそうですししかたないのかも。
タグ: AOSP