RK3568平台 安卓hal3适配usb camera
一.RK安卓hal3 camera框架
Camera hal3 在 android 框架中所处的位置如上图, 对上,主要实现 Framework 一整套 API 接口,响应其 控制命令,返回数据与控制参数结果。 对下, 主要是通 V4l2 框架实现与 kernel 的交互。3a 控制则是通 control loop 接口与 camera_engine_isp 交互。 另外,其中一些组件或功能的实现也会调用到其他一些第三方 库, 如 cameraBuffer 相关,会调用到 Galloc 相关库, jpeg 编码则会调用到 Hwjpeg 相关库。
二.Camera hal3 与 Frame work 交互时序
三.usbcamera调试
首先硬件给usb供电,供电后插上usbcamera可以看到新生成的pid vid。
ls /dev/video*
新生成了video1 video2.
media-ctl -d /dev/media0 -p
1|console:/ # media-ctl -d /dev/media0 -p
Opening media device /dev/media0
Enumerating entities
Found 4 entities
Enumerating pads and links
Media controller API version 0.0.189Media device information
------------------------
driver uvcvideo
model USB2.0 PC CAMERA: USB2.0 PC CAM
serial
bus info usb-fc880000.usb-1.3
hw revision 0x100
driver version 0.0.189Device topology
- entity 1: USB2.0 PC CAMERA: USB2.0 PC CAM (1 pad, 1 link)type Node subtype V4Ldevice node name /dev/video1pad0: Sink<- "Processing 2":1 [ENABLED,IMMUTABLE]- entity 4: USB2.0 PC CAMERA: USB2.0 PC CAM (0 pad, 0 link)type Node subtype V4Ldevice node name /dev/video2- entity 8: Processing 2 (2 pads, 2 links)type V4L2 subdev subtype Unknownpad0: Sink
v4l2_subdev_open: Failed to open subdev device node<- "Input 1":0 [ENABLED,IMMUTABLE]pad1: Source
v4l2_subdev_open: Failed to open subdev device node-> "USB2.0 PC CAMERA: USB2.0 PC CAM":0 [ENABLED,IMMUTABLE]- entity 11: Input 1 (1 pad, 1 link)type V4L2 subdev subtype Sensorpad0: Source
v4l2_subdev_open: Failed to open subdev device node-> "Processing 2":0 [ENABLED,IMMUTABLE]
查看拓扑图,生成新的video1 video2.
dumpsys media.camera
onsole:/ # dumpsys media.camera== Service global info: ==Number of camera devices: 1
Number of normal camera devices: 1
Number of public camera devices visible to API1: 1Device 0 maps to "101"
Active Camera Clients:
[]
Allowed user IDs: 0== Camera service events log (most recent at top): ==02-01 18:52:22 : ADD device 101, reason: (Device added)02-01 18:50:29 : REMOVE device 101, reason: (Device status changed from 1 to 0)02-01 18:08:37 : DISCONNECT device 101 client for package com.android.camera2 (PID 6195)02-01 18:08:37 : CONNECT device 101 client for package com.android.camera2 (PID 6195)02-01 18:06:25 : ADD device 101, reason: (Device added)02-01 18:06:16 : REMOVE device 101, reason: (Device status changed from 1 to 0)02-01 18:03:23 : ADD device 101, reason: (Device added)02-01 18:01:26 : REMOVE device 101, reason: (Device status changed from 1 to 0)02-01 18:00:53 : DISCONNECT device 101 client for package com.android.camera2 (PID 4701)02-01 18:00:53 : CONNECT device 101 client for package com.android.camera2 (PID 4701)02-01 18:00:34 : DISCONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:34 : CONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:29 : DISCONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:29 : CONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:04 : ADD device 101, reason: (Device added)02-01 18:00:01 : USER_SWITCH previous allowed user IDs: <None>, current allowed user IDs: 0== Camera device 101 dynamic info: ==Device 101 is closed, no client instance
== Camera Provider HAL external/0-0 (v2.5, remote) static info: 1 devices: ==
== Camera HAL device device@3.4/external/101 (v3.4) static information: ==Resource cost: 100Conflicting devices: NoneAPI1 info:Has a flash unit: falseFacing: FrontOrientation: 0API2 camera characteristics:Dumping camera metadata array: 55 / 55 entries, 2048 / 2048 bytes of extra data.Version: 1, Flags: 00000000android.info.supportedHardwareLevel (150000): byte[1][EXTERNAL ]android.colorCorrection.availableAberrationModes (00004): byte[1][0 ]android.control.aeAvailableAntibandingModes (10012): byte[1][3 ]android.control.maxRegions (1001c): int32[3][0 0 0 ]android.control.availableVideoStabilizationModes (1001a): byte[1][0 ]android.control.awbAvailableModes (1001b): byte[1][1 ]android.control.aeAvailableModes (10013): byte[1][1 ]android.control.availableEffects (10018): byte[1][0 ]android.control.availableModes (10026): byte[2][0 1 ]android.edge.availableEdgeModes (30002): byte[1][0 ]android.flash.info.available (50000): byte[1][FALSE ]android.hotPixel.availableHotPixelModes (60001): byte[1][0 ]android.jpeg.availableThumbnailSizes (70007): int32[14][0 0 176 144 ][240 144 256 144 ][240 160 256 154 ][240 180 ]android.jpeg.maxSize (70008): int32[1][3145728 ]android.lens.info.focusDistanceCalibration (90007): byte[1][UNCALIBRATED ]android.lens.info.availableOpticalStabilization (90003): byte[1][0 ]android.lens.facing (80005): byte[1][FRONT ]android.noiseReduction.availableNoiseReductionModes (a0002): byte[1][0 ]android.noiseReduction.mode (a0000): byte[1][OFF ]android.request.partialResultCount (c000b): int32[1][1 ]android.request.pipelineMaxDepth (c000a): byte[1][4 ]android.request.maxNumOutputStreams (c0006): int32[3][0 2 1 ]android.request.maxNumInputStreams (c0008): int32[1][0 ]android.scaler.availableMaxDigitalZoom (d0004): float[1][4.00000000 ]android.scaler.croppingType (d000d): byte[1][CENTER_ONLY ]android.sensor.availableTestPatternModes (e0019): int32[2][0 1 ]android.sensor.info.timestampSource (f0008): byte[1][UNKNOWN ]android.sensor.orientation (e000e): int32[1][0 ]android.shading.availableModes (100002): byte[1][0 ]android.statistics.info.availableFaceDetectModes (120000): byte[1][0 ]android.statistics.info.maxFaceCount (120002): int32[1][0 ]android.statistics.info.availableHotPixelMapModes (120006): byte[1][0 ]android.statistics.info.availableLensShadingMapModes (120007): byte[1][0 ]android.sync.maxLatency (170001): int32[1][UNKNOWN ]android.request.availableRequestKeys (c000d): int32[28][3 65536 65537 65538 ][65539 65542 65541 65543 ][65545 65546 65547 65549 ][65550 65551 65552 65553 ][262146 458755 458756 458757 ][458758 524292 655360 851968 ][917528 1114112 1114115 65583 ]android.request.availableResultKeys (c000e): int32[35][3 65536 65537 65538 ][65539 65542 65567 65541 ][65543 65568 65545 65546 ][65547 65570 65549 65550 ][65551 65552 65553 262146 ][262149 458755 458756 458757 ][458758 524292 655360 786441 ][851968 917520 1114112 1114115 ][1114128 1114126 65583 ]android.request.availableCharacteristicsKeys (c000f): int32[43][4 65554 65555 65556 ][65557 65558 65572 65559 ][65560 65574 65561 65562 ][65563 65573 65564 327680 ][1376256 458759 524293 589827 ][589831 655362 786444 786440 ][786438 786443 786442 851972 ][851978 851981 983040 983044 ][983046 983050 983048 917518 ][1048578 1179648 1179654 1179655 ][1179650 1507329 65582 ]android.control.aeCompensationRange (10015): int32[2][0 0 ]android.control.aeCompensationStep (10016): rational[1][(0 / 1) ]android.control.afAvailableModes (10017): byte[2][1 0 ]android.control.availableSceneModes (10019): byte[1][0 ]android.control.aeLockAvailable (10024): byte[1][FALSE ]android.control.awbLockAvailable (10025): byte[1][FALSE ]android.scaler.availableStreamConfigurations (d000a): int32[72][33 160 120 OUTPUT ][35 160 120 OUTPUT ][34 160 120 OUTPUT ][33 176 144 OUTPUT ][35 176 144 OUTPUT ][34 176 144 OUTPUT ][33 320 240 OUTPUT ][35 320 240 OUTPUT ][34 320 240 OUTPUT ][33 352 288 OUTPUT ][35 352 288 OUTPUT ][34 352 288 OUTPUT ][33 640 480 OUTPUT ][35 640 480 OUTPUT ][34 640 480 OUTPUT ][33 800 600 OUTPUT ][35 800 600 OUTPUT ][34 800 600 OUTPUT ]android.scaler.availableMinFrameDurations (d000b): int64[72][33 160 ][120 33333333 ][35 160 ][120 33333333 ][34 160 ][120 33333333 ][33 176 ][144 33333333 ][35 176 ][144 33333333 ][34 176 ][144 33333333 ][33 320 ][240 33333333 ][35 320 ][240 33333333 ][34 320 ][240 33333333 ][33 352 ][288 33333333 ][35 352 ][288 33333333 ][34 352 ][288 33333333 ][33 640 ][480 33333333 ][35 640 ][480 33333333 ][34 640 ][480 33333333 ][33 800 ][600 33333333 ][35 800 ][600 33333333 ][34 800 ][600 33333333 ]android.scaler.availableStallDurations (d000c): int64[72][33 160 ][120 1000000000 ][35 160 ][120 0 ][34 160 ][120 0 ][33 176 ][144 1000000000 ][35 176 ][144 0 ][34 176 ][144 0 ][33 320 ][240 1000000000 ]
dump出来可以看到生成新的cameraid。
Number of camera devices: 1
Number of normal camera devices: 1
v4l2-ctl -d /dev/video1 --all
查看video1信息
130|console:/ # v4l2-ctl -d /dev/video1 --all
Driver Info:Driver name : uvcvideoCard type : USB2.0 PC CAMERA: USB2.0 PC CAMBus info : usb-fc880000.usb-1.3Driver version : 5.10.189Capabilities : 0x84a00001Video CaptureMetadata CaptureStreamingExtended Pix FormatDevice CapabilitiesDevice Caps : 0x04200001Video CaptureStreamingExtended Pix Format
Media Driver Info:Driver name : uvcvideoModel : USB2.0 PC CAMERA: USB2.0 PC CAMSerial :Bus info : usb-fc880000.usb-1.3Media version : 5.10.189Hardware revision: 0x00000100 (256)Driver version : 5.10.189
Interface Info:ID : 0x03000002Type : V4L Video
Entity Info:ID : 0x00000001 (1)Name : USB2.0 PC CAMERA: USB2.0 PC CAMFunction : V4L2 I/OPad 0x01000007 : SinkLink 0x0200000d: from remote pad 0x100000a of entity 'Processing 2': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Input 1: ok)
Format Video Capture:Width/Height : 640/480Pixel Format : 'YUYV'Field : NoneBytes per Line : 1280Size Image : 614400Colorspace : DefaultTransfer Function : Default (maps to Rec. 709)YCbCr/HSV Encoding: Default (maps to ITU-R 601)Quantization : Default (maps to Limited Range)Flags :
Crop Capability Video Capture:Bounds : Left 0, Top 0, Width 640, Height 480Default : Left 0, Top 0, Width 640, Height 480Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:Capabilities : timeperframeFrames per second: 30.000 (30/1)Read buffers : 0brightness 0x00980900 (int) : min=0 max=255 step=1 default=128 value=128contrast 0x00980901 (int) : min=0 max=255 step=1 default=135 value=135saturation 0x00980902 (int) : min=0 max=255 step=1 default=75 value=75hue 0x00980903 (int) : min=-127 max=127 step=1 default=0 value=0gamma 0x00980910 (int) : min=1 max=8 step=1 default=4 value=4power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1sharpness 0x0098091b (int) : min=0 max=15 step=1 default=5 value=5backlight_compensation 0x0098091c (int) : min=1 max=5 step=1 default=1 value=1
v4l2-ctl -d /dev/video1 --list-formats-ext
查看video1支持的格式和分辨率
console:/ # v4l2-ctl -d /dev/video1 --list-formats-ext
ioctl: VIDIOC_ENUM_FMTIndex : 0Type : Video CapturePixel Format: 'YUYV'Name : YUYV 4:2:2Size: Discrete 640x480Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 352x288Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 320x240Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 176x144Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 160x120Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)
分析:此时打开usbcamera的画面是黑屏,查看hal3 camera框架里面适配的分辨率和视频格式是否支持yuvv,最大的分辨率为640*480.
四.代码修改点亮usbcamera
--- a/rk3588_an13/device/rockchip/common/external_camera_config.xml
+++ b/rk3588_an13/device/rockchip/common/external_camera_config.xml
@@ -7,7 +7,8 @@<!-- See ExternalCameraUtils.cpp for default values of Device configurations below--><Device><!-- Max JPEG buffer size in bytes-->
- <MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) -->
+ <!-- MaxJpegBufferSize bytes="3145728"/> --> <!-- 3MB (~= 1080p YUV420) -->
+ <MaxJpegBufferSize bytes="13631488"/> <!-- 13MB 1300w pixel (~= 4k YUV420) --><!-- Size of v4l2 buffer queue when streaming >= 30fps --><!-- Larger value: more request can be cached pipeline (less janky) --><!-- Smaller value: use less memory -->
--- a/rk3588_an13/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
+++ b/rk3588_an13/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
@@ -199,11 +199,11 @@ struct Parameters {// Max preview size allowed// This is set to a 1:1 value to allow for any aspect ratio that has// a max long side of 1920 pixels
- static const unsigned int MAX_PREVIEW_WIDTH = 1920;
- static const unsigned int MAX_PREVIEW_HEIGHT = 1920;
+ static const unsigned int MAX_PREVIEW_WIDTH = 640;
+ static const unsigned int MAX_PREVIEW_HEIGHT = 480;// Initial max preview/recording size bound
- static const int MAX_INITIAL_PREVIEW_WIDTH = 1920;
- static const int MAX_INITIAL_PREVIEW_HEIGHT = 1080;
+ static const int MAX_INITIAL_PREVIEW_WIDTH = 640;
+ static const int MAX_INITIAL_PREVIEW_HEIGHT = 480;
--- a/rk3588_an13/hardware/interfaces/camera/device/3.4/default/ExternalCameraDevice.cpp
+++ b/rk3588_an13/hardware/interfaces/camera/device/3.4/default/ExternalCameraDevice.cpp
@@ -52,7 +52,7 @@ constexpr int MAX_RETRY = 5; // Allow retry v4l2 open failures a few times.constexpr int OPEN_RETRY_SLEEP_US = 100000; // 100ms * MAX_RETRY = 0.5 secondsstatic uint Camera_Resolution[][2] = {{320,240},/*{352,288},*/
- {640,480},{800,600},/*{1280,720},{1280,960},{1920,1080},{2048,1536},{2560,1440},{2592,1944},{2592,1456},*/
+ {640,480},/*{800,600},{1280,720},{1280,960},{1920,1080},{2048,1536},{2560,1440},{2592,1944},{2592,1456},*/{0,0}};} // anonymous namespace
@@ -444,7 +444,8 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(256, 144,240, 160,256, 154,
- 240, 180};
+ 240, 180,
+ 640, 480};UPDATE(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, jpegAvailableThumbnailSizes,ARRAY_SIZE(jpegAvailableThumbnailSizes));
--- a/rk3588_an13/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
+++ b/rk3588_an13/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
@@ -38,6 +38,11 @@ namespace camera2 {#define RGA_ACTIVE_H (2048)#define RGA_VIRTUAL_H (2048)+#define RGA_ACTIVE_W (640)
+#define RGA_VIRTUAL_W (640)
+#define RGA_ACTIVE_H (480)
+#define RGA_VIRTUAL_H (480)
+#endif
相关文章:

RK3568平台 安卓hal3适配usb camera
一.RK安卓hal3 camera框架 Camera hal3 在 android 框架中所处的位置如上图, 对上,主要实现 Framework 一整套 API 接口,响应其 控制命令,返回数据与控制参数结果。 对下, 主要是通 V4l2 框架实现与 kernel 的交互。3a…...

使用 Visual Studio Code 在远程计算机上调试 PostgreSQL
使用 Visual Studio Code 在远程计算机上调试 PostgreSQL 1. 概述 PostgreSQL 是一个功能强大的开源关系数据库管理系统,适用于各种应用程序。在开发过程中,调试 PostgreSQL 对于识别和解决问题至关重要。在本博客中,我们将手把手教你使用客…...

javascript设计模式之建造者
工厂模式不关心过程,只关心结果,这与建造者相反,建造者更关心的是过程, 这里我们创建一个基类,其拥有技能跟爱好两个属性,还有两个实例方法用来获取技能跟爱好 // 基类 let Human function (param {}) …...

安擎科技携手华为云区块链共同打造安全天空
当前,低空经济崛起,无人机多并发、混合运行时引发的网络信息安全、空域安全问题已成行业首要课题。 在2024年1月正式实施的《民用无人驾驶航空器运行安全管理规则》(CCAR-92)第549条中规定,“无人驾驶航空器航行服务提…...

学习数据结构的第一天
结构体 如何定义结构体 1、先定义结构体类型,再定义结构体类型变量 struct student/定义学生结构体类型/ { long number; char name[20]; char sex; int age; float score[3];/三科考试成绩/ }2、定义结构体类型同时定义结构体类型变量 struct student/定义学生结…...

5.electron之主进程起一个本地服务
如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…...

爬取58二手房并用SVR模型拟合
目录 一、前言 二、爬虫与数据处理 三、模型 一、前言 爬取数据仅用于练习和学习。本文运用二手房规格sepc(如3室2厅1卫)和二手房面积area预测二手房价格price,只是练习和学习,不代表任何实际意义。 二、爬虫与数据处理 import requests import cha…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RichText组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RichText组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、RichText组件 鸿蒙(HarmonyOS)富文本组件,…...

7.electron之渲染线程发送事件,主进程监听事件
如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…...

thinkphp6入门(19)-- 中间件向控制器传参
可以通过给请求对象赋值的方式传参给控制器(或者其它地方),例如 <?phpnamespace app\middleware;class Hello {public function handle($request, \Closure $next){$request->hello ThinkPHP;return $next($request);} } 然后在控制…...

Flink Format系列(2)-CSV
Flink的csv格式支持读和写csv格式的数据,只需要指定 format csv,下面以kafka为例。 CREATE TABLE user_behavior (user_id BIGINT,item_id BIGINT,category_id BIGINT,behavior STRING,ts TIMESTAMP(3) ) WITH (connector kafka,topic user_behavior…...

Spring Data Envers 数据审计实战2 - 自定义监听程序扩展审计字段及字段值
上篇讲述了如何在Spring项目中集成Spring Data Envers做数据审计和历史版本查看功能。 之前演示的是业务表中已有的字段进行审计,那么如果我们想扩展审计字段呢? 比如目前对员工表加入了Audited审计,员工表有个字段为dept_id,为…...

一个 SpringBoot 项目能同时处理多少请求?
目录 1 问题分析 2 Demo 3 答案 4 怎么来的? 5 标准答案及影响参数一Tomcat配置 6 影响参数二 Web容器 7 影响参数三 Async 1 问题分析 一个 SpringBoot 项目能同时处理多少请求? 不知道你听到这个问题之后的第一反应是什么? 我大概…...

计算机网络——网络
计算机网络——网络 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家, [跳转到网站](https://www.captainbed.cn/qianqiu) 无线网络和移动网…...

C语言探索:选择排序的实现与解读
当我们需要对一组数据进行排序时,选择排序(Selection Sort)是一种简单但效率较低的排序算法。它的基本思想是每次从未排序的数据中选择最小(或最大)的元素,然后将其放置在已排序序列的末尾。通过重复这个过…...

Golang 学习(二)进阶使用
二、进阶使用 性能提升——协程 GoRoutine go f();一个 Go 线程上,可以起多个协程(有独立的栈空间、共享程序堆空间、调度由用户控制)主线程是一个物理线程,直接作用在 cpu 上的。是重量级的,非常耗费 cpu 资源。协…...

ubuntu22.04@laptop OpenCV定制化安装
ubuntu22.04laptop OpenCV定制化安装 1. 源由2. 默认配置3. 定制配置4. 定制安装5. 定制OpenCV-4.9.05.1 修改opencv.conf5.2 加载so文件5.3 修改bash环境变量5.4 增加pkgconfig5.5 检查OpenCV-4.9.0安装 6. 总结7. 参考资料 1. 源由 目前,能Google到的代码层次不齐…...

linux系统非关系型数据库redis
redis 介绍redis的特点:缓存 安装安装单机版redisredis的相关工具 介绍 redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库 redis的官网:redis.ioredis的特点: 丰富的数据结构 支持持久化 支持事务 支持主从缓存 类型 …...

【LeetCode: 292. Nim 游戏+ 博弈问题】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

Android 9.0 禁用adb reboot recovery命令实现正常重启功能
1.前言 在9.0的系统rom定制化开发中,在定制recovery模块的时候,由于产品开发需要要求禁用recovery的相关功能,比如在通过adb命令的 adb reboot recovery的方式进入recovery也需要实现禁用,所以就需要了解相关进入recovery流程来禁用该功能 2.禁用adb reboot recovery命…...

分析网站架构:浏览器插件
一、Wappalyzer 1.1 介绍 Wappalyzer 是一款用于识别网站所使用技术栈的浏览器插件。它能够分析正在浏览的网页,检测出网站所使用的各种技术和框架,如内容管理系统(CMS)、JavaScript库、Web服务器等。用户只需安装 Wappalyzer 插…...

CentOS7搭建Hadoop集群
准备工作 1、准备三台虚拟机,参考:CentOS7集群环境搭建(3台)-CSDN博客 2、配置虚拟机之间免密登录,参考:CentOS7集群配置免密登录-CSDN博客 3、虚拟机分别安装jdk,参考:CentOS7集…...

10.0 Zookeeper 权限控制 ACL
zookeeper 的 ACL(Access Control List,访问控制表)权限在生产环境是特别重要的,所以本章节特别介绍一下。 ACL 权限可以针对节点设置相关读写等权限,保障数据安全性。 permissions 可以指定不同的权限范围及角色。 …...

容器化技术基础概念:雪花服务器与凤凰服务器
雪花服务器与凤凰服务器:两种软件部署领域的基础设施对比 在软件部署领域,服务器管理在正常运行时间、效率和安全性方面发挥着关键作用。存在两种截然不同的方法:雪花服务器和凤凰服务器。了解它们之间的区别将帮助您选择最适合您需求的策略…...

解决maven 在IDEA 下载依赖包速度慢的问题
1.idea界面双击shift键 2.打开setting.xml文件 复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…...

用python编写爬虫,爬取二手车信息+实验报告
题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88805518使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件,再run all就行 注意事项 可能遇到的bug 暂无,有的话私信我...

代码随想录算法训练营第二十九天|491.非递减子序列、46.全排列、47.全排列II
491.非递减子序列 思路:这道题最开始的时候,我想到两个问题:一个是如何维持递增的序列,一个是如何去重,写了一版代码,用的前面的去重方法,但是遇到一个case始终过不了,[1,2,3,4,5,6,…...

(2)(2.14) SPL Satellite Telemetry
文章目录 前言 1 本地 Wi-Fi(费用:30 美元以上,范围:室内) 2 蜂窝电话(费用:100 美元以上,范围:蜂窝电话覆盖区域) 3 手机卫星(费用ÿ…...

OTG -- STM32 OTG驱动代码下载及简述(三)
目录 前沿 1 STM32 OTG标准库的获取 2 设备模式代码匹配开发板 2.1 OTG FS全速代码修改 2.2 OTG HS代码修改 2.2.1 OTG HS外部高速PHY运行在高速模式代码修改 2.2.2 OTG HS外部高速PHY运行在全速模式代码修改 2.2.3 OTG HS内部全速PHY运行在全速模式代码修改 前沿 前面…...

STM32F407 CAN参数配置 500Kbps
本篇CAN参数适用 芯片型号:STM32F407xx系统时钟:168MHz,CAN挂载总线APB1为42M波 特 率 :500Kpbs引脚使用:TX_PB9,RX_PB8;修改为PA11PA12后,参数不变。 步骤一、打勾开启CAN…...