LineageOSのビルド(ビルド環境構築からビルドまで)
はじめに
LineageOSを野良ビルドするには、ベアメタルのLinux(Ubuntuが推奨)で構築するとすんなり環境境構築できます。AndoroidOSの開発でもそちらが推奨されています。
自分は手元のThinkpad L14Gen4(AMD Ryzen PRO7 7730U(8コア/16スレッド)+メモリ64GB+1TBSSD)のWindows11で開発したかったので、Windows11+WSL2+Ubuntu24.04LTSで苦労しつつも、なんとかビルドが完了するところまでできました。
また、LineageOSのビルド環境は下記のハードウェア要件が推奨されているので、昨今のノートPCで開発環境を構築するのは、ハイエンドのノートPCが必要です。
x86_64アーキテクチャー
300GB以上の空き容量のストレージ ※ビルドすると、300GB弱使いました
メインメモリ32GB以上(LineageOS 18以上の場合) ※メモリスロット非搭載のオンボードメモリの薄型ノートPCではほぼ絶望的。買えても30万前後
結論
公式ではUbuntu24.04LTSでのビルドについては書かれていないが、ビルドできた
素直にベアメタルのUbuntu24.04LTSが環境構築が楽。WSL2のLinuxでUSBデバイス(OnePlus7)を認識させるのに癖がある
ビルドは時間かかるので、他のタスクと別に実施するのが吉。素直に公式パッケージを使うのもあり
LineageOSのリポジトリの初回クローンには数時間かかり、ビルドは初回10時間以上、以後は差分ビルド
Windows11+WSL2+Ubuntu24.04LTSのセットアップ
様々なところで、説明されているのでUbuntu24.04LTSのインストールまでは省略する。普通に、管理者権限でPowerShellコンソールを開き、「wsl install -d Ubunt-24.04」と入力してすんなりインストールできる。
ここでは主にAndoroidOS(LineageOS21)のビルドするための環境構築に必要な部分について記述する。
WSL2の設定
1.ハードウェアリソースの設定
Ubuntuに割り当てる最大メモリ容量(今回は48GBとした)とスワップの無効化する。下記のファイルを作成した
[c:\User\$UserName\.wslconfig]
[wsl2]
memory=48GB
swap=0
2.WSL2にUSBデバイスを接続する
usbipd-winのWindowsパッケージをインストールし、usbipdの各種コマンドでUSBデバイスを手動でアタッチする。この部分でPowerShellコンソールとUbuntuのBashコンソールを行き来するので非常に煩わしく、面倒な部分である
2-1. USBIPD-WINのWindowパッケージをインストールする
PowerShellコンソールを管理者権限で開き下記のコマンドを実行する
Windows11を再起動し、タスクマネージャーにて下記のサービスが起動していることを確認する
usbipd
2-2. (オプション)サードパーティファイアーウォールやWindows DefenderのファイアーウォールでTCP3240をincomingコネクションを許可する
usbipdはネットワークサービスとして提供されているため、TCP3240 をオープンにする
2-3, ターミナルを開いて、PowerShellコンソールとUbuntu24.04 LTSを起動する
ターミナルを開き、PowerShellコンソールを管理者権限で開く
Ubuntuを起動するため、ターミナルからUbuntu24.04のBashコンソールを開いて、Ubuntuを起動する
ここから、管理者権限のPowerShellコンソールでのコマンド実行では[PowerShell]とし、Ubuntuコンソールでのコマンド実行は[Ubuntu]と記載する
[PowerShell]
wingen list
usbipd list
[Ubuntu]
demsg | tail -40
usbls
lsmod
2-4. OnePlus7とPCをUSBケーブルで接続し、WSL2にUSBデバイスを接続する
OnePlus7とPCをUSBケーブルで接続し、WindowsのデバイスマネージャーのポータブルデバイスでOnePlus7が表示されていることを確認する
Windowsのタスクマネージャーで「adb.exe」が実行中の場合、タスクを終了する
Ubuntu側でUSBデバイスが認識されていないことを確認する
[Ubuntu]
hnishi@thpdl14ge4:~/workdir/oneplus7/android/lineage$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
hnishi@thpdl14ge4:~/workdir/oneplus7/android/lineage$
usbipコマンドでWSL2にUSBデバイスを認識させる
usbipd list
usbipd bind --busid [bus-no]
subipd attach --wsl --busid [bus-no]
[PowerShell]
PS C:\Users\nissy> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-2 22d9:2765 GM1901, ADB Interface Not shared
Persisted:
GUID DEVICE
PS C:\Users\nissy> usbipd bind --busid 1-2
PS C:\Users\nissy> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-2 22d9:2765 GM1901, ADB Interface Shared
Persisted:
GUID DEVICE
PS C:\Users\nissy> usbipd attach --wsl --busid 1-2
usbipd: info: Using WSL distribution 'Ubuntu-24.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.30.16.1 to reach the host.
PS C:\Users\nissy>
ubuntuのBashコンソールでUSBデバイスが認識されたことを確認する
dmesg
lsusb
[Ubuntu]
hnishi@thpdl14ge4:~/workdir/oneplus7/android/lineage$ dmesg | tail -20
[131099.141382] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[131099.143144] Failed to connect to bus: No such file or directory
[131099.389393] systemd-journald[38]: Received client request to flush runtime journal.
[131100.643515] WSL (2): Creating login session for hnishi
[131115.942231] Exception:
[131115.942236] Operation canceled @p9io.cpp:258 (AcceptAsync)
[131182.022214] WSL (2): Creating login session for root
[131183.807674] systemd-journald[58]: Time jumped backwards, rotating.
[131841.715842] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
[131841.715849] vhci_hcd vhci_hcd.0: devid(65538) speed(3) speed_str(high-speed)
[131841.715938] vhci_hcd vhci_hcd.0: Device attached
[131842.041882] usb 1-1: new high-speed USB device number 2 using vhci_hcd
[131842.182482] usb 1-1: SetAddress Request (2) to port 0
[131842.222126] usb 1-1: New USB device found, idVendor=22d9, idProduct=2765, bcdDevice= 4.14
[131842.222136] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[131842.222139] usb 1-1: Product: GM1901
[131842.222142] usb 1-1: Manufacturer: OnePlus
[131842.222144] usb 1-1: SerialNumber: b95b459a
[131922.256480] systemd-journald[58]: Time jumped backwards, rotating.
hnishi@thpdl14ge4:~/workdir/oneplus7/android/lineage$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 22d9:2765 OPPO Electronics Corp. Oppo N1
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
hnishi@thpdl14ge4:~/workdir/oneplus7/android/lineage$
あああ
あああ
あああ