【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中
- 一、分区、下载、GPIO等杂项相关
- 二、开机启动流程代码分析
- 二、OpenWFD 显示屏模块
- 三、Touch Panel 触摸屏模块
- 四、QUPv3 及 QNX Host透传配置
- 五、Camera 摄像头模块(当前正在更新中...)
- 六、网络相关模块(NFS、VLAN、telnet)
- 七、网络相关模块(Ethernet MAC)
- 八、Security 安全策略(QNX secpol、Android SELinux)
- 九、Thermal 温控策略
- 十、QNX 侧常用的调试命令
- 2023年8月20日 Note Update:
有些粉丝看我有些内容写的比较深入,以为我是高通负责相应模块的内部人员,
澄清一下,我只是一个在做基于SA8295P
芯片项目的BSP
开发工程师,专栏参考代码是原生SA8295P
基线代码。
.
本专栏主要目的是:利用工作之外的时间去深入代码 分析底层的代码实现原理,来提高自身的技术能力。
实际工作中,有些人可能只是一个螺丝钉的角色,只对当前做的事精通,但其他模块领域一窍不通;
有些人,可能只是会调会配,但为什么要这样配这样调,可能就说不太清楚了。
这也是我想去解决的问题,兼顾知识广度和深度,会配,会调,也知道为什么要这样配这样调。
简单来说就是,我希望自已目前做的事,通过我自身的努力, 做到懂原理懂流程懂代码,而不是简单的代码搬运工。
要想做到这个程度,肯定很难,但我一定会努力,慢慢学习,总结,以更新博客。
.
本专栏文章内容主要是个人工作之外的自我学习总结分享,不敢及不会泄露公司相关的所有信息,不敢也不会泄露高通的代码文档!!!。
.
本专栏介绍如下:
【高通原生代码版本】:SA8295p-HQX-4-2-4-0_HLOS_dev_qnx.tar.gz
,SA8295_AU_LINUX_ANDROID_LA.AU.1.4.8.R1.10.00.00.1083.005
【文章类型】:晚上下班后在家、周末在家分析代码自学所产出的自学总结文档;协助粉丝兄弟咨询的问题调试分析总结
【涉及领域】:除Audio
外的其他所有BSP
模块(Audio
我也有相关的基础,但目前工作不会涉及,所以优先级放后)
【广度预期】:按由广到精的思路,先把 SA8295 各个模块做到满足工作需求,各模块做到会配、会调、会分析。
【深度预期】:精力有限,不可能所有模块都精通,目前先侧重三方面:系统启动流程 > 屏/TP > 摄像头,其他的模块会调会配会分析就够了。
【专栏更新时间】:持续学习总结,持续更新(毕竟由广到精,想要对SA2895平台有一定的了解,得持续学习,不是一时半会就能达成的)
.
老规矩,大家有啥遇到的问题,或者有哪个方面想了解的,也可以私信给我,如果我懂的且有时间的话,可以协助一起分析下。
私信时请说明:问题详细描述,预期现象,当前现象,当前分析进展 及 相关log
汇总链接:
《【SA8295P 源码分析】系列文章链接汇总》
《【SA8295P 源码分析】00 - 系列文章链接汇总》
本系列正文链接如下:
一、分区、下载、GPIO等杂项相关
- 《【SA8295P 源码分析】01 - SA8295P 芯片介绍》
- 《【SA8295P 源码分析】02 - SA8295P 整包镜像分析》
- 《【SA8295P 源码分析】41 - SA8295所有镜像位置、拷贝脚本、生成QFIL包》
- 《【SA8295P 源码分析】43 - SA8295 基线代码编译相关的问题 答疑》
- 《【SA8295P 源码分析】45 - 部分镜像解包方法详解:boot_la、boot、vendor_boot、dtb、NON-HLOS、super、persist、metadata、userdata》
- 《【SA8295P 源码分析】48 - QNX 侧GPIO 配置方法、中断配置、调试工具 详解》
- 《【SA8295P 源码分析】52 - 答疑之 QNX 创建镜像、Android定制修改selinux权限,user版本采用enforcing,userdebug版本permissive》
- 《【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用》
- 《【SA8295P 源码分析】62 - Android GVM Kernel 内核 make bootimage 过程分析》
- 《【SA8295P 源码分析】63 - defconfig 解析 之 修改 Kernel 宏控配置应该修改哪些 config 文件才会生效?》
- 《【SA8295P 源码分析】49 - Android编译报错:check_vintf.cpp For kernel requirements at matrix level 6》
二、开机启动流程代码分析
- 【试读】《【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析》
- 《【SA8295P 源码分析】04 - SA8295P QNX Host 上电开机过程中的各组件功能介绍》
- 《【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码)》
- 【试读】《【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl() 函数代码分析》
- 《【SA8295P 源码分析】07 - XBL Loader 解析 sbl1_config_table 规则分析》
- 《【SA8295P 源码分析】08 - XBL Loader 加载 SMSS、XBL Config、SHRM、CDT 、DDR、APDP、RamDump、OEM_MISC、AOP、QSEE过程分析》
- 《【SA8295P 源码分析】09 - XBL Loader 加载 QSEE、SEC、CPUCPFW、QHEE、APPSBL过程分析》
- 《【SA8295P 源码分析】53 - mifs.build.tmpl 脚本详解:启动QNX procnto-smp-instr微内核、启动QNX串口终端shell、加载解析并执行ifs2_la.img》
- 《【SA8295P 源码分析】54 - /ifs/bin/startupmgr 程序工作流程分析 及 script.c 介绍》
- 《【SA8295P 源码分析】55 - ifs2_la.img 镜像加载解析过程分析》
- 待更新:
(1)《【SA8295P 源码分析】VMM_Android 启动过程分析》
二、OpenWFD 显示屏模块
- 《【SA8295P 源码分析】70 - QAM8295P 原理图参考设计 之 DP、eDP 接口硬件原理分析》
- 《【SA8295P 源码分析】71 - QAM8295P 原理图参考设计 之 MIPI DSI 接口硬件原理分析》
- 《【SA8295P 源码分析】72 - WFD DP/eDP、MIPI DSI 显示屏软件代码该如何配置? 有什么差异?》
- 《【SA8295P 源码分析】73 - OpenWFD 显示驱动库 libDP2_COMMON.so 源码分析》
display bringup
配置及调试过程分析:
- 《【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析》
- 《【SA8295P 源码分析】11 - HQX Display(OpenWFD)仪表屏、中控屏 Bringup 代码移植步骤》
- 《【SA8295P 源码分析】40 - OpenWFD 显示屏配置文件 graphics_ADP_STAR.conf 、qcdisplaycfg_ADP_STAR_LA.xml 的解析流程》
- 《【SA8295P 源码分析】56 - OpenWFD 显示驱动库 libDSI_MAX96789_0.so 调用及解析流程分析》
- 《【SA8295P 源码分析】57 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_Init 显示屏初始化函数 代码分析》
- 《【SA8295P 源码分析】58 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_SetPower上下电流程及QDI_Panel_GetInfo 获取显示屏信息等代码分析》
- 《【SA8295P 源码分析】59 - QNX如何 Dump 显示图像 之 surfacedump 功能 源码分析》
- 《【SA8295P 源码分析】61 - QNX如何 Dump 显示图像 之 echo surfacedump=n [m] > /dev/displaylog 命令代码调用流程分析》
- 《【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总》
- 《【SA8295P 源码分析】12 - HQX Display(OpenWFD)调试命令介绍》
- 待更新:
(1)《【SA8295P 源码分析】Android GVM 如何将图片给到QNX Host Disply 驱动显示》
openwfd
服务启动过程分析:
- 《【SA8295P 源码分析】37 - OpenWFD Server 启动流程 之 openwfd_server.c main()函数源码分析》
- 《【SA8295P 源码分析】38 - OpenWFD Server 启动流程 之 WFD_ClientMgr 初始化 之 WFD Device 设备初始化源码分析》
- 《【SA8295P 源码分析】39 - OpenWFD Server 启动流程 之 WFD_ClientMgr 初始化 之 WFD Port 端口初始化源码分析》
- 《【SA8295P 源码分析】42 - OpenWFD Server 启动流程 之 WFD_ClientMgr 初始化 之 Pipelines、ClientContexts 初始化源码分析》
- 《【SA8295P 源码分析】46 - OpenWFD Server 启动流程 之 /dev/openwfd_server_0 管道事务源码分析》
- 《【SA8295P 源码分析】50 - OpenWFD Server 启动流程 之 wfd_server_tpp 线程池源码分析》
三、Touch Panel 触摸屏模块
TP
触摸点坐标数据,上报到 Android
整个流程分三步:
-
QNX
侧TouchScreen
驱动获取坐标点上报给到Android
内核层
《【SA8295P 源码分析】15 - QNX侧 TouchScreen Panel (TP)触摸屏 Bringup 流程 及 源码分析》
《【SA8295P 源码分析】16 - QNX侧 TouchScreen Panel (TP)线程函数 tp_recv_thread() 源码分析》 -
Android
内核解析出数据,存在/dev/input/event0
对应的buffer[]
环形队列中,待用户空间读取节点时,通过copy_to_user
给到用户空间
《【SA8295P 源码分析】66 - Android 侧内核层 TouchScreen Panel(TP)触摸屏驱动生成 /dev/input/event0 源码分析》 -
Android
用户层输入子系统管理并获取到/dev/input/event0
的数据,此时坐标点数据到达Android
上层用户空间
《【SA8295P 源码分析】67 - Android 侧 模拟输入设备上报 input 事件 之 input 模拟点击坐标 实现源码分析 adb shell input tap 100 600》
《【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析》
四、QUPv3 及 QNX Host透传配置
- 《【SA8295P 源码分析】13 - Android GVM 虚拟机 QUPv3 UART / SPI / I2C功能配置及透传配置》
- 《【SA8295P 源码分析】14 - Passthrough配置文件 /mnt/vm/images/linux-la.config 内容分析》
- 《【SA8295P 源码分析】17 - 设备虚拟化 之 Passthrough透传、Vdev Trap、HAB Socket 原理解析》
- 《【SA8295P 源码分析】33 - Android GVM USB 透传配置》
五、Camera 摄像头模块(当前正在更新中…)
- 《【SA8295P 源码分析】18 - Camera Bringup 流程 及 源码分析》
- 《【SA8295P 源码分析】77 - QNX Camera 之 ais_server 服务 源码分析》
- 《【SA8295P 源码分析】78 - AIS Camera PM Event 电源事件处理函数 CameraPlatformPowerInit() 源码分析》
- 《【SA8295P 源码分析】79 - AIS Camera Event 事件处理函数 AisEngine::EventHandler() 源码分析》
AIS Camera libais_max96756.so
驱动加载初始化函数:CameraDeviceManager::CreateInstance()
《【SA8295P 源码分析】80 - AIS Camera libais_max96756.so 驱动库加载过程分析》AIS Camera Input
输入设备检测函数:AisInputConfigurer::GetInstance()->DetectAll()
,AIS_CONFIGURER_INPUT
模块源码分析AIS Server
服务事件循环处理函数:ais_server_create_client_ctxt()
AIS Camera CCI_I2C
初始化函数:CameraSensorI2C_Init()
,CCI_I2C
通信原理分析,和普通I2C
有什么区别?AIS_CONFIGURER_CSI
模块源码分析AIS_CONFIGURER_IFE
模块源码分析
六、网络相关模块(NFS、VLAN、telnet)
- 《【SA8295P 源码分析】19 - QNX Host NFS 文件系统配置》
- 《【SA8295P 源码分析】20 - GVM Android Kernel NFS Support 配置》
- 《【SA8295P 源码分析】51 - QNX NFS Server + Android NFS Client 完整配置》
- 《【SA8295P 源码分析】21 - Android GVM 虚拟网络 vlan 配置》
- 《【SA8295P 源码分析】44 - 如何替换 NON-HLOS.bin 中的 Wifi Firmware 固件》
- 《【SA8295P 源码分析】47 - AF66T - QCA6696 - QCA6390 - WIFI 功能导通》
- 《【SA8295P 源码分析】69 - Android 侧添加支持 busybox telnetd 服务》
七、网络相关模块(Ethernet MAC)
- 《【SA8295P 源码分析】22 - QNX Ethernet MAC 驱动 之 emac_entry / emac_attach() 函数源码分析》
- 《【SA8295P 源码分析】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析》
- 《【SA8295P 源码分析】24 - QNX Ethernet MAC 驱动 之 emac_pm_sys_pow_mon_thread_hdlr() 系统电源管理线程源码分析》
- 《【SA8295P 源码分析】25 - QNX Ethernet MAC 驱动 之 emac_isr_thread_handler() 中断处理函数 源码分析》
- 《【SA8295P 源码分析】26 - QNX Ethernet MAC 驱动 之 emac_rx_thread_handler() 数据接收线程 源码分析》
- 《【SA8295P 源码分析】27 - QNX Ethernet MAC 驱动 之 emac_tx_thread_handler() 数据发送线程 源码分析》
- 《【SA8295P 源码分析】28 - QNX Ethernet MAC 驱动 之 emac_mdio_link_monitor_thrd() MDIO监控线程 源码分析》
- 《【SA8295P 源码分析】29 - QNX Ethernet MAC 驱动 之 emac_resmgr_init() 资源管理器线程 resource manager 线程 源码分析》
- 《【SA8295P 源码分析】30 - QNX Ethernet MAC 驱动 之 emac_powerup() 上电流程 源码分析》
- 《【SA8295P 源码分析】31 - QNX Ethernet MAC 驱动 之 ifnet 接口emac_init、emac_start、emac_ioctl 源码分析》
- 《【SA8295P 源码分析】32 - QNX Ethernet Phy_Switch 驱动初始化 源码分析》
- 《【SA8295P 源码分析】35 - QNX侧 Marvell 88Q5152 Phy_Switch 导通实录(硬核)》
- 《【SA8295P 源码分析】65 - emac0-phy 与 emac1-switch兼容 方案实现》
- 《【SA8295P 源码分析】36 - MDIO Clause 22、Clause 45 条款介绍》
八、Security 安全策略(QNX secpol、Android SELinux)
- 《【SA8295P 源码分析】74 - QNX secpol 安全策略文件配置详解 及 secpol.bin 编译过程分析》
- 《【SA8295P 源码分析】75 - QNX GVM Secpol 安全策略文件 gvm_la.txt 内容分析解读》
九、Thermal 温控策略
《【SA8295P 源码分析】76 - Thermal 功耗 之 /dev/thermalmgr 相关调试命令汇总》
十、QNX 侧常用的调试命令
- 通过
qnx
进入fastboot
下载模式:reset -f
或 开机过程中串口下一直按Q
- 通过
qnx
串口进入Android GVM
的adb shell
环境:telnet 192.168.133.1
- 通过
Android GVM
的adb shell
环境 进入QNX shell
环境:busybox telnet 192.168.133.2
QNX
侧获取Android
开机log
:cat /dev/shmem/la_gvm.txt
QNX
杀死进程:slay xxxxx
,如slay vmm_service
QNX
重新可写挂载mnt
:mount -uw /mnt
QNX
侧启动log
路径:/dev/pdbg/qcore/bootlog
QNX
侧C
代码中运行 动态启动uart
:(void)system("devc-quipv3 -E -F -b9600 15");
- 查看
GPIO
状态:msmgpiotool dump
# msmgpiotool
commands:dumpinfo <gpio number> [tlmm] 示例:获取 tlmm 的GPIO0 信息 msmgpiotool info 0 info <gpio number> lpass 示例:获取 lpass 的GPIO0 信息 msmgpiotool info 0 lpassinfo <gpio number> ssc 示例:获取 ssc 的GPIO0 信息 msmgpiotool info 0 sscwrite <gpio number> <value> 示例:写 GPIO0 输出1 msmgpiotool write 0 1read <gpio> 示例:读 GPIO0 电平 msmgpiotool read 0 ===> GPIO 0 is Highrawread <gpio> 示例:读 GPIO0 电平 msmgpiotool read 0 ===> 1set-dir <gpio number> <value> 配置 输出输出模式: [0] Input, [1] Outputset-drive <gpio number> <value> 配置 GPIO 驱动能力, drive strength = [n] * 2mA for n[0..15]set-pull <gpio number> <value> 配置拉高拉低悬空: [0] No pull [1] Pull Down [2] Keeper [3] Pull Upset-func <gpio number> <value> 配置引脚函数,GPIO模式无此功能enable-irq <gpio number> <value> 使能 IRQ 中断:[0] Enable [1] Disableclear-irq <gpio> 清除 IRQ 状态set-pol <gpio number> <value> 配置 中断极性 [0] Inverted [1] Normalset-trigger <gpio number> <value> 配置边沿触发还是电平触发: [0] Level [1] Edge# msmgpiotool dump
OFFSET GPIO IN OUT DIR DRIVE PULL ALT FUNCTION TARGET IRQ POL TRIG STS
---------------------------------------------------------------------------------------------
f100000 0 High Low Out 8 mA No pull 1 NONE 0 1 Level 0
f101000 1 High Low Out 8 mA No pull 1 NONE 0 1 Level 0...... 省略 ......
f1e2000 226 High Low In 2 mA Pull down 0 NONE 0 1 Level 0
f1e3000 227 High Low In 2 mA Pull down 0 NONE 0 1 Level 0----------------------------------------LPASS TLMM GPIO Dump---------------------------------------OFFSET LPASS GPIO IN OUT DIR DRIVE PULL ALT FUNCTION HYSTERISIS CTL MISC CFG
---------------------------------------------------------------------------------------------------0x33c0000 0 Low Low Out 8 mA Pull down 0x2 Low 0x20x33c1000 1 Low Low Out 8 mA Pull down 0x2 Low 0x2...... 省略 ......0x33d1000 17 Low Low In 2 mA No pull 0x2 Low 0x00x33d2000 18 Low Low Out 8 mA Pull down 0x2 Low 0x0----------------------------------------SSC TLMM GPIO Dump---------------------------------------OFFSET SSC GPIO IN OUT DIR DRIVE PULL ALT FUNCTION HYSTERISIS CTL MISC CFG
-------------------------------------------------------------------------------------------------0x2b40000 0 Low Low In 2 mA No pull 0x0 Low 0x00x2b41000 1 Low Low In 2 mA No pull 0x0 Low 0x0...... 省略 ......0x2b52000 18 Low Low In 2 mA No pull 0x0 Low 0x00x2b53000 19 Low Low In 2 mA No pull 0x0 Low 0x0
相关文章:
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块(当前正在更新中...)六、网络…...
TCP拥塞控制详解 | 6. 主动队列管理
网络传输问题本质上是对网络资源的共享和复用问题,因此拥塞控制是网络工程领域的核心问题之一,并且随着互联网和数据中心流量的爆炸式增长,相关算法和机制出现了很多创新,本系列是免费电子书《TCP Congestion Control: A Systems …...
前端学习清单
顺序不分先后。 技术名称技术描述技术链接HTML5HTML5是下一代的HTML标准,是一种用于结构化内容的标记语言。MDN|HTMLCSS3CSS3是CSS技术的升级版本,它的最大好处就是可以让网页设计师更加方便的为网页添加各种各样的样式,而不用再局限于文字、…...
go atomic原子操作详细解读
文章目录 概要1、基本知识1.1 原子操作是什么1.2 CPU怎么实现原子操作的? 2、atomic包2.1、 Add函数2.2、CompareAndSwap函数2.3、Swap函数2.4、Load函数2.5、Store函数 3、atomic.Value值 概要 atomic包是golang通过对底层系统支持的原子操作进行封装,…...
Vue用JSEncrypt对长文本json加密以及发现解密失败
哈喽 大家好啊,最近发现进行加密后 超长文本后端解密失败,经过看其他博主修改 JSEncrypt原生代码如下: // 分段加密,支持中文JSEncrypt.prototype.encryptUnicodeLong function (string) {var k this.getKey();//根据key所能编…...
Excel/PowerPoint折线图从Y轴开始(两侧不留空隙)
默认Excel/PowerPoint折线图是这个样子的: 左右两侧都留了大块空白,很难看 解决方案 点击横坐标,双击,然后按下图顺序点击 效果...
C++的类成员对齐
这是个小语法点,之前我们的对齐方式都是使用#pragma pack,这个方式实际是依赖编译器,且粒度粗(如果#pragma pack(1)之后没有#pragma pack(),那就作用整个进程了)。在C11之后引入关键字alignas,以此来实现对齐更加便利,…...
敏感挂载userhelper容器逃逸复现
目录 前言 分析 实验 前言 分析 实验 # Creates a payload cat "#!/bin/sh" > /evil-helper cat "ps > /output" >> /evil-helper chmod x /evil-helper # Finds path of OverlayFS mount for container # Unless the configuration ex…...
深度解读Promise.prototype.finally
由一个问题引发的血案: 手写源码实现Promise.prototype.finally。 我们知道,对于promise来讲,当状态敲定,无论状态兑现或拒绝时都需要调用的函数,可以使用Promise.prototype.finally的回调来实现。那么如何手写实现Pro…...
如何实现24/7客户服务自动化?建设智能客服知识库
客户自助服务是指用户通过企业或者第三方建立的网络平台或者终端,实现相关的自定义处理。实现客户服务自动化,对提高客户满意度、维持客户关系至关重要。客户服务自动化可以帮助企业以更快的速度和更高的效率来满足客户的售后服务要求,以进一…...
和鲸 ModelWhale 与中科可控多款服务器完成适配认证,赋能中国云生态
当前世界正处于新一轮技术革命及传统产业数字化转型的关键期,云计算作为重要的技术底座,其产业发展与产业规模对我国数字经济的高质量运行有着不可取代的推动作用。而随着我国数字上云、企业上云加快进入常规化阶段,云计算承载的业务应用越来…...
selenium +Jmeter 的性能测试
通过Jmeter快速将已有的Selenium 代码以性能测试的方式组织起来,并使用JMeter 丰富的报表展示测试结果 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By driver …...
探索高效的HTTP异步接口测试方法:从轮询等待到自动化方案
本文将深入探讨HTTP异步接口测试的多个方面,包括轮询等待、性能测试以及自动化方案。通过详细的解释和实际案例,帮助您了解如何有效地测试异步接口,确保系统的稳定性和性能。 在现代软件开发中,HTTP异步接口扮演着至关重要的角色&…...
Android资深工程书之LiveData核心组件原理剖析
LiveData是Android架构组件库中的一个类,用于在应用程序组件之间共享数据。它是一种可观察的数据持有者,可以感知应用程序组件的生命周期,并在数据发生变化时通知观察者。 使用LiveData 在Android应用程序中使用LiveData,你可以…...
Vue的五种方法实现加减乘除运算
五种方法的详细说明: 计算属性(Computed Properties): 计算属性是Vue.js提供的一种便捷的属性,它根据依赖的数据动态计算出一个新的值。计算属性的值会被缓存,只有当依赖的数据发生变化时,才会…...
C++(1)Linux基础知识
经济下行,计算机就业形势严峻,为了勉励自己继续进步,继续学习代码提高核心竞争力。 安装QT Creator 首先,安装QT开发工具QT Creator 参考:2021最新Qt6开发环境(Qt Creator)安装以及卸载记录_q…...
接口自动化yaml文件读取与写入
前言 在走进yaml文件之前大家应该都很想知道他是用来干嘛的? 是的是的,他是用来做接口自动化测试的。 我们一起来学习他吧!——(一定要收藏带走哦❤) 1、yaml文件有什么作用呢? ①可作为配置文件使用—…...
Java Map、JSONObject、实体类互转
文章目录 前言Map、JSONObject、实体类互转 前言 使用库 com.alibaba.fastjson2,可完成大部分JSON转换操作。 详情参考文章: Java FASTJSON2 一个性能极致并且简单易用的JSON库 Map、JSONObject、实体类互转 import com.alibaba.fastjson2.JSON; import com.alib…...
在Hive/Spark上执行TPC-DS基准测试 (PARQUET格式)
在上一篇文章:《在Hive/Spark上运行执行TPC-DS基准测试 (ORC和TEXT格式)》中,我们介绍了如何使用 hive-testbench 在Hive/Spark上执行TPC-DS基准测试,同时也指出了该项目不支持parquet格式。 如果我们想要生成parquet格式的测试数据,就需要使用其他工具了。本文选择使用另…...
基于CentOS搭建私有仓库harbor
环境: 操作系统:CentOS Linux 7 (Core) 内核: Linux 3.10.0-1160.el7.x86_64 目录 安装搭建harbor (1)安装docker编排工具docker compose (2)下载Harbor 安装包 (3&…...
PDF怎么转Word?8 个最佳 PDF 转 Word 转换器
PDF 转 Word 转换工具只是一个特殊程序,可以将 PDF(本机和/或扫描)转换为 Microsoft Office Word 格式。将 PDF 导出到 Word 的主要原因之一是满足可编辑文档的需求,尽管还有其他原因。 由于缺少 PDF 阅读器,您可以选…...
老板都爱看的财务数据分析报表,全在这了
老板们都爱看哪些财务数据分析报表?自然是可以帮助他们更好地了解公司的财务状况和经营绩效的那一类财务数据分析报表,比如利润表、资产负债表、现金流量表、应收账款分析报表、应付账款分析报表、库存分析报表等。奥威BI数据可视化工具有一套标准化财务…...
ZooKeeper(zk)与 Eureka 的区别及集群模式比较分析
作者:zhaokk 推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享,打开手机appÿ…...
搜狗拼音占用了VSCode及微信小程序开发者工具快捷键Ctrl + Shit + K 搜狗拼音截图快捷键
修改搜狗拼音的快捷键 右键--更多设置--属性设置--按键--系统功能快捷键--系统功能快捷键设置--取消Ctrl Shit K的勾选--勾选截屏并设置为Ctrl Shit A 微信开发者工具设置快捷键 右键--Command Palette--删除行 微信开发者工具快捷键 删除行:Ctrl Shit K 或…...
PMI-ACP值得考吗?在中国的前景如何?
相信很多小伙伴都听过PMP证书吧,但是对于PMI-ACP则知之甚少。那么同为项目管理证书,PMI-ACP认证的含金量怎么样呢?今天咱们就来聊一聊PMI-ACP敏捷项目管理证书。 PMI-ACP是由PMI(美国项目管理协会)颁发的针对敏捷项目…...
centos 安装防火墙,并开启对应端口号
1.查看防火墙状态: 命令:systemctl status firewalld.service 开启防火墙时,提示没有安装防火墙 [rootlocalhost ~]# systemctl start firewalld.service Failed to start firewalld.service: Unit not found.2.安装防火墙 [rootlocalhost …...
学习微信小程序时间延迟setTimeout和setInterval的使用方法
学习微信小程序时间延迟setTimeout和setInterval的使用方法 setTimeout()setInterval() setTimeout() setTimeout在使用的时候可以实现代码块延迟执行的效果,并且可以设置延迟执行的具体时间。请见如下代码: setTimeout(function() {//要实现延迟执行效…...
Vite好用的前端构建工具
是什么 Vite是Vue的作者尤雨溪开发的 一种新型前端构建工具。 Vite在大型项目开发模式下,打包速度远高于webpack。 Vite 为什么这么快 1. 快速冷启动 Vite只启动一台静态页面的服务器,不会打包全部项目文件代码,服务器根据客户端的请求加…...
Agile Iteration Velocity
【agile iteration velocity】敏捷速度指的平均速度 第四次迭代结束速度: 76 / 4 19 第五次迭代结束速度: (76 24 ) / 5 100 / 5 20...
HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制LazyForEach数据懒加载
LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当LazyForEach在滚动容器中使用了,框架会根据滚动容器可视区域按需创建组件,当组件划出可视区域外时,框架会进行组件销毁回收以降低内存占用。一、接…...
怎么了解百度蜘蛛到哪个网站/seo外链发布平台
概念分析 简单时间轮算法是时间轮算法的入门内容。笔者暂时研究到这块,下面做下详细的分享。 时间轮算法:是指有一条时间闭环履带,每一节代表等长时间,假想有一个指针在这条履带圆心转动,转动速度恒定。当转到某一节时…...
做房产网站在百度推广推广费/关键词挖掘网站
一、Linux 中文件名的命名规范1.严格区分大小写2.可以使用除了“/”以外的任意字符,最长可以达到255个字符,但是不建议使用特殊字符和空格作为用户名。容易造成混淆,可能误将“a b”当成两个文件“a”和“b”3.后缀名,比如“.txt”…...
最专业的网站建设seo优化服务公司/国外浏览器搜索引擎入口
1.1 数据结构 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 例子:就像我们在用 计算机的文件的存储。就是树型存储。 数据结构…...
百度推广智能网站/百度广告标识
...
wordpress动漫小人2019/如何在百度打广告
iphone如何投屏到mac上?相信小伙伴们一定很好奇,下面小编为大家带来了iphone投屏到mac方法教程说明,感兴趣的小伙伴赶紧跟着小编一起来看看吧。iphone投屏到mac教程:iphone和mac的使用人群越来越多,其中投屏功能却难倒了大部分新手用户,许多…...
邢台贴吧/搜索引擎网站推广如何优化
编辑基于this帖子,一个比我上一个更好的解决方案可能是:import matplotlib.pylab as plimport matplotlibimport numpy as nppl.close(all)x np.linspace(0.019, 0.021, 4)y np.linspace(0.09, 0.10, 4)s np.random.randint(10, 200, 4)fig pl.figur…...