WLS2Linux サブシステムは Android をコンパイルします
前回の記事では「WLS2Linux サブシステムの移行・復元」CドライブからDドライブへの移行について説明しました。C ディスクの普及を防ぐだけでなく、ディスク領域を解放することもできます。より大きなストレージ容量があるということは、Android システムのコンパイルなど、やるべきことがたくさんあることを意味します。この記事では、オープンソースの Firefly Android10 コードを例として、コンパイル プロセスを簡単に説明します。
提示:
コンパイル環境の依存関係がありません。「WLS2Linux サブシステム (3)」を参照してください。
1. コンパイルの準備
1.1 Android ソースコードを入手する
注意:下载或解包源码时,请勿使用 root 权限操作。
firefly の公式 Web サイトにアクセスして SDK を選択し、ローカルの解凍場所にダウンロードすると、それが git ミラー ウェアハウスになります。
# 还原源码
git checkout .
1.2 コンパイル依存パッケージのインストール
a) uboot コンパイルの依存関係
uboot コンパイル依存関係パッケージをインストールします。
sudo apt-get install gcc make device-tree-compiler gawk
インストールとコンパイルを行わない場合は、パッケージ、エラー メッセージ、および関連するプロンプトに依存する必要があります。「WLS2Linux サブシステム (3)」を参照してください。
b) カーネルコンパイルの依存関係
kenrel コンパイルの依存関係パッケージをインストールします。
sudo apt install gcc make bison cpio flex openssl libssl-dev liblz4-tool -y
インストール漏れやエラープロンプトがある場合は、「WLS2Linuxサブシステム(3)」を参照してください。
c) 回復依存関係パッケージをコンパイルする
回復コンパイル依存パッケージをインストールします。
sudo apt install expect g++ -y
インストール漏れやエラープロンプトがある場合は、「WLS2Linuxサブシステム(3)」を参照してください。
d) Android 依存関係パッケージをコンパイルする
Android コンパイルの依存関係をインストールします。
sudo apt install fakeroot unbuffer expect unzip libncurses5 libncurses5-dev -y
インストール漏れやエラープロンプトがある場合は、「WLS2Linuxサブシステム(3)」を参照してください。
エラーメッセージは以下の通り、curses5 をインストールする必要があります。
curses.h: No such file or directory
Curses5をインストールします。
sudo apt-get install libncurses5 libncurses5-dev
e) Python 環境変数をインストールする
/bin/bash: 行 1: python: 未找到命令
Android ソースコードのコンパイルは python2 環境に依存しますが、
sudo apt install python2
cd /usr/bin
sudo ln -s python2.7 python
2. ソースコードをコンパイルする
2.1 ユーブート
uboot と MiniLoader.bin をコンパイルします
cd ~/linux/u-boot
# 编译 rk3568
./make.sh rk3568
# 编译 rk3288
./make.sh rk3288
......
load addr is 0x8400000!
pack input bin/rk32/rk3288_tee_ta_v2.01.bin
pack file size: 734592(717 KB)
crc = 0x69d0e887
trustos version: Trust os
pack ./trust.img success!
pack trust okay! Input: /home/fish/linux/rkbin/RKTRUST/RK3288TOS.ini
/home/fish/linux/u-boot
pack loader ok.(rk3288_loader_v1.09.263.bin)(0.02)
pack loader okay! Input: /home/fish/linux/rkbin/RKBOOT/RK3288MINIALL.ini
# 编译完成后生成 uboot.img 和 rk3288_loader_v1.09.263.bin
2.2 カーネルをコンパイルする
cd ~/linux/kernel
# 编译 rk3568 为 64bit A55,可选用 aarch64
make ARCH=arm rockchip_linux_defconfig -j4
make ARCH=arm rk3568-evb2-lp4x-v10.img -j16
# 编译 rk3288 为 32bit A17, 须使用 arm
make ARCH=arm rockchip_linux_defconfig -j4
make ARCH=arm rk3288-evb-rk808-linux.img -j16
......
LD [M] drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
LD [M] drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.ko
LD [M] drivers/net/wireless/marvell/mwifiex/mwifiex.ko
Image: resource.img (with rk3288-evb-rk808-linux.dtb logo.bmp logo_kernel.bmp) is ready
Image: boot.img (with Image resource.img) is ready
Image: zboot.img (with zImage resource.img) is ready
#编译完成后生成 4个镜像文件
# boot.img ---> 内核完整镜像
# kernel.img ---> 内核
# resource.img ---> logo 和 dtb
# zboot.img --> 最小内核
2.3 Android をコンパイルする
- 環境変数を構成する
source build/envsetup.sh
lunch rk3568_r-userdebug
- アンドロイドをコンパイルする
# 一键编译 uboot kernel Android
./build.sh -UKAu
# 编译完成自动生成刷机镜像,漫长等待过程,此处省略N小时
2.4 フラッシュ
2.4.1 イメージ ファイルとパーティション テーブルの表示
ls rockdev/rk3568_r/
baseparameter.img boot.img dtbo.img MiniLoaderAll.bin parameter.txt pcba_whole_misc.img resource.img uboot.img vbmeta.img
boot-debug.img config.cfg logo.img misc.img pcba_small_misc.img recovery.img super.img update.img
2.4.2 点滅
フラッシュ ツールを使用してアップグレード パッケージをフラッシュするか、Linux フラッシュ用の rkflash.sh スクリプトを使用できます。
# 刷 升级包
./rkflash.sh updateimg
WSL2 子系统无法执行 mount 和 chroot 命令,故需要拷贝到 Windows 目录,使用相关工具刷机。
2.5 アップグレード後に以前のドライバーをロードできなかった
エラーメッセージ:
wlan_mt7668_sdio: version magic '4.19.193 SMP mod_unload aarch64' should be '5.10.66 SMP mod_unload aarch64'
現在のシステムカーネルとアップグレード前のバージョンが異なるため、ドライバーをロードできません。この問題の解決策は、カーネルを 4.19.193 バージョンにフラッシュすることです。
チップ
- 使用されているコンピューターのメモリが 24G 未満の場合、メモリ不足によりコンパイル エラーが報告される場合があります。「https://blog.csdn.net/weixin_35723192/article/details/132008500」を参照してください。
- コンパイル ツールが完全にインストールされていない場合は、コンパイル エラーも表示されます。
要約する
WSL2 サブシステムは結局のところサブシステムであり、uboot カーネル openwrt のコンパイルも可能ですが、Android および Linux の rootfs をコンパイルする場合は、システムと CPU によって制限されるため、Ubuntu PC またはサーバーを使用することをお勧めします。