虚拟机上操作系统:ubuntu-12.04-desktop-i386.iso
指导书:《深度探索Linux操作系统:系统构建和原理解析》王柏生
准备工作:
wangwei@wangwei-VirtualBox:~$sudo apt-get update
wangwei@wangwei-VirtualBox:~$sudo apt-get install upgrate
安装服务器:
wangwei@wangwei-VirtualBox:~$sudo apt-get install openssh-server
wangwei@wangwei-VirtualBox:~$sudo /usr/sbin/sshd
安装需要的软件:
wangwei@wangwei-VirtualBox:~$sudo apt-get install g++
wangwei@wangwei-VirtualBox:~$sudo apt-get install gawk
wangwei@wangwei-VirtualBox:~$sudo apt-get install m4
wangwei@wangwei-VirtualBox:~$sudo apt-get install gcc-multilib
wangwei@wangwei-VirtualBox:~$sudo apt-get install build-essential
wangwei@wangwei-VirtualBox:~$sudo apt-get install texinfo
更改root密码:
wangwei@wangwei-VirtualBox:~$sudo passwd root
Enternew UNIX password:
Retypenew UNIX password:
passwd:password updated successfully
进入根用户:
wangwei@wangwei-VirtualBox:~$su
Password:
root@wangwei-VirtualBox:/home/wangwei#
创建用户组和用户主:
root@wangwei-VirtualBox:/home/wangwei#groupadd vita
root@wangwei-VirtualBox:/home/wangwei#useradd -m -s /bin/bash -g vita vita
增加vita的超级权限:
root@wangwei-VirtualBox:/home/wangwei#echo 'vita ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/vita
检查vita文件是否写入vitaALL=(ALL) NOPASSWD: ALL内容:
root@wangwei-VirtualBox:/home/wangwei#vim /etc/sudoers.d/vita
设置环境变量:
root@wangwei-VirtualBox:/home/wangwei#vim /home/vita/.bashrc
在.bashrc中写入以下内容
#vita export变量注释。
#unsetLANG设置为英语已经被注释,因为使用的英语版ubuntu12。
export HOST=$MACHTYPE
export BUILD=$HOST
export TARGET=i686-none-linux-gnu
export CROSS_TOOL=/vita/cross-tool
export CROSS_GCC_TMP=/vita/cross-gcc-tmp
export SYSROOT=/vita/sysroot
PATH=$CROSS_TOOL/bin:$CROSS_GCC_TMP/bin:/sbin:/usr/sbin:$PATH
创建文件夹和挂载sda7:
root@wangwei-VirtualBox:/home/wangwei#mkdir /vita
root@wangwei-VirtualBox:/home/wangwei#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.2G 3.6G 5.2G 41% /
udev 494M 4.0K 494M 1% /dev
tmpfs 101M 780K 100M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 501M 124K 501M 1% /run/shm
/dev/sda5 9.2G 151M 8.6G 2% /home
/dev/sda6 9.2G 150M 8.6G 2% /usr/local
root@wangwei-VirtualBox:/home/wangwei#blkid
/dev/sda1:UUID="7f5ca91a-11d7-4aca-b9a8-ef9f09147362" TYPE="ext4"
/dev/sda5:UUID="79f4cab0-1d6c-49a3-9e5b-91f87f47f1eb" TYPE="ext4"
/dev/sda6:UUID="9e257f30-c016-4c49-9b30-4adbac78614e" TYPE="ext4"
/dev/sda7:UUID="28499049-acb7-4dda-94de-b9676cebdd7f" TYPE="ext4"
root@wangwei-VirtualBox:/home/wangwei#mount /dev/sda7 /vita
root@wangwei-VirtualBox:/home/wangwei#cd /vita
root@wangwei-VirtualBox:/vita#mkdir source build cross-tool cross-gcc-tmp sysroot
wangwei@wangwei-Inspiron-7520:~$sudo scp -r /home/wangwei/source/* 192.168.1.107:/vita/source/ 从主机开始向虚拟机发送source中的所有文件。
更改vita目录的属主和属组:
root@wangwei-VirtualBox:/vita#chown -R vita.vita /vita
切换用户为vita:
root@wangwei-VirtualBox:/vita#su – vita
vita@wangwei-VirtualBox:~$
检查设置的环境变量是否运行:
vita@wangwei-VirtualBox:~$env
HOST=i686-pc-linux-gnu
CROSS_TOOL=/vita/cross-tool
CROSS_GCC_TMP=/vita/cross-gcc-tmp
SYSROOT=/vita/sysroot
PATH=/vita/cross-tool/bin:/vita/cross-gcc-tmp/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
BUILD=i686-pc-linux-gnu
TARGET=i686-none-linux-gnu
编译binutils:
vita@wangwei-VirtualBox:~$cd /vita/build/
vita@wangwei-VirtualBox:/vita/build$tar xvf ../source/binutils-2.23.1.tar.bz2
vita@wangwei-VirtualBox:/vita/build$mkdir binutils-build
vita@wangwei-VirtualBox:/vita/build$cd binutils-build/
vita@wangwei-VirtualBox:/vita/build/binutils-build$../binutils-2.23.1/configure \
>--prefix=$CROSS_TOOL --target=$TARGET \
>--with-sysroot=$SYSROOT
.
.
.
.
configure:creating ./config.status
config.status:creating Makefile
vita@wangwei-VirtualBox:/vita/build/binutils-build$make 2>&1 | tee make.out
.
.
.
.
make[4]:Leaving directory `/vita/build/binutils-build/ld'
make[3]:Leaving directory `/vita/build/binutils-build/ld'
make[2]:Leaving directory `/vita/build/binutils-build/ld'
make[1]:Nothing to be done for `all-target'.
make[1]:Leaving directory `/vita/build/binutils-build'
vita@wangwei-VirtualBox:/vita/build/binutils-build$echo $?
0“0”表示已经编译成功!
vita@wangwei-VirtualBox:/vita/build/binutils-build$make install 2>&1 | tee makeinstall.out
.
.
.
.
make[3]:Entering directory `/vita/build/binutils-build/libiberty/testsuite'
make[3]:Nothing to be done for `install'.
make[3]:Leaving directory `/vita/build/binutils-build/libiberty/testsuite'
make[2]:Leaving directory `/vita/build/binutils-build/libiberty'
make[1]:Nothing to be done for `install-target'.
make[1]:Leaving directory `/vita/build/binutils-build'
vita@wangwei-VirtualBox:/vita/build/binutils-build$echo $?
0“0”表示已经编译成功!
编译GCC:
vita@wangwei-VirtualBox:/vita/build/binutils-build$cd ../
vita@wangwei-VirtualBox:/vita/build$tar xvf ../source/gcc-4.7.2.tar.bz2
数学库GMP:
vita@wangwei-VirtualBox:/vita/build$cd gcc-4.7.2/
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$tar xvf ../../source/gmp-5.0.5.tar.bz2
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$mv gmp-5.0.5/ gmp
数学库MPFR:
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$tar xvf ../../source/mpfr-3.1.1.tar.bz2
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$mv mpfr-3.1.1/ mpfr
数学库MPC:
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$tar xvf ../../source/mpc-1.0.1.tar.gz
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$mv mpc-1.0.1/ mpc
vita@wangwei-VirtualBox:/vita/build/gcc-4.7.2$cd ../
vita@wangwei-VirtualBox:/vita/build$mkdir gcc-build
vita@wangwei-VirtualBox:/vita/build$cd gcc-build/
vita@wangwei-VirtualBox:/vita/build/gcc-build$../gcc-4.7.2/configure --prefix=$CROSS_GCC_TMP --target=$TARGET--with-sysroot=$SYSROOT --with-newlib --enable-languages=c--with-mpfr-include=/vita/build/gcc-4.7.2/mpfr/src--with-mpfr-lib=/vita/build/gcc-build/mpfr/src/.libs --disable-shared--disable-threads --disable-decimal-float --disable-libquadmath--disable-libmudflap --disable-libgomp --disable-nls –disable-libssp
vita@wangwei-VirtualBox:/vita/build/gcc-build$make 2>&1 | tee make-gcc-wangwei.out
make[3]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libgcc'
make[2]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libgcc'
make[1]:Leaving directory `/vita/build/gcc-build'
vita@wangwei-VirtualBox:/vita/build/gcc-build$echo $?
0“0”表示已经编译成功!
vita@wangwei-VirtualBox:/vita/build/gcc-build$make install 2>&1 | tee makeinstall-gcc.out
make[3]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libgcc'
make[2]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libgcc'
make[1]:Leaving directory `/vita/build/gcc-build'
vita@wangwei-VirtualBox:/vita/build/gcc-build$echo $?
0“0”表示已经编译成功!
vita@wangwei-VirtualBox:/vita/cross-gcc-tmp$ls
bin include lib libexec share
查看文件,缺少libgcc_eh.a:
vita@wangwei-VirtualBox:/vita/cross-gcc-tmp$ls lib/gcc/i686-none-linux-gnu/4.7.2/
crtbegin.o crtbeginT.o crtendS.o crtprec32.o crtprec80.oinclude-fixed libgcc.a plugin
crtbeginS.o crtend.o crtfastmath.o crtprec64.o include install-toolslibgcov.a
建一个指向libgcc.a的符号链接libgcc_eh.a(因为libgcc.a中包含libgcc_eh.a所包含的全部内容):
vita@wangwei-VirtualBox:/vita/cross-gcc-tmp$ln -s libgcc.a lib/gcc/i686-none-linux-gnu/4.7.2/libgcc_eh.a
查看链接:
vita@wangwei-VirtualBox:/vita/cross-gcc-tmp$ls lib/gcc/i686-none-linux-gnu/4.7.2/
crtbegin.o crtbeginT.o crtendS.o crtprec32.o crtprec80.oinclude-fixed libgcc.a libgcov.a
crtbeginS.o crtend.o crtfastmath.o crtprec64.o include install-toolslibgcc_eh.a plugin
安装内核头文件:
vita@wangwei-VirtualBox:/vita/build$cd /vita/build/
vita@wangwei-VirtualBox:/vita/build$tar xvf ../source/linux-3.7.4.tar.xz
vita@wangwei-VirtualBox:/vita/build$cd linux-3.7.4/
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$make mrproper
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$make ARCH=i386 headers_check
CHK include/generated/uapi/linux/version.h
UPD include/generated/uapi/linux/version.h
HOSTCC scripts/basic/fixdep
WRAP arch/x86/include/generated/asm/clkdev.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h
SYSTBL arch/x86/syscalls/../include/generated/asm/syscalls_32.h
HOSTCC arch/x86/tools/relocs
HOSTCC scripts/unifdef
INSTALLinclude/asm-generic (35 files)
INSTALLinclude/drm (15 files)
INSTALLinclude/linux/byteorder (2 files)
INSTALLinclude/linux/caif (2 files)
INSTALLinclude/linux/can (5 files)
INSTALLinclude/linux/dvb (8 files)
INSTALLinclude/linux/hdlc (1 file)
INSTALLinclude/linux/hsi (1 file)
INSTALLinclude/linux/isdn (1 file)
INSTALLinclude/linux/mmc (1 file)
INSTALLinclude/linux/netfilter/ipset (4 files)
INSTALLinclude/linux/netfilter (76 files)
INSTALLinclude/linux/netfilter_arp (2 files)
INSTALLinclude/linux/netfilter_bridge (18 files)
INSTALLinclude/linux/netfilter_ipv4 (10 files)
INSTALLinclude/linux/netfilter_ipv6 (12 files)
INSTALLinclude/linux/nfsd (5 files)
INSTALLinclude/linux/raid (2 files)
INSTALLinclude/linux/spi (1 file)
INSTALLinclude/linux/sunrpc (1 file)
INSTALLinclude/linux/tc_act (7 files)
INSTALLinclude/linux/tc_ematch (4 files)
INSTALLinclude/linux/usb (10 files)
INSTALLinclude/linux/wimax (1 file)
INSTALLinclude/linux (380 files)
INSTALLinclude/mtd (5 files)
INSTALLinclude/rdma (6 files)
INSTALLinclude/scsi/fc (4 files)
INSTALLinclude/scsi (3 files)
INSTALLinclude/sound (10 files)
INSTALLinclude/video (3 files)
INSTALLinclude/xen (2 files)
INSTALLinclude/uapi (0 file)
INSTALLinclude/asm (64 files)
CHECK include/asm-generic (35 files)
CHECK include/drm (15 files)
CHECK include/linux/byteorder (2 files)
CHECK include/linux/caif (2 files)
CHECK include/linux/can (5 files)
CHECK include/linux/dvb (8 files)
CHECK include/linux/hdlc (1 files)
CHECK include/linux/hsi (1 files)
CHECK include/linux/isdn (1 files)
CHECK include/linux/mmc (1 files)
CHECK include/linux/netfilter/ipset (4 files)
CHECK include/linux/netfilter (76 files)
CHECK include/linux/netfilter_arp (2 files)
CHECK include/linux/netfilter_bridge (18 files)
CHECK include/linux/netfilter_ipv4 (10 files)
CHECK include/linux/netfilter_ipv6 (12 files)
CHECK include/linux/nfsd (5 files)
CHECK include/linux/raid (2 files)
CHECK include/linux/spi (1 files)
CHECK include/linux/sunrpc (1 files)
CHECK include/linux/tc_act (7 files)
CHECK include/linux/tc_ematch (4 files)
CHECK include/linux/usb (10 files)
CHECK include/linux/wimax (1 files)
CHECK include/linux (380 files)
/vita/build/linux-3.7.4/usr/include/linux/kexec.h:49:userspace cannot reference function or variable defined in the kernel
/vita/build/linux-3.7.4/usr/include/linux/soundcard.h:1054:userspace cannot reference function or variable defined in the kernel
CHECK include/mtd (5 files)
CHECK include/rdma (6 files)
CHECK include/scsi/fc (4 files)
CHECK include/scsi (3 files)
CHECK include/sound (10 files)
CHECK include/video (3 files)
CHECK include/xen (2 files)
CHECK include/uapi (0 files)
CHECK include/asm (64 files)
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$echo $?
0“0”表示已经编译成功!
对内核头文件进行合法化检查:
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$make ARCH=i386
INSTALL_HDR_PATH=$SYSROOT/usr/headers_install
HOSTCC scripts/kconfig/conf.o
SHIPPEDscripts/kconfig/zconf.tab.c
SHIPPEDscripts/kconfig/zconf.lex.c
SHIPPEDscripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf--silentoldconfig Kconfig
***
***Configuration file ".config" not found!
***
***Please run some configurator (e.g. "make oldconfig" or
***"make menuconfig" or "make xconfig").
***
make[2]:*** [silentoldconfig] Error 1
make[1]:*** [silentoldconfig] Error 2
make[1]:Nothing to be done for `all'.
make[1]:Nothing to be done for `relocs'.
make:*** No rule to make target `include/config/auto.conf', needed by`include/config/kernel.release'. Stop.
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$echo $?
2“2”为非零,有错误。
重新安装内核头文件:
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$make mrproper
CLEAN arch/x86/tools
CLEAN scripts/basic
CLEAN scripts/kconfig
CLEAN scripts
CLEAN include/config usr/include include/generatedarch/x86/include/generated
CLEAN include/generated/uapi/linux/version.h
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$make ARCH=i386 headers_check
CHK include/generated/uapi/linux/version.h
UPD include/generated/uapi/linux/version.h
HOSTCC scripts/basic/fixdep
WRAP arch/x86/include/generated/asm/clkdev.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h
SYSTBL arch/x86/syscalls/../include/generated/asm/syscalls_32.h
HOSTCC arch/x86/tools/relocs
HOSTCC scripts/unifdef
INSTALLinclude/asm-generic (35 files)
INSTALLinclude/drm (15 files)
INSTALLinclude/linux/byteorder (2 files)
INSTALLinclude/linux/caif (2 files)
INSTALLinclude/linux/can (5 files)
INSTALLinclude/linux/dvb (8 files)
INSTALLinclude/linux/hdlc (1 file)
INSTALLinclude/linux/hsi (1 file)
INSTALLinclude/linux/isdn (1 file)
INSTALLinclude/linux/mmc (1 file)
INSTALLinclude/linux/netfilter/ipset (4 files)
INSTALLinclude/linux/netfilter (76 files)
INSTALLinclude/linux/netfilter_arp (2 files)
INSTALLinclude/linux/netfilter_bridge (18 files)
INSTALLinclude/linux/netfilter_ipv4 (10 files)
INSTALLinclude/linux/netfilter_ipv6 (12 files)
INSTALLinclude/linux/nfsd (5 files)
INSTALLinclude/linux/raid (2 files)
INSTALLinclude/linux/spi (1 file)
INSTALLinclude/linux/sunrpc (1 file)
INSTALLinclude/linux/tc_act (7 files)
INSTALLinclude/linux/tc_ematch (4 files)
INSTALLinclude/linux/usb (10 files)
INSTALLinclude/linux/wimax (1 file)
INSTALLinclude/linux (380 files)
INSTALLinclude/mtd (5 files)
INSTALLinclude/rdma (6 files)
INSTALLinclude/scsi/fc (4 files)
INSTALLinclude/scsi (3 files)
INSTALLinclude/sound (10 files)
INSTALLinclude/video (3 files)
INSTALLinclude/xen (2 files)
INSTALLinclude/uapi (0 file)
INSTALLinclude/asm (64 files)
CHECK include/asm-generic (35 files)
CHECK include/drm (15 files)
CHECK include/linux/byteorder (2 files)
CHECK include/linux/caif (2 files)
CHECK include/linux/can (5 files)
CHECK include/linux/dvb (8 files)
CHECK include/linux/hdlc (1 files)
CHECK include/linux/hsi (1 files)
CHECK include/linux/isdn (1 files)
CHECK include/linux/mmc (1 files)
CHECK include/linux/netfilter/ipset (4 files)
CHECK include/linux/netfilter (76 files)
CHECK include/linux/netfilter_arp (2 files)
CHECK include/linux/netfilter_bridge (18 files)
CHECK include/linux/netfilter_ipv4 (10 files)
CHECK include/linux/netfilter_ipv6 (12 files)
CHECK include/linux/nfsd (5 files)
CHECK include/linux/raid (2 files)
CHECK include/linux/spi (1 files)
CHECK include/linux/sunrpc (1 files)
CHECK include/linux/tc_act (7 files)
CHECK include/linux/tc_ematch (4 files)
CHECK include/linux/usb (10 files)
CHECK include/linux/wimax (1 files)
CHECK include/linux (380 files)
/vita/build/linux-3.7.4/usr/include/linux/kexec.h:49:userspace cannot reference function or variable defined in the kernel
/vita/build/linux-3.7.4/usr/include/linux/soundcard.h:1054:userspace cannot reference function or variable defined in the kernel
CHECK include/mtd (5 files)
CHECK include/rdma (6 files)
CHECK include/scsi/fc (4 files)
CHECK include/scsi (3 files)
CHECK include/sound (10 files)
CHECK include/video (3 files)
CHECK include/xen (2 files)
CHECK include/uapi (0 files)
CHECK include/asm (64 files)
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$echo $?
0 “0”表示已经编译成功!
注意usr/与headers_install中间有个空格:
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$make ARCH=i386 \
>INSTALL_HDR_PATH=$SYSROOT/usr/ headers_install
CHK include/generated/uapi/linux/version.h
make[1]:Nothing to be done for `all'.
make[1]:Nothing to be done for `relocs'.
INSTALLinclude/asm-generic (35 files)
INSTALLinclude/drm (15 files)
INSTALLinclude/linux/byteorder (2 files)
INSTALLinclude/linux/caif (2 files)
INSTALLinclude/linux/can (5 files)
INSTALLinclude/linux/dvb (8 files)
INSTALLinclude/linux/hdlc (1 file)
INSTALLinclude/linux/hsi (1 file)
INSTALLinclude/linux/isdn (1 file)
INSTALLinclude/linux/mmc (1 file)
INSTALLinclude/linux/netfilter/ipset (4 files)
INSTALLinclude/linux/netfilter (76 files)
INSTALLinclude/linux/netfilter_arp (2 files)
INSTALLinclude/linux/netfilter_bridge (18 files)
INSTALLinclude/linux/netfilter_ipv4 (10 files)
INSTALLinclude/linux/netfilter_ipv6 (12 files)
INSTALLinclude/linux/nfsd (5 files)
INSTALLinclude/linux/raid (2 files)
INSTALLinclude/linux/spi (1 file)
INSTALLinclude/linux/sunrpc (1 file)
INSTALLinclude/linux/tc_act (7 files)
INSTALLinclude/linux/tc_ematch (4 files)
INSTALLinclude/linux/usb (10 files)
INSTALLinclude/linux/wimax (1 file)
INSTALLinclude/linux (380 files)
INSTALLinclude/mtd (5 files)
INSTALLinclude/rdma (6 files)
INSTALLinclude/scsi/fc (4 files)
INSTALLinclude/scsi (3 files)
INSTALLinclude/sound (10 files)
INSTALLinclude/video (3 files)
INSTALLinclude/xen (2 files)
INSTALLinclude/uapi (0 file)
INSTALLinclude/asm (64 files)
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$echo $?
0 “0”表示已经编译成功!
编译目标系统的C库:
vita@wangwei-VirtualBox:/vita/build/linux-3.7.4$cd /vita/build
vita@wangwei-VirtualBox:/vita/build$tar xvf ../source/glibc-2.15.tar.xz
vita@wangwei-VirtualBox:/vita/build$cd glibc-2.15/
修复编译错误的patch:
vita@wangwei-VirtualBox:/vita/build/glibc-2.15$patch -p1 < ../../source/glibc-2.15-cpuid.patch
patchingfile sysdeps/i386/configure
vita@wangwei-VirtualBox:/vita/build/glibc-2.15$patch -p1 < ../../source/glibc-2.15-s_frexp.patch
patchingfile nptl/sysdeps/pthread/pt-initfini.c
patchingfile sysdeps/unix/sysv/linux/i386/sysdep.h
开始编译glibc:
vita@wangwei-VirtualBox:/vita/build/glibc-2.15$cd ../
vita@wangwei-VirtualBox:/vita/build$mkdir glibc-build
vita@wangwei-VirtualBox:/vita/build$cd glibc-build/
vita@wangwei-VirtualBox:/vita/build/glibc-build$../glibc-2.15/configure \
--prefix=/usr--host=$TARGET \
--enable-kernel=3.7.4--enable-add-ons \
--with-headers=$SYSROOT/usr/include\
libc_cv_forced_unwind=yeslibc_cv_c_cleanup=yes \
libc_cv_ctors_header=yes
.
.
.
.
configure:creating ./config.status
config.status:creating config.make
config.status:creating Makefile
config.status:creating config.h
config.status:executing default commands
vita@wangwei-VirtualBox:/vita/build/glibc-build$echo $?
0
vita@wangwei-VirtualBox:/vita/build/glibc-build$make 2>&1 | tee makeglibc-wangwei.out
make[2]:Leaving directory `/vita/build/glibc-2.15/elf'
make[1]:Leaving directory `/vita/build/glibc-2.15'
vita@wangwei-VirtualBox:/vita/build/glibc-build$echo $?
0
vita@wangwei-VirtualBox:/vita/build/glibc-build$make install_root=$SYSROOT install
.
.
.
.
make[1]:Leaving directory `/vita/build/glibc-2.15'
vita@wangwei-VirtualBox:/vita/build/glibc-build$echo $?
0“0”表示已经编译成功!
构建完整的交叉编译器:
vita@wangwei-VirtualBox:/vita/build/glibc-build$cd /vita/build/gcc-build/
vita@wangwei-VirtualBox:/vita/build/gcc-build$rm -rf *
vita@wangwei-VirtualBox:/vita/build/gcc-build$../gcc-4.7.2/configure \
--prefix=$CROSS_TOOL--target=$TARGET \
--with-sysroot=$SYSROOT\
--with-mpfr-include=/vita/build/gcc-4.7.2/mpfr/src\
--with-mpfr-lib=/vita/build/gcc-build/mpfr/src/.libs\
--enable-languages=c,c++--enable-threads=posix
.
.
.
.
configure:creating ./config.status
config.status:creating Makefile
vita@wangwei-VirtualBox:/vita/build/gcc-build$echo $?
0
vita@wangwei-VirtualBox:/vita/build/gcc-build$make
make[5]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[4]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[3]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[2]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[1]:Leaving directory `/vita/build/gcc-build'
vita@wangwei-VirtualBox:/vita/build/gcc-build$echo $?
0
vita@wangwei-VirtualBox:/vita/build/gcc-build$make install
----------------------------------------------------------------------
test-z "/vita/cross-tool/share/info" || /bin/mkdir -p"/vita/cross-tool/share/info"
/usr/bin/install-c -m 644 ./libitm.info '/vita/cross-tool/share/info'
install-info--info-dir='/vita/cross-tool/share/info''/vita/cross-tool/share/info/libitm.info'
Thisis not dpkg install-info anymore, but GNU install-info
Seethe man page for ginstall-info for command line arguments
make[4]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[3]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[2]:Leaving directory `/vita/build/gcc-build/i686-none-linux-gnu/libitm'
make[1]:Leaving directory `/vita/build/gcc-build'
vita@wangwei-VirtualBox:/vita/build/gcc-build$echo $?
0
到此完成gcc编译!
查看版本:
vita@wangwei-VirtualBox:/vita/build/gcc-build$cd /
vita@wangwei-VirtualBox:/$i686-none-linux-gnu-gcc -v
Usingbuilt-in specs.
COLLECT_GCC=i686-none-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/vita/cross-tool/libexec/gcc/i686-none-linux-gnu/4.7.2/lto-wrapper
Target:i686-none-linux-gnu
Configuredwith: ../gcc-4.7.2/configure --prefix=/vita/cross-tool--target=i686-none-linux-gnu --with-sysroot=/vita/sysroot--with-mpfr-include=/vita/build/gcc-4.7.2/mpfr/src--with-mpfr-lib=/vita/build/gcc-build/mpfr/src/.libs--enable-languages=c,c++ --enable-threads=posix
Threadmodel: posix
gccversion 4.7.2 (GCC)
定义工具链相关的环境变量:
vita@wangwei-VirtualBox:/$vim /home/vita/.bashrc
export CC="$TARGET-gcc"
export CXX="$TARGET-g++"
export AR="$TARGET-ar"
export AS="$TARGET-as"
export RANLIB="$TARGET-ranlib"
export LD="$TARGET-ld"
export STRIP="$TARGET-strip"
export DESTDIR=$SYSROOT
unset PKG_CONFIG_PATH
exportPKG_CONFIG_LIBDIR=$SYSROOT/usr/lib/pkgconfig:SYSROOT/usr/share/pkgconfig
不会pkg-config,这里只是把shell代码打出来:
#!/bin/bash
HOST_PKG_CFG=/usr/bin/pkg-config
if[ ! $SYSROOT ]; then
echo"Please make sure you are in cross-comile environment!"
exit1
fi
$HOST_PKG_CFG--exists $*
if[ $? -ne 0 ]; then
exit1
fi
if$HOST_PKG_CFG $* | sed -e"s/-I/-I\/vita\/sysroot/g;s/-L/-L\/vita\/sysroot/g"
then
exit0
else
exit1
fi
转自:
http://blog.163.com/wflk_wangwei/blog/static/2788833720144352959686/