深度探索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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值