わくわく計算ライフ

ドムプラをキメつづけるブログになりつつある。

【変態端末】F(x)tec Pro1X(QX1050)にUbuntu Touchを入れる

Pro1-X(QX1050) Ubutnu Touch導入メモ

せっかく変態端末を購入したのにただのAndroid端末として使っているだけでは勿体ない!
ということでUbutu Touchを入れます!
と思ったのだが、公式のインストーラーが前のバージョンのQX1000にしか対応していない…!
ということで、コミュニティの情報を漁って手順書を作りました。

1. 参考サイト

公式コミュニティのトピックから貼ってあるリポジトリを見ながらやっていきます。

見ながらやるだけなので、特に新しい何かは生み出していません。巨人の型に乗るぜイエーイ。
ちなみにPro1-XだとQX1000もあるっぽいので本記事ではQX1050で内容を統一しています。
まぁQX1000持ってないし(というかQX1000なら公式のツールで問題なくUbuntu Touch入れられるっぽいので)。

2. 作業環境

今回の開発環境は以下

項目 名称 備考
CPU Ryzen9 7900 ワッパが良い
Memory DDR5 64GB うち、32GBがWSL2に割り当てられる
Host OS Windows11 WLS2を使用します。
Guest OS Ubuntu20.40 もちろん普通のLinuxマシンでもOK。
flash tool fastboot 33.0.3 Android 開発環境に付属しているので別途は入れてないです。

3. 作業手順

それでは実際に作業していきましょう。
大まかな流れは以下の通りです。

  1. 元のAndroidのデータの退避
  2. 開発環境の準備
  3. イメージのビルド
  4. bootloaderのunlock
  5. イメージの書き込み

3.1. 開発環境の準備

リポジトリのbuild.shはbashで、書き込みにはfastbootを使用するとの事なので、LinuxのAndroid開発環境があれば良いと思います。
このUbuntu Touchを初めとするAndroidがプリインストールされた環境に他のMobile OSを構築するのにHalium というプロジェクトの技術を使用しているようです。ここではHaliumの詳細は置いません(入ればええねん)。

3.2. 元のデータの退避

あんまりAndroidに戻したりする気はないのですが、最悪うまく行かなくて文鎮でも困るのでバックアップを取ります。
人類気が変わることもあるのでね…選択肢を残しておくのは大事。
デバイス固有のパーディションfsc fsg modemst1 modemst2 persistを退避しておけばいいらしい。
コミュニティの先人の知恵を参照する。

3.2.1. EDLの導入

linux上でedl.pyを導入する必要があるとのこと。
今回はWSL2のUbuntu20.04を使用しているのでedl.pyを入れれば良いということになる。

という訳でEDLのリポジトリ
Ubuntuのところだけ抜いてきて、 既に入れてあるadbやfastbootと入っていなかったModemManager周りの削除を除くと以下のような手順でビルド&インストール。

sudo apt install python3-dev python3-pip liblzma-dev git
sudo apt purge modemmanager

git clone https://github.com/bkerler/edl.git
cd edl
git submodule update --init --recursive
sudo cp Drivers/51-edl.rules /etc/udev/rules.d
sudo cp Drivers/50-android.rules /etc/udev/rules.d
python3 setup.py build
sudo python3 setup.py install

3.2.2. 端末のroot可

EDLはroot化した上でadbを使用する。
QX1050のroot化にはドキュメントを参照したところ、root化にMagiskを用いるとのこと(Vendor Keyが無いので通常の方法ではroot化できない)。

3.2.2.1. boot.imgを端末へコピー

事前にhost PCにboot.imgをダウンロードし、端末に転送します。
boot.imgはこちらからとってきてください。
(ユーザーディレクトリ下にて作業、ダウンロードしているものとして)
ダウンロードしたboot.imgを書き込み可能領域に書き込みます。

例の通りWindows11側からusbipdで端末を繋ぎます。
usbipd listで確認すると端末名は以下の様に表示されていた。

4-17   18d1:4ee7  BENGAL-IDP _SN:B4649074

という事で接続(Windowsの管理者権限cmdから)

usbipd bind -b4-17
usbipd wsl attach -b4-17

接続できたらUbuntu側で確認します。
先ずはlsusbで先ほどの端末(BENGAL-IDP~)が見えていることを確認。
adbはroot権限で起動して下さい。していない場合は以下の様にします。

adb kill-server
sudo adb start-server

adb devicesで端末が見えていればOK。

adb push boot.img /sdcard/

で編中元となるboot.imgを端末に送ります。

3.2.2.2. Magiskによるimageの作成

端末からリリースページにアクセスしてapkを落としてきて入れます。
Storeにも似たようなのがあるようなのですが、なんか入っていても怖いので上記の公式から入れましょう。
本稿執筆時(2023/03/05)の最新版はv25.2です。

以下、表示は日本語化しています。またスクリーンショットは横位置操作の物です。
また、スリープに入るとUSB接続が切断されて面倒なので開発者向けオプションから「スリープモードにしない」を設定しておくと作業しやすいと思います。

(1) Magiscの「Install」を押す

インストール開始画面

(2) 「パッチするファイルの選択」を押す

パッチファイルの選択

(3) ファイル選択ダイアログ左上隅のハンバーガーメニュー(三 ぽいとこ)を押す

ファイル選択(続き1)

(4) 左端のメニューを下にスクロールし「QX1050」を選択

ファイル選択(続き2)

(5) 元の画面に戻り、右上隅の「はじめる」を押す

インストールの実行

(6) 完成

完成後のログ表示

ここで出来たmagisk_patched~のファイルを使用します。

3.2.2.3. Magiskで作成したイメージの書き込み

先ほど作成したパッチを当てたイメージをUbuntu側にダウンロードし、bootloaderを起動しbootを更新します。
(ファイル名は書く環境やバージョンで異なるかもしれません)。

adb pull /sdcard/Download/magisk_patched-25200_G3Cvh.img
adb reboot bootloader
sudo fastboot flash boot ./magisk_patched-25200_G3Cvh.img
sudo fastboot reboot

adb reboot時に接続が切れるので、usbipdでの再接続を忘れないように。
再起動後、Magiskのアプリを再度起動させ、Magiskがインストールされたことを確認します。
このとき、スーパーユーザーとモジュールのタブが無効になっていないことを確認してください。

3.2.3. EDLによるバックアップ

ここまでの準備が出来たら、EDLを使ってパーティションをバックアップします。
まずはQX1050をEDLモードにします。

adb reboot edl

画面は転倒しませんが、power LEDも点灯しない状態になります。
それでも、USBデバイスとしては接続されるので、usbipdで再度接続します。
接続が完了したら以下でバックアップを行います。

sudo edl r persist persist_backup.img
sudo edl r modemst2 modemst2_backup.img
sudo edl r modemst1 modemst1_backup.img
sudo edl r fsc fsc_backup.img
sudo edl r fsg fsg_backup.img

完了したら電源ボタンを10秒ぐらい長押しすると再起動します。

3.3. Ubuntu Touchの取得

リポジトリからビルド済みのarchiveをダウンロードします。
展開するとoutという名前のディレクトリが出来ます。

ビルドも試してみたんですが、途中でなんか失敗していた。
ログをザーッと見た感じではCUDA7とか見えたので、WSL環境だと古いcuda入れるの無理なので多分ダメかなーということで今回は避けています。

3.4. Ubuntu Touchのインストール

3.4.1 bootloaderのunlock

QX1050は多分unlockされているので必要ないはず。
bootloader画面でunlockになっていなかったらunlockしてください。

sudo adb reboot bootloader
sudo adb flashing unlock

3.4.2 インストールその1

bootloaderを立ち上げて - userdataのフォーマット - recovery.imgの書き込み

を行います。完了したらbootloaderを再起動してください。

adb reboot bootloader
sudo fastboot format:ext4 userdata
sudo fastboot --set-active=a
sudo fastboot flash recovery out/recovery.img
sudo fastboot reboot fastboot

reboot後、fastbootの画面が変わります。

3.4.3 インストールその2

system.img, boot.img, tdbo.imgを書き込みます。

sudo fastboot flash system_a out/system.img
sudo fastboot flash boot_a out/boot.img
sudo fastboot flash dtbo_a out/dtbo.img
sudo fastboot reboot

「powerd by Android 」と表示されるので焦りましたが、Ubuntu Touchが起動します。
イエーイ。

4. インストール後

インストール後にいくつか挙動が変なところがあったので対応しました。

4.1. USBが認識しない

なんかちゃんと認識しない。
とりあえず、再起動して[デバイスマネージャー] > [ユニバーサルシリアルバスデバイス] > [ADB Interface]
のプロパティからドライバを更新したら認識するようになりました。

デバイス名は`usbipdではMTP, ADB Interfaceにlsusb`ではGoogle Inc. Genericに変わっていました。
接続時に(adbと通信するタイミングで)USBデバッグを許可するかどうかのポップアップが出るので、そこでAllowを押せばadbで通信できます。
WSLで上手くつながらない場合はsudo でadb サーバを再起動するとポップアップが出ます。   とりあえずそれで、最低限は出来そう。

5. まとめ

「変態端末 Pro1-X(QX1050), Ubuntu Touch 使えるよ!」って聞いて購入したのですが、メーカーが用意していたのがちょっと前のQX1000用のインストーラーだったときは、「オイ!」って思いましたが、コミュニティの書き込みを追うことで何とかインストールが出来ました。
ビルドはそのうち出来るようにしようかな...。
資料が結構色んなところに飛ぶので、本エントリーは上から順にやっていくことで比較的迷わずに実行できるのでは無いかとおもいます。
あと、環境がWSL2のUbuntu20.04でちょっと変かもしれないので、sudoのところは人によっては無くても良いのかもしれません。

さあ、ありがたがれ、未来の自分