参考了,网上下载的《Linux系统移植》一文
环境是fedora 5.0
下面是该文章提供的编译过程:
1.1 设置环境变量
[arm@localhost arm]#vi ~/.bashrc
export PREFIX=/usr/local/arm/3.4.4
export TARGET=armlinux
export SYSROOT=${PREFIX}/sysroot
export ARCH=arm
export CROSS_COMPILE=${TARGET}export
PATH=${PREFIX}/bin:$PATH
export SRC=/home/arm/dev_home/btools/tchain3.4.4
1. 2 准备源码包
1.2.1 binuils
名称:binutils2.16.
tar.gz
下载地址:外链网址已屏蔽ftp.gnu.org/gnu/binutils/binutils2.16.
tar.gz
1.2.2 gcc
名称:gcc3.4.4.
tar.bz2
下载地址:外链网址已屏蔽ftp.gnu.org/gnu/gcc/gcc3.4.4/
gcc3.4.4.
tar.bz2
1.2.3 glibc
名称:glibc2.3.5.
tar.gz
glibclinuxthreads2.3.5.
tar.gz
下载地址: 外链网址已屏蔽ftp.gnu.org/gnu/glibc/glibc2.3.5.
tar.gz
外链网址已屏蔽ftp.gnu.org/gnu/glibc/glibclinuxthreads2.3.5.
tar.gz
1.2.4 linux kernel
名称:linux2.6.14.1.
tar.gz
下载地址: 外链网址已屏蔽ftp.kernel.org/pub/linux/kernel/v2.6/linux2.6.14.1.
tar.gz
1.3 准备补丁
1.3.1 ioperm.c.diff
作用:打修正ioperm()函数.
下载地址:外链网址已屏蔽frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff
1.3.2 flow.c.diff
作用:该补丁用于产生crti.o和crtn.o文件。
下载地址:外链网址已屏蔽gcc.gnu.org/cgibin/
cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=cslarmbranch&
r1=1.563.4.2&r2=1.563.4.3
1.3.3 t-linux.diff
作用:修改gcc一处bug
下载地址:外链网址已屏蔽frank.harvard.edu/~coldwell/toolchain/tlinux.
diff
1.4 编译 GNU binutils
重新以arm用户登陆,让新设置的环境变量起作用.
[arm@localhost arm]#su arm
[arm@localhost arm]#cd ${SRC}
[arm@localhost tchain3.4.4]#tar xzvf binutils2.16.
tar.gz
[arm@localhost tchain3.4.4]#mkdir p
BUILD/binutils2.16
[arm@localhost binutils2.16]#
cd BUILD/binutils2.16
[arm@localhost binutils2.16]#
../../binutils2.16/
configure prefix=${
PREFIX} target=${
TARGET} \
withsysroot=${
SYSROOT}
[arm@localhost binutils2.16]#
make
[arm@localhost binutils2.16]#
su root
[root@localhost binutils2.16]#
make install
[root@localhost binutils2.16]#
exit
[arm@localhost binutils2.16]#
1.5 准备内核头文件
1.5.1 使用当前平台的gcc 编译内核头文件
[arm@localhost tchain3.4.4]#cd ${KERNEL}
[arm@localhost kernel]#tar xvfz linux2.6.14.1.
tar.gz
[arm@localhost kernel]#cd linux2.6.14.1
[arm@localhost linux2.6.14.1]#
make ARCH=arm menuconfig
[arm@localhost linux2.6.14.1]#
make
1.5.2 复制内核头文件
[arm@localhost kernel]#su root
[root@localhost kernel]#mkdir p
${SYSROOT}/usr/include
[root@localhost kernel]#cp a
include/linux ${SYSROOT}/usr/include/linux
[root@localhost kernel]#cp a
include/asmi386
${SYSROOT}/usr/include/asm
[root@localhost kernel]#cp a
include/asmgeneric
${SYSROOT}/usr/include/asmgeneric
[root@localhost kernel]#exit
[arm@localhost kernel]#
1.6 译编glibc头文件
[arm@localhost kernel]#cd ${SRC}
[arm@localhost chain3.4.4]#tar xvfz glibc2.3.5.
tar.gz
[arm@localhost chain3.4.4]#patch d
glibc2.3.5
p1
< ioperm.c.diff
[arm@localhost glibc2.3.5]#
cd glibc2.3.5
[arm@localhost glibc2.3.5]#
tar xvfz ../glibclinuxthreads2.3.5.
tar.gz
[arm@localhost chain3.4.4]#cd ..
[arm@localhost chain3.4.4]#mkdir BUILD/glibc2.3.5headers
[arm@localhost chain3.4.4]#cd BUILD/glibc2.3.5headers
[arm@localhost glibc2.3.5headers]#../../
glibc2.3.5/
configure prefix=/
usr host=${
TARGET} \
enableaddons=
linuxthreads –withheaders=${
SYSROOT}/usr/include
[arm@localhost glibc2.3.5headers]#
su root
[root@localhost glibc2.3.5headers]#
make crosscompiling=
yes install_root=${SYSROOT} installheaders
[root@localhost glibc2.3.5headers]#
touch ${SYSROOT}/usr/include/gnu/stubs.h
[root@localhost glibc2.3.5headers]#
touch ${SYSROOT}/usr/include/bits/stdio_lim.h
[root@localhost glibc2.3.5headers]#
exit
[arm@localhost glibc2.3.5headers]#
注意: prefix=/
usr :是gcc寻找库的搜索路径。
1.7 编译gcc第一阶段
[arm@localhost glibc2.3.5headers]#
cd ${SRC}
[arm@localhost chain3.4.4]#tar xjvf gcc3.4.4.
tar.bz2
[arm@localhost chain3.4.4]#patch d
gcc3.4.4
p1
< flow.c.diff
[arm@localhost chain3.4.4]#patch d
gcc3.4.4
p1
< tlinux.
diff
[arm@localhost chain3.4.4]#mkdir p
BUILD/gcc3.4.4stage1
[arm@localhost chain3.4.4]#cd BUILD/gcc3.4.4stage1
[arm@localhost gcc3.4.4stage1]#../../
gcc3.4.4/
configure prefix=${
PREFIX} target=${
TARGET} \
enablelanguages=
c withsysroot=${
SYSROOT}
注意:不能加上"disableshared"
选项。
[arm@localhost gcc3.4.4stage1]#
make allgcc
[arm@localhost gcc3.4.4stage1]#
su root
[root@localhost gcc3.4.4stage1]#
make installgcc
[root@localhost gcc3.4.4stage1]#
exit
[arm@localhost gcc3.4.4stage1]#
1.8 编译完整的glibc
[arm@localhost gcc3.4.4stage1]
#cd ${SRC}
[arm@localhost tchain3.4.4]#mkdir BUILD/glibc2.3.5
[arm@localhost tchain3.4.4]#cd BUILD/glibc2.3.5
[arm@localhost glibc2.3.5]#
BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar \
RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \
../../glibc2.3.5/
configure prefix=/
usr build=
i386redhatlinux
host=
armunknownlinuxgnu
\
target=
armunknownlinuxgnu
without__
thread enableaddons=
linuxthreads \
withheaders=${
SYSROOT}/usr/include
说明:
prefix:
指定安装路径。
target:
指定目标平台。
host:
指定当前平台。
build:
指定编译平台。
withsysroot:
用于指定编译所需要的头文件,及链接库。
enableaddons:
加入其它的库,如线程库等。
enablelanguages:
指定gcc所支持的语言。
[arm@localhost glibc2.3.5]#
make
[arm@localhost glibc2.3.5]#
su root
[root@localhost glibc2.3.5]#
make install_root=${SYSROOT} install
[root@localhost glibc2.3.5]#
exit
[arm@localhost glibc2.3.5]#
1.9 编译完整的gcc
[arm@localhost glibc2.3.5]#
cd ${SRC}
[arm@localhost tchain3.4.4]#mkdir BUILD/gcc3.4.4
[arm@localhost tchain3.4.4]#cd BUILD/gcc3.4.4
[arm@localhost gcc3.4.4]#../../
gcc3.4.4/
configure prefix=${
PREFIX} target=${
TARGET} \
enablelanguages=
c withsysroot=${
SYSROOT}
[arm@localhost gcc3.4.4]#
make
[arm@localhost gcc3.4.4]#
su root
[root@localhost gcc3.4.4]#
make install
[root@localhost gcc3.4.4]#
exit
[arm@localhost gcc3.4.4]#
上面的基本是对的,我编译了,好几次都没成功,在编译glib那部时间特别长,错了重来一次时间太长
为了保证不发生不必要的问题,因为我对linux还不是很熟悉,所以每次发生错误,我都重第2步开始重做,最后成功了,主要做了以下的细小改动:
1.生成头文件那步时,不需要编译内核 只要make include/linux/version.h 看下version.h文件在不在,即使失败也没关系,继续做下去
2.copy 头文件时选择asm-arm下面的到asm下!!!
3.glib2.3.5 编译时 --build=i686-pc-linux-gnu ,对应的pc cpu不同而不同,我的是p4 2.7G的!!!
成功后,我弄了helloworld 编译了下,并下载到板上试验了下,成功执行
其他问题还要等待以后,用3.4.4编译2.6内核时,才能知道,
以前从来没弄过linux,交叉工具编译成功让我信心大增,下一步开始移植,uboot1.1.4 佛主会保佑我的