LWN:DVB与头文件和用户空间的regression!

Contex-M3寄存器组整理 看我以前的博客,关于ARM 寄存器和汇编,我之前写过和写过相关的博客至少有三次,可是实际情况却是过了一两年就基本忘了,感觉之前学的都是囫囵吞枣,没有真正的明白,也许学习就是这样,一开始只能记个大概,多看几遍多用几遍也许就理解了。每次看到汇编的地方,必然就会想起R0-R15寄存器的意思是啥。 阅读详情

关注了就能看到更多这么棒的文章哦~

DVB, header files, and user-space regressions

By Jake Edge
August 25, 2021
DeepL assisted translation
https://lwn.net/Articles/867275/

最近 Linux 5.14 版本中 media 子系统出现了一次比较奇怪的质量回退(regression)。内核的用户空间二进制接口(ABI)并没有发生变化,而一般来说要 revert 某个 patch 的话通常都是因为这类原因,但这次的时间报告仍然导致了 patch revert。因为这次的代码改动确实导致了用户空间应用程序的编译问题,因为它把一些头文件移到了 staging/ 目录之下,这是清理已经废弃(deprecated)的(虽然其实仍然可用的)数字视频广播(DVB)设备的驱动程序引出的改动。这里有几个不同的问题纠缠在一起,但用户空间 API(而不是 ABI)的质量回退是一个新的问题。

Soeren Moch 在 8 月 11 日的一篇详尽的邮件中报告了这个 regression 问题。该邮件的部分内容是对 Linus Torvalds 说的,要求 revert 掉 media 子系统维护者 Mauro Carvalho Chehab 提交的三个 patch。这些 patch 将 av7110 驱动移到了 staging 位置,并将一些文档和头文件也移动了过去。但这破坏了视频录像机(VDR)应用程序中一些部分的编译工作,而 Moch 指出这个应用程序在多个 Linux 发行版中都缺省提供了。

他引用了一个由 VDR 社区的另一个成员提出的 Red Hat bug,作为证据。VDR 使用了 uapi/linux/dvb 目录下的头文件,当这些文件被移动时,VDR 在即将到来的 Fedora 35 使用的内核上就无法完成编译了。除此之外,Moch 不同意将这种 "长期存在并能正常工作的 av7110 驱动程序 " 移到 staging/。

这封邮件的大部分内容是发给 Chehab 的,认为不应该将现有 DVB API 改为 deprecated [更新:正如 LWN 评论中指出的,这是 av7110 中实现的 "全功能 "DVB API,只是被 VDR 所使用到]、删除 av7110 支持、以及抱怨 Chehab 不愿意合并另一个同样实现了该 API 的驱动程序。Moch 说,有一些现在在用的设备和现成的 DVB stream 都是在通过这些驱动程序来访问的。他对 Chehab 在移动 av7110 的 patch 带有的 commit message 有些不同看法:

你的提交信息 "解码器只支持 MPEG2,与几个现代 DVB 流不兼容 " 往好里说也得算是有误导性的。德国最流行的卫星电视供应商(Astra)仍然在用 MPEG-2 编码传输大多数有趣的节目,所以这应该算是在活跃使用中的,没有理由让这块卡退休。

但 Chehab 的看法不同:av7110 硬件在 15 年前就已经停止生产了,而驱动所实现的 DVB API 对今天的硬件没有用:

被删除的 API 是专门用于控制 av7110 的 MPEG-2 解码器而编写的,从来没有被集成到 DVB 核心代码中去:av7110 在自己的内部代码中有一个针对这个驱动实现的专门版本。

此外,该 API 也从来没有完整的文档:有几个来自现在被删除的 API 的 ioctl 从来没有在官方 linux kernel 里面实现过,也没有在 spec 中描述过。目前的 upstream 维护者中没有一个人了解这些 ioctls 是做什么用的,我们也没有任何 av7110 硬件可以进行测试。

对于其中的一些说法,大家很明显是有分歧的,Moch 一再提出今后想自己来负责维护 av7110 的驱动程序。他也希望看到他的 saa716x 驱动(同样也实现了 DVB API)被合入 mainline,并说他也愿意作为它的维护者。据 Moch 说,有一个活跃的社区正在使用 VDR 的硬件,DVB API 很适合它的需求。但是 Chehab 说:

过去将 av7110 保留在内核中,一直是在浪费 upstream 上有限的开发资源。几年前,由于 year-2038 问题,我们需要修复 av7110 的 API。由于代码已经在那里很久缺乏维护了,我们时不时会遇到与它有关的 bug(甚至有些 security 问题)。如上所述,最近一次修改可能破坏了这个驱动程序,而在几次 Kernel review 中都没有人注意到。

Moch 对这一说法提出异议,并对 Chehab 对 media 子系统的处理有一些措辞非常强烈的抱怨,其中一部分他是向 Torvalds 提出的。显然,在这个话题中掺杂了一些长期争议。Torvalds 插进来澄清了一些事。他说,regression 政策只针对内核的 ABI,而这里 ABI 并没有发生变化。"旧程序仍旧可以继续工作"。他还感叹说 VDR 不应该直接使用内核的头文件,这不是正确的用法:

我们非常不建议用户空间的应用程序直接使用内核头文件,哪怕是像 glibc 这样的项目也应该是 copy 这些头文件,而不是直接 include 进去。

这正是因为对内核代码树的目录调整都不应该导致其他地方出现随机问题,而这些问题从内核的角度(或从另一端的角度)来看是很难测试和永远保持步调一致的。

但另一方面,有问题的头文件是位于 uapi 目录的。"虽然用户空间程序这样使用它们是会导致很多麻烦的,但我认为这种做法也不算是完全不合理的"。所以他把移动头文件的改动给 revert 掉了,同时保留了其他的改动不变(也就是 av7110 和 DVB API 文档仍然是被移到了 staging/)。他建议 VDR 和其他任何使用了头文件的应用程序都将这些文件复制到他们自己的代码 tree 中。他同意 Chehab 的意见,认为将 av7110 移出 main tree 是正确的做法:

我不认为将 av7110 驱动从 staging 中移回去是个有意义的做法,尽管它可能可以继续正常工作,但它 是 老旧代码,而且没有维护。并且我当然建议任何其他 mainline kernel 之外的驱动如果在使用这些没有版本实现的旧接口的话,都不应该继续使用了,毕竟没有什么其他东西实现了这些功能。

Torvalds 和 Chehab 似乎都忽略了 Moch 提出的维护驱动程序的建议,或者说没有完全接受,尽管他也许可以在 staging/ 中来作为这部分的维护者。保持驱动能一直正常工作,这是确保它不会被完全删除的一个好方法。然而,Moch 关于 av7110 最终命运的问题仍然没有得到回答:

这个驱动可以在 staging 区停留多长时间?如果我把它很好维护起来之后,你会把这个驱动程序从 staging 区移回来吗?如果一个驱动程序仍然有用户,并且有人自愿维护它,在一定时间后还要删除驱动程序,这是否是 Linux 的一个标准政策?

所以,至少现在 VDR 的用户还可以在最新的内核中进行编译。今后,复制了头文件之后应该也可以确保它继续能够成功编译。不过,如果驱动程序被删除的话,用户也将需要重新编译一个驱动程序,才能让一切正常工作起来。Chehab 说,他愿意参与讨论 DVB 的 API,"但是这样的 API 需要能够支持现代的嵌入式硬件,并且应该被设计成容易扩展来支持未来的需求"。这可能会导致需要重新制作一个 saa716x 驱动,这样它就可以被纳入 mainline,但无论如何这款硬件已经是相当古老的了,而且不清楚 VDR 社区是否有兴趣进行这类改动。

看到一个拥有活跃社区的仍然可用的驱动得到这样的待遇,着实有些令人惊讶,但 Chehab 坚持认为 DVB API 作为 media 子系统的一部分已经被废弃了。在这个主题中,有一股对多年来 DVB API 的处理和 Chehab 的处理方式表示不满的味道,但 Linux 维护者对于自己负责的子系统也总是有最大的权限。在这一点上,双方似乎都很固执己见,所以可能需要一些其他感兴趣的人站出来帮助找到一种可行的解决方案,否则的话 VDR 社区就需要继续使用那些处于 staging 的驱动,或者干脆完全脱离 mainline 的驱动了。

这个事件确实证明了内核里的 regression policy 扩充了适用场景。哪怕 Torvalds 对这里使用头文件的方式不满意,他也仍然不想导致一个现有的用户空间应用程序无法使用,因此进行了 revert 操作。我们不禁要问,还有多少其他的应用程序或 library 还没有了解到这个不要直接使用内核用户空间 API 头文件的原则呢?这可能会导致以后进行代码调整和清理工作的时候出现问题。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

67b90fb11ae5a7e9008384aa21744c58.png

32位ALU设计(verilog实现) 32位ALU设计 ​ 算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU。算术逻辑单元是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"And Gate"(与门) 和"Or Gate"(或门)构成的算术逻辑单元,主要功能是进行二位元的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的形式来表示。 设计思路 设计实现 仿真测试 文章目录32位ALU设计一、设计 阅读详情

相关推荐

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 836

linux dvb编译,linuxtv-dvb-1.0.

linuxtv-dvb-1.0.1.................\apps.................\....\av7110_loadkeys.................\....\...............\activy.rcmm.................\....\...............\av7110_loadkeys.c....................

weixin_33479657的博客 336

【愚公系列】《AIGC辅助软件开发》041-如何使用 AI技术提升工作效率:AI辅助软件架构师实践

在数字化转型的浪潮中,软件架构师作为技术团队的核心,承载着系统设计与架构优化的重要责任。然而,随着项目复杂度的增加和技术环境的变化,架构师面临着前所未有的挑战。幸运的是,人工智能(AI)技术的迅猛发展为这一行业带来了新的机遇,帮助架构师提升工作效率、优化决策过程,并改善团队协作。本文将深入探讨AI如何辅助软件架构师的实际工作,具体分析AI在需求分析、架构设计、代码生成、测试和优化等环节的应用。

愚公智库 15万+

Linux内核配置选项 参考(2)

--- Mouse interface 08.15.01、[ ] Provide legacy /dev/psaux device (1024) Horizontal screen resolution (768) Vertical screen resolution 08.15.02、 Joystick interface 手柄接口。在linux下用手柄?游戏太少了。偶也不是游戏迷。咔嚓

swrd 3143

ESP32-C5硬件设计全链路指南:ADC/SDIO/USB/RF PCB实战

模数转换器(ADC)和高速外设接口是嵌入式系统硬件设计的核心基础。理解ADC通道映射、输入阻抗特性与抗干扰布线,是保障传感器采样精度的前提;掌握SDIO、USB差分信号的阻抗控制、端接策略与电源去耦方法,则直接决定通信可靠性与EMC性能。在Wi-Fi 6/Bluetooth 5.3双模SoC如ESP32-C5中,ADC复用约束、USB与SDIO管脚冲突、RF匹配网络调校、四层板叠层规划等工程细节,共同构成高成功率PCB落地的关键技术栈。本文聚焦ESP32-C5平台,系统梳理从模拟前端到射频输出的硬件设计规范

weixin_35756130的博客 345

多层环境室内定位系统综述总结

本文是一篇发表于2025年《IEEE Access》期刊的综述论文,由埃及开罗美国大学与卡塔尔卡内基梅隆大学团队合作完成,聚焦多层环境室内定位系统的核心挑战、技术方案及未来方向,填补了该领域缺乏全面综述的空白。

程序员石磊 440

[Linux]Linux定時任務 crontab與DV Regression

前言:crontab是一个用来设置、删除或显示供守护进程cron执行的定时任务的命令。每一个用户都可以拥有属于自己的定时任务,定时任务文件默认以用户名命名,并放在/var/spool/cron目录,该目录普通用户无访问权限。    可以通过cron.allow 和 cron.deny文件管理用户使用cron服务的权限。如果cron.allow存在,用户必须列在其中才会被允许使用c...

元直的博客 581

cartographer ceres后端优化

这里引用一篇文章作用一:用户可以选择使用Problem::AddParameterBlock显式添加参数块;在显式添加的时候ceres会内部进行额外的正确性检查。当Problem::AddParameterBlock()不存在时,Problem::AddResidualBlock()会隐式添加参数块,因此不需要显式调用Problem::AddParameterBlock()函数。ps:类似构造函数,显式构造函数。

南北粉面馆 802

Regression回归

文章目录Regression回归回归定义和应用例子回归定义应用例子模型步骤模型假设1.一元线性模型(一个特征)2.多元线性模型(多个特征)模型评估收集和查看训练数据判断模型好坏模型优化梯度下降算法在现实世界中面临的挑战 Regression回归 回归定义和应用例子 回归定义 ​ Regression 就是找到一个函数 function ,通过输入特征 xx,输出一个数值 Scalar。 应用例子 股市预测,自动驾驶,商品推荐,Pokemon 模型步骤 模型假设,选择模型框架(线性模型) 模型评估,如何判断

weixin_43097621的博客 345

【OpenFOAM】-olaFlow-算例4- irreg45degTank

不规则波浪模拟

ou_no的博客 2117

2026年VIVO嵌入式岗位高频面试题(含参考答案)

摘要:VIVO嵌入式岗位考核涵盖智能手机、IoT设备、芯片适配等方向,重点考察硬件底层交互、RTOS/Linux开发、C/C++功底与问题排查能力。题目按优先级排序,分硬件架构、RTOS、C/C++、数据结构、Linux实践、行业认知6大模块,共40道题。硬件部分涉及中断、ARM架构、加速技术、BSP开发等;RTOS部分区分硬/软实时系统;C/C++部分侧重内存管理、位操作;Linux部分考察常用命令;行业部分关注鸿蒙等系统理念。题目设计贴合实际工作场景,全面评估嵌入式开发能力。

Open 52

Regression

//李宏毅视频官网:http://speech.ee.ntu.edu.tw/~tlkagk/courses.html                                                    点击此处返回总目录 //邱锡鹏《神经网络与深度学习》官网:https://nndl.github.io       今天主要讲的是R...

liupc的学习笔记 1万+

C#操作MySQL从入门到精通(3)——新建数据库、新建表

我们要首先新建一个数据库,并且在数据库中新建一系列的表来管理数据库。

qq_34059233的博客 949

linux头文件目录sys,Linux的目录结构和头文件相关;哪里找-> sys/types.h, sys/stat.h

KEYWORD : sys/types.h; sys/stat.h; linux; 头文件;reserve place; reserve place2018/Apr/01 更新:关于 sys/***.h 的头文件,在不同平台上通过建立软连接的方式可以解决。建立软连接的方式可以参考本人的这篇blog ===> 获得(读取)一个文件内的所有数据的字节总数 <=== 这个链接中的  其中...

weixin_36400833的博客 2042

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

keras运行实例(一):regression回归

小编在自学机器学习过程中,参考莫烦大佬的python教程进行了keras的实例运行,在此记录一下,以免忘记。 keras在Linux的安装很简单,直接   pip install keras   一行命令就可以啦,结果如下: 因为呢我已经安装过了,所以会提示already satisfied 。另外呢keras的bankend有theano和TensorFlow,可以随意切换,其中Tens...

小熊猫的博客 4276

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

linux设备acpi表配置,linux ACPI 知识

为什么学习ACPIACPI是Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分OS需要从BIOS得到的信息都可以从ACPI得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从ACPI得到。ACPI的内容庞杂,学习ACPI至少可以帮助我们理解:配置信息。这些信息从legacy PNP设备的配置,到多处理器,到NUMA,比如现在的Multiple Core的信息就只能从A...

weixin_34983902的博客 3061

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

为linux系统设计一个简单的文件系统_如何优雅的设计一个告警系统?远没有你想的那么简单...

目录:告警的本质告警对象监控的指标和策略理论与现实异常检测基于曲线的平滑性检测基于绝对值的时间周期性基于振幅的时间周期性基于曲线回升的异常判断核心要点总结告警的本质没有多少系统的告警是设计得当的。良好的告警设计是一项非常困难的工作。如何知道你收到的告警是糟糕的?多少次你收到了告警之后,立即就关掉了的?是不是成天被这些没有什么卵用的东西给淹没?最常见的告警设置:cpu使用率超过90%,然后告警。这种...

weixin_39953244的博客 171

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 438

基于STM32的智能浇花系统

本文设计基于STM32F103C8T6的智能浇花系统,集成DHT11、YL-69、MQ-135、GL5528四类传感器,实现温湿度、土壤湿度、CO₂浓度与光照的实时监测。系统支持自动、手动、远程三模式联动控制,通过ESP8266-01S以MQTT协议上云,配合手机APP实现数据可视化与远程指令下发。硬件采用多通道ADC采样、继电器驱动与OLED显示,软件实现精准时序控制与双向通信。测试表明系统稳定可靠,完整覆盖“感知—控制—云联”IoT全链路,具备高扩展性与工程实践价值。

weixin_45732499的博客 171

网口ps端--基础知识--调试(1)--deepseek

你现在卡住,是因为这每一层(硬件、驱动、lwIP 协议、IP 地址)中,只要有一层不对,网口就不通。物理层:看灯。灯亮说明线没问题,PHY 没死。MAC 驱动层:看串口打印。有没有打印出Link Speed?如果卡在自协商,说明你的 PHY 驱动还没配好。lwIP 协议层:如果底层通了,IP 也配对了,你调用udp_recv注册了回调函数,当电脑发来 UDP 包时,lwIP 会自动把数据包拆开,送到你的回调函数里。你之前一直在改,就是一直在死磕第 1 层和第 2 层。

AlibabaApple的博客 95

35ms 抗量子握手:ESP32-S3 跑通 ML-KEM-768

ML-KEM(Module-Lattice-based Key Encapsulation Mechanism)基于格密码,是 NIST 2024 年正式发布的 FIPS 203 标准。选 768 参数级(而不是更低的 512)是因为它被广泛视为"长期安全"档位——CATAPULT 等行业联盟也推荐 IoT 长寿命设备直接上 768。密钥交换的抗量子性。现有 IoT 设备大量使用 ECDH,量子计算机(Shor 算法)一旦可用,ECDH 直接失效。

嵌入式单片机实验室 212

S021D-基于STM32单片机自动追光系统(舵机)【Proteus仿真+Keil程序+原理图】

设计以STM32单片机、四路GL5516光敏电阻、两路SG90舵机、OLED、按键搭建双轴追光云台系统。支持手动/自动模式切换,按键可调节追光灵敏度并保存至FLASH;自动模式依靠四路光敏采集光照差值计算方位,驱动舵机跟踪光源,OLED实时显示云台角度与工作状态。

51单片机实物制作DIY设计 181

认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇14

本文系统阐述了STM32晶振电路设计要点,强调负载电容匹配与R_Ext必要性需基于计算验证,指出PCB寄生参数对振荡精度影响显著。重点提出振荡器PCB设计规范:缩短走线、加地保护环、分离地平面、避免串扰,并说明焊接工艺与环境防护对稳定性的重要性。同时解析内部时钟不可用于USB因温漂大,且PLL不放大ppm误差。最后推荐使用MEMS振荡器替代传统晶振,实现低功耗、小体积与高可靠性。

一只天天被叨叨的小可爱 289

ARM64-GNU汇编器

o伪指令分配大小例子伪指令分配大小例子.byte1 字节.byte 0x412 字节.word / .long 4 字节8 字节.ascii字符串(不加 \0)字符串(自动加 \0).byte:把 8位数当成数据插入汇编代码中。.hword和 .short:把16 位数当成数据插入汇编代码中。.long和 .int:这两个伪指令的作用相同,都把 32位数当成数据插入汇编代码中。.word:把 32位数当成数据插入汇编代码中。

weixin_43903002的博客 180
上一篇: LWN:业余无线电的FOSS软件!
下一篇: LWN: Linux kernel 中的Rust!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值