Articles of 设备

采用Nginx和Apache的embedded式设备的最佳快速身份validation机制

我们有一个与Nginx,Apache,Django和Postgres一起部署的项目。 该项目有大量embedded式设备以5分钟的间隔login到服务器(https),并向服务器发送文件。 此外,项目的WebUI面已经有普通用户login并执行不同的function。 目前,系统并没有区分embedded式设备和普通(人)用户。 当器件数量很低时,这个机制在要求的速度下工作正常。 但是随着设备数量的增加,数据库上的负载增加了很多。 我们每天观察大约60000个django_session条目。 我们运行的用于处理从设备发送的文件的导入脚本很难跟上传入的数据,数据库负载很重。 我想实现一个最小的身份validation机制,可以非常快地validation设备,并允许它发送文本文件。 我想避免使用django身份validation方式,但希望继续使用设备的用户名 – 密码的auth_user表。 鉴于性能的要求,我需要一些使用nginx的方法,并没有真正把apache带入图片并接受文件。 你认为是达到这个目标的最好方法? 此外,这个大型embedded式设备相关的项目是用于这种types的机制?

如果Device :: SerialPort上有数据,则用Perltesting

我写了一个从串口读取数据的Perl脚本。 use Device::SerialPort; $PortObj = new Device::SerialPort ($PortName, $quiet, $lockfile); $PortObj->read_const_time( 500 ); # timeout waiting for data after 500ms … 主循环尝试从串口读取数据: while ( 1 ) { ( $count, $data ) = $PortObj->read( $frameLength ); process_my_data( $data ); do_something_entirely_different_that_needs_being_done; } 但是,我不希望$ PortObj->读超时(耗费大量时间),而是希望能够testing缓冲区中的数据是否可用,以便加速循环: while ( 1 ) { if ( test_serial_data_available ) { ( $count, $data […]

Linux设备驱动程序 – 如何在closures文件时取消阻止读取线程?

我正在尝试为Linux实现一个字符设备驱动程序,并遇到麻烦。 简而言之,写入设备的数据被缓冲以供读取。 当没有数据可用时,通过“wait_event_interruptible”读取块的调用。 由写入处理程序接收的数据调用“wake_up_interruptible”。 释放处理程序还调用“wake_up_interruptible”来解锁读取器,但设置一个标志来指示驱动程序正在释放。 从用户空间我有一个可执行文件,打开驱动程序通过“打开”,然后启动另一个线程。 主线程继续调用“读”。 按照预期,没有数据可用于读取和呼叫块。 另一个线程hibernate一秒钟(为主线程提供足够的时间来读取和阻塞),调用“closures”,然后再次调用“closures”。 第一个调用返回“0”,而第二个返回“-1”(如预期)。 然而,我的驱动程序的释放处理程序从来没有被调用,我不明白如何解锁我的阅读线程,而不明确发送信号或写入一些数据到设备。 我的理解是,当驱动程序的最后一个句柄closures,其释放处理程序被调用。 我试图实现我认为是标准的用户空间行为 – 阻止从文件读取的线程将变得畅通无阻,并在asynchronousclosures时接收文件结束返回值。 我是否对用户空间中的文件级读取/closures有正确的理解? 我有正确的设备驱动程序了解吗? 我错过了别的吗? 我看了“Linux设备驱动程序第三版”,并不能完全find这个问题的答案。 我也search了谷歌,但似乎无法find答案。 你可以提供任何帮助表示赞赏。 我的内核版本是3.0.15。

防火墙后面的设备通过ssh连接

在这个地方有几个这样的问题,但没有一个真正地回答我的问题(例如连接到防火墙后面的设备 ) 我想要的是一个中央服务器,从个人防火墙后面的多个(比方说100个)embedded式设备接收心跳。 这些设备需要能够做两件事情。 从服务器获取新的configuration。 我怀疑我可以通过从设备到服务器的http获取,并拉下一些XML,然后重新加载自己的configuration。 打开与服务器的ssh连接,允许pipe理员login到设备的命令行,并进行远程维护和故障排除。设备=>服务器<=pipe理员和pipe理员可以使用bash命令行或等效命令。 该设备是低功耗embedded式设备,将运行Linux。 Python的解决scheme将是可取的(即时考虑与sram paramiko的东西),但我打开其他解决scheme。 最主要的是在专网上不会有技术用户,所以应该能够插入到消费级的ADSL调制解调器,获得一个DHCP地址,这一切都应该工作。 我可以事先预装任何设备,例如ssh证书,用于无密码的ssh等。 有人有任何想法? 干杯 标记

停止Perl的'tie'来重置我的串行接口上​​的Arduino /脉冲DTR

在Perl下,打开Linux上的Serial :: Device作为一个文件重置我的Arduino,但我不希望它被重置。 Arduino可以通过脉冲DTR进行复位,因此打开串行设备时必须默认脉冲DTR。 我的问题是:我怎样才能防止我的Arduino被重置(DTR脉冲)? 这个最小的代码重置我的Arduino: use Device::SerialPort; use Symbol qw( gensym ); my $handle = gensym(); my $PortName = '/dev/ttyUSB1'; my $PortObj = tie( *$handle , "Device::SerialPort" , $PortName ) or die "Cannot open serial port: $!\n"; # At this point the Arduino is being reset. 我知道这只是通过打开设备PortObj = new Device::SerialPort ($PortName, $quiet, $lockfile); 方法,但我不能使用该方法,因为我无法检查是否有数据在串行缓冲区中等待。 […]

有可能有2个内核模块链接到相同的/ dev /设备?

我想通过软件模型(我们称之为(B))来模拟一个昂贵的设备,而不是真正的设备与/ dev / device进行交互 目前已经存在一个内核模块来pipe理链接到/ dev / device的真实设备 (我们称之为(A))。 (A)将数据发送到/ dev / device,(B)读取这个数据,准备一个响应并将其发送回/ dev / device ,并且(A)读取这个响应? 如果存在一个更简单的解决scheme来做我想做的事情(即用软件模型模拟硬件设备),不要犹豫,build议。

我可以在两个不同的进程中同时访问/ dev / ttyS0设备文件。 为什么?

我读了一些地方,任何设备文件一次只能被一个进程访问。 但是在我的情况下,我可以同时通过两个不同的进程访问我的/dev/ttyS0设备文件。 在我的情况下,我用/dev/ttyS0打开了一个minicom ,然后我用c编写了一个程序,它打开同一个文件,并尝试从中读取/写入。 我可以同时打开两个。 为什么发生在我的情况?

理解“/ dev / video”的输出

我试过编写一个简单的应用程序,它应该检测来自/ dev / video设备的像素差异。 像运动一样。 我不知道/ dev / video设备是如何工作的,所以大部分都是猜测。 我发现,似乎(从特定的networking摄像头)的数据可以分为8192字节的部分。 我假设每个代表一个框架。 每个“帧”的前+600字节与前一帧相同。 我怎样才能解释这些数据成为一个可以理解的像素matrix? 参考的程序代码: #!/usr/bin/ruby # calculates a percentage difference between two array's def percentage_difference( arrayA, arrayB ) top_size = arrayA.size > arrayB.size ? arrayA.size : arrayB.size diff_elements = 0; 0.upto( top_size – 1 ) do |i| diff_elements += 1 unless arrayA[i] == arrayB[i] end […]

linux虚拟文件作为设备驱动程序

我写一个linux字符设备驱动程序来模拟一个文件。 数据存储在一个数组中,我想实现一个“读取文件”处理程序… static ssize_t data_read(struct file *f, char __user *buf, size_t count, loff_t *f_pos){ char *msg_pointer; int bytes_read = 0; if(vault.storage==NULL) return -EFAULT; msg_pointer = vault.storage + *f_pos; while (count && (*f_pos < vault.size) ) { put_user(*(msg_pointer++), buf++); count–; bytes_read++; ++*f_pos; } return bytes_read; } vault.storage是一个指向kmalloc创build的指针。 如果我通过使用dd进行复制来testing代码,则按预期工作,但是当我想用C打开文件时 if((fp_data = open("/dev/vault0", O_RDWR)) < 0){ perror("could not […]

香蕉皮不开机(红色LED亮)

我买了一些全新的香蕉皮,分别是“Banana Pi-M2”和“Banana Pi-M3” 我试图在他们两个上安装Debian,但是我无法工作。 我完全按照这里的教程(Windows): http : //wiki.lemaker.org/BananaPro/Pi : SD_card_installation将Debian保存在SD卡上。 问题总是一样的。 当按下“M3”上的电源button或者插入“M2”时,只有红色LED亮起,没有任何反应。 局域网端口的指示灯熄灭,所以接近指示灯不能启动。 我使用的电源产生5V和2100mA,这应该适合Banana Pi的条件。 然后我尝试安装的发行版是例如我从这里得到的Bananian: https ://www.bananian.org/download 像Debian这样的几个发行版: http : //www.banana-pi.org/m3-download.html http://www.banana-pi.org/m2-download.html 我使用2个不同的SD卡进行testing,也只使用USB棒。 一切都产生了同样的错误。 有什么我错过了吗? 提前致谢。