【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 savedefconfigGEN /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
重新编译文件系统
相关文章:

【RV1126 学习】SDK/ U-Boot/kernel/rootfs 编译学习
文章目录 RV1126芯片介绍rv1126 模块代码目录相关说明 SDK 包下的脚本使用build.sh 脚本使用envsetup.sh 脚本使用mkfirmware.sh 脚本使用rkflash.sh 脚本使用 U-Boot 编译和配置uboot 的配置修改编译操作 kernel 的修改编译rootfs 编译和配置buildroot 配置busybox 配置 RV112…...
Golang 使用 AST 获取方法和参数名以及应用举例
背景 在做一些自动生成的代码工作时,有时需要知道方法以及对应的参数名 如果仅是方法,利用反射机制就可以解决 而参数名,程序编译后,已经丢失 可以通过 AST 事先获取方法的参数名 有了方法、参数名,加上反射&…...

DC-DC变换集成电路芯片B34063——工作电压范围宽,静态电流小
B34063为一单片DC-DC变换集成电路,内含温度补偿的参考电压源(1.25V)、比较器、能有效限制电流及控制工作周期的振荡器,驱动器及大电流输出开关管等,外配少量元件,就能组成升压、降压及电压反转型DC-DC变换器。 主要特点: ● 工作…...

强力推荐:本地文件加密软件—超详细加密步骤来了!
在数字化时代,数据安全问题日益受到人们的关注。 为了保护个人和企业的重要信息不被泄露,越来越多的人开始使用文件加密软件。 尤其是常常会有数据泄露风险的企业更是需要一款非常给力的加密工具来保护企业数据安全。 一、选择合适的加密软件 在选择加…...
在qml中,ListModel可以与WorkerScript一起使用,从多个线程访问列表模型
在QML中,您可以使用ListModel和WorkerScript一起实现多线程访问列表模型。以下是一个简单的例子,演示了如何在QML中使用这两个元素: import QtQuick 2.15 import QtQuick.Controls 2.15ApplicationWindow {visible: truewidth: 400height: 3…...

rocketmq实现延迟消息
SpringBoot整合RocketMQ发送延时消息 springboot rocketmq 延迟消息 Windows下RocketMQ安装及可视化界面搭建 Java 客户端 RocketMQ延迟消息 项目背景 项目中有延时消息的需求,综合考量RocketMQ比较适合。 RocketMQ支持多维度的延迟级别 支持多种消息类型 基…...

vue倒计时60秒改变按钮状态效果demo(整理)
你可以使用Vue的计时器和绑定状态的方法来实现这个功能。 首先,在data中添加一个计时器countdown,初始值为0。 data() {return {countdown: 0} }<template><div><button click"startCountdown" :disabled"countdown > …...

多区域isis配置实验
一、预习: IS-IS:Intermediate System to Intermediate System,中间系统到中间系统,是ISO为它的CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议,后来为了提供对IP路由的支持&…...

Ubuntu 22.04.3 LTS arm64 aarch64 ISO jammy-desktop-arm64.iso 下载
Ubuntu 22.04.3 LTS (Jammy Jellyfish) Daily Build 参考 Are there official Ubuntu ARM / aarch64 desktop images? - Ask Ubuntu...
软件测试面试必备知识
随着软件测试领域对于技术要求越来越清晰,到现在测试人员在市场上的岗位需求也变得越来越复杂。极大部分的企业都开始对自动化测试岗位有了更多的需要。自然而然,面试就相对于非常重要了。 网络上有着各式各样的测试框架的存在,我也不知道我…...

4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案
媒资管理模块 - 视频处理 文章目录 媒资管理模块 - 视频处理一、视频转码1.1 视频转码介绍1.2 FFmpeg 基本使用1.2.1 下载安装配置1.2.2 转码测试 1.3 工具类1.3.1 VideoUtil1.3.2 Mp4VideoUtil1.3.3 测试工具类 二、分布式任务处理2.1 分布式任务调度2.2 XXL-JOB 配置执行器 中…...

K8S集群重新初始化--详细过程
K8S集群重新初始化 0、当前环境1、master节点1.1、在master节点执行下面reset命令:1.2、手动清除配置信息,这一步很关键:1.3、重新引导集群1.4、创建配置目录,并复制权限配置文件到用户目录下:1.5 查看集群状态1.6 安装…...
服务器 Linux常见指令
删除文件 删除文件 单个删除:rm -f 文件名 rm -f 2018_12_26.stderrout.log.060121612 --执行完成即将这个文件删除删除文件夹 rm -rf 路径/目录名tar命令 压缩 tar -cvf [文件名].tar [文件目录] //打包成.tar文件 tar -jcvf [文件名].tar.bz2 [文件目录]…...
C++合并K个有序链表
本篇博客介绍如何使用C合并k个有序链表,在代码中会用到std::priority_queue,首先需要介绍一下std::priority_queue的用法,介绍完std::priority_queue后将介绍如何使用std::priority_queue来辅助合并k个有序链表。 一、C priority_queue用法介…...

win10在启动游戏时报错,提示“d3dx9_25.dll文件丢失”,怎么办?d3dx9_25.dll丢失如何自动修复
一、d3dx9_25.dll文件是什么? d3dx9_25.dll是DirectX的一部分,DirectX是一种由微软开发的专门处理与多媒体、游戏程序和视频相关的应用程序接口。d3dx9_25.dll文件是DirectX9中一个重要的dll文件,主要负责处理3D图形程序,作用是帮…...
16. 蒙特卡洛强化学习基本概念与算法框架
文章目录 1. 是什么2. 有何优点3. 基本概念3.1 立即回报3.2 累积回报3.3 状态值函数3.4 行为值函数3.4 回合(或完整轨迹,episode)3.5 多个回合(或完整轨迹)的描述 4.MC强化学习问题的正式描述5. 蒙特卡洛(M…...
QT中程序执行时间精准计算的三种方法及对比
一.QT程序在提升程序性能的调试中经常要计算一段程序的执行时间,下面介绍两种简单的实现方式,精确度都可以达到ms。 1.方式一 (1)代码: #include <QDateTime> qDebug() << "Current_date_and_tim…...
js下载方法分享*
JavaScript可以使用浏览器的API实现文件的下载,以下是一种常用的方法: 假设你已经有了一个文件 URL,你可以创建一个新的 a 标签,并将 href 属性设置为文件的 URL,然后模拟点击这个标签以开始下载。 function downloa…...
C# Stopwatch类_性能_时间计时器
文章只含部分属性方法等,有想了解全面的在下面链接中可以查看:.NET API browser Stopwatch 类 (System.Diagnostics) | Microsoft Learn 一、什么是Stopwatch Stopwatch:提供一组方法和属性,可以准确的测量运行时间。使用的时候需…...

鸿蒙原生应用再添新丁!天眼查 入局鸿蒙
鸿蒙原生应用再添新丁!天眼查 入局鸿蒙 来自 HarmonyOS 微博1月12日消息,#天眼查启动鸿蒙原生应用开发#作为累计用户数超6亿的头部商业信息查询平台,天眼查可以为商家企业,职场人士以及普通消费者等用户便捷和安全地提供查询海量…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...