当前位置: 首页 > news >正文

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 -y

如有遗漏或者未安装错误提示可参考《WLS2Linux 子系统(三)》 。
错误提示如下,需要安装 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

编译 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.koLD [M]  drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.koLD [M]  drivers/net/wireless/marvell/mwifiex/mwifiex.koImage:  resource.img (with rk3288-evb-rk808-linux.dtb logo.bmp logo_kernel.bmp) is readyImage:  boot.img (with Image  resource.img) is readyImage:  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或者服务器。

http://www.lryc.cn/news/116020.html

相关文章:

  • java 企业工程管理系统软件源码 自主研发 工程行业适用 em
  • IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?
  • 【iOS】RunLoop
  • 数据包传输方式:单播、多播、广播、组播、泛播
  • WebRTC基础知识
  • 积累常见的有针对性的python面试题---python面试题001
  • 在springboot使用websocket时mapper无法注入
  • 前端加密与解密的几种方式
  • 详解Spring Bean的生命周期
  • 详解Shell 脚本中 “$” 符号的多种用法
  • Redis如何实现Session存储
  • 安防视频监控汇聚EasyCVR平台接入Ehome告警,公网快照不显示的原因排查
  • 【Springboot】@ComponentScan 详解
  • flask-----信号
  • 10_Vue3 其它的组合式API(Composition API)
  • COCOS项目运行的时候图片模糊的原因
  • Python中搭建IP代理池的妙招
  • 学习pytorch 2
  • elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数
  • 嵌入式面试5 -makefile shell
  • 获40余家主机厂青睐,这家OTA「吸金王」完成超亿元B2轮融资!
  • CGI, FastCGI, WSGI, uWSGI, uwsgi分别是什么?
  • Android T 窗口层级相关的类(更新中)
  • 【云原生】深入掌握k8s中Pod和生命周期
  • openKylin+KingbaseES+Nginx安装
  • lc1.两数之和
  • c# 初始化列表,并给列表里面所有的元素进行初始化
  • Java笔记(三十):MySQL(上)-- 数据库、MySQL常用数据类型、DDL、DML、多表设计
  • SQL笔记-正态分布函数(二)
  • 【LeetCode】数据结构题解(12)[用栈实现队列]