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…...
嵌入式面试5 -makefile shell
2、 如果有一个简单的helloworld项目目录如下: tree helloworld helloworld |– file2.h |– file1.cpp |– file2.cpp 请编写一个Makefile文件。 答: TARGET helloworld CXX g COMPILE : $(COMPILE) file1.cpp COMPILE : $(COMPILE) file2.cpp OBJE…...
获40余家主机厂青睐,这家OTA「吸金王」完成超亿元B2轮融资!
继今年4月获得上汽集团旗下尚颀资本及其合作方山高投控的投资后,近日上海艾拉比智能科技有限公司(以下简称“艾拉比”)正式完成总额过亿元的B2轮融资,新的投资方为聚卓资本、老股东国科新能继续增持,势能资本持续担任独…...
CGI, FastCGI, WSGI, uWSGI, uwsgi分别是什么?
CGI 1、通用网关接口(Common Gateway Interface/CGI),CGI描述了服务器(nginx,apache)和请求处理程序(django,flask,springboot web框架)之间传输数据的一种标准. 2.所有bs架构软件都是遵循CGI协议的 3.一…...
Android T 窗口层级相关的类(更新中)
窗口在App端是以PhoneWindow的形式存在,承载了一个Activity的View层级结构。这里我们探讨一下WMS端窗口的形式。 可以通过adb shell dumpsys activity containers 来看窗口显示的层级 窗口容器类 —— WindowContainer类 /*** Defines common functionality for c…...
【云原生】深入掌握k8s中Pod和生命周期
个人主页:征服bug-CSDN博客 kubernetes专栏:kubernetes_征服bug的博客-CSDN博客 目录 1 什么是 Pod 2 Pod 基本操作 3 Pod 运行多个容器 4 Pod 的 Labels(标签) 5 Pod 的生命周期 1 什么是 Pod 摘取官网: Pod | Kubernetes 1.1 简介 Pod 是可以在 …...
openKylin+KingbaseES+Nginx安装
openKylin开放麒麟开启ssh 一、查看ssh服务是否开启。 终端输入命令:sudo ps -e |grep ssh ,只显示如下内容则证明未安装ssh服务。 2127 ? 00:00:00 ssh-agent若显示如下内容则证明ssh服务已开启。 1657 ? 00:00:00 ssh-agent 2349 ?…...
lc1.两数之和
暴力解法:两个for循环,寻找和为target的两个数的索引 时间复杂度:O(n2) 空间复杂度:O(1) 哈希表:遍历数组,将nums数组的数和索引分别存储在map的key和value中,一边遍历,一边寻找是…...
c# 初始化列表,并给列表里面所有的元素进行初始化
Enumerable.Repeat 方法是用于生成一个包含指定元素重复若干次的序列。它接受两个参数,第一个参数是要重复的元素,第二个参数是重复次数。 下面是 Enumerable.Repeat 方法的用法和示例: using System; using System.Collections.Generic; u…...
Java笔记(三十):MySQL(上)-- 数据库、MySQL常用数据类型、DDL、DML、多表设计
一、数据库 0、MySQL安装,IDEA配置MySQL 用MySQL installer for windows(msi)MySQL默认安装位置:C:\Program Files\MySQL\MySQL Server 8.0配置环境变量使用前先确保启动了mysql服务my.ini位置:C:\ProgramData\MySQL…...
SQL笔记-正态分布函数(二)
在Oracle数据库中,并没有直接提供计算正态分布函数(累积分布函数)的内置函数。不过,你可以使用PL/SQL编程语言来实现一个自定义的正态分布函数。下面是一个简单的示例: CREATE OR REPLACE FUNCTION normdist(x NUMBER…...
wordpress缓存接口数据/直接打开百度
stitutestand constitute con 一起,共同,全部 stitutestand 站在一起 v. 组成,构成;成立,设立 A constitute B B is made up of A B is composed of A 注意这三组短语的异同 另外,它的两…...
设计素材网站会员/成人短期电脑培训班学费
一.内置运算符 1关系运算符 2.算术运算符 3.逻辑运算符 4.复杂类型函数 5.复杂类型函数应用 转载于:https://www.cnblogs.com/yszd/p/11128683.html...
企业做网站认证有哪些好处/长沙关键词优化推荐
前提: 数仓中的维度,事实表技术提倡用代理键代替实体键,下面我们讲解下代理键的概念,以及Hive中如何生成代理键 (自增列) 代理键 : 维度表中必须有一个能够唯一标识一行记录的列,通过该列维护维度表与事实表…...
白色网站源码/网站排名优化培训电话
public static代表是静态方法,可以不通过创建所属对象进行访问;直接public代表是非静态方法,需要先new一个对象进行访问。...
网站建设 付款方式/已备案域名交易平台
一. 数字测试 格式:n1 -op n2 测试操作op: eq/ne/le/ge/lt/gt --> 等于/不等于/小于等于/大于等于/小于/大于 1. 数字比较可以使用特殊的(())操作符,用法更接近于C语言,见数字测试。 二. 字符串测试 s1 s2 #s1与s2是否相同…...
京东不让卖网站制作么/黄页88网站推广效果
第四章 文件和目录 20.读目录 回顾:对于一个目录,r权限表示在该目录下可以执行ls命令,即查看目录内容;w权限表示用户可以在该目录下创建、修改、删除文件;x目录表示用户能否进入该目录,即能不能cd该目录。…...