Chinaunix首页 | 论坛 | 博客
  • 博客访问: 538891
  • 博文数量: 139
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-11 22:40
文章分类

全部博文(139)

文章存档

2011年(1)

2009年(3)

2008年(135)

我的朋友

分类: LINUX

2008-05-15 19:28:03

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

下载地址:

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.ocrtn.o文件.

下载地址:


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

本人是用的CPUS3C2410,选择了一个配置文件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?        

                         < Yes >      <  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 < ioperm.c.diff

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 < 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$ 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$

2.8 编译完整的glibc

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4-stage1$ cd ${SRC}

arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p BUILD/glibc-2.3.5

arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd BUILD/glibc-2.3.5

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 --prefix=/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

说明:

--prefix:                                  指定安装路径。

--target                               指定目标平台。

--host:                                    指定当前平台。

--build:                                   指定编译平台。

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

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

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

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5$ make

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5$ su root

root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5# make install_root=${SYSROOT} install

root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5# exit

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5$

2.9 编译完整的gcc

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/glibc-2.3.5$ cd ${SRC}

arm@ubuntu:~/dev_home/btools/tchain3.4.4$ mkdir -p BUILD/gcc-3.4.4

arm@ubuntu:~/dev_home/btools/tchain3.4.4$ cd BUILD/gcc-3.4.4

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4$../../gcc-3.4.4/configure --prefix=${PREFIX} --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

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4$ make

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4$ su root

root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4# make install

root@ubuntu:/home/arm/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4# exit

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4$

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gcc-3.4.4$ arm-linux-gcc -v

Reading specs from /usr/local/arm/3.4.4/lib/gcc/arm-linux/3.4.4/specsConfigured with: ../../gcc-3.4.4/configure --prefix=/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

arm@ubuntu:/usr/local/arm/3.4.4$ tree -L 1

.

|-- arm-linux

|-- bin

|-- include

|-- info

|-- lib

|-- libexec

|-- man

|-- share

`-- sysroot

arm@ubuntu:/usr/local/arm/3.4.4$ du -sh

193M    .

arm@ubuntu:/usr/local/arm/3.4.4/bin$ 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++

arm@ubuntu:~$ vi hello_c.c

#include

#include

int main()

{

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

        return 0;

}

arm@ubuntu:~$ vi hello_cpp.cpp

#include

using std::cout;

using std::endl;

int main()

{

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

  return 0;

}

arm@ubuntu:~$ arm-linux-gcc hello_c.c -o hello_c

arm@ubuntu:~$ arm-linux-g++ -o hello_cpp hello_cpp.cpp

arm@ubuntu:~$ tree -L 1

.

|-- dev_home

|-- hello_c

|-- hello_c.c

|-- hello_cpp

`-- hello_cpp.cpp

1 directory, 4 files

arm@ubuntu:~$ 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

arm@ubuntu:~$ 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$ tar zxvf gdb-6.4.tar.gz

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

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

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gdb-6.4-host$ export CC=gcc

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

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

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

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/gdb-6.4-host$ mkdir -p ../gdbserver-6.4

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

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

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gdbserver-6.4$ make

arm@ubuntu:~/dev_home/btools/tchain3.4.4/BUILD/gdbserver-6.4$ file gdbserver

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工具链




阅读(648) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~