如何给DPDK开源社区提交补丁_dpdk patch-程序员宅基地

技术标签: DPDK  后端  

前言

先沐浴一下DPDK的官方语言:

DPDK is an open source project, with the main code BSD licensed and Linux kernel related parts are naturally licensed under the GPL. We welcome and encourage anyone who is interested to contribute and participate in the project.

DPDK 是一个开源项目,主要代码通过 BSD 获得许可,Linux 内核相关部件自然根据 GPL 获得许可。我们欢迎并鼓励任何有兴趣参与该项目的人。

所以积极的投入DPDK社区吧!!!


1. 给DPDK贡献的方式

给DPDK做出贡献的方式有以下几种:

  1. Contribute by sending patches 
  2. Contribute by testing or reviewing patches
  3. Contribute by finding or fixing bugs

本文主要讲述第一种方式:发送补丁

说明:作者使用的系统是centos7,所以相关的命令也是此系统下的

2. 准备工作

2.1 阅读DPDK贡献指南

在给DPDK发送补丁之前,需要先学习一下相关的指南,最好的指南当然是官方的文档,文档地址如下:

DPDKhttps://core.dpdk.org/contribute/6. Contributing Code to DPDK — Data Plane Development Kit 21.11.0-rc0 documentationhttps://doc.dpdk.org/guides/contributing/patches.html以上两个文档主要讲述关于给DPDK贡献的内容,比如代码风格,如何做补丁以及发送补丁,补丁格式要求等,如果读者英文水平比较好,可以直接跳转到这里学习,否则可以参考本文的教程,但是无论如何都要看一下代码风格,因为这关乎到你的补丁是否合格以及是否被采纳。

DPDK代码风格:1. DPDK Coding Style — Data Plane Development Kit 21.11.0-rc0 documentationhttps://doc.dpdk.org/guides/contributing/coding_style.html#coding-style

2.2 账号、用户名、邮箱

在进行下面两个步骤前,这里有必要先说明一下下面用到的账号、用户名、邮箱等含义,防止读者混淆;

smtp账号:邮箱地址,用于发送邮件;

smtp服务:用于转发邮件;

git全局用户名:贡献者的真实姓名全拼,注意姓在后,和前面的名字之间有一个空格,在git commit时用于签名以及发送邮件时显示的Submitter名字(注:Submitter的名字其实就是你发送给对方时在对方的邮箱里显示的名字,应该是在你的邮箱里的“发件人管理”进行设置,名字和git全局用户名保持一致),如作者名字:Huichao Cai,注意首字母大写,下面的示例中huichao cai是错误的,请注意;

git全局邮箱:用于git commit时的签名和发送邮件;

注册DPDK用户名:贡献者的真实姓名全拼,格式同git全局用户名;

注册DPDK邮箱:用于接收DPDK社区的邮件,如补丁邮件等,后续和社区的大神们进行沟通(互发邮件的方式)也是通过该邮箱;

说明:

1. 补丁是以邮件的形式发送的;

2. 发送邮件时要求smtp账号和git全局邮箱是一样的;

3. 如果smtp账号和注册DPDK邮箱不一样,在发送补丁邮件后,会收到dev-owner或stable-owner(你发送补丁的地址)的回复邮件(如下图所示),里面会说你的补丁邮件会暂时被悬置直到管理员审核通过才会在 DPDK Patchwork 列表里看到你的补丁邮件,原因是发送邮件的账号不是DPDK的成员(注册DPDK的邮箱),需要审核,这样就会导致你的补丁处理时间加长,如果想马上在 DPDK Patchwork 列表里看到你的补丁邮件,那么这两个邮箱保持一样即可;

综上所述,为了方便,这些邮箱和用户名最好保持一致;

2.3 git环境搭建

DPDK是通过git进行代码管理的,其中主要的工具有 git send-email 和  git format-patch ,补丁是通过 git send-email 发送的,补丁的制作工具是 git format-patch ,所以需要先安装和配置这些工具;

安装git send-email:yum install git-email

在安装git后应该会默认有git format-patch命令;

配置git:vi ~/.gitconfig,修改gitconfig文件,添加以下内容:

[sendemail]
	suppressfrom = true
	chainreplyto = false
	confirm = always
	envelopesender = auto
	smtpuser = [email protected]
	smtpserver = smtp.domain.com
	smtpserverport = 465
	smtpencryption = ssl
[alias]
	fixline = log -1 --abbrev=12 --format='Fixes: %h (\"%s\")%nCc: %ae'

其中[email protected]为你的smtp的账号,smtp.domain.com是smtp的服务器地址,其他按照示例即可,可以在网上找一些公共免费的smtp服务(如163的smtp.163.com)。

然后配置git的全局用户名和邮箱:

git config --global user.name "username"

git config --global user.email "email"

2.4 注册DPDK

在贡献补丁之前,需要先在DPDK相关的机构注册自己的信息,至少需要注册的两个机构是:DPDK development和DPDK Patchwork

DPDK development:是个邮件列表地址( [email protected]),补丁发送到这里,订阅这个主题的人会收到该补丁邮件;

DPDK Patchwork:补丁存储、展示、操作的地方,所有贡献者发送的补丁都会在这里展示,当然也可以查看自己的补丁;

DPDK development注册地址: dev Info Page (dpdk.org)或者Contribute - DPDK

DPDK Patchwork注册地址:Project List - Patchwork (dpdk.org)

3. 补丁实操

3.1 源码下载、修改 

用git下载源码:

git clone git://dpdk.org/dpdk

或者:

git clone http://dpdk.org/git/dpdk

修改代码要遵守 DPDK Coding Style,并且通过编译,然后用git commit提交到本地,补丁的内容就是git commit的内容,git commit的内容要求如下:

3.1.1 主题行

首先看一下主题行示例,在DPDK源码库下执行git log,如下图,红框框住的那些行就是主题行:

主题行必须涵盖修改的范围和影响;

主题行包含字符50个左右;

主题行应该是小写,除了首字母缩略词,如RFC;

主题行应该以对应(你本次修改的内容)的组件名为前缀,如下:

ixgbe: fix offload config option name

config: increase max queues per port

其中组件名可以用git log changed-file查看已经存在的,如下红框内就是组件名(不包含":"):

比如作者修改了rte_ipv4_fragmentation.c文件,执行:git log lib/ip_frag/rte_ipv4_fragmentation.c搜索到组件名如下:

主题行尽量使用动词;

主题行不要用"."等结束符结尾,因为在制作补丁时,补丁文件的名字包含主题行,并在主题行后加上".patch",如果主题行以"."结尾,则补丁文件的名字会成为"..patch";

3.1.2 内容体 

先看一下示例,同样用git log查看,如下红框内的就是内容体:

内容体应该描述修改的问题或添加的功能,尽量描述的详细一些以便让审查者能够很好的理解你的补丁;

内容体必须以你的签名结束,如上面的Signed-off-by:这一行,当然不用你手动输入,在git commit时加上--signoff或-s即可:git commit --signoff # or -s,可以看到签名就是配置的git全局邮箱和用户名

如果修改的内容比较简单明显,则不需要内容体,但是要保证有签名;

签名必须是真实的名字,不能用别名或昵称,可以有多个签名;

内容体字符数应该在72个以内;

修改一个bug回归时,需要在内容体里手动添加该bug对应的commit id和对应的作者,你可以使用git命令:git fixline <SHA>(<SHA>为commit id),输出要添加的内容,此命令已在前面的步骤中配置到了git配置文件中,示例如下:

doc: fix some parameter description

Update the docs, fixing description of some parameter.

Fixes: abcdefgh1234 ("doc: add some parameter")
Cc: [email protected]

Signed-off-by: Alex Smith <[email protected]>

其中两行:

Fixes: abcdefgh1234 ("doc: add some parameter")

Cc: [email protected]

为git fixline <SHA>输出的内容(在发送邮件时会自动抄送给Cc:后面的地址,无需在发送命令里单独--cc指定了);

当修复一个错误或告警时,在内容体添加错误信息以及如何复现错误的信息是很有用的;

内容体要使用正确的大写、标点符号和拼写,就是英文要写正确,毕竟审核的人有些是老外;

内容体除了Signed-off-by:标签,还可能有其他标签,如Reviewed-by :Acked-by:等,如下:

3.1.3 其他

如果用代码静态检查工具Coverity 扫描出issue,内容体必须包含 Coverity issue id,例如:

doc: fix some parameter description

Update the docs, fixing description of some parameter.

Coverity issue: 12345
Fixes: abcdefgh1234 ("doc: add some parameter")
Cc: [email protected]

Signed-off-by: Alex Smith <[email protected]>

如果修复的是bug追踪工具Bugzilla 里的issue,内容体必须包含Bugzilla issue id,例如:

doc: fix some parameter description

Update the docs, fixing description of some parameter.

Bugzilla ID: 12345
Fixes: abcdefgh1234 ("doc: add some parameter")
Cc: [email protected]

Signed-off-by: Alex Smith <[email protected]>

如果补丁被要求backport到稳定版本,内容体需要包含Cc: [email protected] ,如下:

doc: fix some parameter description

Update the docs, fixing description of some parameter.

Fixes: abcdefgh1234 ("doc: add some parameter")
Cc: [email protected]

Signed-off-by: Alex Smith <[email protected]>

更多信息请参考:8. DPDK Stable Releases and Long Term Support — Data Plane Development Kit 21.11.0-rc0 documentationhttps://doc.dpdk.org/guides/contributing/stable.html

 如果补丁有依赖其他补丁,需要在commit的内容体里或者cover letter里(也可在补丁文件里,如下说明)添加说明:

Depends-on: series-NNNNN ("Title of the series") or Depends-on: patch-NNNNN ("Title of the patch")

NNNNN 是依赖的补丁在patchwork 上的id,如:

如下:

doc: fix some parameter description

Update the docs, fixing description of some parameter.

Signed-off-by: Alex Smith <[email protected]>
---
Depends-on: series-10000 ("Title of the series")

 说明:补丁文件里的“---”符号下面可以添加一些额外的简短的说明,如下:

 DPDK源码库里有个脚本devtools/check-git-log.sh可以对commit的信息进行一些检查,如在DPDK源码库根目录下执行./devtools/check-git-log.sh -n2:

表示检查最近的两次commit信息,输出结果表示检查了2个commit信息(一个commit对应一个补丁),可用2个,检查通过,如果有问题,会输出相应的错误信息;

3.2 补丁制作

如上所述,一个commit对应一个补丁,即在制作补丁时,一个commit会生成一个补丁,通过-1 -2 等参数可以指定生成多少个补丁,顺序是从最近的commit开始制作;

执行git format-patch制作补丁,以下是一些使用参考:

# Generate a patch from the last commit.
git format-patch -1

# Generate a patch from the last 3 commits.
git format-patch -3

# Generate the patches in a directory.
git format-patch -3 -o ~/patch/

# Add a cover letter to explain a patchset.
git format-patch -3 -o ~/patch/ --cover-letter

# Add a prefix with a version number.
git format-patch -3 -o ~/patch/ -v 2

比如作者计划制作一个补丁(第一个commit点),输出到/tmp/patch目录下,则执行:

git format-patch -1 -o /tmp/patch

生成补丁如下:

再看一下commit信息:

可以看到补丁的文件名包含了主题行;

关于--cover-letter和同一个补丁的后续补丁(后续补丁会从v2版本开始,并且作为对第一个补丁的回复)的内容请参考DPDK官方文档说明;

3.3 补丁检查

补丁检查主要有三部分:

补丁格式和语法检查、补丁编译检查、补丁ABI兼容性检查;

补丁格式和语法检查使用DPDK源码库里的devtools/checkpatches.sh脚本进行检查,不过该脚本依赖linux内核下的工具checkpatch.pl,所以需要下载linux内核源码,把里面的checkpatch.pl文件放到该环境下,如放到/tmp目录下,然后执行:export DPDK_CHECKPATCH_PATH=/tmp/checkpatch.pl,这时就可以在DPDK源码库根目录下执行:./devtools/checkpatches.sh /tmp/patch/0001-test-ipfrag-add-test-content-to-the-test-unit.patch,结果如下:

表示检查了一个补丁,可用1个,检查通过,如果有问题,会输出相应的错误信息;

如果想对补丁内容的单词拼写进行检查(同样使用checkpatches.sh脚本),需要把字典文件dictionary.txt文件放到/usr/share/codespell/目录下(此目录为默认目录,也可以放到其他目录,但是要设置DPDK_CHECKPATCH_CODESPELL为其他目录,同上面的设置命令一样,使用命令export DPDK_CHECKPATCH_CODESPELL=/dir/xxx.txt设置),DPDK有个脚本专门生成DPDK专用的字典文件,获取该文件:

git clone https://github.com/codespell-project/codespell.git
./devtools/build-dict.sh codespell/ > codespell-dpdk.txt

如果不使用默认目录,则字典文件的名字可以任意;

检查命令同补丁格式和语法检查:./devtools/checkpatches.sh /dir/xxx.patch

补丁编译检查是通过devtools/test-meson-builds.sh脚本完成的,直接执行:./devtools/test-meson-builds.sh即可,会在当前目录下创建子目录,并把编译结果放到该子目录里,当然可以通过DPDK_BUILD_TEST_DIR 指定不同的目录;

补丁ABI兼容性检查默认是关闭的,这里不再描述;

3.4 补丁发送

使用git send-email发送补丁,一般需要发送给[email protected]和你修改内容对应的组件维护者,比如作者修改的ip分片相关的测试用例代码(修改test_ipfrag.c文件),对应的组件维护者在DPDK源码库里的MAINTAINERS 文件里查找,如下:

关于M、F等字符的含义,参考6.3章节:6. Contributing Code to DPDK — Data Plane Development Kit 21.11.0-rc0 documentationhttps://doc.dpdk.org/guides/contributing/patches.html#commit-messages-body接下来就可以执行发送命令了(如果是第一次操作,可以先发给自己或者加--dry-run 参数测试一下):

发给自己:

git send-email --to “自己的邮箱” /tmp/patch/0001-test-ipfrag-add-test-content-to-the-test-unit.patch

发给DPDK社区:

git send-email --to [email protected] --cc [email protected] /tmp/patch/0001-test-ipfrag-add-test-content-to-the-test-unit.patch

说明:--cc表示邮件抄送,凡是订阅了[email protected]的贡献者,都可以收到你的这个补丁邮件,包含你自己,当然你可以在注册时的设置里关闭接收等,相关的配置请登录:

dev list: member options login pagehttps://mails.dpdk.org/options/dev/git常用语:

Git 协助常用缩写释义_一个狂徒的点滴记录、-程序员宅基地WIP   Work in progress, do not merge yet. // 尚未完工,请不要合并LGTM Looks good to me. // 我看行。(Riview 别人的 PR 确认没有问题)PTAL Please take a look. // 帮我看下,一般是请别人 review 自己的 PRCC Carbon copy // 抄送RFC  —  request for comments. // 请求评议。通常是讨论、起草某一功能特性的方案及标准IIRC  —  if .https://blog.csdn.net/ufolr/article/details/108952765

有经验的贡献者可以直接执行git send-email省去 git format-patch这一步,不过需要加上--annotate 和confirm = always参数等,作者也是刚接触不久,所以还是按照步骤一步一步操作吧;

有时补丁会被要求backport到稳定版本,这个前面已经说过,请参考官方文档,这里不再详述;

3.5 补丁确认

在成功发送补丁后,登录DPDK Patchwork,即可看到你的补丁,如作者提交的补丁:

上面的红框表示当前补丁的状态,读者可以登录进去后详细查看;

关于补丁状态以及是否会被merge等更多详细信息请参考官方文档;

这里注意一下,Patchwork是可以设置搜索条件的,如默认情况下的搜索条件如下:

 点击黑色的可以删掉搜索条件;

点击“Show patches withShow patches with”可以添加搜索条件,如下:

红色框内的为默认的条件,可以在空格内设置自己想要的搜索条件:

3.6 补丁管理 

为了方便管理自己的补丁,Patchwork提供了管理工具Bundles,进入任意一个补丁,创建自己的Bundle,如下:

在空格里输入自己Bundle的名字,然后点击“Create”按钮即可创建自己的Bundle.

同样,在创建好Bundle后,进入想要绑定到该Bundle的补丁链接里,选择自己创建好的Bundle,点击“Add”即可,当然你既可以绑定自己的补丁也可以绑定别人的补丁,如下绑定自己的补丁:

 也可以批量绑定补丁,如下根据搜索条件过滤补丁后,选中补丁,批量绑定:

 绑定补丁之后,就可以在自己的Bundle里查看了,如下:

 

注意去掉默认的搜索条件:

 绑定的补丁如下:

 也可以把已绑定的补丁去绑定,如下:

 补丁的状态可以查看如下,这些状态一般不需要你去设置,都是审核人去设置的:

已创建的Bundle也可以修改名字或者删除,还可以设置是否公开可见等,如下:

在提交补丁成功后,后续请持续关注补丁状态(比如登录DPDK Patchwork 查看自己的补丁状态或者查看自己的注册邮箱有没有收到相关邮件等),如果有问题可能需要你重新发送补丁等,当然所有的工作都是为了让自己的补丁能够被merge!!!


总结

关于如何给DPDK开源社区提交补丁大致步骤就介绍完了,更详细的内容还是需要阅读官方文档的,所以英语还是很重要的,作者在提交补丁前也是苦苦搜索了好久,几乎没有中文文档,于是就有了这篇文档的产生,希望能够帮助到有开源贡献精神但是不知如何实施的朋友,也欢迎各位提出文档中存在的问题,并完善文档,以帮助更多的开源人!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37559574/article/details/120516327

智能推荐

生活垃圾数据集(YOLO版)_垃圾回收数据集-程序员宅基地

文章浏览阅读1.6k次,点赞5次,收藏20次。【有害垃圾】:电池(1 号、2 号、5 号)、过期药品或内包装等;【可回收垃圾】:易拉罐、小号矿泉水瓶;【厨余垃圾】:小土豆、切过的白萝卜、胡萝卜,尺寸为电池大小;【其他垃圾】:瓷片、鹅卵石(小土豆大小)、砖块等。文件结构|----classes.txt # 标签种类|----data-txt\ # 数据集文件集合|----images\ # 数据集图片|----labels\ # yolo标签。_垃圾回收数据集

天气系统3------微服务_cityid=101280803-程序员宅基地

文章浏览阅读272次。之前写到 通过封装的API 已经可以做到使用redis进行缓存天气信息但是这一操作每次都由客户使用时才进行更新 不友好 所以应该自己实现半小时的定时存入redis 使用quartz框架 首先添加依赖build.gradle中// Quartz compile('org.springframework.boot:spring-boot-starter-quartz'..._cityid=101280803

python wxpython 不同Frame 之间的参数传递_wxpython frame.bind-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏8次。对于使用触发事件来反应的按钮传递参数如下:可以通过lambda对function的参数传递:t.Bind(wx.EVT_BUTTON, lambda x, textctrl=t: self.input_fun(event=x, textctrl=textctrl))前提需要self.input_fun(self,event,t):传入参数而同时两个Frame之间的参数传..._wxpython frame.bind

cocos小游戏开发总结-程序员宅基地

文章浏览阅读1.9k次。最近接到一个任务要开发消消乐小游戏,当然首先就想到乐cocosCreator来作为开发工具。开发本身倒没有多少难点。消消乐的开发官网发行的书上有专门讲到。下面主要总结一下开发中遇到的问题以及解决方法屏幕适配由于设计尺寸是750*1336,如果适应高度,则在iphonX下,内容会超出屏幕宽度。按宽适应,iphon4下内容会超出屏幕高度。所以就需要根据屏幕比例来动态设置适配策略。 onLoad..._750*1336

ssm435银行贷款管理系统+vue_vue3重构信贷管理系统-程序员宅基地

文章浏览阅读745次,点赞21次,收藏21次。web项目的框架,通常更简单的数据源。21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对银行贷款管理系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统的设计目标进行了论述,还有系统的需求,以及整个的设计方案,对系统的设计以及实现,也都论述的比较细致,最后对银行贷款管理系统进行了一些具体测试。_vue3重构信贷管理系统

乌龟棋 题解-程序员宅基地

文章浏览阅读774次。题目描述原题目戳这里小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。乌龟棋的棋盘是一行 NNN 个格子,每个格子上一个分数(非负整数)。棋盘第 111 格是唯一的起点,第 NNN 格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。乌龟棋中 MMM 张爬行卡片,分成 444 种不同的类型( MMM 张卡片中不一定包含所有 444 种类型的卡片,见样例),每种类型的卡片上分别标有 1,2,3,41, 2, 3, 41,2,3,4 四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子数

随便推点

python内存泄露的原因_Python服务端内存泄露的处理过程-程序员宅基地

文章浏览阅读1.5k次。吐槽内存泄露 ? 内存暴涨 ? OOM ?首先提一下我自己曾经历过多次内存泄露,到底有几次? 我自己心里悲伤的回想了下,造成线上影响的内存泄露事件有将近5次了,没上线就查出内存暴涨次数可能更多。这次不是最惨,相信也不会是最后的内存的泄露。有人说,内存泄露对于程序员来说,是个好事,也是个坏事。 怎么说? 好事在于,技术又有所长进,经验有所心得…. 毕竟不是所有程序员都写过OOM的服务…. 坏事..._python内存泄露

Sensor (draft)_draft sensor-程序员宅基地

文章浏览阅读747次。1.sensor typeTYPE_ACCELEROMETER=1 TYPE_MAGNETIC_FIELD=2 (what's value mean at x and z axis)TYPE_ORIENTATION=3TYPE_GYROSCOPE=4 TYPE_LIGHT=5(in )TYPE_PRESSURE=6TYPE_TEMPERATURE=7TYPE_PRO_draft sensor

【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类定义三(C++)_gmres不构造矩阵-程序员宅基地

文章浏览阅读581次。/* * Copyright (c) 2009 湖南师范大学数计院 一心飞翔项目组 * All Right Reserved * * 文件名:matrix.cpp 定义Point、Node、Matrix类的各个方法 * 摘 要:定义矩阵类,包括矩阵的相关信息和方法 * * 作 者:刘 庆 * 修改日期:2009年7月19日21:15:12 **/

三分钟带你看完HTML5增强的【iframe元素】_iframe allow-top-navigation-程序员宅基地

文章浏览阅读1.7w次,点赞6次,收藏20次。HTML不再推荐页面中使用框架集,因此HTML5删除了&lt;frameset&gt;、&lt;frame&gt;和&lt;noframes&gt;这三个元素。不过HTML5还保留了&lt;iframe&gt;元素,该元素可以在普通的HTML页面中使用,生成一个行内框架,可以直接放在HTML页面的任意位置。除了指定id、class和style之外,还可以指定如下属性:src 指定一个UR..._iframe allow-top-navigation

Java之 Spring Cloud 微服务的链路追踪 Sleuth 和 Zipkin(第三个阶段)【三】【SpringBoot项目实现商品服务器端是调用】-程序员宅基地

文章浏览阅读785次,点赞29次,收藏12次。Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的 API 接口之外,它也提供了方便的 UI 组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,

烁博科技|浅谈视频安全监控行业发展_2018年8月由于某知名视频监控厂商多款摄像机存在安全漏洞-程序员宅基地

文章浏览阅读358次。“随着天网工程的建设,中国已经建成世界上规模最大的视频监控网,摄像头总 数超过2000万个,成为世界上最安全的国家。视频图像及配套数据已经应用在反恐维稳、治安防控、侦查破案、交通行政管理、服务民生等各行业各领域。烁博科技视频安全核心能力:精准智能数据采集能力:在建设之初即以应用需求为导向,开展点位选择、设备选型等布建工作,实现前端采集设备的精细化部署。随需而动的AI数据挖掘能力:让AI所需要的算力、算法、数据、服务都在应用需求的牵引下实现合理的调度,实现解析能力的最大化。完善的数据治理能力:面_2018年8月由于某知名视频监控厂商多款摄像机存在安全漏洞