- 论坛徽章:
- 0
|
GNU交叉工具链(arm-linux-gcc 3.4.4)
Modified by litroncn
(
[color="#0000ff"]litroncn@163.com
)
Based on sunhe
(msunhe@gmail.com)
1
Linux下工作用户及环境
1.1软件环境
Linux ubuntu 6.06
LTS
Kernel version 2.6.15-23-686
gcc version 4.0.3 (Ubuntu
4.0.3-1ubuntu5)
GNU Make
3.81
msgfmt (GNU gettext-tools)
0.14.5
makeinfo (GNU texinfo)
4.8
GNU M4 1.4.4
flex 2.5.31
GNU Awk
3.1.5
perl, v5.8.7
GNU sed version
4.1.4
gettext (GNU
gettext-runtime) 0.14.5
autoconf (GNU Autoconf)
2.59
automake (GNU automake)
1.4-p6
1.2
编译相关配置
1. 添加工作用户(在root用户下)
root@ubuntu:~# useradd -G
root -g root -d/home/arm arm
root@ubuntu:~# mkdir -p
/home/arm
root@ubuntu:~# chown -R arm
/home/arm
root@ubuntu:~# chmod -R 775
/home/arm
2. 建立工作目录(用arm用户登陆)
arm@ubuntu:~$ mkdir
dev_home
arm@ubuntu:~$ cd
dev_home
arm@ubuntu:~/dev_home$
mkdir btools kernel
3. 登陆时启动环境变量(用root用户登陆)
root@ubuntu:~# vi
~/.bashrc
在.bashrc最后加上
export
PATH=/usr/local/arm/3.4.4/bin:$PATH
arm@ubuntu:~/dev_home$
重新登陆arm用户,环境变量生效
arm@ubuntu:~$ su
arm
2.
设置环境变量,准备源码及相关补丁
2.1
设置环境变量
arm@ubuntu:~$ vi
~/.bashrc
export
PREFIX=/usr/local/arm/3.4.4
export
TARGET=arm-linux
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
注意: 如果你已经安装过arm-linux-gcc,并且已经加入了环境变量中,将其从环境中去掉保证root用户和arm用户环境中没有arm-linux-gcc
2.2
准备源码包
2.2.1 binutils
名称:binutils-2.16.tar.gz
tar.gz
下载地址:
[color="#0000ff"]http://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz
2.2.2 gcc
名称: gcc-3.4.4.tar.bz2
下载地址:
[color="#0000ff"]http://ftp.gnu.org/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2
2.2.3 glibc
名称: glibc-2.3.5.tar.gz
glibc-linuxthreads-2.3.5.tar.gz
下载地址:
[color="#0000ff"]http://ftp.gnu.org/gnu/glibc/glibc-2.3.5.tar.gz
[color="#0000ff"]http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.5.tar.gz
2.2.4 linux kernel
名称: linux-2.6.14.1.tar.bz2
下载地址:
[color="#0000ff"]http://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.1.tar.bz2
2.2.5 gdb
名称: gdb-6.4.tar.gz
下载地址:
http://ftp.gnu.org/pub/gnu/gdb/gdb-6.4.tar.gz
2.3
准备补丁
2.3.1 ioperm.c.diff
作用: 打修正ioperm()函数
下载地址:
[color="#0000ff"]http://frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff
2.3.2 flow.c.diff
作用: 修改gcc一处bug
下载地址:
[color="#0000ff"]http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3
2.3.3 t-linux.diff
作用: 该补丁用于产生crti.o和crtn.o文件.
下载地址:
[color="#0000ff"]http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff
2.4
编译GNU binutils
重新以arm用户登陆,让新设置得环境变量起作用
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tree -L 1
.
|--
BUILD
|--
binutils-2.16
|--
binutils-2.16.tar.gz
|--
flow.c.diff
|-- gcc-3.4.4
|-- gcc-3.4.4.tar.bz2
|--
gdb-6.4.tar.gz
|-- glibc-2.3.5
|-- glibc-2.3.5.tar.gz
|--
glibc-linuxthreads-2.3.5.tar.gz
|--
ioperm.c.diff
|-- linux-2.6.14.1.tar.bz2
`--
t-linux.diff
arm@ubuntu:~$ su
arm
arm@ubuntu:~$ cd
${SRC}
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tar zxvf
binutils-2.16.tar.gz
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p
BUILD/binutils-2.16
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
BUILD/binutils-2.16
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$
../../binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET}
--with-sysroot=${SYSROOT}
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$
make
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$ su
root
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16#make
install
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16#
exit
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$
2.5
准备内核头文件
2.5.1 使用当前平台的gcc编译内核头文件
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/binutils-2.16$ cd
${KERNEL}
arm@ubuntu:~/dev_home/kernel$
arm@ubuntu:~/dev_home/kernel$ tar jxvf
../btools/tchain3.4.4/linux-2.6.14.1.tar.bz2
arm@ubuntu:~/dev_home/kernel$ cd linux-2.6.14.1/
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ cp arch/arm/configs/smdk2410_defconfig
.config
本人是用的CPU是S3C2410,选择了一个配置文件smdk2410_defconfig,你可以根据你的需要选择
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ make ARCH=arm
menuconfig
System
Type --->
ARM system type (Samsung S3C2410)
--->
S3C24XX Implementations
--->
[ ]
Simtec Electronics ANUBIS
[
] Simtec Electronics BAST (EB2410ITX)
[
] IPAQ H1940
[
] Acer N30
SMDK2410/A9M2410
[
] SMDK2440
[
] Thorcom VR1000
[
] HP iPAQ rx3715
[
] NexVision OTOM Board
[
] NexVision NEXCODER 2440 Light Board
--- S3C2410
Boot
--- S3C2410
Setup
[ ] S3C2410 DMA
support
(0) S3C2410 UART to use for low-level
messages
--- Processor
Type
--- Processor
Features
Support Thumb
user binaries
[ ] Disable
I-Cache
[ ] Disable
D-Cache
[ ] Force write through
D-cache
退出时
Do you wish to save your
new kernel configuration?
No >
选择Yes
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ make
2.5.2 复制内核头文件
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ su root
root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# mkdir -p ${SYSROOT}/usr/include
root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# cp -a include/linux
${SYSROOT}/usr/include/linux
root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# cp -a include/asm-arm
${SYSROOT}/usr/include/asm
root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# cp -a include/asm-generic
${SYSROOT}/usr/include/asm-generic
root@ubuntu:/home/arm/dev_home/kernel/linux-2.6.14.1# exit
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$
2.6
编译glibc头文件
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ cd ${SRC}
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tar zxvf
glibc-2.3.5.tar.gz
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d glibc-2.3.5 -p1
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
glibc-2.3.5
arm@ubuntu:~/dev_home/btools/tchain3.4.4/glibc-2.3.5$ tar zxvf
../glibc-linuxthreads-2.3.5.tar.gz
arm@ubuntu:~/dev_home/btools/tchain3.4.4/glibc-2.3.5$ cd
..
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p
BUILD/glibc-2.3.5-headers
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
BUILD/glibc-2.3.5-headers/
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$
../../glibc-2.3.5/configure --prefix=/usr --host=${TARGET}
--enable-add-ons=linuxthreads
--with-headers=${SYSROOT}/usr/include
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$ su
root
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers# make
cross-compiling=yes install_root=${SYSROOT}
install-headers
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers# touch
${SYSROOT}/usr/include/gnu/stubs.h
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers#
touch
${SYSROOT}/usr/include/bits/stdio_lim.h
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers#
exit
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$
2.7
编译gcc 第一阶段
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5-headers$ cd
${SRC}
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ tar jxvf
gcc-3.4.4.tar.bz2
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d gcc-3.4.4 -p1
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d gcc-3.4.4 -p1
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p
BUILD/gcc-3.4.4-stage1
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd
BUILD/gcc-3.4.4-stage1/
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$
../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET}
--enable-languages=c --with-sysroot=${SYSROOT}
注意: 不能加上--disable-shared
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$ make
all-gcc
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$ su
root
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1# make
install-gcc
root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1#
exit
arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27691/showart_373891.html |
|