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

Android开发环境搭建和编译系统

1 工具使用
1.1 将dos格式的文件转换为unix格式文件
直接执行 dos2unix file
例如: dos2unix InotifyMon/AndroidManifest.xml

1.2 Linux Shell FTP使用
ftp <IP addr>
输入ID和password
prompt off
// 下载文件到本地
mget *

1.3 Linux sed
1.3.1 Linux命令之sed(Stream Editor)批量替换字符串操作
使用的格式如下:

sed -i "s/<oldstring>/<newstring>/g" `grep <oldstring> -rl <path>`

其中,oldstring是待被替换的字符串,newstring是待替换oldstring的新字符串,grep操作主要是按照所给的目录查找oldstring,path表示要查找的目录,譬如./
-i选项是直接在文件中替换,不在终端输出;
-r选项是所给的path中的目录递归查找;
-l选项是输出所有匹配到oldstring的文件;

1.3.2 sepolicy CIL
Android 8.0 adb root user sepolicy /system/etc/selinux/plat_sepolicy.cil
CIL: Selinux Common Intermediate Language
sed -i "s#\(abcd zcb (.*\) xxx#\1 su xxx#" 1.txt
I. \(和\)是用来标记一个表达式,这样就可以在后面被\1来引用原文。
II. abcd zcb (是要匹配的部分,.*是正则表达式匹配所有字符。
III. 第一个xxx表示要被替换的部分,替换为su xxx。
IV. 这里是用# 来分隔源和目标的,可能很多例子会用/来分隔源和目标。
V. 最后的1.txt表示在这个文件中做替换。

1.4 git
repo start --all <branch>
git clean -dfx
git reset --hard
repo sync -c -d .

git fetch -p
git branch --set-upstream-to=origin/<BRANCH> <BRANCH>

git format-patch -1 "${commit_id}"
git format-patch HEAD~3

cherry-pick的SHA1值在下面(Base - Patchset2 - SHA1)。

在~/.netrc中添加用户名和密码可以实现git pull自动输入密码。
machine <URL> login <username> password <xxx>

github PR,Pull Request:原作者大神,我改了点东西,你快把我的修改拉回去吧。

1.5 Java Configuration
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javah
sudo update-alternatives --config jar
sudo update-alternatives --config javap
sudo update-alternatives --config javadoc

Or add the following states to /etc/profile

export JAVA_HOME=\
/usr/lib/jvm/java-6-openjdk-amd64
export JRE_HOME=\
${JAVA_HOME}/jre
export CLASSPATH=.:\
${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=\
$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin

1.6 Linux Lindent
apt install indent
scripts/Lindent /path/to/my.c
scripts/checkpatch.pl \
--no-tree -f /path/to/my.c

1.7 python3.8
无法修改python版本的情况下,如何使用python3.8
定义一个文件~/bin/python3,添加如下的内容,并修改权限为可执行。
/usr/bin/python3.8 $@
修改.bashrc,添加PATH=~/bin:$PATH,然后source .bashrc
此后任何需要python3的脚本都会优先使用~/bin/python3

2 Android toolchain
2.1 覆盖Android源代码中的cpp或者Java文件
1) device/<oem>/<soc_platform>/<project>/vendorsetup.sh
#!/bin/sh

MY_PATH=${PWD}
PROJ_PATH="device/<oem>/<soc_platform>/<project>"

if [ -f ${MY_PATH}/${PROJ_PATH}/overlay_setup.sh ]; then
    chmod a+x ${MY_PATH}/${PROJ_PATH}/overlay_setup.sh
fi

2) device/<oem>/<soc_platform>/<project>/overlay_setup.sh
#!/bin/sh

MY_PATH=${PWD}
OVL_PATH="device/<oem>/<soc_platform>/<project>/path/to/overlay"

# add shell commands here

3) device/<oem>/<soc_platform>/<project>/device.mk
$(shell $(LOCAL_PATH)/overlay_setup.sh)

2.2 Android添加自定义的产品类型
- 参考其它项目生成文件夹:device/<OEM>/<product>
- 将产品添加到lunch编译系统中:device/<OEM>/common/vendorsetup.sh

2.3 make过程
2.3.1 跟踪编译命令
boot.img: function build-recoveryimage-target
system.img: function build-systemimage-target

zcat out/verbose.log.gz
当verbose.log.gz中出现/bin/bash -c "..."时,表示下面将要执行的命令。

2.3.2 extract cmd
import io
import re
import sys,os
import shutil

arg0_proc_name = ''
def print_usage():
    print('\nUsage: python ' +
        arg0_proc_name +
        ' <src_file>' +
        ' <dst_file>')

def write_file_string(
    file, string):
    h = open(file, 'a+')
    idx = string.find(']')
    if (idx >= 0):
        string = string[(idx + 1):]
    h.writelines(string)
    h.close()

def write_cmd_string_to_log(
    src_file, dst_file, match_string):
    fp = io.open(src_file,
        'r',
        encoding = 'utf-8',
        errors = 'ignore')
    try:
        for line_string in fp:
            if re.findall(match_string,
                line_string.lower()):
                write_file_string(
                    dst_file, line_string)
    except KeyboardInterrupt:
        print('Got ^C exit signal')
    fp.close()

def main():
    global arg0_proc_name
    arg0_proc_name = \
        sys.argv[0]
    if sys.argv[0].rfind(
        os.path.sep) > 0 :
        index = sys.argv[0].rfind(
            os.path.sep)
        arg0_proc_name = \
            sys.argv[0][index+1:]

    if len(sys.argv) < 3:
        print_usage()
        sys.exit(0)

    if (os.path.isfile(
        sys.argv[2])) :
        os.unlink(sys.argv[2])

    write_cmd_string_to_log(
        sys.argv[1],
        sys.argv[2],
        "/bin/bash -c")

if __name__ == '__main__':
    main()

3 Linux aarch64-linux-gnu-gcc
3.1 aarch64-linux-gnu-gcc
https://releases.linaro.org/components/toolchain/binaries
gcc-linaro-*.tar.xz: compiler
sysroot-linaro-*.tar.xz: root fs

xz -d xxx.tar.xz
tar xvf xxx.tar

Support legacy arm-linux-gcc binary:
Userspace binary formats ---> Kernel support for 32-bit EL0

3.2 Linux libtool静态链接
libtool在link-mode时,可以使用参数:-all-static
且这个参数要放在ld之后,如下:
/bin/sh ../libtool --tag=CC \
--mode=link \
aarch64-linux-gnu-gcc -all-static 

在这里是放在aarch64-linux-gnu-gcc之后,不然提示找不到-all-static。
生成的链接命令会自动加上:-static,并且自动寻找lib*.a的静态库。

3.3 showcase
# CROSS_COMPILE = \
# /path/to/bin/aarch64-linux-gnu-

# CC means C Compiler
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
.PHONY: clean

OBJS = src/main.o
CFLAGS = \
    -I./include
LDFLAGS =

# compile every c file to object
%.o: %.c
        $(CC) $(CFLAGS) -c $^ -o $@
# link all of the objects to uevent_mon
uevent_mon: $(OBJS)
        $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) \
            -o $@
clean:
        rm -rf $(OBJS)
        rm -rf uevent_mon

4 modem image
4.1 contents.xml
该文件在私有代码的根目录下,主要定义了升级包中镜像的名字、路径以及相关的打包工具。在common/config目录下,有不同后缀的contents.xml,根据项目需要把对应的xml复制到根目录下,并改名为contents.xml。

QFIL - Tools - Flat Meta Build
读取contents.xml文件,提取所有img并将之打包成Flat或者Meta格式的文件夹。所有img在同一个文件夹下的格式称为Flat,img在独立文件夹中的格式称为Meta。

4.2 sparse image
file system.img
sparse ext2 image,sparse的另外一个意思是稀疏矩阵,for fastboot

file system_1.img
raw ext2 image, for QFIL

QFIL rawprogramX.xml中的physical_partition_number表示UFS的LUN。

4.3 python
Windows Notepad - Save as - Encoding (ANSI)
Windows Notepad - Edit - Replace... - replaces ? with blank

# python pyimg.py 6155_la
import sys,os
from xml.dom.minidom import parse

def readXML(flavor, dnl_file):
    domTree = parse("./contents.xml")
    rootNode = domTree.documentElement

    builds_flat = \
        rootNode.getElementsByTagName(
        "builds_flat")
    builds = \
        builds_flat[0].getElementsByTagName(
        "build")

    for build in builds:
        name = \
            build.getElementsByTagName(
            "name")
        download_files = \
            build.getElementsByTagName(
           dnl_file)
        for download_file in download_files:
            file_name = \
            download_file.getElementsByTagName(
            "file_name")
            file_paths = \
            download_file.getElementsByTagName(
            "file_path")

            show = 0
            if download_file.hasAttribute("flavor") \
                and \
                (download_file.getAttribute("flavor")
                == flavor):
                show = 1

            for file_path in file_paths:
                if file_path.hasAttribute("flavor") \
                    and \
                    (file_path.getAttribute("flavor")
                        == flavor) and \
                    (file_path.firstChild.data.find(
                        "emmc")  < 0):
                    show = 1
                    break

            if show == 1:
                print(name[0].firstChild.data +
                    "/" +
                    file_path.firstChild.data.rstrip("/") +
                    "/" +
                    file_name[0].firstChild.data)

if __name__ == '__main__':
    arg0_proc_name = sys.argv[0]
    if sys.argv[0].rfind(os.path.sep) > 0:
        index = sys.argv[0].rfind(os.path.sep)
        arg0_proc_name = sys.argv[0][index+1:]
    if len(sys.argv) < 2:
        print("\nUsage: python " +
            arg0_proc_name +
            " <flavor>\n")
        sys.exit(0)

    readXML(sys.argv[1], "download_file")
    readXML(sys.argv[1], "partition_file")
    readXML(sys.argv[1], "partition_patch_file")
    readXML(sys.argv[1], "device_programmer")

4.4 image
#!/bin/sh

amss_flavors="660_la"
PRODUCT="sdm660"
ANDROID_PATH="/path/to/android"
AMSS_PATH="/path/to"
AMSS_ANDROID="${AMSS_PATH}/LINUX"

cd ${AMSS_PATH}
rm -rf ${AMSS_ANDROID}
mkdir -p ${AMSS_ANDROID}
ln -s ${ANDROID_PATH}/ ${AMSS_ANDROID}

# Generate NON-HLOS.bin and spare image
# cd common/build && python update_common_info.py
cd common/build && python build.py --flavors=${amss_flavors} --variant=xxx
cd -

# Check if bin/ is generated
if [ -d "common/build/ufs/${amss_flavors}/bin" ]; then
    ls "common/build/ufs/${amss_flavors}/bin"
else
    echo "Error, no bin generated!"
    exit 0
fi

# Copy files, search keyword LINUX in contents.xml, need to be copied,
# QFIL - Tools - Flat Meta Build
cp_files="${AMSS_PATH}/common/build/ufs/${amss_flavors}/bin/NON-HLOS.bin
${AMSS_PATH}/common/build/ufs/${amss_flavors}/gpt_main0.bin
${AMSS_PATH}/common/build/ufs/${amss_flavors}/gpt_backup0.bin
${AMSS_PATH}/common/build/ufs/${amss_flavors}/patch0.xml
${AMSS_PATH}/common/build/ufs/${amss_flavors}/rawprogram0.xml
${AMSS_PATH}/xxx/boot_images/QcomPkg/SDMPkg/6150/Bin/AU/RELEASE/prog_firehose_ddr.elf
${AMSS_PATH}/xxx/trustzone_images/build/ms/bin/PAZAANAA/tz.mbn
${ANDROID_PATH}/out/target/product/${PRODUCT}/*.img"

for file in ${cp_files}; do
    echo ${file}
    cp $file ${AMSS_PATH}/common/build/ufs/${amss_flavors}/bin/sparse_images
done

# zip
GEN_TIME=$(date +%Y-%m-%d-%H%M%S)
GEN_FILE=FlashPackage_${PRODUCT}_${GEN_TIME}

cd common/build/ufs/${amss_flavors}/bin
zip -r ${GEN_FILE}.zip ./sparse_images
cd -
mv common/build/ufs/${amss_flavors}/bin/${GEN_FILE}.zip ./

echo "${AMSS_PATH}/${GEN_FILE}.zip has been created!"

5 Abbreviations
aop.mbn: always on processor, qcom RPM partition,使用CM4或者RISC-V
cmnlib.mbn: qcom trustzone commonlib, qseecom_sample_client
devcfg.mbn: qcom QUP访问权限控制,SPI片选和时钟线分别对应I2C的SDA和SCL
km41.mbn: qcom keymaster v4.1
lagvm: qcom Linux Android Guest Virtual Machine

相关文章:

Android开发环境搭建和编译系统

1 工具使用 1.1 将dos格式的文件转换为unix格式文件 直接执行 dos2unix file 例如&#xff1a; dos2unix InotifyMon/AndroidManifest.xml 1.2 Linux Shell FTP使用 ftp <IP addr> 输入ID和password prompt off // 下载文件到本地 mget * 1.3 Linux sed 1.3.1 Linux命令之…...

autMan奥特曼机器人-autMan的PHP环境

直装版请自行安装php环境。 docker版本预置了php环境&#xff0c;如下图&#xff1a; 如果使用插件"test php"测试环境时&#xff0c;实时日志有报错如下&#xff1a; 可进入终端&#xff0c;输入两条命令 apk add curl apk add php-curl...

路径规划之启发式算法之二十:麻雀搜索算法(Sparrow Search Algorithm,SSA)

麻雀搜索算法(Sparrow Search Algorithm,SSA)是一种受麻雀觅食和反捕食行为启发的新型的群智能优化算法,它模拟了麻雀种群的觅食行为和反捕食行为的生物学群体特征。该算法由薛建凯在2020年首次提出,旨在解决全局优化问题,具有求解精度高、效率高等特点。 一、算法原理 S…...

Vue+element 回车查询页面刷新

问题描述&#xff1a; form 表单出查询条件需要实现 input 输入完成后键盘回车查询&#xff1a;keyup.enter“handleQuery”&#xff0c;如果 form 里只有一个input&#xff0c;回车没有触发事件&#xff0c;而是刷新页面&#xff0c;放两个input就没问题 问题原因&#xff1…...

为何页面搜索应避免左模糊和全模糊查询???

前言 在构建高效且可扩展的Web应用程序时&#xff0c;数据库查询的性能是影响用户体验的关键因素之一。特别是对于涉及大量数据的页面搜索功能&#xff0c;选择正确的查询方式不仅可以提升应用的速度&#xff0c;还能显著改善用户交互体验。 B-Tree索引与最左前缀匹配特性 1…...

源码分析之Openlayers中ZoomSlider滑块缩放控件

概述 ZoomSlider滑块缩放控件就是Zoom缩放控件的异形体&#xff0c;通过滑块的拖动或者点击滑槽&#xff0c;实现地图的缩放&#xff1b;另外其他方式控制地图缩放时&#xff0c;也会引起滑块在滑槽中的位置改变&#xff1b;即ZoomSlider滑块缩放控件会监听地图的缩放级别&…...

Cherno C++学习笔记 P46 箭头运算符

这一篇文章我们讲一下箭头运算符的使用。在之前的一些场景下&#xff0c;我们已经使用到了箭头运算符&#xff0c;这次我们可以更深入的聊一下箭头运算符应该如何使用&#xff0c;以及我们如何实现自己的箭头指针。 我们还是以一个最简单的Entity类举例&#xff1a; class En…...

项目转换微服务架构

文章目录 1.sun-dependencies引入SpringCloud的版本2. 创建sun-cloud-home微服务1.创建maven项目2.目录概览3.pom.xml4.application.yml5.application-prod.yml6.HomeApplicaion.java7.HomeController.java8.测试访问9.打包测试 3.创建sun-cloud-sku微服务1.磁盘将这个sun-clou…...

WebRTC搭建与应用(五)-Coturn踩坑记

WebRTC搭建与应用(五)-Coturn踩坑记 近期由于项目需要在研究前端WebGL渲染转为云渲染&#xff0c;借此机会对WebRTC等有了初步了解&#xff0c;在此记录一下&#xff0c;以防遗忘。 第五章 WebRTC搭建与应用(五)-Coturn踩坑记 文章目录 WebRTC搭建与应用(五)-Coturn踩坑记前…...

Uniapp 手机基座调试App 打包成Apk文件,并上传到应用商店

1.Uniapp手机基座调试App。 1.1 以下是我另一篇文章 讲解 uniapp连接手机基座调试App、 Hbuildx使用SUB运行到手机基座测试_hbuilder基座-CSDN博客 2.打包本地的uniapp项目为apk文件。 打包的方式有很多种&#xff0c;我们可以选择本地打包和远程云端打包两种方式。 我们在打包…...

【AI日记】24.12.24 kaggle 比赛 2-12

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset时间&#xff1a;3 小时 读书 书名&#xff1a;我们能做什么 : 胡适与中国青年最真诚的分享时间&#xff1a;2 小时 律己 工作时…...

教师如何打造专属私密成绩查询系统?

期末的校园&#xff0c;被一种特殊的氛围所笼罩。老师们如同辛勤的工匠&#xff0c;精心打磨着每一个教学环节。复习阶段&#xff0c;他们在知识的宝库中精挑细选&#xff0c;把一学期的重点内容一一梳理&#xff0c;为学生们打造出系统的复习框架。课堂上&#xff0c;他们激情…...

【linux】NFS实验

NFS服务 NFS是Network File System&#xff08;网络文件系统&#xff09;的缩写。它是一种用于在计算机网络中共享文件和目录的协议。NFS允许计算机上的用户访问和操作远程计算机上的文件&#xff0c;就像访问本地文件一样。它使用客户端-服务端模型&#xff0c;其中客户端机器…...

ubuntu22.04安装PaddleX3

PaddleOCR 安装过程可以参考PaddleX本地安装教程 我的电脑环境配置&#xff1a; ubuntu22.04 cuda11.8&#xff08;之前安装的是12.4没有匹配的paddle-gpu;这里改成11.8&#xff09; 一、安装基础环境 1、 conda create -n ppx1 python3.10 2、 conda activate ppx1 3、…...

无标记动作捕捉系统如何赋能体育运动分析,推动体育科学发展?

随着技术的不断发展与社会的需要&#xff0c;健康、科学运动成为了大众关注的一个热词。在韩国首尔的中央大学&#xff0c;其生物运动临床康复实验室和运动训练中心就致力于通过生物力学分析来研究与运动相关的伤害&#xff0c;并通过定制科学的训练计划来帮助运动员改进他们的…...

JavaScript 标准内置对象——Array

1、构造函数 2、静态方法 // 从可迭代或类数组对象创建一个新的浅拷贝的数组实例 // arrayLike 想要转换成数组的类数组或可迭代对象 Array.from(arrayLike, mapFn, thisArg) Array.fromAsync(arrayLike, mapFn, thisArg) // 异步Array.isArray(value) // 判断传递的值是否是一…...

Python超能力:高级技巧让你的代码飞起来

文章一览 前言一、with1.1 基本用法1.2 示例自定义上下文管理器 二、条件表达式三、列表式推导式与 zip 结合 四、map() 函数&#xff08;内置函数&#xff09;map用于数据清洗1. 数据清洗&#xff1a;字母大小写规范2. filter() 函数 五、匿名函数 lambda5.1 lambda的参数&…...

move生态

move生态 Move 生态主要围绕着 Move 编程语言及其相关的区块链平台构建&#xff0c;这些平台旨在提供更高的安全性、可扩展性和开发者友好性。以下是关于 Move 生态的一些关键点&#xff1a; 1. 核心区块链平台 Aptos&#xff1a;Aptos 是一个 Layer 1 区块链&#xff0c;专注…...

使用插件时要注意

在使用插件时&#xff0c;需要注意一些关键事项&#xff0c;确保插件能够稳定、安全地工作&#xff0c;并且不会给系统带来风险或负担。以下是使用插件时需要注意的几个重要方面&#xff1a; 1. 插件来源与信任度 官方渠道与可靠来源&#xff1a;总是选择来自官方网站、知名平…...

JVM对象分配内存如何保证线程安全?

大家好&#xff0c;我是锋哥。今天分享关于【JVM对象分配内存如何保证线程安全&#xff1f;】面试题。希望对大家有帮助&#xff1b; JVM对象分配内存如何保证线程安全&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中&#xff0c;对象的内存分配…...

ApacheStruts2 目录遍历与文件上传漏洞复现(CVE-2024-53677,S2-067)(附脚本)

0x01 产品描述: Apache Struts 2 是一个用于JAVA的MVC框架,它用于快速开发web应用。它的设计目标是使得开发者能够更容易的处理web应用的展现层,数据层,和业务层。0x02 漏洞描述: CVE-2024-53677 漏洞的根本原因是 Struts 框架中不安全的文件上传处理机制。攻击者利用 CVE…...

Scala字符串连接方法—mkString—用法详解

Scala字符串连接方法—mkString—用法详解 在 Scala 中&#xff0c;mkString 是集合&#xff08;如数组、列表、字符串等&#xff09;的一种方法&#xff0c;用于将集合中的元素连接成一个字符串。 def mkString(sep: String): Stringdef mkString(start: String, sep: String…...

[实战]Spring Boot启动卡在Root WebApplicationContext initialization completed in

Spring Boot启动 打印Root WebApplicationContext: initialization completed in…这行日志完成后需要等很长时间才能真正启动完成。 分析一下发现是连接某个机器的MySQL就会出现这种情况。使用客户端软件连接MySQL时也很慢&#xff0c;但连接完成后执行MySQL各种语句非常看。…...

什么样的LabVIEW控制算自动控制?

自动控制是指系统通过预先设计的算法和逻辑&#xff0c;在无人工干预的情况下对被控对象的状态进行实时监测、决策和调整&#xff0c;达到预期目标的过程。LabVIEW作为一种图形化编程工具&#xff0c;非常适合开发自动控制系统。那么&#xff0c;什么样的LabVIEW控制算作“自动…...

xshell下载和安装(超详细)

参考:https://blog.csdn.net/hffh123/article/details/135885175 一、xshell官网下载 下载官网&#xff1a;https://www.xshell.com/zh/free-for-home-school/ 二、安装步骤 &#xff08;一&#xff09;、直接打开.exe文件 &#xff08;二&#xff09;、点击下一步&#xff…...

NS3学习——tcpVegas算法代码详解(2)

NS3学习——tcpVegas算法代码详解&#xff08;1&#xff09;-CSDN博客 目录 4.TcpVegas类中成员函数 (5) CongestionStateSet函数 (6) IncreaseWindow函数 1.检查是否启用 Vgas 2.判断是否完成了一个“Vegas 周期” 2.1--if&#xff1a;判断RTT样本数量是否足够 2.2--e…...

PyTorch 神经网络回归(Regression)任务:关系拟合与优化过程

PyTorch 神经网络回归&#xff08;Regression&#xff09;任务&#xff1a;关系拟合与优化过程 本教程介绍了如何使用 PyTorch 构建一个简单的神经网络来实现关系拟合&#xff0c;具体演示了从数据准备到模型训练和可视化的完整过程。首先&#xff0c;利用一维线性空间生成带噪…...

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景

在 12 月 4 日&#xff0c;链原生的 Web3 AI 数据网络 Chainbase 正式启动了 Chainbase AVS 主网&#xff0c;同时发布了首批 20 个 AVS 节点运营商名单。Chainbase AVS 是 EigenLayer AVS 中首个以数据智能为应用导向的主网 AVS&#xff0c;其采用四层网络架构&#xff0c;其中…...

es 3期 第18节-分页查询使用避坑的一些事

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…...

linux检测硬盘

通过fdisk 查看显示所有磁盘或闪存的信息 fdisk -l /dev/sd*使用 badlocks检查 linux 硬盘上的坏道/坏块。也可以修复坏道&#xff0c;但仅限于逻辑坏道&#xff0c;物理坏道只能更换硬盘 badblocks -s -v /dev/vdb1 > /badblocks-vdb1.txt tail -f badblocks-vdb1.txt #检…...

Unity3d 基于UGUI和VideoPlayer 实现一个多功能视频播放器功能(含源码)

前言 随着Unity3d引擎在数字沙盘、智慧工厂、数字孪生等场景的广泛应用&#xff0c;视频已成为系统程序中展示时&#xff0c;不可或缺的一部分。在 Unity3d 中&#xff0c;我们可以通过强大的 VideoPlayer 组件和灵活的 UGUI 系统&#xff0c;将视频播放功能无缝集成到用户界面…...

Ubuntu22.04 LTS 安装nvidia显卡驱动

准备跑老师给定的Github上的多模态源码,但是用了这么久ubuntu还没有尝试过安装nvidia驱动,好在也是一次成功,于是记录下来。 借鉴的是Ubuntu22.04安装显卡驱动(高速、避错版)-CSDN博客这篇文章,按照流程来基本没有问题,不过个人觉得有些步骤比较冗余,所以记录下来 主要…...

Linux编程(清华大学出版社2019年1月第1版)第5章课后作业

5.1 对于执行在时间上有重叠的逻辑流&#xff0c;称为并发流&#xff0c;并发流是并发的 并发不并发并发 5.2 几个箭头几个状态转换关系&#xff0c;箭头上写了可能原因。 在就绪状态不会执行指令&#xff0c;不会有IO请求或主动wait的情况&#xff0c;不会有从就绪状态到阻…...

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“

相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…...

JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中

本文为Oracle数据库JSON学习系列的第一篇&#xff0c;讲述如何将JSON文档存储到数据库中&#xff0c;包括了版本为19c和23ai的情形。 19c中的JSON 先来看一下数据库版本为19c时的情形。 创建表colortab&#xff0c;其中color列的长度设为4000。若color的长度需要设为32767&a…...

分布式专题(10)之ShardingSphere分库分表实战指南

一、ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在…...

支付宝订单码支付

1.订单码支付&#xff0c;首先下载官方网站提供的sdk包到你的项目中。 2.选择控制器复制官方文档的获取二维码相关的代码示例。打开sdk包中v2的index.php文件&#xff0c;这个才是你选择语言的具体代码。 3.引用里面所需要的类文件&#xff0c;文件下载到你的项目中后&#xf…...

使用 Django 和 AWS ECR 实现容器化应用的管理

在现代云原生应用的开发和部署中,容器化技术已经成为主流。Amazon Elastic Container Registry (ECR) 是一种完全管理的 Docker 容器注册表服务,可以与 Amazon ECS、EKS 和其他容器服务无缝集成。在这篇文章中,我们将介绍如何使用 Django 和 AWS ECR 实现集成管理,包括创建、更…...

DeepWalk 原理详解

概述&#xff1a; DeepWalk 是一种流行的图嵌入方法&#xff0c;用于学习图结构数据中节点的低维表示。它通过将图的节点视作序列数据&#xff0c;利用自然语言处理中的技术&#xff08;类似于word2vec算法&#xff09;来捕捉节点间的关系&#xff0c;可以帮助我们理解和利用图…...

深入理解批量归一化(BN):原理、缺陷与跨小批量归一化(CmBN)

在训练深度神经网络时&#xff0c;批量归一化&#xff08;Batch Normalization&#xff0c;简称BN&#xff09;是一种常用且有效的技术&#xff0c;它帮助解决了深度学习中训练过程中的梯度消失、梯度爆炸和训练不稳定等。然而&#xff0c;BN也有一些局限性&#xff0c;特别是在…...

基于Spring Boot的雅苑小区管理系统

一、系统背景与意义 随着信息化技术的快速发展&#xff0c;传统的小区物业管理方式已经难以满足现代居民对于高效、便捷服务的需求。因此&#xff0c;开发一款基于Spring Boot的小区管理系统显得尤为重要。该系统旨在通过信息化手段&#xff0c;实现小区物业管理的智能化、自动…...

物理层知识要点

文章目录 物理层接口的四大特性通信基础编码和调制&#xff08;1&#xff09;数字数据编码为数字信号&#xff08;2&#xff09;模拟数据编码为数字信号&#xff08;3&#xff09;常见调制方式&#xff08;3&#xff09;信道的极限容量 多路复用技术数据传输方式物理层下的传输…...

项目里用到了哪些设计模式是怎么使用的?

在软件开发项目中&#xff0c;设计模式是解决特定问题的通用模板或最佳实践。它们提供了一种经过验证的方式来组织代码&#xff0c;使其更易于理解、维护和扩展。下面我将详细介绍一些常见的设计模式及其在项目中的应用方式。 1. 单例模式&#xff08;Singleton Pattern&#…...

CPU性能篇-CPU 100%如何定位根因-Day 03

1. CPU使用率 1.1 关键指标介绍 user&#xff08;通常缩写为 us&#xff09;&#xff0c;代表用户态 CPU 时间。注意&#xff0c;它不包括下面的 nice 时间&#xff0c;但包括了 guest 时间。nice&#xff08;通常缩写为 ni&#xff09;&#xff0c;代表低优先级用户态 CPU 时…...

访谈积鼎科技总经理:国产CFD软件发展与未来趋势展望

傅彦国&#xff0c;上海积鼎信息科技有限公司创始人 记者&#xff1a;请傅总介绍下我国流体仿真行业的发展现状是怎样的&#xff1f; 傅彦国&#xff1a;自2018年政府加大了对核心技术自主研发的支持力度&#xff0c;国产CFD软件逐渐步入发展正轨。 首先&#xff0c;从市场规…...

四种自动化测试模型实例及优缺点详解

一、线性测试 1.概念&#xff1a; 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 &#xff08;操作&#xff0c;重复操作&#xff0c;数据&#xff09;都混合在一起。 2.优点&#xff1a; 每个脚本相对独立&#xff0c;且不产生…...

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了&#xff0c;后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…...

NVIDIA GPU 内部架构介绍

NVIDIA GPU 架构 NVIDIA GPU 的 SM&#xff08;Streaming Multiprocessor&#xff09; 和 GPC&#xff08;Graphics Processing Cluster&#xff09; 是 GPU 架构中的关键组成部分。它们决定了 GPU 的计算能力和性能&#xff0c;以下是对这两个参数的详细介绍&#xff1a; 1. …...

[spring]实例化对象(静动态工厂)

在前面文章的例子当中&#xff0c;我们都创建了Bean对象。spring里常用的获取类的实例化对象有几种方式&#xff1a;构造函数获取Bean对象、静态和动态工厂获取Bean对象、实现FactoryBean规范。 因为一些步骤没有什么别的不同&#xff0c;所以我不会重复去讲&#xff0c;届时会…...

【转】arm64架构的银河麒麟系统Kylin的qt安装教程

转自&#xff1a;arm64架构的银河麒麟系统Kylin的qt安装教程_银河麒麟安装qt-CSDN博客 文章目录 前言 一、准备环境 安装C编译器和调试器 二、安装qt、qtcreator 检查是否已经安装过Qt组件 安装Qt组件和Qt creator 检查组件是否安装成功&#xff1a; 三、测试程序运行 报错 Qt…...