【RV1126 学习】SDK/ U-Boot/kernel/rootfs 编译学习

文章目录

  • RV1126芯片介绍
    • rv1126 模块代码目录相关说明
  • SDK 包下的脚本使用
    • build.sh 脚本使用
    • envsetup.sh 脚本使用
    • mkfirmware.sh 脚本使用
    • rkflash.sh 脚本使用
  • U-Boot 编译和配置
    • uboot 的配置修改编译操作
  • kernel 的修改编译
  • rootfs 编译和配置
    • buildroot 配置
    • busybox 配置
  • 固件打包

RV1126芯片介绍

RV1126 是 Rockchip 推出的一款编解码芯片,CPU 为 4 核 ARM Cortex-A7 32 位,专用于面向人工智能的机械视觉领域,支持 4K 编解码,支持 8 路 1080P 同时进行编解码,内置 2.0TOPS的 NPU。像这种专用芯片,芯片厂商都会给出芯片的 SDK 包进行二次开发,用它来开发有很多好处,比如:不用安装一下特殊的软件和库,自带交叉工具链、文件系统和第三方库,可以直接编译出系统镜像,开发环境搭建比较容易等等。但是开发自由度不够高,更新软件版本很麻烦,代码里有很多私货(芯片厂商自己定义的代码)等等
在这里插入图片描述

在这里插入图片描述

⚫ app : 存放上层应用程序的目录。
⚫ buildroot :SDK 包使用的文件系统为 buildroot。
⚫ build.sh :编译用的脚本,使用方法后面会教。
⚫ device/rockchip :存放每个平台的一些编译和打包固件的脚步和预备文件。
⚫ docs :存放 RK 开发指导文件、平台支持列表、工具使用文档、Linux 开发指南等。
⚫ envsetup.sh :要修改文件系统时候要设置的环境脚本。
⚫ external : 存放相关的库,包括音频,视频等。
⚫ kernel :kernel 源码。
⚫ makefile :整个 SDK 包编译的 Makefile。
⚫ mkfirmware.sh :固件打包使用的脚本,默认在当前路径下的 rockdev 目录。
⚫ prebuilts : 存放交叉编译工具链。
⚫ rkbin: 存放固件和工具。
⚫ rkflash.sh : linux 下的系统烧录脚本。
⚫ tools :存放固件和工具的目录。
⚫ u-boot :U-boot 源码目录。
⚫ rockdev:存放编译输出固件的目录(整个 SDK 包编译完成后就会创建

rv1126 模块代码目录相关说明

什么叫做模块代码?一个完整的 SDK 包除了 kernel、u-boot、buildroot 之外,还需要提供上层的第三方库和 APP,第三方库和 APP 合起来叫做模块代码。

SDK 包下的脚本使用

build.sh 脚本使用

查看 build.sh 使用帮助

morgan@morgan-machine:~/Work/rv1126$ ./build.sh lunch -h
Usage: build.sh [OPTIONS]
Available options:
BoardConfig*.mk    -switch to specified board config
lunch              -list current SDK boards and switch to specified board config
uboot              -build uboot
spl                -build spl
loader             -build loader
kernel             -build kernel
modules            -build kernel modules
toolchain          -build toolchain
rootfs             -build default rootfs, currently build buildroot as default
buildroot          -build buildroot rootfs
ramboot            -build ramboot image
multi-npu_boot     -build boot image for multi-npu board
yocto              -build yocto rootfs
debian             -build debian10 buster/x11 rootfs
distro             -build debian10 buster/wayland rootfs
pcba               -build pcba
recovery           -build recovery
all                -build uboot, kernel, rootfs, recovery image
cleanall           -clean uboot, kernel, rootfs, recovery
firmware           -pack all the image we need to boot up system
updateimg          -pack update image
otapackage         -pack ab update otapackage image (update_ota.img)
sdpackage          -pack update sdcard package image (update_sdcard.img)
save               -save images, patches, commands used to debug
allsave            -build all & firmware & updateimg & save
check              -check the environment of building
info               -see the current board building information
app/<pkg>          -build packages in the dir of app/*
external/<pkg>     -build packages in the dir of external/*

实际编译测试使用耗时

morgan@morgan-machine:~/Work/rv1126$ time ./build.sh
processing board option: allsave
processing option: allsave
.....
vccio7-supply 
regulator-min-microvolt =  1800mV
regulator-max-microvolt =  1800mV
Running build_allsave succeeded.

real	116m26.217s
user	244m36.079s
sys		41m30.641s

envsetup.sh 脚本使用

envsetup.sh 脚本主要的作用是,使能 buildroot 的配置文件。在 RV1126 这个芯片里,一共可以选择的配置文件有 3 种分别为:文件系统的配置文件,recovery 分区的配置文件(此分区主要是用作升级和复原的文件系统,它也是一个文件系统)和 libs 的配置文件(生成一些库,方便
我们写应用层代码做测试,导出文件系统的库文件)。

mkfirmware.sh 脚本使用

mkfirmware.sh 脚本主要的作用是,把 uboot、kernel、文件系统等等进行打包和生成镜像。

rkflash.sh 脚本使用

rkflash.sh 脚本主要的作用是,在 linux 系统下进行固件的烧录

U-Boot 编译和配置

RK 官方提供了很方便的编译方法,直接运行以下./build.sh uboot 命令可以编译 uboot。

morgan@morgan-machine:~/Work/rv1126$ ./build.sh uboot

编译完成后,会在 u-boot 目录下生成 uboot.img 文件和 rv1126_spl_loader_v1.08.108.bin 文件,uboot.img 文件就是我们要烧录的 img 镜像,rv1126_spl_loader_v1.08.108.bin 是启动引导uboot 的文件
在这里插入图片描述

uboot 的配置修改编译操作

选择要修改 Uboot 配置文件,从板级文件知道

 morgan@morgan-machine:~/Work/rv1126/u-boot$ make alientek_rv1126_defconfig

进入图形界面配置

morgan@morgan-machine:~/Work/rv1126/u-boot$ make menuconfig

把.config 保存为 defconfig

morgan@morgan-machine:~/Work/rv1126/u-boot$ make savedefconfig
scripts/kconfig/conf  --savedefconfig=defconfig Kconfig

更新修改好的配 置文件到alientek_rv1126_defconfig

morgan@morgan-machine:~/Work/rv1126/u-boot$ cp defconfig configs/alientek_rv1126_defconfig

重新编译 uboot

morgan@morgan-machine:~/Work/rv1126$ ./build.sh uboot

在这里插入图片描述
红色框里打印日期为“2024-01-12 22:34:42

kernel 的修改编译

选择要修改的 kernel 配置文件

morgan@morgan-machine:~/Work/rv1126/kernel$ make ARCH=arm alientek_rv1126_defconfig
#
# configuration written to .config
#

进入图形界面配置

morgan@morgan-machine:~/Work/rv1126/kernel$ make ARCH=arm alientek_rv1126_defconfig

把.config 保存为 defconfig

morgan@morgan-machine:~/Work/rv1126/kernel$ make ARCH=arm savedefconfig
scripts/kconfig/conf  --savedefconfig=defconfig Kconfig

更 新 修 改 好 的 配 置 文 件 到 alientek_rv1126_defconfig

 cp defconfig arch/arm/configs/alientek_rv1126_defconfig 

编译内核

 morgan@morgan-machine:~/Work/rv1126$ ./build.sh kernel

在这里插入图片描述

配置完成后我们可以直接用 build.sh kernel 脚本进行编译了,就会生成我们想要的 zboot.img 文件
烧录成功会自动重启,我们查看打印信息内核有没有替换成功
在这里插入图片描述

rootfs 编译和配置

buildroot 配置

在 SDK 包源码目录下,运行以下命令进行配置 buildroot:
配置 buildroot 对应 defconfig

morgan@morgan-machine:~/Work/rv1126$ source envsetup.sh alientek_rv1126
Top of tree: /home/morgan/Work/rv1126
===========================================

#TARGET_BOARD=rv1126
#OUTPUT_DIR=output/alientek_rv1126
#CONFIG=alientek_rv1126_defconfig

===========================================
make: 进入目录“/home/morgan/Work/rv1126/buildroot”
  GEN     /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/Makefile
/home/morgan/Work/rv1126/buildroot/build/defconfig_hook.py -m /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/build/buildroot-config/tristate.config BR2_CONFIG=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.config HOST_GCC_VERSION="9" BUILD_DIR=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/build SKIP_LEGACY= BR2_DEFCONFIG=/home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/build/buildroot-config/conf --defconfig=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig Config.in
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:142:warning: override: reassigning to symbol BR2_PACKAGE_RKWIFIBT
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:179:warning: override: reassigning to symbol BR2_PACKAGE_UPDATE
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:185:warning: override: reassigning to symbol BR2_PACKAGE_RKSCRIPT
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:208:warning: override: reassigning to symbol BR2_TARGET_GENERIC_HOSTNAME
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:209:warning: override: reassigning to symbol BR2_TARGET_GENERIC_ISSUE
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:210:warning: override: reassigning to symbol BR2_TARGET_GENERIC_ROOT_PASSWD
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:235:warning: override: reassigning to symbol BR2_PACKAGE_ALSA_UTILS
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:236:warning: override: reassigning to symbol BR2_PACKAGE_ALSA_UTILS_ALSACONF
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:237:warning: override: reassigning to symbol BR2_PACKAGE_ALSA_UTILS_AMIXER
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:238:warning: override: reassigning to symbol BR2_PACKAGE_ALSA_UTILS_APLAY
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:239:warning: override: reassigning to symbol BR2_PACKAGE_ALSA_PLUGINS
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:240:warning: override: reassigning to symbol BR2_PACKAGE_LIBMAD
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:243:warning: override: reassigning to symbol BR2_PACKAGE_ALSA_CONFIG
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:251:warning: override: reassigning to symbol BR2_PACKAGE_LIBV4L
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:252:warning: override: reassigning to symbol BR2_PACKAGE_LIBV4L_UTILS
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:253:warning: override: reassigning to symbol BR2_PACKAGE_CAMERA_ENGINE
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:315:warning: override: reassigning to symbol BR2_PACKAGE_MPP
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:316:warning: override: reassigning to symbol BR2_PACKAGE_MPP_ALLOCATOR_DRM
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:318:warning: override: reassigning to symbol BR2_PACKAGE_LINUX_RGA
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:343:warning: override: reassigning to symbol BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTP
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:344:warning: override: reassigning to symbol BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTPMANAGER
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:345:warning: override: reassigning to symbol BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTSP
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:351:warning: override: reassigning to symbol BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEORATE
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:352:warning: override: reassigning to symbol BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VORBIS
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:353:warning: override: reassigning to symbol BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OGG
/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.rockchipconfig:558:warning: override: reassigning to symbol BR2_PACKAGE_NTP_NTPD
#
# configuration written to /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/.config
#
make: 离开目录“/home/morgan/Work/rv1126/buildroot”

进入图形化界面

morgan@morgan-machine:~/Work/rv1126$ make menuconfig

配置完成好保存。运行以下命令进行保存和重新编译(注意:buildroot 有时候不能生成一些配置选项,要运行./build.sh cleanall 命令清除,在编译)

保存配置文件到 buildroot/configs/alientek_rv1126_defconfig

morgan@morgan-machine:~/Work/rv1126$ make savedefconfig
umask 0022 && make -C /home/morgan/Work/rv1126/buildroot O=/home/morgan/Work/rv1126/buildroot/output/alientek_rv1126 savedefconfig
  GEN     /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/Makefile
grep "#include" /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig > /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig.split || true
cat /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig >> /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig.split
/home/morgan/Work/rv1126/buildroot/build/defconfig_hook.py -s /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig.split /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig
rm /home/morgan/Work/rv1126/buildroot/configs/alientek_rv1126_defconfig.split

编译

morgan@morgan-machine:~/Work/rv1126$ ./build.sh rootfs

busybox 配置

在 SDK 包源码目录下,运行以下命令进行配置 busybox
/配置 buildroot 对应 defconfig

morgan@morgan-machine:~/Work/rv1126$ source envsetup.sh alientek_rv1126

进入图形化界面

morgan@morgan-machine:~/Work/rv1126$ make busybox-menuconfig

保存刚刚修改的配置

morgan@morgan-machine:~/Work/rv1126$ make busybox-menuconfig

重新编译文件系统

固件打包

官方提供了一个脚本,运行脚本命令如下所示(在 SDK 源码目录下运行)
选择环境变量 alientek_rv1126

morgan@morgan-machine:~/Work/rv1126$ source envsetup.sh alientek_rv1126
morgan@morgan-machine:~/Work/rv1126$ ./mkfirmware.sh 
/usr/bin/fakeroot
Making /home/morgan/Work/rv1126/rockdev/demo.img from /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/demo (auto sized)
Making /home/morgan/Work/rv1126/rockdev/demo.img from /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/demo with size(50M)
记录了0+0 的读入
记录了0+0 的写出
0字节已复制,8.48e-05 s,0.0 kB/s
mke2fs 1.43.9 (8-Feb-2018)
丢弃设备块: 完成                            
创建含有 51200 个块(每块 1k)和 12824 个inode的文件系统
文件系统UUID:59f4ffb9-8e21-425c-ba5d-c9064bcd84f2
超级块的备份存储于下列块: 
	8193, 24577, 40961

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(4096 个块)完成
将文件复制到设备:__populate_fs: 无法为ext2文件系统分配块 写入文件“ECM_DEMO”时
mke2fs: 无法为ext2文件系统分配块 于填充文件系统时
Retring with increased size....(1/10)
Making /home/morgan/Work/rv1126/rockdev/demo.img from /home/morgan/Work/rv1126/buildroot/output/alientek_rv1126/demo with size(54M)
记录了0+0 的读入
记录了0+0 的写出
0字节已复制,0.0001081 s,0.0 kB/s
mke2fs 1.43.9 (8-Feb-2018)
丢弃设备块: 完成                            
创建含有 55296 个块(每块 1k)和 13832 个inode的文件系统
文件系统UUID:881d2979-37bc-4bf4-93ea-91ba83a1332b
超级块的备份存储于下列块: 
	8193, 24577, 40961

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(4096 个块)完成
将文件复制到设备:完成
写入超级块和文件系统账户统计信息: 已完成

tune2fs 1.43.9 (8-Feb-2018)
设置最大挂载次数为 -1
将检查间隔设置为 0 秒
create rootfs.img...done.
create parameter...done.
/home/morgan/Work/rv1126/device/rockchip/rv1126_rv1109/parameter-buildroot-fit.txt
0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00200000@0x00038000(rootfs),0x00060000@0x00238000(oem),0x00200000@0x00298000(userdata),0x00200000@0x00498000(media),-@0x00698000(demo:grow)
create recovery.img...done.
create misc.img...done.
Making /home/morgan/Work/rv1126/rockdev/userdata.img from /home/morgan/Work/rv1126/device/rockchip/userdata/userdata_normal (auto sized)
Making /home/morgan/Work/rv1126/rockdev/userdata.img from /home/morgan/Work/rv1126/device/rockchip/userdata/userdata_normal with size(5M)
记录了0+0 的读入
记录了0+0 的写出
0字节已复制,0.0001265 s,0.0 kB/s
mke2fs 1.43.9 (8-Feb-2018)
丢弃设备块: 完成                            
创建含有 5120 个块(每块 1k)和 1280 个inode的文件系统

正在分配组表: 完成                            
正在写入inode表: 完成                            
将文件复制到设备:完成
写入超级块和文件系统账户统计信息: 已完成

tune2fs 1.43.9 (8-Feb-2018)
设置最大挂载次数为 -1
将检查间隔设置为 0 秒
create uboot.img...done.
uboot fotmat type is fit, so ignore trust.img...
create loader...done.
create boot.img...done.
 Image: image in rockdev is ready

打包成功会在源码目录下新建一个“rockdev”目录,把需要烧录的文件打包进里面
在这里插入图片描述
可以看出很多文件都是通过软连接,简单的讲解每个文件的作用:
boot.img:里面包含了设备树、kernel 和 logo。注:里面有多个设备树文件。
demo.img:正点原子官方出厂 demo。
MiniLoaderAll.bin:此文件负责初始化 DDR,引导 Uboot。相当于 SPL 或者 TF-A。
misc.img:常用来作为系统升级时或者恢复出厂设置时使用。
oem.img:提供给厂商用的分区文件,像 RK 把他们自己库都放到这里。
parameter.txt:分区相关的文件。
recovery.img:升级相关的文件系统。
rootfs.img:buildroot 的文件系统。
uboot.img:里面包含 uboot 和设备树。
update.img:整个 SDK 的 img。
userdata.img:用户分区。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI教我学编程之C#变量及实例演示

前言 在AI教我学编程之AI自刀 这篇文章中&#xff0c;我们知道了变量的基础类型&#xff0c;那么变量在C#中有什么作用呢&#xff1f;我们一起来看看吧&#xff01; 目录 重点先知 变量 变量类型 实例演示 变量声明 实例演示 提出疑问 初始化变量 自动初始化 多变量声明 实…

MySQL 从零开始:05 MySQL 数据类型

文章目录 1、数值类型1.1 整形数值1.2 浮点型数值1.3 布尔值 2、日期和时间类型3、字符串类型3.1 CHAR 和 VARCHAR3.2 BINARY 和 VARBINARY3.3 BLOB 和 TEXT3.4 ENUM 类型3.5 SET 类型 4、空间数据类型5、JSON 数据类型5、JSON 数据类型 前面的讲解中已经接触到了表的创建&…

0基础学习VR全景平台篇第137篇:720VR全景,DJI无人机遥控器调参

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 这节课以御2为例 介绍的是无人机调参 步骤一&#xff1a;下载DJI Go 4并注册账号 步骤二&#xff1a;拿下遥杆并装好&#xff0c;展开遥控天线。将无人机与遥控器相连&#xff…

【开源】基于JAVA语言的固始鹅块销售系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

Camunda Event Based Gateway

一&#xff1a;bpmn 二&#xff1a;java 如果没有收到信号&#xff0c;超过等待时间&#xff0c;流程进入总经理审批&#xff0c;如果在等待时间内收到信号&#xff0c;流程进入副总经理审批。 示例1&#xff1a;发送信号事件&#xff0c;流程进入副总经理审批。 repository…

【Python机器学习】决策树集成——梯度提升回归树

理论知识&#xff1a; 梯度提升回归树通过合并多个决策树来构建一个更为强大的模型。虽然名字里有“回归”&#xff0c;但这个模型既能用于回归&#xff0c;也能用于分类。与随机森林方法不同&#xff0c;梯度提升采用连续的方式构造树&#xff0c;每棵树都试图纠正前一…

推荐算法常见的评估指标

推荐算法评估指标比较复杂&#xff0c;可以分为离线和在线两部分。召回、粗排、精排和重排由于定位区别&#xff0c;其评估指标也会有一定区别&#xff0c;下面详细讲解。 1 召回评价体系 召回结果并不是最终推荐结果&#xff0c;其本质是为后续排序层服务的&#xff0c;故核…

学习记录10-L6406E报错处理

前言 问题&#xff1a;在编译时报如下错误 ..\OBJ\LCD.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.constdata). ..\OBJ\LCD.axf: Error: L6406E: No space in execution regions with .ANY selector matching lcd_init.o(i.LCD…

rke2 Offline Deploy Rancher v2.8.0 latest (helm 离线部署 rancher v2.8.0)

文章目录 1. 预备条件2. 为什么是三个节点&#xff1f;​3. 配置私有仓库4. 介质清单5. 安装 helm6. 安装 cert-manager6.1 下载介质6.2 镜像入库6.3 helm 部署6.4 cert-manager 卸载 7. 安装 rancher7.1 镜像入库7.2 helm 安装 8. 验证9. 界面预览10. 卸载 1. 预备条件 所有支…

【SAP】如何删除控制范围

经历就是财富&#xff0c;可你终将遗忘。期望文字打败时间。 本周心惊胆战地在配置系统删除了一个控制范围&#xff0c;还是有些收获&#xff0c;特此记录一下。 背景&#xff1a;在删除控制范围之前&#xff0c;我主要做了如下配置。 定义控制范围&#xff08;自动生成了成本…

层叠布局(Stack)

目录 1、概述 2、开发布局 3、对齐方式 3.1、TopStart 3.2、Top 3.3、TopEnd 3.4、Start 3.5、Center 3.6、End 3.7、BottomStart 3.8、Bottom 3.9、BottomEnd 4、Z序控制 5、场景示例 1、概述 层叠布局&#xff08;StackLayout&#xff09;用于在屏幕上预留一…

ChatGPT能帮助我们人类做什么

一、ChatGPT可以在多个方面帮助人类&#xff1a; 回答问题&#xff1a; ChatGPT可以回答各种问题&#xff0c;提供信息和解释概念。 创造性写作&#xff1a; 它可以生成文章、故事、诗歌等创意性文本。 学术辅助&#xff1a; ChatGPT可以辅助学术研究&#xff0c;提供解释、背…

如何生成文本: 通过 Transformers 用不同的解码方法生成文本

如何生成文本: 通过 Transformers 用不同的解码方法生成文本 假设 $p0.92$&#xff0c;Top-p 采样对单词概率进行降序排列并累加&#xff0c;然后选择概率和首次超过 $p92%$ 的单词集作为采样池&#xff0c;定义为 $V_{\text{top-p}}$。在 $t1$ 时 $V_{\text{top-p}}$ 有 9 个…

串行Nor Flash的结构和参数特性

文章目录 引言1、Nor Flash的结构2、Nor Flash的类别3.标准Serial Nor Flash的特征属性1.Wide Range VCC Flash2.Permanent Lock3.Default Lock Protection4.Standard Serial Interface5.Multi-I/O6.Multi-I/O Duplex (DTR)7.XIP&#xff08;片上执行&#xff09; 4.标准Serial…

Java SE入门及基础(11)

程序调试 1. 什么是程序调试 当程序出现问题时&#xff0c;我们希望程序能够暂停下来&#xff0c;然后通过我们操作使代码逐行执行&#xff0c;观察整个过程中变量的变化是否按照我们设计程序的思维变化&#xff0c;从而找问题并解决问题&#xff0c;这个过程称之为程序调试…

Openstack组件glance对接swift

2、glance对接swift &#xff08;1&#xff09;可直接在数据库中查看镜像存放的位置、状态、id等信息 &#xff08;2&#xff09;修改glance-api的配置文件&#xff0c;实现对接swift存储&#xff08;配置文件在/etc/glance/glance-api.conf&#xff0c;建议先拷贝一份&#x…

基于反卷积方法的重大突破:结构光系统中的测量误差降低3倍

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 结构光三维测量技术在工业自动化、逆向工程和图形学领域越来越受欢迎。然而&#xff0c;现有的测量系统在成像过程中存在不完美&#xff0c;会导致在不连续边缘周…

nuxt pm2使用、启动、问题解决方案

pm2简介 pm2是一个进程管理工具,可以用它来管理node进程&#xff0c;并查看node进程的状态&#xff0c;当然也支持性能监控&#xff0c;进程守护&#xff0c;负载均衡等功能&#xff0c;在前端和nodejs的世界中用的很多 pm2安装 安装pm2: $ npm install -g pm2查看pm2的安装…

Kafka基本介绍

消息队列 产生背景 消息队列&#xff1a;指的数据在一个容器中&#xff0c;从容器中一端传递到另一端的过程 消息(message): 指的是数据&#xff0c;只不过这个数据存在一定流动状态 队列(queue): 指的容器&#xff0c;可以存储数据&#xff0c;只不过这个容器具备FIFO(先进…

Linux技术,winSCP连接服务器超时故障解决方案

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 故障现象 使用 sftp 协议连接主机时, 明显感觉缓慢且卡顿,并且时常出现如下报错: 点击重新连接后,又有概率重新连接上; 总之在"连接上"和&…