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
- 如果所用电脑内存小于24G,可能会因内存不足编译报错。请参考 《https://blog.csdn.net/weixin_35723192/article/details/132008500》。
- 编译工具未安装全,也会提示编译错误哦。
总结
WSL2 子系统终究是子系统,编译 uboot kernel openwrt 还可以胜任;如果编译 Android 和 Linux rootfs 则受系统和 CPU 限制,建议使用 Ubuntu PC或者服务器。
相关文章:
WSL2Linux 子系统(五)
WLS2Linux 子系统编译 Android 上一篇文章中讲解 《WLS2Linux 子系统迁移/恢复》,从C盘迁移到D盘。既可以防止C盘爆红,又可以释放磁盘空间。有更大存储空间意味大有可为,比如说编译Android系统。本文则以开源 firefly Android10代码为例简单…...

java 企业工程管理系统软件源码 自主研发 工程行业适用 em
工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...
IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?
KK集团发起了其IPO之路上的第三次冲击。 近日,KK集团更新了招股书,继续推进港交所上市进程,此前两次上市搁置后终于有了新动向。从更新内容来看,KK集团招股书披露了公司截至2023年一季度的最新业绩,交出一份不错的“成…...

【iOS】RunLoop
前言-什么是RunLoop? 什么是RunLoop? 跑圈?字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…...

数据包传输方式:单播、多播、广播、组播、泛播
数据包传输方式 单播、多播、广播、组播、泛播 网络中假设X代表所有的机器,Y代表X中的一部分机器,Z代表一组机器,1代表一台机器,那么 1:1 那就是单播;1:Y 那就是多播;1࿱…...

WebRTC基础知识
文章目录 基础概念NAT (Network Address Translation) 打洞STUN(Session Traversal Utilities for NAT)基于STUN协议的DDoS反射攻击 # TODO TURN(Traversal Using Relays around NAT)ICE(Interactive Connectivity Est…...

积累常见的有针对性的python面试题---python面试题001
1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…...
在springboot使用websocket时mapper无法注入
直接上代码 package cn.ujoined.combined.utils;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Componen…...

前端加密与解密的几种方式
1.base64加密方式 1. base64是什么? Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号""、"/"一共64个字符的字符集,(另加一个“”,实际是65个字符,至于…...

详解Spring Bean的生命周期
详解Spring Bean的生命周期 Spring Bean的生命周期包括以下阶段: 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进…...
详解Shell 脚本中 “$” 符号的多种用法
通常情况下,在工作中用的最多的有如下几项: $0:Shell 的命令本身 1到9:表示 Shell 的第几个参数 $? :显示最后命令的执行情况 $#:传递到脚本的参数个数 $$:脚本运行的当前进程 ID 号 $*&#…...
Redis如何实现Session存储
在Redis中实现Session存储,主要有两种方式:使用Spring Session和手动存储。 使用Spring Session:Spring Session是Spring框架提供的一个模块,用于简化Session管理,并将Session数据存储到外部数据存储中,如Redis。使用Spring Session,你只需要在Spring Boot项目中添加相应…...

安防视频监控汇聚EasyCVR平台接入Ehome告警,公网快照不显示的原因排查
智能视频监控汇聚平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,视频监控管理平台…...
【Springboot】@ComponentScan 详解
文章目录 ComponentScanComponentScan ANNOTATION 和 REGEXComponentScan CUSTOMComponentScan ASSIGNABLE_TYPE ComponentScan ComponentScan 是 Spring 框架中的一个注解,用于自动扫描和注册容器中的组件。 使用 ComponentScan 注解可以告诉 Spring 在指定的包或…...
flask-----信号
安装: flask中的信号使用的是一个第三方插件,叫做blinker。通过pip list看一下,如果没有安装,通过以下命令即可安装blinker: pip install blinker flask其中有内置的信号 template_rendered _signals.signal(temp…...

10_Vue3 其它的组合式API(Composition API)
Vue3 中的其它组合式API 1.shallowReactive 与 shallowRef 2. readonly 与 shallowReadonly 3.toRaw 与 markRaw 4.customRef 5.provide 与 inject 6.响应式数据的判断...

COCOS项目运行的时候图片模糊的原因
1、首先。用X坐标来分析,如果size*Anchor Position有小数,如上图57*0.5667695.5。这样就会导致x模糊。如果y同样计算结果包含小数,那么y也会模糊。xy同时模糊的情况是最模糊的。 2、如果当前node没有问题,那么就要检查上级node是…...

Python中搭建IP代理池的妙招
在Python的爬虫世界里,你是否也想搭建一个功能强大的IP代理池,让你的爬虫无忧无虑地畅游各大网站?今天,我就来教你使用Scrapy框架搭建IP代理池,让你的爬虫更加智能、高效!跟着我一步一步来,轻松…...
学习pytorch 2
学习pytorch 2 2. dataset实战代码数据集 2. dataset实战 B站小土堆视频 代码 from torch.utils.data import Dataset from PIL import Image #import cv2 import osclass MyData(Dataset):def __init__(self, root_dir, label_dir):self.root_dir root_dirself.label_dir …...
elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言方法1方法2结论 前言 写项目的时候,遇到需要在动态表单中,将同一级输入框输入的内容计算出来,并动态显示,发现c…...
linux设备重启后时间与网络时间不同步怎么解决?
linux设备重启后时间与网络时间不同步怎么解决? 设备只要一重启,时间又错了/偏了,明明刚刚对时还是对的! 这在物联网、嵌入式开发环境特别常见,尤其是开发板、树莓派、rk3588 这类设备。 解决方法: 加硬件…...

Ubuntu 安装 Mysql 数据库
首先更新apt-get工具,执行命令如下: apt-get upgrade安装Mysql,执行如下命令: apt-get install mysql-server 开启Mysql 服务,执行命令如下: service mysql start并确认是否成功开启mysql,执行命令如下&am…...

论文笔记:Large Language Models for Next Point-of-Interest Recommendation
SIGIR 2024 1 intro 传统的基于数值的POI推荐方法在处理上下文信息时存在两个主要限制 需要将异构的LBSN数据转换为数字,这可能导致上下文信息的固有含义丢失仅依赖于统计和人为设计来理解上下文信息,缺乏对上下文信息提供的语义概念的理解 ——>使用…...
链结构与工作量证明7️⃣:用 Go 实现比特币的核心机制
链结构与工作量证明:用 Go 实现比特币的核心机制 如果你用 Go 写过区块、算过哈希,也大致理解了非对称加密、数据序列化这些“硬核知识”,那么恭喜你,现在我们终于可以把这些拼成一条完整的“区块链”。 不过别急,这一节我们重点搞懂两件事: 区块之间是怎么连接成“链”…...
uni-app 项目支持 vue 3.0 详解及版本升级方案?
uni-app 支持 Vue 3.0 详解及升级方案 一、uni-app 对 Vue 3.0 的支持现状 uni-app 从 3.0 版本 开始支持 Vue 3.0,主要变化包括: 核心框架升级: 基于 Vue 3.0 的 Composition API 和 Options API 双模式支持提供 vueuse/core 等组合式 API…...

【Ragflow】27.RagflowPlus(v0.4.1):小版本迭代,问题修复与功能优化
概述 RagflowPlus v0.4.0 在发布后,收到了积极的反馈,同时也包含一些问题。 本次进行一轮小版本更新,发布 v0.4.1 版本,对已知问题进行修复,并对部分功能进行进一步优化。 开源地址:https://github.com/…...
AI 时代下语音与视频伪造的网络安全危机
引言 在人工智能技术的推动下,语音合成、视频生成等技术取得了突破性进展,Deepfake、AI 语音克隆等工具让语音和视频伪造变得愈发简单且逼真。这些技术在娱乐、影视等领域带来便利的同时,也被不法分子利用,引发了一系列网络安全问…...
使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
Nuget下载之后记得要先引用下面的 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" <!-- 鼠标事件 --> <i:EventTrigger EventName"MouseEnter"/> <!-- 鼠标进入 --> <i:EventTrigger EventName"MouseLeave"/&g…...
Java编程中常见的条件链与继承陷阱
格式错误的if-else条件链 典型结构与常见错误模式 在Java编程中,if-else条件链是一种常见的多条件处理模式,其标准结构如下: if (condition1) {// 处理逻辑1 } else if (condition2) {// 处理逻辑2 } else...

window下配置ssh免密登录服务器
window下配置ssh免密登录服务器 本地windows远程登录我的ssh服务器10.10.101.xx服务器,想要每次都免密登录这个服务器. 记录下教程,防止后期忘记,指导我实现这个过程。 教程 二、实践步骤:Windows 上配置 SSH 免密登录 2.1 确…...