Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191356
  • 博文数量: 38
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 424
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-19 12:41
文章分类

全部博文(38)

文章存档

2017年(2)

2016年(1)

2010年(8)

2009年(27)

我的朋友

分类: LINUX

2009-06-25 09:44:12

上个礼拜六将DBus交叉编译成功, 这个礼拜主要是将测试程序在开发板上跑起来.
1. 交叉编译源文件, 例如test.c 编译过程中主要有2个问题, 1个是header file, 1个是dbus动态库的引用.
写一个Makefile解决
例如:
#Makefile
CC=arm-unknown-linux-gnu-gcc
CFLAGS=-Wall -g -shared #compiler args
#include header file
CFLAGS += -I/home/songys/dbus/lib/include \
  -I/home/songys/dbus/lib/include/glib-2.0 \
  -I/home/songys/dbus/lib/lib/glib-2.0/include \
  -I/home/songys/dbus/lib/include/dbus-1.0 \
  -I/home/songys/dbus/lib/lib/dbus-1.0/include \
#link .so dynamic lib
LDFLAGS:=-lpthread -L/home/songys/dbus/lib/lib -ldbus-1
SRCDIRS=.
PROGRAMS=test
SRCS=$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
OBJS=$(SRCS:.c=.o)
DEPENDS=$(SRCS:.c)
all: $(PROGRAM)
%.d:%.c
  $(CC) $(DEPENDFLAG) $(CFLAGS) \
  sed "s?\\(.*\\):?$(basename $<).o $(basename $<).d :?g" \
  > $@ || $(RM) $@
$(PROGRAMS): $(OBJS)
  $(CC) $(LDFLAGS) -o $@ $(filter %.o ,$+)
include $(DEPENDS)
clean:
  rm $(OBJS) $(DEPENDS) $(PROGRAMS)
 
或者: arm-unknown-linux-gnu-gcc -I/home/songys/dbus/lib/include/dbus-1.0/ -I/home/songys/dbus/lib/include -I/home/songys/dbus/lib/include/glib-2.0 -I/home/songys/dbus/lib/lib/glib-2.0/include -I/home/songys/dbus/lib/lib/dbus-1.0/include -L/home/songys/dbus/lib/lib -ldbus-1 eg2.c -o eg2
 
如果用到dbus-glib参考: (一下为转帖: http://blog.chinaunix.net/u1/43206/showart_1800319.html
我看了网上有些朋友在编译dbus-example.c 的时候有各种各样的错误,也有一些朋友给出了解决方式,但写的很冗余。现给出一种简单的解决方式:
 
gcc -I/usr/include/dbus-1.0/  -I/usr/lib/dbus-1.0/include/ -ldbus-1  dbus-example.c -o dbus-example.o
错误的原因通常有2: 少了第二个头文件,少了跟动态库
 
gcc `pkg-config --cflags --libs dbus-1` dbus-example.c -o dbus-example.o
使用dbus-glib的话
gcc `pkg-config --cflags --libs dbus-glib-1` dbus-example.c -o dbus-example.o
)
 
所以用: arm-unknown-linux-gnu-gcc -I/home/songys/dbus/lib/include/dbus-1.0/ -I/home/songys/dbus/lib/include -I/home/songys/dbus/lib/include/glib-2.0 -I/home/songys/dbus/lib/lib/glib-2.0/include -I/home/songys/dbus/lib/lib/dbus-1.0/include -L/home/songys/dbus/lib/lib -ldbus-1 `pkg-config --cflags --libs dbus-glib-1`  test.c -o test
 
make test生成一个arm-linux可执行文件test.
 
2. 将/lib /bin及test拷贝到NFS的rootfs, 启动开发板
 

在开发板上运行命令:

# dbus-dameon --system

Failed to start message bus: Failed to open "/usr/local/etc/dbus-1/system.conf":
No such file or directory

于是我又到dbus-1.0.2中找了个system.conf

# dbus-dameon --system

Failed to start message bus: Failed to open :".....system.d" No such file or directory

于是响应目录下建了个system.d文件夹

# dbus-dameon --system

Failed to start message bus: Failed to bind socket "/var/run/dbus/system_bus_soc ket

No such file or directory

自己就硬着头皮建一个system_bus_soc ket,结果

# dbus-dameon --system

Failed to start message bus: Failed to bind socket "/var/run/dbus/system_bus_soc ket:Address already in use

郁闷,删掉system_bus_soc ket,只留/var/run/dbus/

# dbus-dameon --system

Failed to start message bus:Could not get UID and GID for username "messagebus"

网上让用/usr/sbin/adduser messagebus,奶奶的开发板上没有这个命令,难道在编译busy-box,还是算了吧,麻烦,忽然看到网上说可以用添加文件的方式添加用户,/etc/passwd下,在pc linux下用一下/usr/sbin/adduser messagebus,发现就在/etc/passwd下,添加了一行messagebus:x:500:500::/home/messagebus:/bin/bash,看开发板上,只是有个root,于是复制进去,root后/bin/sh,所以为了保持一致,也改为messagebus:x:500:500::/home/messagebus:/bin/sh

passwd内容如下:

root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
messagebus:x:500:500::/home/messagebus:/bin/sh

# dbus-dameon --system

哈哈,该死的错误没了,高兴

4. dbus-daemon --system --print-pid --print-address

   rm /home/songys/dbus/lib/var/run/dbus/pid
   dbus-launch --sh-syntax --exit-with-session

dbus-launch /tmp/test

测试程序运行成功, 但是2个session互发消息的测试还没有调试出来5555555

阅读(4407) | 评论(0) | 转发(0) |
0

上一篇:Glib与Glibc的区别

下一篇:Linux 杂记

给主人留下些什么吧!~~