- 浏览: 977348 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
lgh1992314:
pkptzx 写道额,误人子弟...CaseInsensiti ...
关于commons dbutils组件的一个小缺陷分析 -
yk0025:
擦,有才,这是原创吗?
《神雕瞎驴》,金庸看后哭了^-^ -
hzxlb910:
没跑起来Exception in thread "m ...
Socket 群聊 -
pkptzx:
额,误人子弟...CaseInsensitiveMap是apa ...
关于commons dbutils组件的一个小缺陷分析 -
swearyd7:
Fiddler 宝典
我们接下来看 pcieb 。
[root@blu-nhm-ep:~]modinfo | grep PCI
15 fffffffffba46ce0 bfb0 - 1 pci_autoconfig (PCI BIOS interface)
37 fffffffffbacd3f0 ce28 183 1 npe (Host to PCIe nexus driver)
38 fffffffffbad95c8 5f50 - 1 pcihp (PCI nexus hotplug support)
40 fffffffffbae14f0 bb00 - 1 pcie (PCIE: PCI framework)
89 fffffffff7bff000 4c68 184 1 pcieb (PCIe to PCI nexus driver)
90 fffffffff7999000 1d68 84 1 pci_pci (PCI to PCI bridge nexus driver)
pcieb 是 PCI-E to PCI bus bridge nexus driver 。通过下面的方法可以在 onnv-gate 中找到实现的文件。
[allen@blu-xvm-osol:uts]find . -name Makefile\* | xargs grep pcieb
./common/Makefile.files:PCIEB_OBJS += pcieb.o
./sparc/pcieb/Makefile:# uts/sparc/pcieb/Makefile
./sparc/pcieb/Makefile:# This makefile drives the production of the pcieb driver kernel module
./sparc/pcieb/Makefile:MODULE = pcieb
./sparc/pcieb_bcm/Makefile:# uts/sparc/pcieb_bcm/Makefile
./sparc/pcieb_bcm/Makefile:# This makefile drives the production of the pcieb_bcm driver kernel module
./sparc/pcieb_bcm/Makefile:MODULE = pcieb_bcm
./sparc/pcieb_bcm/Makefile:CPPFLAGS += -DPCIEB_BCM -DPX_MOD_NAME=pcieb_bcm
./sparc/Makefile.sparc.shared:DRV_KMODS += pci_pci pcieb pcieb_bcm pcie
./sparc/Makefile.files:PCIEB_OBJS += pcieb_sparc.o
./intel/Makefile.intel.shared:DRV_KMODS += pcieb
./intel/Makefile.files:PCIEB_OBJS += pcieb_x86.o
./intel/pcieb/Makefile:# uts/intel/pcieb/Makefile
./intel/pcieb/Makefile:# This makefile drives the production of the pcieb driver kernel
./intel/pcieb/Makefile:MODULE = pcieb
[allen@blu-xvm-osol:uts]find . -name pcieb.c
./common/io/pciex/pcieb.c
[allen@blu-xvm-osol:uts]find . -name pcieb_x86.c
./intel/io/pciex/pcieb_x86.c
注: 以下对源代码的引用,除非特殊说明,都引自 common/io/pciex/pcieb.c 。
这是一个 nexus driver , 它的 modlinkage 定义是:
185 /*
186 * Module linkage information for the kernel.
187 */
188
189 static struct modldrv modldrv = {
190 |_______&mod_driverops, /* Type of module */
191 |_______"PCIe bridge/switch driver",
192 |_______&pcieb_ops,|____/* driver ops */
193 };
194
195 static struct modlinkage modlinkage = {
196 |_______MODREV_1,
197 |_______(void *)&modldrv,
198 |_______NULL
199 };
其中, pcieb_ops 定义为:
170 static struct dev_ops pcieb_ops = {
171 |_______DEVO_REV,|______|_______/* devo_rev */
172 |_______0,|_____|_______|_______/* refcnt */
173 |_______pcieb_info,|____|_______/* info */
174 |_______nulldev,|_______|_______/* identify */
175 |_______pcieb_probe,|___|_______/* probe */
176 |_______pcieb_attach,|__|_______/* attach */
177 |_______pcieb_detach,|__|_______/* detach */
178 |_______nulldev,|_______|_______/* reset */
179 |_______&pcieb_cb_ops,|_|_______/* driver operations */
180 |_______&pcieb_bus_ops,||_______/* bus operations */
181 |_______pcie_power,|____|_______/* power */
182 |_______ddi_quiesce_not_needed,||_______/* quiesce */
183 };
Letś check _init() implementation.
215 int
216 _init(void)
217 {
218 |_______int e;
219
220 |_______if ((e = ddi_soft_state_init(&pcieb_state, sizeof (pcieb_devstate_t),
221 |_______ 1)) == 0 && (e = mod_install(&modlinkage)) != 0)
222 |_______|_______ddi_soft_state_fini(&pcieb_state);
223 |_______return (e);
224 }
It initializes the state structure for allocation. Next is attach function, pcieb_attach(). If itś called with DDI_RESUME command, pcie_pwr_resume() in pcie module is called. Otherwise, itś a normal attach command (DDI_ATTACH). When question comes to me when I read the first lines of attach function. The bus private data for this devinfo node is used directly in this function, but where does it be allocated and initilized? The common interface to allocate and initialize a pcie_bus_t data structure is provided by pcie module.
[common/io/pciex/pcie.c]
739 /*
740 * Initialize PCIe Bus Private Data
741 *
742 * PCIe Bus Private Data contains commonly used PCI/PCIe information and offsets
743 * to key registers.
744 */
745 pcie_bus_t *
746 pcie_init_bus(dev_info_t *cdip)
And following function call this function according to cscope back tracing.
Cscope tag: pcie_init_bus
# line filename / context / line
1 451 common/sys/pcie_impl.h <<GLOBAL>>
extern pcie_bus_t *pcie_init_bus(dev_info_t *cdip);
2 746 common/io/pciex/pcie.c <<pcie_init_bus>>
pcie_init_bus(dev_info_t *cdip)
3 777 common/io/pciex/pcieb.c <<pcieb_initchild>>
if (!pcie_init_bus(child) || pcie_initchild(child) != DDI_SUCCESS) {
4 942 i86pc/io/pciex/npe.c <<npe_initchild>>
bus_p = pcie_init_bus(child);
5 677 intel/io/pci/pci_pci.c <<ppb_initchild>>
if (pcie_init_bus(child) == NULL)
6 528 sun4/io/px/px_util.c <<px_init_child>>
if (pcie_init_bus(child))
7 966 sun4u/io/pci/pci_pci.c <<ppb_initchild>>
if (pcie_init_bus(child) == NULL) {
Type number and <Enter> (empty cancels):
We can find the fact that _initchild() of each nexus bus driver will call this interface to create pcie private data for it's children. So the question is translated to “in which path is the initchild function called?” The answer comes to ndi_devi_bind_driver(), which is called to bind a devinfo node with a specific driver module.
ndi_devi_bind_driver
-->i_ndi_config_node(DS_BOUND)
-->init_node
-->pdev->devi_ops->devo_bus_ops->bus_ctl(DDI_CTLOPS_INITCHILD)
-->npe_ctlops / pepb_ctlops / ppb_ctlops / pci_ctlops /
isa_ctlops / rootnex_ctlops / ata_disk_bus_ctl /
cpunex_bus_ctl / ...
-->np e_initchild / ppb_initchild / pcieb_initchild / …
When the devinfo node state is being changed from DS_BOUND to DS_INITIALIZED,
[common/os/devcfg.c]
1537 |_______|_______case DS_BOUND:
1538 |_______|_______|_______/*
1539 |_______|_______|_______ * The following transitions synchronizes on the
1540 |_______|_______|_______ * per-driver busy changing flag, since we already
1541 |_______|_______|_______ * have a driver.
1542 |_______|_______|_______ */
1543 |_______|_______|_______if ((rv = init_node(dip)) == DDI_SUCCESS)
1544 |_______|_______|_______|_______i_ddi_set_node_state(dip, DS_INITIALIZED);
1545 |_______|_______|_______break;
in init_node(), initchild function of the parent bus is called to initialize the children nodes.
[common/os/devcfg.c]
871 |_______/*
872 |_______ * Invoke the parent's bus_ctl operation with the DDI_CTLOPS_INITCHILD
873 |_______ * command to transform the child to canonical form 1. If there
874 |_______ * is an error, ddi_remove_child should be called, to clean up.
875 |_______ */
876 |_______error = (*f)(pdip, pdip, DDI_CTLOPS_INITCHILD, dip, NULL);
877 |_______if (error != DDI_SUCCESS) {
878 |_______|_______NDI_CONFIG_DEBUG((CE_CONT, "init_node: %s 0x%p failed\n",
879 |_______|_______ path, (void *)dip));
880 |_______|_______remove_global_props(dip);
881 |_______|_______/* in case nexus driver didn't clear this field */
882 |_______|_______ddi_set_name_addr(dip, NULL);
883 |_______|_______error = DDI_FAILURE;
884 |_______|_______goto out;
885 |_______}
Next, allocate and get the soft state structure. The state structure is defined as below.
[common/io/pciex/pcieb.h]
84 typedef struct {
85 |_______dev_info_t|_____|_______*pcieb_dip;
86
87 |_______/* Interrupt support */
88 |_______ddi_intr_handle_t|______*pcieb_htable;|_|_______/* Intr Handlers */
89 |_______int|____|_______|_______pcieb_htable_size;|_____/* htable size */
90 |_______int|____|_______|_______pcieb_intr_count;|______/* Num of Intr */
91 |_______uint_t|_|_______|_______pcieb_intr_priority;|___/* Intr Priority */
92 |_______int|____|_______|_______pcieb_intr_type;|_______/* (MSI | FIXED) */
93 |_______int|____|_______|_______pcieb_isr_tab[4];|______/* MSI source offset */
94
95 |_______int|____|_______|_______pcieb_init_flags;
96 |_______kmutex_t|_______|_______pcieb_mutex;|___|_______/* Soft state mutex */
97 |_______kmutex_t|_______|_______pcieb_intr_mutex;|______/* Intr handler mutex */
98 |_______kmutex_t|_______|_______pcieb_err_mutex;|_______/* Error mutex */
99 |_______kmutex_t|_______|_______pcieb_peek_poke_mutex; /* Peekpoke mutex */
100
101 |_______/* FMA */
102 |_______boolean_t|______|_______pcieb_no_aer_msi;
103 |_______ddi_iblock_cookie_t|____pcieb_fm_ibc;
104 } pcieb_devstate_t;
-
Fault management initialization. Initialize the mutex locks. And then create special properties for device identification. “first-in-chassis” property: set if “First In Chassis bit” of “Expansion Slot Register”, the first byte of “PCI Slot Id Capabilities” is set. "serialid#" property: set according to PCI-Express Device Serial Number Capability register.
-
Next comes to “Power management setup”. This also makes sure that switch/bridge is at D0 during attach. The common pcie power management interfaces are implemented in pcie module.
-
Make sure the devinfo node has “device_type” and “range” property. Set if not. “pciex” or “pci” according to the type of bridge. For PCI and PCI-X devices including PCIe2PCI bridge, initialize cache-line-size and latency timer configuration registers.
-
Initialize bridge itself by calling pcie_init(). pci_init() is a common interface for PCIe devices provided by pcie module.
-
Initialize interrupt handlers. Before interrupts are intialized, _OSC initialization needs to be done. _OSC object is a control method that is used by OSPM to communicate to the platform the feature support or capabilities provided by a device’s driver. This object is a child object of a device and may also exist in the \_SB scope, where it can be used to convey platform wide OSPM capabilities. Driver needs to evaluate _OSC to notify platform that it can handle advanced error. When Initializing interrupt handlers, if both MSI and FIXED are supported, try to attach MSI first. If MSI fails for any reason, then try FIXED, but only allow one type to be attached. For a bridge, interrupts are allocated and initilized for hotplug, PME and errors. PME is power management event. Components may wakeup the system using a wakeup mechanism followed by a power management event (PME) Message.
-
Do any platform specific workarounds needed. x86 specific workarounds needed at the end of pcieb attach. Must apply workaround only after all initialization is done.
-
If this is a root port, determine and set the max payload size. Since this will involve scanning the fabric, all error enabling and sw workarounds should be in place before doing this.
Next >>>
pcieb_detach() does the opposite operations.
Driver Operations:
For nexus bus driver, driver operations are mainly designed for bus/device control. pcieb_open() is called when the device special file is being opened by an application. It uses a mutex lock to keep exclusive open and calls pcie_open(). pcie_open() is a common interface provided by misc/pcie module. pcieb_close() does the opposite operations. pcieb_ioctl() relies on pcie_ioctl() to handle devctl and hotplug related ioctls.
Bus Operations:
Bus operation is core of a nuxus driver. Pcieb module defines the bus operations as below.
92 static struct bus_ops pcieb_bus_ops = {
93 |_______BUSO_REV,
94 |_______pcieb_bus_map,
95 |_______0,
96 |_______0,
97 |_______0,
98 |_______i_ddi_map_fault,
99 |_______ddi_dma_map,
100 |_______pcieb_dma_allochdl,
101 |_______ddi_dma_freehdl,
102 |_______ddi_dma_bindhdl,
103 |_______ddi_dma_unbindhdl,
104 |_______ddi_dma_flush,
105 |_______ddi_dma_win,
106 |_______pcieb_dma_mctl,
107 |_______pcieb_ctlops,
108 |_______ddi_bus_prop_op,
109 |_______ndi_busop_get_eventcookie,|_____/* (*bus_get_eventcookie)();|___*/
110 |_______ndi_busop_add_eventcall,|_______/* (*bus_add_eventcall)();|_____*/
111 |_______ndi_busop_remove_eventcall,|____/* (*bus_remove_eventcall)();|__*/
112 |_______ndi_post_event,||_______|_______/* (*bus_post_event)();||_______*/
113 |_______NULL,|__|_______|_______|_______/* (*bus_intr_ctl)();|__|_______*/
114 |_______NULL,|__|_______|_______|_______/* (*bus_config)(); |___|_______*/
115 |_______NULL,|__|_______|_______|_______/* (*bus_unconfig)(); |_|_______*/
116 |_______pcieb_fm_init_child,|___|_______/* (*bus_fm_init)(); |__|_______*/
117 |_______NULL,|__|_______|_______|_______/* (*bus_fm_fini)(); |__|_______*/
118 |_______i_ndi_busop_access_enter,|______/* (*bus_fm_access_enter)(); |__*/
119 |_______i_ndi_busop_access_exit,|_______/* (*bus_fm_access_exit)(); |___*/
120 |_______pcie_bus_power,||_______|_______/* (*bus_power)(); |____*/
121 |_______pcieb_intr_ops,||_______|_______/* (*bus_intr_op)(); |__|_______*/
122 |_______pcie_hp_common_ops|_____|_______/* (*bus_hp_op)(); |____|_______*/
123 };
As you can see, it implements bus_map(), dma_allochdl(), dma_mctl(), ctlops(), fm_initchild(), bus_power(), intr_ops() and hp_common_ops(). Let's check them out one by one.
-
pcieb_bus_map()
Call parent's bus_map() function.
-
pcieb_dma_allochdl()
A software workaround for PCI-X to PCI-E bridges.
1323 /*
1324 * Some PCI-X to PCI-E bridges do not support full 64-bit addressing on the
1325 * PCI-X side of the bridge. We build a special version of this driver for
1326 * those bridges, which uses PCIEB_ADDR_LIMIT_LO and/or PCIEB_ADDR_LIMIT_HI
1327 * to define the range of values which the chip can handle. The code below
1328 * then clamps the DMA address range supplied by the driver, preventing the
1329 * PCI-E nexus driver from allocating any memory the bridge can't deal
1330 * with.
1331 */
-
pcieb_dma_mctl()
FDVMA feature is not supported for any child device of Broadcom 5714/5715 PCIe-PCI bridge due to prefetch bug. Return failure immediately, so that these drivers will switch to regular DVMA path.
-
pcie_hp_common_ops()
-
pcieb_fm_init_child()
/* PASSTHROUGH */
-
pcieb_intr_ops()
No significant platform level operation, calling i_ddi_intr_ops() at last.
-
pcieb_ctlops()
How to understand the following comments.
[common/io/pciex/pcieb.c]
704 |_______/*
705 |_______ * Pseudo nodes indicate a prototype node with per-instance
706 |_______ * properties to be merged into the real h/w device node.
707 |_______ * The interpretation of the unit-address is DD[,F]
708 |_______ * where DD is the device id and F is the function.
709 |_______ */
Answer:
This is a magic to set per instance device properties by using solaris driver.conf file. You can create pseudo device nodes by adding rules to driver.conf in following format.
name="node name" class="class name" [property-name=value ...];
When loading driver.conf, which is before hardware device enemeration, Solaris will create those pseudo device nodes with given "node name" and properties. Later when enumerating hardware device nodes, it will try to merging real hardware device node with pseudo device node with the same "node name". By that way, you can assign per instance properties by using driver.conf file.
For code path, when a devinfo node is being initialized after binding to a driver, init_node() is called.
[common/os/devcfg.c]
1537 |_______|_______case DS_BOUND:
1538 |_______|_______|_______/*
1539 |_______|_______|_______ * The following transitions synchronizes on the
1540 |_______|_______|_______ * per-driver busy changing flag, since we already
1541 |_______|_______|_______ * have a driver.
1542 |_______|_______|_______ */
1543 |_______|_______|_______if ((rv = init_node(dip)) == DDI_SUCCESS)
1544 |_______|_______|_______|_______i_ddi_set_node_state(dip, DS_INITIALIZED);
1545 |_______|_______|_______break;
If the dip is a persistent node, then i_ndi_make_spec_children() is called to create and attach a dev_info node from a .conf file spec.
[common/os/devcfg.c]
983 |_______|_______/*
984 |_______|_______ * If the node is not a driver.conf node then merge
985 |_______|_______ * driver.conf properties from new path-bound driver.conf.
986 |_______|_______ */
987 |_______|_______if (ndi_dev_is_persistent_node(dip))
988 |_______|_______|_______(void) i_ndi_make_spec_children(pdip, 0);
In this function, get the spec from .conf file and call init_spec_child() for each spec. A devi_flag bit, DEVI_MADE_CHILDREN, is reserved for mark whether spec children have been created.
[common/os/devcfg.c]
4501 /*
4502 * Lookup hwc specs from hash tables and make children from the spec
4503 * Because some .conf children are "merge" nodes, we also initialize
4504 * .conf children to merge properties onto hardware nodes.
4505 *
4506 * The pdip must be held busy.
4507 */
4508 int
4509 i_ndi_make_spec_children(dev_info_t *pdip, uint_t flags)
4510 {
4511 |_______extern struct hwc_spec *hwc_get_child_spec(dev_info_t *, major_t);
4512 |_______int|____|_______|_______circ;
4513 |_______struct hwc_spec||_______*list, *spec;
4514
4515 |_______ndi_devi_enter(pdip, &circ);
4516 |_______if (DEVI(pdip)->devi_flags & DEVI_MADE_CHILDREN) {
4517 |_______|_______ndi_devi_exit(pdip, circ);
4518 |_______|_______return (DDI_SUCCESS);
4519 |_______}
4520
4521 |_______list = hwc_get_child_spec(pdip, DDI_MAJOR_T_NONE);
4522 |_______for (spec = list; spec != NULL; spec = spec->hwc_next) {
4523 |_______|_______init_spec_child(pdip, spec, flags);
4524 |_______}
4525 |_______hwc_free_spec_list(list);
4526
4527 |_______mutex_enter(&DEVI(pdip)->devi_lock);
4528 |_______DEVI(pdip)->devi_flags |= DEVI_MADE_CHILDREN;
4529 |_______mutex_exit(&DEVI(pdip)->devi_lock);
4530 |_______ndi_devi_exit(pdip, circ);
4531 |_______return (DDI_SUCCESS);
4532 }
[common/os/devcfg.c]
4470 /*
4471 * create and attach a dev_info node from a .conf file spec
4472 */
4473 static void
font-
发表评论
相关推荐
DeepSeek与AI幻觉-清华大学团队制作 一、什么是AI幻觉 (定义与基础概念) 二、DeepSeek为什么会产生幻觉 (聚焦特定AI模型的幻觉成因分析) 三、AI幻觉评测 (评估AI幻觉的频率、类型与影响的方法) 四、如何减缓AI幻觉 (解决方案与技术优化方向) 五、AI幻觉的创造力价值 (探讨幻觉在创新场景中的潜在益处,如艺术生成、灵感激发等)
协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 前台用户可以实现注册登录、商品浏览,在线客服,加入购物车,加入收藏,下单购买,个人信息管理,收货信息管理,收藏管理,评论功能。 后台管理员可以进行用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
MES系统数字化工厂解决方案.pptx
MUI调用照片以及裁剪和图库照片上传到服务器
GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序, 是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。这是一种基于人工智能技术的问答系统, 可以实现智能回答用户提出的问题。相比传统的问答系统,ChatGPT可以更加准确地理解用户的意图, 提供更加精准的答案。同时系统采用了最新的GPT3.5接口与GPT4模型,同时还支持型,文心一言,腾讯混元, 讯飞星火,通义千问,DeepSeeK,智普等等国内各种大模型,可以更好地适应不同的应用场景,支持站点无限多开, 可以说ChatGPT付费创作系统目前国内相对体验比较好的一款的ChatGPT及多接口软件系统。 新增接入DeepSeek-R1、DeepSeek-V3(Ollama自部署和第三方均支持)、高级通道增加DeepSeek、 支持AI接口输出的reasoning_content字段(新的推理输出格式)、更新模型库、修复导出Excel的bug等功能, 优化了云灵Midjourney接口,出图更快更稳定。小程序端变化不大该系统版本测试下来比较完美, 老版本升级时数据库结构同步下,同时把原来
内容概要:本文档详细介绍了一款基于Java技术的美食点餐管理平台的设计与实现。该平台旨在优化传统餐饮行业的服务流程,通过智能化的点餐系统、高效的订单处理、智能库存管理和数据分析等功能,为用户提供便捷高效的点餐体验,并提升餐厅管理效率和服务质量。系统涵盖了前端设计、后端开发、数据库设计等方面,采用了成熟的Java技术和现代Web开发框架,如Spring Boot、Vue.js或React,确保系统的高效性和稳定性。此外,文档还包括详细的用户界面设计、模块实现以及系统部署指南,帮助开发者理解和搭建该平台。 适合人群:具备一定的Java编程基础和技术经验的研发人员、IT从业者以及有意开发类似系统的企业和个人。 使用场景及目标:①为餐厅提供一个集点餐、订单处理、库存管理于一体的高效平台;②优化传统餐饮服务流程,提升客户服务体验;③利用大数据分析辅助决策,助力餐饮企业精细化运营;④通过集成多种支付方式和其他外部系统,满足多样化的商业需求。 其他说明:本项目不仅提供了完整的技术方案和支持文档,还针对实际应用场景提出了多个扩展方向和技术优化思路,旨在引导用户不断迭代和完善该平台的功能和性能。
相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长 ,相场模拟; 选择性激光烧结; 激光融覆; 凝固; 枝晶生长,相场模拟与激光工艺:枝晶生长的凝固过程研究
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
关于加强新能源汽车安全管理涉及的法规标准分析.pptx
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
UI+svg格式
关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx
1、文件内容:openjpeg-1.5.1-18.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/openjpeg-1.5.1-18.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga verilog实现视频协议bt656和1120组帧解帧代码 有文档介绍协议,有mod仿真,matlab代码仿真 ,FPGA; Verilog; BT656协议; 1120组帧解帧代码; 文档介绍; Mod仿真; Matlab代码仿真,FPGA Verilog:实现BT656与1120组帧解帧代码的仿真与文档化研究
基于 RAG 与大模型技术的医疗问答系统,利用 DiseaseKG 数据集与 Neo4j 构 建知识图谱,结合 BERT 的命名实体识别和 34b 大模型的意图识别,通过精确的知识检索和问答生成, 提升系统在医疗咨询中的性能,解决大模型在医疗领域应用的可靠性问题。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
抖音视频带货:行业趋势与营销策略.pptx
西门子动态密码程序:学习随机码生成与指针存储数据,Smartline触摸屏操作指南及编程视频教程,西门子动态密码程序:学习随机码生成与存储数据的智能之旅(视频讲解),200smart动态密码程序,触摸屏是smartline,西门子动态密码程序,,随机码的产生,指针用法存储数据,非常适合学习,而且是自己程序,还专门录制了一段视频来讲解编程的思路和画面的操作步骤。 ,200smart动态密码程序; touchscreen: smartline; 西门子动态密码程序; 随机码生成; 指针用法存储数据; 自学编程; 程序录制视频讲解。,西门子动态密码程序:触摸屏Smartline随机码生成与指针存储技术解析
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用