Chinaunix首页 | 论坛 | 博客
  • 博客访问: 223049
  • 博文数量: 71
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1025
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-25 19:00
文章分类

全部博文(71)

文章存档

2009年(2)

2008年(69)

我的朋友

分类:

2008-03-28 10:30:48


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用户下)
 
:~# useradd -G root -g root -d/home/arm arm
 
:~# mkdir -p /home/arm
 
:~# chown -R arm /home/arm
 
:~# chmod -R 775 /home/arm
 
2. 建立工作目录(用arm用户登陆)
 
mkdir dev_home
 
cd dev_home
 
arm@ubuntu:~/dev_home$ mkdir btools kernel
 
3. 登陆时启动环境变量(用root用户登陆)
 
:~# vi ~/.bashrc
 
在.bashrc最后加上
 
export PATH=/usr/local/arm/3.4.4/bin:$PATH
 
 
 

重新登陆arm用户,环境变量生效
 
su arm
 
 
 
 
2. 设置环境变量,准备源码及相关补丁
 
2.1 设置环境变量
 
vi ~/.bashrc
 
export divFIX=/usr/local/arm/3.4.4
 
export TARGET=arm-linux
 
export SYSROOT=${divFIX}/sysroot
 
export ARCH=arm
 
export CROSS_COMPILE=${TARGET}-
 
export PATH=${divFIX}/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
 
下载地址:
 
 

2.2.2 gcc
 
名称: gcc-3.4.4.tar.bz2
 
下载地址:
 
 

2.2.3 glibc
 
名称: glibc-2.3.5.tar.gz
 
glibc-linuxthreads-2.3.5.tar.gz
 
下载地址:
 
 
 

2.2.4 linux kernel
 
名称: linux-2.6.14.1.tar.bz2
 
下载地址:
 
 

2.2.5 gdb
 
名称: gdb-6.4.tar.gz
 
下载地址:
 
 

2.3 准备补丁
 
2.3.1 ioperm.c.diff
 
作用: 打修正ioperm()函数
 
下载地址:
 
2.3.2 flow.c.diff
 
作用: 修改gcc一处bug
 
下载地址:
 
 
 

2.3.3 t-linux.diff
 
作用: 该补丁用于产生crti.o和crtn.o文件.
 
下载地址:
 
 

2.4 编译GNU binutils
 
 

重新以arm用户登陆,让新设置得环境变量起作用
 
 
.
 
|-- 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
 
su arm
 
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/BUILD/binutils-2.16$ ../../binutils-2.16/configure --divfix=${divFIX} --target=${TARGET} --with-sysroot=${SYSROOT}
 
 
 
 
 
 
 
 
 
2.5 准备内核头文件
 
2.5.1 使用当前平台的gcc编译内核头文件
 
 
 
arm@ubuntu:~/dev_home/kernel$ tar jxvf ../btools/tchain3.4.4/linux-2.6.14.1.tar.bz2
 
 
arm@ubuntu:~/dev_home/kernel/linux-2.6.14.1$ cp arch/arm/configs/smdk2410_defconfig .config
 
本人是用的CPU是S3C2410,选择了一个配置文件smdk2410_defconfig,你可以根据你的需要选择
 
 
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?
 
< Yes > < No >
 
选择Yes
 
 
 
 
 
2.5.2 复制内核头文件
 
 
 
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
 
 
 
 
 
 
2.6 编译glibc头文件
 
 
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 < ioperm.c.diff
 
 
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$ 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 --divfix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include
 
 
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
 
 
 
touch ${SYSROOT}/usr/include/bits/stdio_lim.h
 
 
 
 
 
 
2.7 编译gcc 第一阶段
 
 
 
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d gcc-3.4.4 -p1 < flow.c.diff
 
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ patch -d gcc-3.4.4 -p1 < t-linux.diff
 
arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p 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 --divfix=${divFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT}
 
注意: 不能加上--disable-shared
 
 
 
 
 

2.8 编译完整的glibc
 
 
 
 

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.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 ../../glibc-2.3.5/configure --divfix=/usr --build=i386-ubuntu-linux --host=arm-unknown-linux-gnu --target=arm-unknown-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include
 

说明:
 

--divfix: 指定安装路径。
正在装载数据……
 

--target: 指定目标平台。
 

--host: 指定当前平台。
 

--build: 指定编译平台。
 

--with-sysroot: 用于指定编译所需要的头文件,及链接库。
 

--enable-add-ons: 加入其它的库,如线程库等。
 

--enable-languages: 指定gcc所支持的语言。
 
 
 
 
 
 
 
 
 
 

2.9 编译完整的gcc
 
 
 
 

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4$../../gcc-3.4.4/configure --divfix=${divFIX} --target=${TARGET} --with-sysroot=${SYSROOT} --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --with-softfloat-support=internal --enable-languages=c,c --enable-shared --enable-c99 --enable-long-long
 
 
 
 
 
 
 

Reading specs from /usr/local/arm/3.4.4/lib/gcc/arm-linux/3.4.4/specsConfigured with: ../../gcc-3.4.4/configure --divfix=/usr/local/arm/3.4.4 --target=arm-linux --with-sysroot=/usr/local/arm/3.4.4/sysroot --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --with-softfloat-support=internal --enable-languages=c,c --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.4
 

tree -L 1
 

.
 

|-- arm-linux
 

|-- bin
 

|-- include
 

|-- info
 

|-- lib
 

|-- libexec
 

|-- man
 

|-- share
 

`-- sysroot
 

du -sh
 

193M .
 

ls
 

arm-linux-addr2line arm-linux-c filt arm-linux-gcc-3.4.4 arm-linux-nm arm-linux-readelf
 

arm-linux-ar arm-linux-cpp arm-linux-gccbug arm-linux-objcopy arm-linux-size
 

arm-linux-as arm-linux-g arm-linux-gcov arm-linux-objdump arm-linux-strings
 

arm-linux-c arm-linux-gcc arm-linux-ld arm-linux-ranlib arm-linux-strip
 
 

2.10 测试gcc,g
 

vi hello_c.c
 

#include
 

#include
 

int main()
 

{
 

printf("Hello,World~\n");
 

return 0;
 

}
 

vi hello_cpp.cpp
 

#include
 

using std::cout;
 

using std::endl;
 

int main()
 

{
 

cout<<"Hello,World!\n"<
 

return 0;
 

}
 

arm-linux-gcc hello_c.c -o hello_c
 

arm-linux-g -o hello_cpp hello_cpp.cpp
 

tree -L 1
 

.
 

|-- dev_home
 
 
 

|-- hello_c
 

|-- hello_c.c
 

|-- hello_cpp
 

`-- hello_cpp.cpp
 

1 directory,4 files
 

file hello_c
 

hello_c: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
 

file hello_cpp
 

hello_cpp: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
 

2.11 编译主机上运行的gdb
 
 

arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p BUILD/gdb-6.4-host
 
 
 

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gdb-6.4-host$ ../../gdb-6.4/configure --target=arm-linux
 
 
 

gdb/gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), for GNU/Linux 2.2.0, not stripped
 
 
2.12建立目标平台上运行的gdbserver
 
 
 

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gdbserver-6.4$ export CC=/usr/local/arm/3.4.4/bin/arm-linux-gcc
 

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gdbserver-6.4$ ../../gdb-6.4/gdb/gdbserver/configure --host=arm-linux
 
 
 

gdbserver: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
 
 
 
 
 
 
3 GNU交叉工具链的下载
 

工具链的官方下载地址:
 

 

可以从该站点下载2.95.3, 3.0以及3.2工具链
 

 

 


 
文章转载自『幽月's Blog』地址:
阅读(2350) | 评论(0) | 转发(0) |
0

上一篇:七十五张照片

下一篇:酷睿

给主人留下些什么吧!~~