WSL2Linux 子系统(五)

WLS2Linux 子系统编译 Android

上一篇文章中讲解 《WLS2Linux 子系统迁移/恢复》,从C盘迁移到D盘。既可以防止C盘爆红,又可以释放磁盘空间。有更大存储空间意味大有可为,比如说编译Android系统。本文则以开源 firefly Android10代码为例简单讲解编译过程。


提示:编译环境依赖缺失,可参考《WLS2Linux 子系统(三)》 。

文章目录

  • WLS2Linux 子系统编译 Android
  • 1. 编译准备
    • 1.1 获取 Android 源码
    • 1.2 编译依赖包安装
      • a) uboot 编译依赖包
      • b) kernel 编译依赖包
      • c) 编译 recovery依赖包
      • d) 编译 Android依赖包
  • 2. 编译源码
    • 2.1 uboot
    • 2.2 编译 kernel
    • 2.3 编译Android
    • 2.4 刷机
      • 2.4.1 查看镜像文件以及分区表
      • 2.4.2 刷机
    • 2.5 升级后以前驱动无法加载
  • Tips
  • 总结


1. 编译准备

1.1 获取 Android 源码

注意:下载或解包源码时,请勿使用 root 权限操作。
可以去 firefly 官网扒一扒SDK,下载到本地解压后为 git镜像仓库。

# 还原源码
git checkout .

1.2 编译依赖包安装

a) uboot 编译依赖包

安装 uboot 编译依赖包。

sudo apt-get install gcc make device-tree-compiler gawk

如不安装编译需要依赖包,报错提示以及相关提示可参考《WLS2Linux 子系统(三)》 。

b) kernel 编译依赖包

安装 kenrel 编译依赖包。

sudo apt install gcc make bison cpio flex openssl libssl-dev liblz4-tool -y

如有遗漏或者未安装错误提示可参考《WLS2Linux 子系统(三)》 。

c) 编译 recovery依赖包

安装 recovery 编译依赖包。

sudo apt install expect g++ -y

如有遗漏或者未安装错误提示可参考《WLS2Linux 子系统(三)》 。

d) 编译 Android依赖包

安装 Android 编译依赖包。

sudo apt install fakeroot unbuffer expect unzip libncurses5 libncurses5-dev zip -y

如有遗漏或者未安装错误提示可参考《WLS2Linux 子系统(三)》 。

  • 安装 curses5。
    错误提示如下,需要安装 curses5。
curses.h: No such file or directory

命令安装 curses5。

sudo apt-get install libncurses5 libncurses5-dev
  • 安装 zip
    错误提示如下,需要安装 zip。
bash: line 1: zip: command not found
sbox command (zip --temp-path ${TMPDIR:-/tmp} external/guice/lib/build/munge.jar -O out/soong/.temp/sbox156434698/guice_munge.srcjar -d MungeTask.java) failed with err "exit status 127"

命令安装 zip。

sudo apt-get install zip

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

编译 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 编译 kernel

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

  • 编译Android
# 一键编译 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 版本内核。

Tips

  1. 如果所用电脑内存小于24G,可能会因内存不足编译报错。请参考 《https://blog.csdn.net/weixin_35723192/article/details/132008500》。
  2. 编译工具未安装全,也会提示编译错误哦。

总结

WSL2 子系统终究是子系统,编译 uboot kernel openwrt 还可以胜任;如果编译 Android 和 Linux rootfs 则受系统和 CPU 限制,建议使用 Ubuntu PC或者服务器。

你可能感兴趣的:(#,WSL2Linux,Linux,Windows,Linux)