设为首页 加入收藏

TOP

交叉编译场景(arm-linux)分析(二)
2014-11-24 12:00:22 来源: 作者: 【 】 浏览:7
Tags:交叉 编译 场景 arm-linux )分析
构,设置为arm


--------------------------------------------------------------


建立一个脚本用于设置变量和建立必要的目录,在编译前,先运行. corss.env。 其内容如下:


cross.env


export WORK_DIR=/work/cross


export ROOTFS_DIR=$WORK_DIR/rootfs


export ARCH=arm


export PKG_CONFIG_PATH=$ROOTFS_DIR/usr/local/lib/pkgconfig:$ROOTFS_DIR/usr/lib/pkgconfig:$ROOTFS_DIR/usr/X11R6/lib/pkgconfig



if [ ! -e "$ROOTFS_DIR/usr/local/include" ]; then mkdir -p $ROOTFS_DIR/usr/local/include;fi;


if [ ! -e "$ROOTFS_DIR/usr/local/lib" ]; then mkdir -p $ROOTFS_DIR/usr/local/lib; fi;


if [ ! -e "$ROOTFS_DIR/usr/local/etc" ]; then mkdir -p $ROOTFS_DIR/usr/local/etc; fi;


if [ ! -e "$ROOTFS_DIR/usr/local/bin" ]; then mkdir -p $ROOTFS_DIR/usr/local/bin; fi;


if [ ! -e "$ROOTFS_DIR/usr/local/share" ]; then mkdir -p $ROOTFS_DIR/usr/local/share; fi;


if [ ! -e "$ROOTFS_DIR/usr/local/man" ]; then mkdir -p $ROOTFS_DIR/usr/local/man; fi;



if [ ! -e "$ROOTFS_DIR/usr/include" ]; then mkdir -p $ROOTFS_DIR/usr/include; fi;


if [ ! -e "$ROOTFS_DIR/usr/lib" ]; then mkdir -p $ROOTFS_DIR/usr/lib; fi;


if [ ! -e "$ROOTFS_DIR/usr/etc" ]; then mkdir -p $ROOTFS_DIR/usr/etc; fi;


if [ ! -e "$ROOTFS_DIR/usr/bin" ]; then mkdir -p $ROOTFS_DIR/usr/bin; fi;


if [ ! -e "$ROOTFS_DIR/usr/share" ]; then mkdir -p $ROOTFS_DIR/usr/share; fi;


if [ ! -e "$ROOTFS_DIR/usr/man" ]; then mkdir -p $ROOTFS_DIR/usr/man; fi;



颜色字体含义


颜色字体 表示错误信息。


颜色字体 表示命令行脚本。


颜色字体 表示文件内容。


--------------------------------------------------------------


文档格局:



1. 基本信息:


软件名称



功能简述



下载地址



软件版本



依赖关系



前置条件




2. 过程分析


构建过程中遇到的问题分析。


3. 构建处方


通常是一个可用的Makefile,用它可以编译这个模块。或者一些patch文件。


[三。编译tslib]:


1. 基本信息:


软件名称


tslib


功能简述


tslib是一个触摸屏的库,它提供诸如滤波、去抖、校准之类的功能,为不同的触摸屏提供了一个统一的接口。


下载地址


export VSROOT=:pserver:cvs@pubcvs.arm.linux.org.uk:/mnt/src/cvsroot


cvs login


cvs co tslib


软件版本


2006-3-28 cvs版本


依赖关系


默认


前置条件


源文件位置:$(WORK_DIR)/tslib






2. 过程分析


因为是cvs版本,所以先要生成configure脚本,tslib提供了一个autogen.sh文件,自然是用autogen.sh去产生了。运行:


[root@linux tslib]# ./autogen.sh


出现了如下错误:


: bad interpreter: No such file or directory


打开autogen.sh文件,发现了没有任何错误,猜想可能是一些不可见的非法字符引起的,用二进制方式打开该文件,发现它是dos格式的。需要转换成unix格式的。



索性用dos2unix把整个目录都转一遍。另外发现没有NEWS README AUTHORS 三个文件,为了避免出错,产生三个空文件:


[root@linux tslib]# touch NEWS README AUTHORS。


重新运行:


[root@linux tslib]# ./autogen.sh


一切OK!


-------------------------------------------------------------------


现在来做真正的配置:


[root@linux tslib]# ./configure --host=$ARCH-linux --prefix=$ROOTFS_DIR/usr



配置成功,但make时,出现下列错误:


ts_test.o(.text+0x218): In function `main':


: undefined reference to `rpl_malloc'



在当前目录查找了rpl_malloc,发现configure里有#define malloc rpl_malloc一行。分析configure 脚本相关的代码,原来是ac_cv_func_malloc_0_nonnull引起的,OK我们不让它检查了,产生一个cache文件arm-linux.cache,欺骗configure:


[root@linux tslib]# echo "ac_cv_func_malloc_0_nonnull=yes" >$ ARCH -linux.cache


[root@linux tslib]# ./configure --prefix=$(ROOTFS_DIR)/usr --host=$ ARCH -linux --cache-file=$ ARCH -linux.cache


配置成功后,重新编译一下,OK!


3. 构建处方


tslib.mk


TSLIB_DIR="tslib"



all: clean config build



config:


@cd $(TSLIB_DIR) && find * -exec dos2unix {} \; && \


touch NEWS README AUTHORS && \


./autogen.sh && \


echo "ac_cv_func_malloc_0_nonnull=yes" >$$ARCH-linux.cache && \


./configure --prefix=$$ROOTFS_DIR/usr --host=$$ARCH-linux --cache-file=$$ARCH-linux.cache && \


echo "config done"



build:


@cd $(TSLIB_DIR) && \


make && make install && \


echo "build done"


clean:


首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POSIX线程的私有数据 下一篇POSIX线程的创建和取消

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)