交叉编译dbus

1.下载dbus-1.12.20.tar.gz和expat-2.3.0.tar.bz2,创建文件夹install

lwp@lwp-virtual-machine:~/jz/dbus/dbus-glib-cross-compile-package$ ls
dbus-1.12.20         dbus-glib-0.106.tar.gz  expat-2.3.0.tar.bz2  install
dbus-1.12.20.tar.gz  expat-2.3.0             glib-2.34.1.tar.xz   README

2.进入expat-2.3.0文件夹,执行脚本a.sh

lwp@lwp-virtual-machine:~/jz/dbus/dbus-glib-cross-compile-package/expat-2.3.0$ cat a.sh 
#!/bin/bash
./configure CC=/home/lwp/jz/ISVP-T31-1.1.6-20221013/software/sdk/Ingenic-SDK-T31-1.1.6-20221013/resource/toolchain/gcc_540/mips-gcc540-glibc222-64bit-r3.3.0/bin/mips-linux-gnu-gcc --prefix=$PWD/tmp --host=mips-linux-gnu

3.进入dbus文件夹,执行脚本a.sh

lwp@lwp-virtual-machine:~/jz/dbus/dbus-glib-cross-compile-package/dbus-1.12.20$ cat a.sh 
#!/bin/bash
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PWD/../expat-2.3.0/tmp/lib/pkgconfig
./autogen.sh
./configure --host=mips-linux --enable-tests=no --prefix=/usr/local \
CC=/home/lwp/jz/ISVP-T31-1.1.6-20221013/software/sdk/Ingenic-SDK-T31-1.1.6-20221013/resource/toolchain/gcc_540/mips-gcc540-glibc222-64bit-r3.3.0/bin/mips-linux-gnu-gcc \

编译出来的.a文件在linux上使用

4.dbus server

/* server.c */

#include <dbus/dbus.h>

#include <stdbool.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

static DBusHandlerResult

filter_func(DBusConnection *connection, DBusMessage *message, void *usr_data)

{

    dbus_bool_t handled = false;

    char *word = NULL;

    DBusError dberr;

    if (dbus_message_is_signal(message, "client.signal.Type", "Test")) {

        dbus_error_init(&dberr);

        dbus_message_get_args(message, &dberr, DBUS_TYPE_STRING,

            &word, DBUS_TYPE_INVALID);

        if (dbus_error_is_set(&dberr)) {

            dbus_error_free(&dberr);

        } else {

            printf("receive message %s\n", word);

            handled = true;

        }

    }

    return (handled ? DBUS_HANDLER_RESULT_HANDLED : DBUS_HANDLER_RESULT_NOT_YET_HANDLED);

}

int dbus_server_thread(char *argv)

{

    DBusError dberr;

    DBusConnection *dbconn;

    dbus_error_init(&dberr);

    dbconn = dbus_bus_get(DBUS_BUS_SESSION, &dberr);

    if (dbus_error_is_set(&dberr)) {

        printf("Connection Error: %s--%s\n", dberr.name, dberr.message);

        dbus_error_free(&dberr);

        return -1;

    }

    if (!dbus_connection_add_filter(dbconn, filter_func, NULL, NULL)) {

        printf("ERR 1\n");

        return -1;

    }

    dbus_bus_add_match(dbconn, "type='signal',interface='client.signal.Type'", &dberr);

    if (dbus_error_is_set(&dberr)) {

        dbus_error_free(&dberr);

        printf("ERR 2\n");

        return -1;

    }

    printf("iiiiiiiiii\n");

    while(dbus_connection_read_write_dispatch(dbconn, -1)) {

        /* loop */

    }

    printf("iiiiiiiiii\n");

    return 0;

}

5.dbus_client

#include <dbus/dbus.h>

#include <stdbool.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

int db_send(DBusConnection *dbconn)

{

    DBusMessage *dbmsg;

    char *word;

    int i;

    dbmsg = dbus_message_new_signal("/client/signal/Object", // object name of the signal

                                  "client.signal.Type",      // interface name of the signal

                                  "Test");                   // name of the signal

    if (!dbmsg) {

        printf("ERR 00000\n");

        return -1;

    }

    word = "hello";

    if (!dbus_message_append_args(dbmsg, DBUS_TYPE_STRING, "hello", DBUS_TYPE_INVALID)) {

        printf("000ERR 0\n");

        return -1;

    }

    if (!dbus_connection_send(dbconn, dbmsg, NULL)) {

        printf("ERR 1\n");

        return -1;

    }

    dbus_connection_flush(dbconn);

    printf("send message %s\n", word);

    dbus_message_unref(dbmsg);

    return 0;

}

int dbus_client_thread(char *argv)

{

    DBusError dberr;

    DBusConnection *dbconn;

    int i;

    dbus_error_init(&dberr);

    dbconn = dbus_bus_get(DBUS_BUS_SESSION, &dberr);

    if (dbus_error_is_set(&dberr)) {

        return -1;

    }

    printf("client send message\n");

    db_send(dbconn);

    dbus_connection_unref(dbconn);

    return 0;

}

6.测试,服务端可以接收到客户端发送的dbus信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌风_lwp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值