深度探索Linux操作系統第二章:系統構建和原理解析-工具編譯

虛擬機上操作系統: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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章