天天看點

使用buildroot建立交叉編譯工具

使用buildroot建立交叉編譯工具

若想詳細地了解buildroot可參考該文檔http://buildroot.uclibc.org/buildroot.html

首先從此處 http://buildroot.uclibc.org/downloads/snapshots/  下載下傳最新的buildroot

buildroot-snapshot.tar.bz2

$ tar jxvf buildroot-snapshot.tar.bz2

$ cd buildroot

$ make menuconfig

配置項如下:Target Architecture (arm)---à

            Target Architecture variant (arm926t) --à

            Target ABI (OABI) ---à

            Build option --à  此項中隻作如下修改 (arm-linux-gnu) GNU build hostname suffix   其餘都是預設的選項

            Toolchain type (buildroot toolchain) --à

            Toolchain Options ---à

              ---Kernel Header Options

                Kernel Headers (Linux 2.6.21.x kernel headers) -à

              ----uClibc Options

                uClibc C library version (uClinbc0.9.29) -à

                (toolchain/uClibc/uClibc-0.9.29.config) uClibc configuration files to

              [ ] Enable locale/gettext/i8n support?

                Thread library implementation (linux threads (stable/old))--à

              [ ] Thread library debugging

              -----Binutils options

                  Binutils version (binutils 2.17) --à

              () Additional binutils options

              -----Gcc options

                 GCC compiler version (gcc 3.4.6) -à

                 [ ] Enable setjmp /longjmp exceptions?

                 () Additional gcc options

                 [ ]Build/install c++ compiler and libstdc++?

                 [ ]Build/install Objective –C compiler and runtime?

                 [ ]Build/install Fortran compiler and runtime?

                 [*]Build/install a shared libgcc?

              -------Ccache Options

                   [ ]Enable ccache support?

              --------Gdb Options

                   [ ]Build gdb debugger for the Target

                   [ ]Build gdb server for the Target

                   [ ]Build gdb for the Host

              ---------elf2flt 未配置該選項

              ---------Common Toolchain Options  未配置該選項

              (-Os –pipe) Target Optimizations

              [*] Include target utils in cross toolchain

Package Selection for the target --à busybox另外編譯,這裡未配置

Target Options -à [*] ext2 root filesystem 其他為預設配置

Board Support Options ---à [*] Atmel Target 其他未配置

$ make all

編譯結束後即可在staging_dir目錄下看到如下檔案:arm-linux arm-linux-uclibc bin include info lib libexec man usr  其中bin中即為相應的交叉編譯工具,arm-linux目錄下的lib中即為相應的庫。

為了驗證該交叉編譯工具是否可以正常工作,修改 .bash_profile檔案中的内容,注釋掉 export PATH=$PATH:/usr/local/arm/3.4.1/bin 添加上:

export PATH=$PATH:/home/yyl/project1/buildroot/build_arm/staging_dir/bin

重起系統,通過arm-linux-gcc –version指令可檢測到目前arm-linux-gcc版本為3.4.6

修改linux-2.6.21目錄下的Makefile檔案:

将 CROSS_COMPILE =/usr/local/arm/3.4.1/bin/arm-linux-

改為:CROSS_COMPILE =/home/yyl/project1/buildroot/build_arm/staging_dir/bin/arm-linux-

由于我使用的是AT91SAM9261EK闆子,其他的編譯步驟都可參考 文檔linux2.6.21 kernel移植到AT91SAM9261EK

通過給文檔的編譯步驟可以得到uImage檔案

最後使用新生成的交叉編譯工具,編譯busybox-1.00,在使用make menuconfig指令配置選項時,隻需要修改 Build Options à[*] Do you want to build Busybox with a Cross Compiler?

(/home/yyl/project1/buildroot/build_arm/staging_dir/bin/arm-linux-) 其他都采用該檔Linux-2.6.20核心移植到AT91RM9200-EK

制作ramdisk的方法逐漸進行,僅有如下步驟需要修改(用紅色标記),其他都不用修改:

<!--[if !supportLists]-->a.       <!--[endif]-->c.準備lib庫檔案

# cd /mnt

# mkdir lib

# cd  /home/yyl/project1/buildroot/build_arm/staging_dir /arm-linux/lib

# for file in libc libcrypt libdl libm libpthread libresolv libutil

> do

> cp $file-*.so /mnt/lib

> cp -d $file.so.[*0-9] /mnt/lib

> done

# cp -d ld*.so* /mnt/lib

最後将uImage和ramdisk.gz 通過tftp下載下傳到AT91SAM9261EK闆子,啟動系統,系統正常運作,可通過這裡Linux version 2.6.21 ([email protected]) (gcc version 3.4.6)看到gcc為3.4.6, 同時在lib目錄下可以看到uClibc為0.9.29.

進而可以驗證該交叉編譯工具可以正常工作。到此交叉編譯工具制作完成。

繼續閱讀