交叉编译qemu
前言:libX11的交叉编译确实非常繁琐,而对于系统调用accept4和preadv&pwritev则需要glibc-2.10以上才会支持,之前的glibc是2.9很悲催。。。。明天去龙芯机子上调试,但愿比较顺利。
作者:口口口
日期:2011/12/6
目录
准备工作... 1
过程步骤... 2
重新搭建交叉编译工具... 2
建立zlib库... 4
建立libpng库... 5
安装xproto包... 6
建立libXau库... 6
安装xcb-proto. 6
建立libgpg-error库... 7
建立libgcrypt库... 7
建立libxml库... 8
建立libxslt库... 8
建立libxcb库... 9
安装Xtrans. 10
安装kbproto. 10
安装inputproto. 11
建立libXdmcp库... 11
建立libX11库... 11
安装xextproto. 13
建立libXext库... 13
安装videoproto. 13
建立libXv库... 14
建立SDL库... 14
交叉编译qemu. 15
准备工作
主机平台:
i686-linux
内核文件:
wh.tar.gz
二进制工具:
binutils-2.19.1.tgz
gcc及其相关:
gcc-4.4.0-3a.tgz
gmp-4.3.0.tar.gz
mpfr-2.4.2.tar.gz
glibc库及其相关:
glibc-2.13.tar.gz
glibc-ports-2.13.tar.gz
zlib库:
zlib-1.2.5.tar.gz
libpng库:
libpng-1.5.6.tar.gz
libX11库及其相关:
libX11-1.3.2.tar.bz2
libgcrypt-1.4.6.tar.gz
libgpg-error-1.10.tar.gz
libxau_1.0.6.orig.tar.gz
libxcb-1.4.tar.bz2
libxdmcp_1.1.0.orig.tar.gz
libxext_1.1.2.orig.tar.gz
libxml2-2.7.4.tar.gz
libxslt_1.1.26.orig.tar.gz
libxv_1.0.5.orig.tar.gz
x11proto-input_2.0.2.orig.tar.gz
x11proto-kb_1.0.5.orig.tar.gz
x11proto-video_2.3.0.orig.tar.gz
x11proto-xext_7.1.1.orig.tar.gz
xcb-proto-1.6.tar.gz
xproto-7.0.20.tar.gz
xtrans_1.2.6.orig.tar.gz
SDL库:
SDL-1.2.14.tar.gz
qemu源文件:
qemu-0.14.1
目录结构:
/crosstool 交叉编译工具根目录
/crosstool/source 存放源文件
/crosstool/mips64el-tools 存放编译出来的工具
/crosstool/binutils /crosstool/gcc /crosstool/glibc 相关工具的编译目录,每个目录下都有build-mips64el-linux目录
/crosstool/kernel 存放内核文件,里面的/headers为存放头文件目录
/crosstool/zlib 交叉编译zlib的工作目录
/crosstool/libpng 交叉编译libpng的工作目录
/crosstool/x11 交叉编译libX11及其相关库和包的工作目录
/crosstool/sdl 交叉编译SDL及其相关库和包的工作目录
/crosstool/qemu 交叉编译qemu的工作目录
/crosstool/qemu/ccp-qemu 存放交叉编译出来的qemu
过程步骤
1> 下载源文件和建立工作目录
2> 重新搭建交叉编译工具
3> 建立zlib库
4> 建立libpng库
5> 建立libX11库及其相关
6> 建立SDL库
7> 交叉编译qemu
8> 调试
重新搭建交叉编译工具
由于glibc从2.10版本才开始支持系统调用accept4和preadv & pwritev,而之前所做交叉编译器的glibc版本很悲催的是2.9,所以在交叉编译qemu时会出现:
osdep.o: In function `qemu_accept':
/crosstool/qemu/qemu-0.14.1/osdep.c:158: undefined reference to `accept4'
……
/crosstool/qemu/qemu-0.14.1/posix-aio-compat.c:156: undefined reference to `preadv'
collect2: ld returned 1 exit status
这样的错误,所以必须更换glibc。
进入超级权限,删除/crosstool目录下mips64el-tools目录。
su
cd /crosstool
rm -r mips64el-tools
内核头文件,二进制工具和gcc辅助编译器
比较简单,过程参考《mips64el交叉开发工具链搭建》,注意修改t-linux64。