在Linux下用buildroot搭建mips/arm的交叉编译平台

Buildroot大大简化了交叉编译工具链的制作,并且能为目标平台产生完整的根文件系统,还可以制作在目标平台上运行的本机编译(Native Compile)工具链。

我花了大量的时间研究buildroot,基于2009.11的版本做了不少修改,使得它符合固件开发的要求。下面列出的是一些主要的改动:

  • 增加了对2.6.12内核头文件的支持(编译uClibc需要)
  • 增加了对uClibc-0.9.28的支持
  • 增加了对busybox-1.15.3的支持
  • 增加了对gcc 3.4.4和gcc 4.4.2的支持
  • 增加了对nfs-utils-1.1.1的支持
  • 为libiconv瘦身,只保留了unicode和简体中文的支持,编译出的动态库从900多K减小到200多K。(编译samba需要libiconv)
  • 让libcurl和openssl只产生静态库。(编译transmission要用到)

1. 准备编译环境(适用于Ubuntu或Debian。我用的是Ubuntu 9.10)

安装编译所需软件包:
$ sudo apt
- get  install build - essential libncurses5 - dev bison flex texinfo zlib1g - dev gettext libssl - dev autoconf

buildroot用wget下载软件包源码,因此需要安装wget:
$ sudo apt-get install wget


Ubuntu默认的shell是dash,它跟buildroot的脚本有些不兼容。用下面的命令切换到bash:
$ sudo dpkg
- reconfigure dash


2. 下载buildroot-2009.11,放在HOME目录下,当然也可以放在其它目录。

$ cd
$ wget http:
// buildroot.net/downloads/buildroot-2009.11.tar.bz2
$ tar jxf buildroot - 2009.11 .tar.bz2


3. 打补丁。我把我的所有修改都放在一个补丁里:buildroot-2009.11.patch.zip

$ cd buildroot - 2009.11
$ patch 
- p1  <  .. / buildroot - 2009.11 .patch


4. 配置buildroot。buildroot采用了和Linux内核一样的配置工具,使用非常方便。建议第一次编译时只选择生成工具链,暂时不要选择额外的软件包。我的补丁已经设置好了适合于固件开发默认配置,因此你做配置时可以全部接受默认值。(C++默认是关闭的,如果需要可以打开)

$ make menuconfig


屏幕截图 - make menuconfig:
screenshot
退出配置时会生成一个“.config”文件。

5. 编译buildroot。这可能会花几个小时,取决于你的Internet带宽以及CPU性能

$ make


编译好的工具链默认放在output/staging目录下,你可以在配置buildroot是指定到其它目录。我喜欢把它设为/opt/cross/gcc442-uc0928,表示gcc版本是4.4.2,uClibc版本是0.9.28。注意:指定的目录你一定要有写权限。如何设置:make menuconfig  --> Build Options --> Toolchain and header file location

屏幕截图 - 设置工具链位置:
screenshot

如果成功编译了工具链,接下来可以重新用make menuconfig选择所需软件包,比如我一般会选择nfs-utils, portmap, wireless-tool, wpa-supplicant,ipkg等等。选好软件包再次执行make。编译好的软件包会放在output/target目录下,这个目录拥有根文件系统的目录结构。

如果想要制作在目标平台运行的本机编译(Native Compile)工具链,则在make menuconfig时打开下面两个选项:
1. Build options子菜单下的development files in target filesystem

屏幕截图 - development files in target filesystem:
screenshot

2. Package Selection for the target子菜单下的native toolchain in the target filesystem

屏幕截图 - native toolchain in the target filesystem
screenshot

当然,为了能在目标平台上进行本机编译,还需要在配置时选择一些必要的编译工具以及程序库,如: make, autoconf, automake, bison, m4, flex, libz, libiconv 等等。

注:所谓本机编译(Native Compile),是相对于交叉编译而言的。其实这是最常见的编译方式,即在本机编译程序用于在本机或与本机兼容的硬件平台上运行。

补充:
1. autoconf, automake等软件包依赖于microperl软件包。在编译microperl时可能会遇到找不到m4的错误,这时只须执行make host-m4即可产生buildroot_dir/output/host/usr/bin/m4,然后再执行make,中断的编译将继续进行。
2. 编译某些软件包需要pkg-config for host(在编译平台上运行而非在目标平台上运行),执行make host-pkgconfig可编译产生buildroot_dir/output/host/usr/bin/pkg-config

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值