我正在尝试学习如何使用带有C绑定的D-Bus.我以前从未使用过D-Bus.我正在学习本教程,我认为这是官方教程(Freedesktop.org).我已经读过它,直到这个段落给出了第一个示例程序,但不幸的是我在这个页面上没有看到任何关于如何编译它或包含哪些库的指示.我错过了什么 ?
我的操作系统是Ubuntu 10.04 32bit.我安装了libdbus-glib-1-dev包.我试图#include <dbus/dbus.h>在源文件的开头添加,并使用
$ gcc -ldbus-1 -I/usr/include/dbus-1.0/ -I/usr/lib/i386-linux-gnu/dbus-1.0/include -o my_dbus.bin my_dbus.c
Run Code Online (Sandbox Code Playgroud)
但我一直都在失败:
my_dbus.c: In function ‘main’:
my_dbus.c:7:3: error: unknown type name ‘DBusGConnection’
my_dbus.c:8:3: error: unknown type name ‘GError’
...
Run Code Online (Sandbox Code Playgroud)
我是否错过了教程中的一点?不,你能帮我编译这段代码吗?
提前致谢.
即使已经存在类似的话题,我也注意到它的历史可以追溯到两年前,因此我认为开一个新主题更合适......
我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以监控随机数生成器(/drivers/char/random.c)的行为.到目前为止,由于sock_create和sock_sendmsg函数,我设法监视了一些事情.您可以在此消息的末尾找到我使用的典型代码.(您可能还想在此处下载完整的修改后的random.c文件.)
通过在适当的random.c函数中插入此代码,我能够为每次访问/ dev/random和/ dev/urandom发送UDP数据包,并且随机数生成器使用的每个键盘/鼠标事件都可以收集熵.但是,当我尝试监视磁盘事件时,它根本不起作用:它在引导期间生成内核崩溃.
因此,这是我的主要问题:您是否知道为什么我的代码在插入磁盘事件函数时会导致如此多的麻烦?(add_disk_randomness)
或者,我已经读过netpoll API,它应该处理这种UDP-in-kernel问题.不幸的是我还没有发现任何相关的文件除了从2005年相当有趣,但过时的红帽介绍你觉得我应该相当使用这个API?如果有,你有什么例子吗?
任何帮助,将不胜感激.提前致谢.
PS:这是我的第一个问题,所以请不要犹豫,告诉我,如果我做错了什么,我会记住以后的问题:)
#include <linux/net.h>
#include <linux/in.h>
#include <linux/netpoll.h>
#define MESSAGE_SIZE 1024
#define INADDR_SEND ((unsigned long int)0x0a00020f) //10.0.2.15
static bool sock_init;
static struct socket *sock;
static struct sockaddr_in sin;
static struct msghdr msg;
static struct iovec iov;
[...]
int error, len;
mm_segment_t old_fs;
char message[MESSAGE_SIZE];
if (sock_init == false)
{
/* Creating socket */
error = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
if (error<0)
printk(KERN_DEBUG "Can't create socket. Error …Run Code Online (Sandbox Code Playgroud) 我有2个Raspberry Pis,运行Raspbian,是最新的.每个Pi都有一个蓝牙USB加密狗.我可以使用它通过RFCOMM进行通信.
现在,我想在蓝牙物理链路上建立一个合适的IP层.据我所知,我必须使用PAN(个人局域网),这应该创建一个我可以用ifconfig管理的网络接口.我正在尝试调整本教程,但我遇到了无效的交换错误.
在RPi0上,我跑了
$ sudo pand --nodetach --listen --master --role=NAP
pand[2313]: Bluetooth PAN daemon version 4.99
Run Code Online (Sandbox Code Playgroud)
在RPi1上,我跑了
$ pand --nodetach --connect 00:1A:7D:DA:71:16
pand[2323]: Bluetooth PAN daemon version 4.99
pand[2323]: Connecting to 00:1A:7D:DA:71:16
pand[2323]: Connect to 00:1A:7D:DA:71:16 failed. Invalid exchange(52)
Run Code Online (Sandbox Code Playgroud)
我找不到有关此错误代码的任何相关信息.知道怎么解决这个问题吗?或者我错了,我应该使用其他东西而不是PAN吗?
提前致谢 !
编辑:当我指定要监听的蓝牙设备时,我收到另一条错误消息.它也没有意义,因为我没有运行任何其他蓝牙服务器.
$ sudo pand -i 00:1A:7D:DA:71:16 --nodetach --listen --role=NAP
pand[2582]: Bluetooth PAN daemon version 4.99
pand[2582]: Bind failed. Address already in use(98)
Run Code Online (Sandbox Code Playgroud) 我想读取几MB的二进制文件的内容并将其存储到缓冲区中.这是我的函数原型(如果需要我可以更改它):
procedure GET_BIN_CONTENT_FROM_PATH(PATH : in UNBOUNDED_STRING;
CONTENT : out UNBOUNDED_STRING);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试了两种方法,都使用Direct_IO包.在第一种方法中,我正逐字逐句地阅读文件; 它工作,但它非常缓慢.为了加快这个过程,我尝试用MB读取文件MB:
procedure GET_BIN_CONTENT_FROM_PATH (PATH : in UNBOUNDED_STRING;
CONTENT : out UNBOUNDED_STRING) is
BIN_SIZE_LIMIT : constant NATURAL := 1000000;
subtype FILE_STRING is STRING (1 .. BIN_SIZE_LIMIT);
package FILE_STRING_IO is new ADA.DIRECT_IO (FILE_STRING);
FILE : FILE_STRING_IO.FILE_TYPE;
BUFFER : FILE_STRING;
begin
FILE_STRING_IO.OPEN (FILE, MODE => FILE_STRING_IO.IN_FILE,
NAME => TO_STRING (C_BASE_DIR & PATH));
while not FILE_STRING_IO.END_OF_FILE (FILE) loop
FILE_STRING_IO.READ (FILE, ITEM => BUFFER);
APPEND (CONTENT, BUFFER);
end loop;
FILE_STRING_IO.CLOSE (FILE);
end GET_BIN_CONTENT_FROM_PATH;
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果文件中剩余少于1MB,似乎不会发生READ操作.结果,大文件(> …
我想问一个关于Linux内核中的IPv4片段管理器的问题(net/ipv4/inet_fragment.c).我不明白为什么结构inet_frags(include/net/inet_frag.h)有一个"rnd"字段,显然是用随机数填充的.我的意思是,我不希望我的IPv4堆栈以随机顺序重新组装我的数据包^^.
你能帮帮我吗?Thx提前.(内核3.4.4)
kernel ×2
linux ×2
ada ×1
binaryfiles ×1
bluetooth ×1
c ×1
compilation ×1
dbus ×1
file ×1
glib ×1
io ×1
ipv4 ×1
linux-kernel ×1
random ×1
raspberry-pi ×1
raspbian ×1
udp ×1