移植libev事件驱动库到ARM
简介:
libev - 一个 C 编写的功能全面的高性能事件循环。
libev的官网(http://libev.schmorp.de/)在国内已经没法访问了。但是我们仍然可以从github上下载其源码(https://github.com/enki/libev)。
移植过程
1.下载源码包
2.进入源码包主目录
cd libev-master/
mkdir _install (创建安装目录)
3.配置
./configure --prefix=${PWD}/_install --host=arm-none-linux CC=arm-none-linux-gnueabi-gcc
4.编译
make -j4
5.安装
make install
6.拷贝到目标板
将libev.so.4.0.0移动到开发板的/lib目录下并建立软链接
cp _install/lib/libev.so.4.0.0 /home/jiangyu/rootfs/lib/
ln -s libev.so.4.0.0 libev.so
ln -s libev.so.4.0.0 libev.so.4
并且在交叉编译代码时,将_install/include/目录下的头文件和_install/lib/下的库文件拷贝到相应的路径下。
/* 至此环境移植成功 */
7.测试test.c
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <sys/unistd.h>
#include "ev.h"
void io_action(struct ev_loop *main_loop,ev_io *io_w,int e)
{
int rst;
char buf[1024];
memset(buf,0,sizeof(buf));
puts("In IO action");
read(STDIN_FILENO,buf,sizeof(buf));
buf[1023]='\0';
printf("String: %s\n",buf);
ev_io_stop(main_loop,io_w);
}
void timer_action(struct ev_loop *main_loop,ev_timer *time_w,int e)
{
puts("In Time action");
ev_timer_stop(main_loop,time_w);
}
void signal_action(struct ev_loop *main_loop,ev_signal *signal_w,int e)
{
puts("In Signal action");
ev_signal_stop(main_loop,signal_w);
ev_break(main_loop,EVBREAK_ALL);
}
int main(int argc,char **argv)
{
ev_io io_w;
ev_timer timer_w;
ev_signal signal_w;
struct ev_loop *main_loop = ev_default_loop(0);
ev_init(&io_w,io_action);
ev_io_set(&io_w,STDIN_FILENO,EV_READ);
ev_init(&timer_w,timer_action);
ev_timer_set(&timer_w,5,0);
ev_init(&signal_w,signal_action);
ev_signal_set(&signal_w,SIGINT);
ev_io_start(main_loop,&io_w);
ev_timer_start(main_loop,&timer_w);
ev_signal_start(main_loop,&signal_w);
ev_run(main_loop,0);
return 0;
}
Makefile
BIN = test_libev
IDIR = include/
SRC = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRC))
LDIR = lib/
CFLAGS = -I$(IDIR) -g
LIBS = -L$(LDIR) -lev -lpthread
CC = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc
#$@:所有的目标文件
#$^:所有的依赖文件
$(BIN): $(OBJS)
$(CC) -o $@ $^ $(LIBS)
.PHONY: clean
clean:
rm -rf $(OBJS) $(BIN)
执行./test_libev
结果:
标准输入aabbccdd
标准输出结果:
In IO action
String: aabbccdd
程序执行5s后,输出
In Time action
结束程序后,输出
In Signal action
测试成功。
更多推荐


所有评论(0)