Buildroot大大简化了交叉编译工具链的制作.docx
- 文档编号:7329153
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:12
- 大小:153.29KB
Buildroot大大简化了交叉编译工具链的制作.docx
《Buildroot大大简化了交叉编译工具链的制作.docx》由会员分享,可在线阅读,更多相关《Buildroot大大简化了交叉编译工具链的制作.docx(12页珍藏版)》请在冰豆网上搜索。
Buildroot大大简化了交叉编译工具链的制作
Buildroot大大简化了交叉编译工具链的制作,并且能为目标平台产生完整的根文件系统,还可以制作在目标平台上运行的本机编译(NativeCompile)工具链。
我花了大量的时间研究buildroot,基于2009.11的版本做了不少修改,使得它符合固件开发的要求。
下面列出的是一些主要的改动:
∙增加了对2.6.12内核头文件的支持(编译uClibc需要)
∙增加了对uClibc-0.9.28的支持
∙增加了对busybox-1.15.3的支持
∙增加了对gcc3.4.4和gcc4.4.2的支持
∙增加了对nfs-utils-1.1.1的支持
∙为libiconv瘦身,只保留了unicode和简体中文的支持,编译出的动态库从900多K减小到200多K。
(编译samba需要libiconv)
∙让libcurl和openssl只产生静态库。
(编译transmission要用到)
1.准备编译环境(适用于Ubuntu或Debian。
我用的是Ubuntu9.10)
安装编译所需软件包:
$sudo apt-get install build-essential libncurses5-dev bison flex texinfo zlib1g-dev gettext libssl-dev autoconf
buildroot用wget下载软件包源码,因此需要安装wget:
$sudoapt-getinstallwget
Ubuntu默认的shell是dash,它跟buildroot的脚本有些不兼容。
用下面的命令切换到bash:
$sudo dpkg-reconfigure dash
2.下载buildroot-2009.11,放在HOME目录下,当然也可以放在其它目录。
$ cd
$ wget
$ 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
屏幕截图-makemenuconfig:
退出配置时会生成一个“.config”文件。
5.编译buildroot。
这可能会花几个小时,取决于你的Internet带宽以及CPU性能
$ make
编译好的工具链默认放在output/staging目录下,你可以在配置buildroot是指定到其它目录。
我喜欢把它设为/opt/cross/gcc442-uc0928,表示gcc版本是4.4.2,uClibc版本是0.9.28。
注意:
指定的目录你一定要有写权限。
如何设置:
makemenuconfig -->BuildOptions-->Toolchainandheaderfilelocation
屏幕截图-设置工具链位置:
如果成功编译了工具链,接下来可以重新用makemenuconfig选择所需软件包,比如我一般会选择nfs-utils,portmap,wireless-tool,wpa-supplicant,ipkg等等。
选好软件包再次执行make。
编译好的软件包会放在output/target目录下,这个目录拥有根文件系统的目录结构。
如果想要制作在目标平台运行的本机编译(NativeCompile)工具链,则在makemenuconfig时打开下面两个选项:
1.Buildoptions子菜单下的developmentfilesintargetfilesystem
屏幕截图-developmentfilesintargetfilesystem:
2.PackageSelectionforthetarget子菜单下的nativetoolchaininthetargetfilesystem
屏幕截图-nativetoolchaininthetargetfilesystem
当然,为了能在目标平台上进行本机编译,还需要在配置时选择一些必要的编译工具以及程序库,如:
make,autoconf,automake,bison,m4,flex,libz,libiconv等等。
注:
所谓本机编译(NativeCompile),是相对于交叉编译而言的。
其实这是最常见的编译方式,即在本机编译程序用于在本机或与本机兼容的硬件平台上运行。
补充:
1.autoconf,automake等软件包依赖于microperl软件包。
在编译microperl时可能会遇到找不到m4的错误,这时只须执行makehost-m4即可产生buildroot_dir/output/host/usr/bin/m4,然后再执行make,中断的编译将继续进行。
2.编译某些软件包需要pkg-configforhost(在编译平台上运行而非在目标平台上运行),执行makehost-pkgconfig可编译产生buildroot_dir/output/host/usr/bin/pkg-config
postedon2010-09-2911:
08 gouzhuang 阅读(6163) 评论(32) 编辑 收藏 引用 所属分类:
嵌入式Linux
评论
# re:
Buildroot-让交叉编译更轻松[未登录] 2010-04-2900:
47 aaron
这里uClibc0.9.28没有了,只有uClibc0.9.28.3 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-04-2907:
34 焦路
谢谢lz的文章。
原来没有用过linux。
现在正准备装一个linux系统来开发固件。
。
请问固件开发可不可以用c++。
。
lz使用什么ide?
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-04-2908:
28 gouzhuang
@aaron
> 这里uClibc0.9.28没有了,只有uClibc0.9.28.3
这里还有 http:
//www.uclibc.org/downloads/old-releases/ 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-04-2908:
33 gouzhuang
@焦路
>请问固件开发可不可以用c++
当然可以,只是c++编译出来的执行文件稍大一点,依赖更多的动态库。
>lz使用什么ide?
目前主要是一些修修补补,没有用ide。
回复 更多评论
# 求助[未登录] 2010-04-3019:
20 aaron
楼主,偶买了ndas硬盘盒(NDAS_KERNEL_PATH=/),请指教一下啊,谢谢了!
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-05-0311:
58 gouzhuang
@aaron
>关键是这个参数不知道如何设置exportNDAS_KERNEL_PATH=/
这个参数应该设置为OpenWRT的内核源码路径 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-05-0411:
42 丽可酷
原来没有用过linux 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-06-1211:
49 快播
可以尝试下 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-07-2115:
02 Michael
感谢LZ贡献 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-08-2917:
41 esmall
在下刚刚接触这方面,请问博主有没有好点的反汇编调试工具呢?
当然最好能在windows下对高清播放机进行真机调试的。
国内有没有专门讨论高清播放机编程的论坛呢?
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-09-1417:
49 bgs90
build最新版本buildroot-2010.08,请问要打patch吗?
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-09-1508:
55 gouzhuang
@bgs90
buildroot各版本之间变化比较大,我的补丁几乎可以肯定不适用于新版本。
不过我觉得2009.11版已经够用了。
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-0718:
46 hibaby
在这个环境下能帮我编译一下lftp4.0.10试试吗?
要先安装readline工具,另外,没有找到gnutls相关库,编译的时候需要--without-gnutls,还有要修改gettimeofday.c,函数重复定义了。
不过我做了上述修改后,编译的时候还是有问题,在编译FileAccess.o时,系统停住了,不知道出什么问题了。
不知道有没有时间在你的环境下试试看。
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-1914:
16 bgs90@
你好,我建立好了环境,打算修改一下transmission软件,重新编译一下,请问怎么弄啊?
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2012:
24 gouzhuang
@bgs90@
我是用下面的命令来配置transmission的:
CFLAGS='-Os-pipe-I/opt/cross/gcc442-uc0928/usr/include-mtune=mips32-mabi=32-msoft-float-static-libgcc-D_LARGEFILE_SOURCE-D_LARGEFILE64_SOURCE-D_FILE_OFFSET_BITS=64'\
PKG_CONFIG='/soft/build/buildroot-2009.11/output/host/usr/bin/pkg-config'\
LDFLAGS='-L/opt/cross/gcc442-uc0928/lib-L/opt/cross/gcc442-uc0928/usr/lib'\
./configure--host=mipsel-linux--prefix=/usr--disable-gtk--disable-nlsCPPFLAGS=-DTR_EMBEDDED
/opt/cross/gcc442-uc0928是我的工具链安装地址,/soft/build/buildroot-2009.11是buildroot目录,请用你的路径替换。
configure完成了执行make进行编译。
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2014:
16 bgs90@
你好,按照你的要求,我先下载了最新的transmission2.11
wget http:
//download.m0k.org/transmission/files/transmission-2.11.tar.bz2
解压后,到目录下,执行你的配置命令,除了buildroot目录是/home/allen/前缀外,其他配置跟你完全相同。
但是执行configure的时候报错:
是transmission版本不对还是其他问题?
$CFLAGS='-Os-pipe-I/opt/cross/gcc442-uc0928/usr/include-mtune=mips32-mabi=32-msoft-float-static-libgcc-D_LARGEFILE_SOURCE-D_LARGEFILE64_SOURCE-D_FILE_OFFSET_BITS=64'PKG_CONFIG='/home/allen/buildroot-2009.11/output/host/usr/bin/pkg-config'LDFLAGS='-L/opt/cross/gcc442-uc0928/lib-L/opt/cross/gcc442-uc0928/usr/lib'./configure--host=mipsel-linux--prefix=/usr--disable-gtk--disable-nlsCPPFLAGS=-DTR_EMBEDDED
configure:
WARNING:
Ifyouwantedtosetthe--buildtype,don'tuse--host.
Ifacrosscompilerisdetectedthencrosscompilemodewillbeused.
checkingforaBSD-compatibleinstall.../usr/bin/install-c
checkingwhetherbuildenvironmentissane...yes
checkingformipsel-linux-strip...no
checkingforstrip...strip
checkingforathread-safemkdir-p.../bin/mkdir-p
checkingforgawk...no
checkingformawk...mawk
checkingwhethermakesets$(MAKE)...yes
checkinghowtocreateaustartararchive...gnutar
checkingbuildsystemtype...i686-pc-linux-gnu
checkinghostsystemtype...mipsel-unknown-linux-gnu
checkingforstyleofincludeusedbymake...GNU
checkingformipsel-linux-gcc...no
checkingforgcc...gcc
checkingwhethertheCcompilerworks...no
configure:
error:
in`/home/allen/buildroot-2009.11/transmission/transmission-2.11':
configure:
error:
Ccompilercannotcreateexecutables
See`config.log'formoredetails. 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2014:
43 gouzhuang
@bgs90@
>>checkingformipsel-linux-gcc...no
找不到mipsel-linux-gcc。
你把/opt/cross/gcc442-uc0928/usr/bin加到你的PATH了吗?
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2017:
14 bgs90@
谢谢博主啊,加了PATH后,编译又缺少pkg-config,然后重新在工具链中吧pkg-config编译了进去,回过头来编译transmission时,又报错了,这次configure的时候是:
checkingforlibrarycontainingsocket...nonerequired
checkingforlibrarycontaininggethostbyname...nonerequired
checkingpkg-configisatleastversion0.9.0...yes
checkingforOPENSSL...no
checkingforOpenSSL.../usr
checkingforLIBCURL...configure:
error:
Packagerequirements(libcurl>=7.15.4)werenotmet:
Nopackage'libcurl'found
ConsideradjustingthePKG_CONFIG_PATHenvironmentvariableifyou
installedsoftwareinanon-standardprefix.
Alternatively,youmaysettheenvironmentvariablesLIBCURL_CFLAGS
andLIBCURL_LIBStoavoidtheneedtocallpkg-config.
Seethepkg-configmanpageformoredetails.
------------------
找不到libcurl,这个我看了一下在buildroot-2009.11/package目录下,但是不知道怎么设LIBCURL_CFLAGS,LIBCURL_LIBS变量啊?
也不知道是否后面还有这些问题,博主有没有qq/MSN请教一下啊?
我是17828柒446
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2213:
36 gouzhuang
@bgs90@
请检查buildroot-2009.11/output/host/usr/bin目录下是否有pkg-config。
如果没有执行makehost-pkgconfig编译pkg-config,然后再尝试配置transmission
另外,我原来编译的是transmission-1.92,而2.11版增加了对libevent的依赖,因此你还需要在配置buildroot时选择libevent软件包。
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2216:
19 bgs90@
pkg-config已经进去了,增加了libevent的编译,但是还是libcurl的报错啊。
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2216:
41 bgs90@
另外,我下载了1.92版本,报的是同样的错误.
我是从http:
//download.m0k.org/transmission/files/
下载的 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2315:
39 gouzhuang
@bgs90@
你确认buildroot把libcurl编进来了吗?
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2609:
31 bgs90@
@gouzhuang
你确认buildroot把libcurl编进来了吗?
---------不知道啊,我在编译buildroot的时候makemenuconfig里面找了半天没找到libcurl在哪里啊。
回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2609:
50 gouzhuang
@bgs90@
PackageSelectionforthetarget--->Networking--->libcurl 回复 更多评论
# re:
Buildroot-让交叉编译更轻松 2010-10-2616:
21 bgs90@
疯了,还是没搞定,编译transmission2.04版本(其他版本也一样),报错。
configure结果如下:
CFLAGS='-Os-pipe-I/opt/cross/gcc442-uc0928/usr/include-mtune=mips32-mabi=32-msoft-float-static-libgcc-D_LARGEFILE_SOURCE-D_LARGEFILE64_SOURCE-D_FILE_OFFSET_BITS=64'\
PKG_CONFIG='/home/allen/buildroot-2009.11/output/host/usr/bin/pkg-config'\
LDFLAGS='-L/opt/cross/gcc442-uc0928/lib-L/opt/cross/gcc442-uc0928/usr/lib'\
./configure--host=mipsel-linux--prefix=/usr--disable-gtk--disable-nlsCPPFLAGS=-DTR_EMBEDDED
..............
Configuration:
Sourcecodelocation:
.
Compiler:
g++
BuildCommand-Lineclient:
yes
BuildGTK+client:
no
OptionaldependenciesforGTK+client:
*dbussupport:
no
*gioforwatchdirsupport:
no
*libnotifyfor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Buildroot 大大 简化 交叉 编译 工具 制作
![提示](https://static.bdocx.com/images/bang_tan.gif)