LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/

源码下载

LineageOS官网:https://lineageos.org/

LineageOS源码 github 地址:https://github.com/LineageOS/android

LineageOS源码国内镜像地址:https://mirrors.tuna.tsinghua.edu.cn/help/lineageOS/

源码大概需要150GB的硬盘空间,编译完成差不多300G
截图.png

1. 配置git

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

2. 安装 repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

3. 安装 Git LFS

sudo apt install git-lfs
git lfs install

4. 安装 Android SDK Platform-Tools

在 Linux 中配置 Android SDK Platform-Tools,可以按照以下步骤进行

4.1 下载 Android SDK Platform-Tools:

# cd 到存放 platform-tools 的目录
cd /mnt/case_sensitive
# 下载 platform-tools
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
# 解压 platform-tools
unzip platform-tools-latest-linux.zip

4.2 配置环境变量:

为了在任何地方都能使用 adb 和 fastboot 命令,你需要将 platform-tools 目录添加到你的 PATH 中。

编辑 ~/.bashrc 文件

nano ~/.bashrc

在文件末尾添加以下行

export PATH=$PATH:/mnt/case_sensitive/platform-tools

然后重新加载 .bashrc 文件

source ~/.bashrc

4.3 验证配置

你可以通过以下命令检查 adb 是否配置成功

adb version

测试连接设备,确保你的 Android 设备已经通过 USB 连接,并且启用了开发者模式和 USB 调试。

adb devices

这将列出已连接的设备。

5. 镜像设置

找到 repo 所在路径

which repo

编辑 repo

nano /home/cyrus/bin/repo

截图.png
可以看到repo会优先取环境变量中的REPO_URL,否则默认使用googlesource

Ctrl +X 退出nano

通过下面的脚本设置 REPO_URL 环境变量的值为清华大学镜像源,解决国内访问不了 googlesource 问题,并且修改 .gitconfig,把访问 LineageOS 仓库的 url 替换为使用清华大学镜像源。

add_mirrors.sh(设置镜像)

#!/bin/bashexport REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
echo "REPO_URL="$REPO_URL# 定义要添加的配置
config=$(cat <<EOF
[url "https://mirrors.tuna.tsinghua.edu.cn/git/git-repo"]insteadof = https://gerrit.googlesource.com/git-repo
[url "https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"]insteadof = https://review.lineageos.org/
[url "https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/"]insteadof = https://android.googlesource.com/
[url "https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/"]insteadof = https://github.com/LineageOS/
EOF
)# 检查配置是否已存在于 ~/.gitconfig
if grep -q "https://mirrors.tuna.tsinghua.edu.cn/git/git-repo" ~/.gitconfig; thenecho "URL替换已经存在,未进行重复添加。"
else# 如果配置不存在,添加到 ~/.gitconfigecho "$config" >> ~/.gitconfigecho "URL替换已添加到 ~/.gitconfig"
ficat ~/.gitconfig 

remove_mirrors.sh(移除镜像)

#!/bin/bashunset REPO_URL
echo "REPO_URL="$REPO_URL# 使用sed命令删除整个URL配置块,包括URL和相关的instedof行
sed -i '/\[url "https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/git\/git-repo"\]/,+1d' ~/.gitconfig
sed -i '/\[url "https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/git\/lineageOS\/"\]/,+1d' ~/.gitconfig
sed -i '/\[url "https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/git\/AOSP"\]/,+1d' ~/.gitconfig
sed -i '/\[url "https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/git\/lineageOS\/LineageOS"\]/,+1d' ~/.gitconfigecho "URL替换已从 ~/.gitconfig 中移除"cat ~/.gitconfig 

给脚本文件增加执行权限

chmod +x add_mirrors.sh remove_mirrors.sh

设置使用镜像
./add_mirrors.sh

6. 下载源码

创建目录

mkdir lineage-17.1

进入到 lineageos 目录

cd lineage-17.1

如果可正常访问 github,使用下面的命令初始化 repo

repo init -u https://github.com/LineageOS/android.git -b lineage-17.1 --git-lfs --depth=1

否则,使用清华大学镜像初始化 repo,并修改 default.xml

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-17.1 --git-lfs --depth=1\

最后,同步源码

repo sync

或者使用下面命令下载浅克隆的源码

repo sync --no-clone-bundle --current-branch --no-tags -j$(nproc)

这会浅克隆当前分支最新的 LineageOS 源码,节省下载时间和空间。

7. 解决 webview 同步失败问题

error: Unable to fully sync the tree
error: Checking out local projects failed.
Failing repos:
external/chromium-webview/prebuilt/arm
external/chromium-webview/prebuilt/arm64
external/chromium-webview/prebuilt/x86
external/chromium-webview/prebuilt/x86_64
Try re-running with "-j1 --fail-fast" to exit at the first error.
================================================================================
Repo command failed due to the following `SyncError` errors:
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_arm
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_arm64
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_x86
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_x86_64

从镜像地址同步 weview 一直失败

删除 chromium-webview/prebuilt

rm -rf external/chromium-webview/prebuilt/*

执行 remove_mirrors.sh 移除镜像,开启代理,重新从 github 同步就可以了。

repo sync --no-clone-bundle --current-branch --no-tags -j$(nproc)

8. 手动添加设备仓库

在 .repo/local_manifests 创建 wayne.xml,手动添加 wayne(小米 6x)的设备配置仓库。

执行 nano .repo/local_manifests/wayne.xml 命令

mkdir .repo/local_manifests
nano .repo/local_manifests/wayne.xml

配置 Device tree、Common tree、Kernel、Vendor 仓库

<manifest>
<remote  name="real_github"fetch="https://github.com" /><project name="LineageOS-MI-A2-MI-6X/android_device_xiaomi_wayne" path="device/xiaomi/wayne" remote="real_github" revision="lineageos-17.1"/>
<project name="LineageOS-MI-A2-MI-6X/android_device_xiaomi_sdm660-common" path="device/xiaomi/sdm660-common" remote="real_github" revision="lineageos-17.1"/>
<project name="LineageOS-MI-A2-MI-6X/android_kernel_xiaomi_sdm660" path="kernel/xiaomi/sdm660" remote="real_github" revision="master"/>
<project name="LineageOS-MI-A2-MI-6X/android_vendor_xiaomi_sdm660-common" path="vendor/xiaomi/sdm660-common" remote="real_github" revision="master"/>
<project name="LineageOS-MI-A2-MI-6X/android_vendor_xiaomi_wayne-common" path="vendor/xiaomi/wayne-common" remote="real_github" revision="master"/>
</manifest>

其中:

  • name=“GitHub 用户名/仓库名称”

  • path 是存放代码的位置。

Kernel:内核是操作系统的核心,负责硬件与软件的交互。Android 内核是基于 Linux 内核开发的,负责管理设备的资源和硬件驱动。

Device Tree:设备树是一种硬件描述文件,用来告诉操作系统设备的硬件布局,避免内核代码与具体硬件的紧耦合。设备树通常位于 device/ 目录中,包含设备特定的配置。

Common Tree:通用树包含多个设备共享的通用代码和配置。例如,某些设备共享相同的硬件平台(如 sm7250),这些配置放在 Common Tree 中,避免重复代码。

Vendor Tree:Vendor Tree 包含特定设备或硬件供应商(如 Qualcomm、Xiaomi)提供的专有二进制驱动程序、库和其他软件组件。这些组件是设备能够正确运行的关键部分,特别是涉及专有硬件(如调制解调器、相机、GPU等)的功能。

Vendor Tree 通常包含在 vendor/ 目录中,是设备厂商提供的闭源组件。与 Kernel 和 Device Tree 不同,它涉及硬件相关的二进制文件和库,而不是内核或硬件描述。

完成后,运行 repo sync 同步源码

repo sync --no-clone-bundle --current-branch --no-tags -j$(nproc)

或者手动去 clone 一下

git clone https://github.com/LineageOS-MI-A2-MI-6X/android_device_xiaomi_wayne.git device/xiaomi/wayne
git clone https://github.com/LineageOS-MI-A2-MI-6X/android_device_xiaomi_sdm660-common.git device/xiaomi/sdm660-common
git clone https://github.com/LineageOS-MI-A2-MI-6X/android_kernel_xiaomi_sdm660.git kernel/xiaomi/sdm660
git clone https://github.com/LineageOS-MI-A2-MI-6X/android_vendor_xiaomi_sdm660-common.git vendor/xiaomi/sdm660-common
git clone https://github.com/LineageOS-MI-A2-MI-6X/android_vendor_xiaomi_wayne-common.git vendor/xiaomi/wayne-common

代理设置

由于在编译过程需要连接 github 下载设备树和内核,所以需要先设置一下代理。

关于Linux下代理设置可以参考这篇文章。

设置缓存

创建缓存目录

mkdir -p /mnt/case_sensitive/ccache

把缓存配置添加到环境变量配置文件.bashrc结尾

cat >> ~/.bashrc <<EOF
# 使用缓存
export USE_CCACHE=1
# ccache文件路径
export CCACHE_EXEC=/usr/bin/ccache
# 设置缓存目录
export CCACHE_DIR=/mnt/case_sensitive/ccache
EOF

执行下面命令使配置生效

source ~/.bashrc

设置最大缓存空间为 50GB

ccache -M 50G

启用 ccache 的压缩功能,可以减少缓存文件所占用的磁盘空间

ccache -o compression=true

源码编译

1. 初始化编译环境

# 初始化编译环境
source build/envsetup.sh# 设置编译目标
# 如果本地没有设备仓库将会从LineageOS仓库中下载设备的Device tree和Kernel
breakfast wayne

2. 补充厂商文件

由于厂商文件是闭源的,而且版权原因不能直接放进去, Lineageos 没有直接提供厂商文件。

执行 breakfast 命令后如果提示缺少 vendor

In file included from build/make/core/config.mk:291:
In file included from build/make/core/envsetup.mk:266:
vendor/xiaomi/wayne-common/wayne-common-vendor.mk:782: error: _nic.PRODUCTS.[[device/xiaomi/wayne/lineage_wayne.mk]]: "vendor/xiaomi/wayne/wayne-vendor.mk" does not exist.
16:24:01 dumpvars failed with: exit status 1
In file included from build/make/core/config.mk:291:
In file included from build/make/core/envsetup.mk:266:
vendor/xiaomi/wayne-common/wayne-common-vendor.mk:782: error: _nic.PRODUCTS.[[device/xiaomi/wayne/lineage_wayne.mk]]: "vendor/xiaomi/wayne/wayne-vendor.mk" does not exist.
16:24:01 dumpvars failed with: exit status 1

根据错误提示可以通过以下2种方式之一补充对应的 vendor 文件

2.1 使用 TheMuppets 的厂商仓库

在 LineageOS 项目中,部分设备的厂商文件已经由社区维护,并保存在名为TheMuppets 的仓库中。

仓库地址:https://github.com/orgs/TheMuppets/repositories

截图.png

把 vendor 仓库 clone 到本地

git clone https://github.com/TheMuppets/proprietary_vendor_xiaomi_sdm660-common.git vendor/xiaomi/sdm660-commongit clone https://github.com/TheMuppets/proprietary_vendor_xiaomi_wayne-common.git vendor/xiaomi/wayne-commongit clone https://github.com/TheMuppets/proprietary_vendor_xiaomi_wayne.git vendor/xiaomi/wayne

2.2 从设备中提取

注意:此步骤要求设备已经安装当前编译分支对应的 LineageOS。(可以先刷机再提取)

现在确保你的设备通过 USB 线连接到计算机,并启用 adb调试和 root,并且位于 device/xiaomi/wayne 目录下

在这个目录下,通常可以找到两个关键文件:

  • extract-files.sh: 用于从设备或固件中提取厂商文件的脚本。

  • proprietary-files.txt: 该文件列出了设备所需的所有厂商文件。

运行 ​​extract-files.sh 脚本
./extract-files.sh
厂商驱动文件将会自动拉取到 vendor/xiaomi 文件夹中。

3. 开始编译

# 回到 Android 源码树的根目录
croot
# 开始编译
brunch wayne

解决WSL中编译提示文件系统不支持大小写敏感问题

21:38:08 ************************************************************
21:38:08 You are building on a case-insensitive filesystem.
21:38:08 Please move your source tree to a case-sensitive filesystem.
21:38:08 ************************************************************
21:38:08 Case-insensitive filesystems not supported

1. 创建一个区分大小写的文件系统

创建一个大小为300GB的ext4文件系统映像文件,并将其挂载到/mnt/case_sensitive,以提供一个区分大小写的文件系统

# 创建一个大小为300GB的空文件
dd if=/dev/zero of=/mnt/e/case_sensitive.img bs=1G count=300# 将这个文件格式化为ext4文件系统
mkfs.ext4 /mnt/e/case_sensitive.img# 创建一个新的挂载点目录
sudo mkdir /mnt/case_sensitive# 将格式化后的文件挂载到新创建的挂载点
sudo mount /mnt/e/case_sensitive.img /mnt/case_sensitive# 将你的LineageOS源码目录复制到新挂载的虚拟磁盘上
# -a: 归档模式,意味着递归复制目录,并且保留符号链接、权限、时间戳、拥有者等信息。
# -v: 显示详细信息。
# --progress: 显示文件传输进度。
sudo rsync -av --progress /mnt/e/android_source_code/lineageos/ /mnt/case_sensitive/lineageos/
# 或
# 将你的LineageOS源码目录移动到新挂载的虚拟磁盘上
sudo mv /mnt/e/android_source_code/lineageos /mnt/case_sensitive/cd /mnt/case_sensitive/lineageos

为了确保 case_sensitive.img 在每次系统启动时自动挂载到 /mnt/case_sensitive。
1. 打开 /etc/fstab 文件

sudo nano /etc/fstab

2. 添加以下行
/mnt/e/case_sensitive.img /mnt/case_sensitive ext4 loop 0 0

2. 在windows下访问case_sensitive

\wsl.localhost\Ubuntu\mnt\case_sensitive\lineageos
截图.png

确保 Windows 用户对该目录有足够的权限。你可能需要在 WSL 中设置一些权限

sudo chmod -R 777 /mnt/case_sensitive

这样,你应该可以在 Windows 中访问和使用 WSL 中的大小写敏感文件系统。

3. 如果case_sensitive.img空间不够用如何扩容?

1. 卸载文件系统

sudo umount /mnt/case_sensitive

这一行命令卸载当前挂载的 case_sensitive.img 文件系统,以确保文件系统在扩展过程中不被使用。

2. 增加镜像文件的大小

dd if=/dev/zero bs=1G count=100 >> /mnt/e/case_sensitive.img

参数说明:

  • dd 命令用于向 case_sensitive.img 文件追加 100GB 空间。

  • if=/dev/zero:表示输入文件是 /dev/zero,一个无限输出零字节的设备文件。

  • bs=1G:表示块大小为 1GB。

  • count=100:表示写入 100 个 1GB 的块。

  • >> /mnt/e/case_sensitive.img:表示将输出追加到现有的 case_sensitive.img 文件。

3. 检查和修复文件系统

sudo e2fsck -f /mnt/e/case_sensitive.img

参数说明:

  • e2fsck 命令用于检查和修复 ext2/ext3/ext4 文件系统。

  • -f 选项强制进行文件系统检查,即使文件系统看起来是干净的。

4. 调整文件系统大小

sudo resize2fs /mnt/e/case_sensitive.img

resize2fs 命令用于调整 ext2/ext3/ext4 文件系统的大小以适应新的镜像文件大小。

5. 检查分区表
首先,需要使用 parted 来检查并调整分区表。

sudo parted /mnt/e/case_sensitive.img

在 parted 中执行以下命令

(parted) print

这将打印出当前的分区信息。然后,使用以下命令调整分区大小

(parted) resizepart 1 100%

退出 parted

(parted) quit

6. 重新挂载文件系统

sudo mount /mnt/e/case_sensitive.img /mnt/case_sensitive

通过这些步骤,你可以扩展 case_sensitive.img 的空间而不影响现有数据。

解决编译提示内存不足

21:38:07 You are building on a machine with 7.62GB of RAM
21:38:07
21:38:07 The minimum required amount of free memory is around 16GB,
21:38:07 and even with that, some configurations may not work.
21:38:07
21:38:07 If you run into segfaults or other errors, try reducing your
21:38:07 -j value.
21:38:07 ************************************************************

创建虚拟内存

# 创建一个大小为8GB的文件,路径为/mnt/case_sensitive/swapfile。fallocate是一个快速创建大文件的工具。
sudo fallocate -l 8G /mnt/case_sensitive/swapfile# 更改/swapfile的权限,使其只有所有者(root)有读写权限。这是为了安全,防止其他用户访问交换文件。
sudo chmod 600 /mnt/case_sensitive/swapfile# 将/mnt/case_sensitive/swapfile初始化为交换空间。这个命令会设置文件系统标记,使操作系统知道这是一个交换文件。
sudo mkswap /mnt/case_sensitive/swapfile# 启用/mnt/e/swapfile作为交换空间。这个命令会激活交换文件,使其可以被系统使用。
sudo swapon /mnt/case_sensitive/swapfile# 查看交换空间的使用情况
swapon --show

如何内存还不够?
将虚拟内存大小从8G改为16G

# 关闭当前的交换文件
sudo swapoff /mnt/case_sensitive/swapfile# 创建一个新的16G交换文件
sudo fallocate -l 16G /mnt/case_sensitive/swapfile# 将交换文件的权限设置为600,以确保只有root用户可以读取和写入该文件。
sudo chmod 600 /mnt/case_sensitive/swapfile# 将交换文件格式化为swap格式
sudo mkswap /mnt/case_sensitive/swapfile# 启用新的交换文件
sudo swapon /mnt/case_sensitive/swapfile# 使用 swapon --show 或 free -h 命令验证新的交换文件是否已正确启用。
swapon --show
# 或
free -h

为了确保 /mnt/case_sensitive/swapfile 在重启后仍然有效,将其添加到/etc/fstab文件中

echo '/mnt/case_sensitive/swapfile swap swap sw 0 0
' | sudo tee -a /etc/fstab

设置完成后再编译,如果真实物理内存没有超过16G,提示还会存在,但不影响正常编译。

WSL默认会设置最大可用内存为真实物理内存的50%,如果想修改WSL的最大可用内存可以通过修改.wslconfig 实现:


- [wsl2]- memory=16GB

解决编译报错

‘duplicate entry for genfs entry *’ at token ‘genfscon’

FAILED: out/target/product/wayne/obj/ETC/sepolicy_neverallows_intermediates/sepolicy_neverallowsdevice/xiaomi/sdm660-common/sepolicy/vendor/genfs_contexts:31:ERROR 'duplicate entry for genfs entry (sysfs, /devices/soc/800f000.qcom,spmi/spmi-0/spmi0-00/800f000.qcom,spmi:qcom,pm660@0:qcom,pm660_rtc/rtc)' at token 'genfscon' on line 85793:
# Touchscreen
genfscon proc /nvt_wake_gesture                                 u:object_r:proc_dt2w:s0
checkpolicy:  error(s) encountered while parsing configuration

在 sepolicy 配置文件中存在重复的 genfscon 条目。

路径 /devices/soc/800f000.qcom,spmi/spmi-0/spmi0-00/800f000.qcom,spmi:qcom,pm660@0:qcom,pm660_rtc/rtc 被定义了两次。

在 device/xiaomi/sdm660-common/sepolicy/vendor/genfs_contexts 文件中找到并移除重复定义的那一行。

image.png

清理缓存并重新编译

make clean
brunch wayne

编译完成

image.png

编译完成后可以在 out/target/product/wayne 目录下看到下面两个zip文件:

  • lineage-17.1-20240914-UNOFFICIAL-wayne.zip 是完整的 LineageOS ROM,通常用于全新安装或重刷设备。

  • lineage_wayne-ota-eng.cyrus.zip 是一个 OTA 更新包,可能用于增量更新现有的 LineageOS 安装,通常不用于首次刷机。

image.png

刷机

进入recovery,先格式化数据,再用 adb sideload 开始刷机
image.png
等待刷机完成,重启系统。

image.png

详细的刷机教程可以参考这篇文章【LineageOS刷机教程】。

参考:
https://wiki.lineageos.org/devices/wayne/build/
[ROM][OTA][10.x] LineageOS 17.1 Unofficial [wayne/ Mi 6X]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424166.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建dataSource错误

说明&#xff1a;记录一次启动项目时的异常&#xff0c;如下&#xff1a; Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-09-14 23:27:27.338 ERROR 42260 --- [ main] o.s.boot.SpringA…

leetcode hot100_part4_子串

2024/4/20—4/21 560.和为K的子数组 前缀和哈希表&#xff0c;做二叉树的时候也有这个套路。注意细节&#xff0c;遍历到当前前缀和的时候是先找结果个数还是先加入哈希&#xff1f;应该先找结果个数&#xff0c;不然的话&#xff0c;当前位置也算上了&#xff08;因为是前缀和…

架构师备考的一些思考(四)

前言 对于数学&#xff0c;我们之前学的是对的&#xff0c;但不是真的&#xff0c;所以我们没有数学思维。 对于计算机&#xff0c;我们学校教的是对的&#xff0c;但不是真的&#xff0c;所以仅仅从学校学习知识的应届毕业生&#xff0c;不论985,211&#xff0c;本科&#xff…

中国初创公司数量下降了98%

近年来&#xff0c;中国风险投资市场的风云变幻&#xff0c;通过IT Juzi&#xff08;IT桔子&#xff09;等权威数据服务提供商的透镜&#xff0c;得以清晰展现。数据显示&#xff0c;自2018年的鼎盛时期——拥有51,302家初创公司以来&#xff0c;这一数字在短短五年内急剧下降至…

如何通过网络找到自己想要的LabVIEW知识?

学习LabVIEW或其他编程技术时&#xff0c;无法依赖某一篇文章解决所有问题。重要的是通过多种途径获取灵感&#xff0c;并学会归纳总结&#xff0c;从而逐渐形成系统性的理解。这种持续学习和总结的过程是技术提升的基础。通过网络找到所需的LabVIEW知识可以通过以下几个步骤进…

编写注册接口与登录认证

编写注册接口 在UserController添加方法 PostMapping("/login")public Result login(Pattern(regexp "^\\S{5,16}$") String username,Pattern(regexp "^\\S{5,16}$") String password){ // 根据用户名查询用户User loginUser userS…

第二期: 第二节 , 裸机编程 , gpio

1 首先就是 看原理图&#xff1a; 这里有两个 &#xff2c;&#xff25;&#xff24; 核心板的原理图。 可以看到 是这个脚。 &#xff12; 然后就是 查看数据手册。 从 数据手册可以看出 &#xff0c;一共有这么多的 gpio 组&#xff0c; 但是这些 组 是有复用的&#xf…

跨平台开发新视角:利用Android WebView实现Web内容的原生体验

在移动应用开发领域&#xff0c;跨平台解决方案一直是一个热门话题。开发者们不断寻求能够同时在iOS和Android平台上提供一致用户体验的方法。而Android的WebView组件&#xff0c;作为一个强大的工具&#xff0c;允许开发者在Android应用中嵌入Web内容&#xff0c;为用户提供接…

瑞芯微Android6 内核编译报错解决方案

1、报错内容如下图所示 错误内容&#xff1a; Kernel: arch/arm/boot/zImage is ready make: *** [kernel.img] Error 127 2、分析与解决方法 由于之前在ubuntu环境下编译没问题&#xff0c;现在是在centos环境下重新编译的时候报错&#xff0c;所以经过分析对比两个环境的…

根据第七次人口普查数据探索中国平均预期寿命

一&#xff1a;数据介绍 数据来源&#xff1a;预期寿命数据集 - Heywhale.com 该数据提供了中国各地区在第七次人口普查&#xff08;2020年&#xff09;中的平均预期寿命&#xff0c;包括男性和女性的预期寿命。该表具有93行和3列。以下是关于这个数据表的具体信息&#xff1…

FTP搜索引擎爬虫设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

摩尔信使MThings逻辑控制实例——交通灯

摩尔信使MThings提供了强大的数据配置和逻辑控制功能&#xff0c;可为用户带来一种高效且直观的方式进行管理和控制交通灯系统。与传统的PLC&#xff08;可编程逻辑控制器&#xff09;相比&#xff0c;MThings的界面更加用户友好&#xff0c;使得即使是非专业的用户也能够轻松地…

BSN六周年:迈向下一代互联网

当前&#xff0c;分布式技术作为现代计算机科学和信息技术的重要组成部分&#xff0c;在云计算、区块链等技术的推动下&#xff0c;正以多样化的形式蓬勃发展。 ​而区块链作为一种特殊的分布式系统&#xff0c;近年来也在各个领域得到了广泛关注。通过在区块链上运行智能合约…

YoloV10 训练自己的数据集(推理,转化,C#部署)

目录 一、下载 三、开始训练 train.py detect.py export.py 超参数都在这个路径下 四、C#读取yolov10模型进行部署推理 如下程序是用来配置openvino 配置好引用后就可以生成dll了 再创建一个控件&#xff0c;作为显示 net framework 4.8版本的 再nuget工具箱里下载 …

快速搭建最简单的前端项目vue+View UI Plus

1 引言 ‌‌Vue是一套用于构建Web前端界面的渐进式JavaScript框架。‌‌它以其易学易用、性能出色、灵活多变而深受开发者喜爱&#xff0c;并且与其他前端框架&#xff08;如‌React和‌Angular&#xff09;相比&#xff0c;在国内市场上受到了广泛的认可和使用。点击进入官方…

十四、centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

&#x1f33b;&#x1f33b;目录&#x1f33b;&#x1f33b; 一、 centos7 yum报错&#xff1a;cannot find a valid baseurl for repo:base/7/x86_64二、分析错误三、解决方案3.1 检查网络连接3.2 检查DNS设置3.3 检查YUM仓库配置3.3.1 使用官方CentOS镜像配置3.3.2 使用阿里云…

【ArcGISProSDK】初识

ArcGIS Pro SDK 提供四种主要的可扩展性模式&#xff1a;加载项、托管配置、插件数据源和 CoreHost 应用程序。 各模块文件对比 API 核心 核心程序集位于 {ArcGIS Pro 安装文件夹}\bin 中。 程序集描述ArcGIS.Core.dll 提供 CIM、地理数据库、几何图形和公共设施网络 API。 …

JFLASH添加支持PY32F002芯片的方法

嵌入式及电子工程师、爱好者必备工具 0.91寸OLED屏幕大小的音频频谱&#xff0c;炫酷&#xff01; 0.96寸OLED控制器SSD1306其他两种显示模式 CX32l003 点亮0.96寸OLED屏幕 0.96寸OLED屏幕控制器SSD1306详解 JLINK无法烧写程序&#xff0c;原因让人意外 Luat开发板的烧写 …

计算机毕业设计Python知识图谱美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏

《Python知识图谱美团美食推荐系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和互联网应用的普及&#xff0c;人们的消费习惯逐渐从线下转移到线上&#xff0c;外卖行业迎来了前所未有的发展机遇。美团作为国内领先的生活服务电子商务平台&#xff0c;拥有庞大的…

Kafka 基于SASL/SCRAM动态认证部署,kafka加账号密码登录部署

文章目录 前言下载 kafka安装启动zookeeper添加账号密码 启动kafka修改kafka配置文件增加jaas授权文件修改启动文件&#xff0c;启动kafka检查是否部署成功 offset explore 连接 前言 其实挺简单的几个配置文件&#xff0c;问大模型一直没说到点上&#xff0c;绕晕了。SASL/SC…