WSL2Linux サブシステム (5)

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 バージョンにフラッシュすることです。

チップ

  1. 使用されているコンピューターのメモリが 24G 未満の場合、メモリ不足によりコンパイル エラーが報告される場合があります。「https://blog.csdn.net/weixin_35723192/article/details/132008500」を参照してください
  2. コンパイル ツールが完全にインストールされていない場合は、コンパイル エラーも表示されます。

要約する

WSL2 サブシステムは結局のところサブシステムであり、uboot カーネル openwrt のコンパイルも可能ですが、Android および Linux の rootfs をコンパイルする場合は、システムと CPU によって制限されるため、Ubuntu PC またはサーバーを使用することをお勧めします。

おすすめ

転載: blog.csdn.net/weixin_35723192/article/details/132020181