返回列表 发帖

Buildroot-2011.11交叉编译器制作

Buildroot-2011.11交叉编译器制作

本帖最后由 dglwx 于 2012-6-5 10:58 编辑

本文章pdf下载为:

本帖隐藏的内容需要回复才可以浏览



凌云嵌入式Linux培训


Buildroot-2011.11交叉编译器制作


















日期:

20126月2日

文档版本:

1.0

联系人:

郭文学

邮箱:

guowenxue@gmail.com

QQ:

281143929

文档历史记录

日期

作者

版本

备注

20126月2日

郭文学

1.0

建立初始版本


CopyRight Declare

本文档由郭文学编写,主要用于凌云嵌入式Linux教学内部使用。任何人不得以任何形式上传到网上共享或通过其它方式传播。


目录

[url=#_Toc16991]1 准备交叉编译器源码包
3[/url]

[url=#_Toc14541]1.1 下载源码包
3[/url]

[url=#_Toc14645]1.2 上传源码包到Linux服务器
3[/url]

[url=#_Toc9689]1.2.1 修改/opt目录权限
3[/url]

[url=#_Toc2954]1.2.2 上传源码包到Linux服务器
3[/url]

[url=#_Toc14351]1.2.3 解压缩并准备制作源码包
4[/url]

[url=#_Toc14439]2 配置交叉编译器选项
5[/url]

[url=#_Toc2455]2.1 配置交叉编译器CPU类型
5[/url]

[url=#_Toc13200]2.2 配置Buildroot Options
6[/url]

[url=#_Toc24694]2.3 配置“Toolchain”选项
7[/url]

[url=#_Toc3840]2.4 其它配置
8[/url]

[url=#_Toc674]2.5 完成配置
8[/url]

[url=#_Toc3375]3 编译交叉编译器
10[/url]

[url=#_Toc21405]4 测试交叉编译器
10[/url]



1 准备交叉编译器源码包

1.1 下载源码包

大家可以在Windows操作系统下使用迅雷下载这些buildroot-2011.11制作交叉编译器所需要的源码包。如果不提前下载的话,在编译buildroot的时候Linux也会自动下载,但这个过程会很慢,所以最好先用windows下载准备好。并把所有所有的源码包都放在名为buildroot-2011.11-packet的文件夹下,如下所示:

1.2 上传源码包到Linux服务器1.2.1 修改/opt目录权限

我们一般会将交叉编译器放到Linux服务器的/opt路径下,但这不是绝对的。为了保证今后使用我的源码包编译正常,大家都最好放到这里。由于在Linux安装后,/opt目录默认只有root才有写的权限,所以在上传这些源码包之前首先要修改他的权限。


1.2.2 上传源码包到Linux服务器

   在修改/opt目录的权限后,我们就可以使用WinScp这个软件,将windows上下载的源码包上传到Linux服务器的/opt路径下,如下图所示:


上传完成之后,我们就可以在Linux服务器上看到这些源码包了:

1.2.3 解压缩并准备制作源码包

   在Linux源码包上传完成之后,我们就可以解压缩准备编译环境了。首先解压缩上传的buildroot-2011.11.tar.bz2压缩包:

   再将上传的buildroot-2011.11-patcket这个文件夹移到buildroot-2011.11这个文件夹下,并重命名为dl。这可以用下面这条命令完成:

这样Linux服务器上的buildroot-2011.11的源码包就准备好了。之后我们就准备开始编译交叉编译器了。

2 配置交叉编译器选项

2.1 配置交叉编译器CPU类型

在开始编译交叉编译器之前,我们要先配置交叉编译器,使用那些依赖的软件包的哪些版本。输入以下命令我们开始交叉编译器的配置:

在我们输入make menuconfig之后,系统会出现以下界面:

这里,默认的是i386的编译器,我们开始设置为ARM的交叉编译器。首先修改下面红色标记的三处如下。


  这里有点需要注意的是,在"Target Architecture Variant (arm926t)"这个选项中,我们需要根据我们开发板的CPU来选择。今后大家工作时,不一定使用s3c2440这个CPU,这样大家就需要根据自己的CPU类型来在这里选择相应的类型,这个可以从CPUdatasheet上看到究竟是基于哪个ARM核的。

   在我处理过的处理器中:

如果是samsungs3c2410/s3c2440atmelat91rm9200这两个CPU的话,这里应该选择arm920t

如果是samsungs3c2416atmelat91sam9260,at91sam9g20这里应该选择arm926t

如果是samsungs3c6410, 这里应该选择arm1176jzf-s

2.2 配置Buildroot Options

这里我们开始配置交叉编译器的"Build options  --->"选项,如下:

   大家可以看到这里的“($(TOPDIR)/dl) Download dir (NEW)”,这里的dl就是为什么之前我们要把源代码文件夹重命名为dl的原因。

   “($(TOP_DIR)/arm926t) Host dir”就是指定我们制作出来的交叉编译器所在的路径,注意这里大家设置为$(TOP_DIR),而不是默认的${BASE_DIR},否则以后用我的代码可能会有问题。

2.3 配置“Toolchain”选项

   接下来我们配置Toolchain,这里主要是选择Linux内核头文件的版本,GNU/GCC相关工具链的版本等。具体选项如下:

注意上面在“Kernel Headers”先要设置“Linux 2.6 (manually specified version)”,然后再输入“linux version”的版本为2.6.37


2.4 其它配置

   在完成上面的配置后,剩下的配置就比较简单了:

System configuration  --->”使用默认的选项,不要作修改;

Package Selection for the target  --->”这里我们只选择今后经常需要的两个库文件:

Package Selection for the target  --->

    Libraries  --->

        Compression and decompression  --->


lzo

zlib

Filesystem images  --->”全部取消,不要选;

Bootloaders  --->”全部取消,不要选;

Kernel  --->”全部取消,不要选;

2.5 完成配置

  在完成上面的所有配置后,我们选择“Save an Alternate Configuration File”保存这些配置,然后使用“Tab”键选择到“Exit”上退出。这时,我们就会在当前目录下,看到一个名为.config的掩藏文件。在之后的编译过程中,Makefile将根据这个文件来选择相应的软件包和特性来编译安装。


下面是我生成的config文件,大家也可以直接把我的这个config文件下载到这个目录下,并把它重命名为.config,然后就可以开始下面的编译工作了。


3 编译交叉编译器

在完成上面的配置之后,接下来的编译过程就非常简单了。我只需要输入make命令,这时系统就开始编译制作交叉编译器了。


这个过程会有点漫长,在我的Linux服务器上大概需要30分钟。如果是虚拟机差一点的PC的话,时间可能会更长。如果编译成功的话,最后生成的交叉编译器会在/opt/buildroot-2011.11/arm926t/usr/bin/路径下:

4 测试交叉编译器

首先,我们写一个Hello.c的程序,如下:


然后我们使用交叉编译器来编译这个C文件生成hello可执行文件,然后使用file命令查看文件属性,可以看到这个文件是ARM下运行的,具体如下:

当我们把这个hello文件下载到开发板上时,应该能运行了。

好帖子啊,兄弟啊,这个格式不对啊,有没有pdf版本的给我学习下啊。

TOP

回复 2# osboy

  恩,帖子的最上面有pdf的附件啊。在office里copy过来后,图片不能自动拷贝过来。可以参考最上面的附件里的pdf文档。

TOP

回复  osboy

  恩,帖子的最上面有pdf的附件啊。在office里copy过来后,图片不能自动拷贝过来。可以参考 ...
dglwx 发表于 2012-6-4 16:53



   可以在word中,选择文件,web page预览,然后再重新编译帖子,ctrl a拷贝,ctrl c复制编辑你这个帖子。格式要比现在好看的多,这个太乱了。

TOP

谢谢分享

TOP

刚接触ATMEL的处理器,饥渴学习中

TOP

謝謝分享,正好需要該資料

TOP

谢谢楼主分享。。。。。。

TOP

记录日志:

之前做编译器的时候会出现这个问题:
/usr/bin/make -j1 -C /home/guowenxue/radi-mon/src/buildroot/buildroot-2011.11/output/toolchain/uClibc-0.9.32/utils \
                PREFIX=/usr/local/.guowenxue/radi-mon/trunk/src/buildroot/buildroot-2011.11/arm926t \
                HOSTCC="/usr/local/.guowenxue/radi-mon/trunk/src/buildroot/buildroot-2011.11/arm926t/usr/bin/ccache /usr/bin/gcc" \
                hostutils
make[1]: Entering directory `/usr/local/.guowenxue/radi-mon/trunk/src/buildroot/buildroot-2011.11/output/toolchain/uClibc-0.9.32/utils'
  HOSTCC utils/getconf.host
  HOSTCC utils/ldconfig.host
../utils/ldconfig.c: In function 'is_shlib.clone.0':
../utils/ldconfig.c:259: warning: dereferencing pointer 'elf_hdr' does break strict-aliasing rules
../utils/ldconfig.c:273: warning: dereferencing pointer 'elf_hdr' does break strict-aliasing rules
../utils/ldconfig.c:258: note: initialized from here
  HOSTCC utils/ldd.host
  HOSTCC utils/iconv.host
/tmp/ccuAMXfQ.o: In function `main':
iconv.c.text+0x27e): undefined reference to `libiconv_open'
iconv.c.text+0x38d): undefined reference to `libiconv'
iconv.c.text+0x478): undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
make[1]: *** [../utils/iconv.host] Error 1
make[1]: Leaving directory `/usr/local/.guowenxue/radi-mon/trunk/src/buildroot/buildroot-2011.11/output/toolchain/uClibc-0.9.32/utils'
make: *** [/usr/local/.guowenxue/radi-mon/trunk/src/buildroot/buildroot-2011.11/arm926t/usr/arm-unknown-linux-uclibcgnueabi/sysroot/usr/lib/libc.a] Error 2

这里是由于我没有编译iconv引入的,我们可以在Packet里选择上它,也可以在需要他的时候再编译。这里一般我们不需要,所以我在这里只是把它删掉.这时可以在make menuconfig时,取消Enable toolchain locale/i18n support:
Toolchain  --->
        
  • Enable WCHAR support
            [ ] Enable toolchain locale/i18n support
  • TOP

    学习学习。。。。。

    TOP

    看看学习一下

    TOP

    谢谢分享

    TOP

    看一下~~~~~

    TOP

    正学要谢谢分享

    TOP

    dddddddddddddddddddddddddd

    TOP

    是不是完整版本的啊

    TOP

    gggggggggggggg

    TOP

    前来报道!!!!

    TOP

    回复 1# dglwx
    好帖子啊,兄弟啊,这个格式不对啊

    TOP

    好东西啊

    TOP

    下载了,谢谢

    TOP

    thanks a lot!!

    TOP

    回复 1# dglwx


       

    TOP

    回复 1# dglwx
    看看学习一下

    TOP

    回复 1# dglwx


       谢谢楼主  我来学习下

    TOP

    谢谢楼主  我来学习下

    TOP

    返回列表
    网页右侧QQ悬浮滚动在线客服
    网页右侧QQ悬浮滚动在线客服