使用buildroot制作交叉编译工具

buildroot简介

buildroot就是一个自动化生成工具,其可以辅助嵌入式开发人员生成boot、kernel、rootfs、cross compiler等。让嵌入式开发变得更加的简单,让开发人员的精力集中在攻关方面,而不需要被交叉编译器的制作或者根文件系统的制作,甚至于开发库的移植方面所浪费不必要的时间。好的,说那么多,咱们还是来看下buildroot吧。

buildroot的官网:https://buildroot.org/
buildroot的下载路径:https://buildroot.org/downloads/

buildroot使用和配置

buildroot的配置方法和Linux内核的配置方法是一样的,都是采用make menuconfig或者make xconfig的方式在配置,如下:

root@ubuntu:/work/a9_board/tiny4412/buildroot-2015.08#make menuconfig
这里写图片描述

在配置菜单各个选项的功能/意义:

Target options : 目标(也就是制作出来的工具给什么平台使用)
Build options :配置(也就是buildroot一些配置项,比如下载的文件放在哪里,编译生成的文件放在哪里等)
Toolchain:编译器(可以配置生成交叉编译器或者引用已有的交叉编译),如果是配置生成交叉编译器则按照Target options生成对应的编译器。
System configuration:系统配置(其实就是是否配置制作根文件系统)
Kernel:存放Linux内核和Linux内核的配置
Target packages:目标包,简单来说就是里面可以配置生成根文件系统的busybox和其他的一些第三方库,比如:是否支持qt、mplayer等。
其他的不在一一说明

制作交叉编译器

制作交叉编译器需要去配置目标,首先需要配置此编译器在那个平台使用,那么咱们的目标是制作cortex-A9的交叉编译器。

目标配置

这里写图片描述

toolchain配置

这里写图片描述

那么接下来就可以进行编译,在编译的过程中,会下载配置上的源码到dl目录下,然后解压到output/build/进行配置和编译。
最终生成的文件存在在output目录下,而output下有四个需要咱们去区分的目录:

build目录:所有源码的编译路径
host目录:存放交叉编译器,如果指定是外部编译器,会把外部编译器拷贝到此处。buildroot编译生成的也是存放在此。
images目录:存放根文件系统的打包好的各个格式,比如:ext,yaffs等…..
target目录:编译出来的根文件系统存放的路径(也就是待会生成根文件系统的路径,用nfs挂载即可)

编译生成的交叉编译

root@ubuntu:/work/a9_board/tiny4412/buildroot-2015.08/output/host/usr/bin# ls

arm-buildroot-linux-uclibcgnueabi-ar arm-linux-g++ ldconfig
arm-buildroot-linux-uclibcgnueabi-as arm-linux-gcc ldd
arm-buildroot-linux-uclibcgnueabi-c++ arm-linux-gcc-4.9.3 libtool
arm-buildroot-linux-uclibcgnueabi-cc arm-linux-gcc-ar libtoolize
arm-buildroot-linux-uclibcgnueabi-c++filt arm-linux-gcc-nm lrelease
arm-buildroot-linux-uclibcgnueabi-cpp arm-linux-gcc-ranlib m4
arm-buildroot-linux-uclibcgnueabi-elfedit arm-linux-gcov makedevs
arm-buildroot-linux-uclibcgnueabi-g++ arm-linux-gdb mkpasswd
arm-buildroot-linux-uclibcgnueabi-gcc arm-linux-gprof moc
arm-buildroot-linux-uclibcgnueabi-gcc-4.9.3 arm-linux-ld ncurses5-config
arm-buildroot-linux-uclibcgnueabi-gcc-ar arm-linux-ld.bfd pkgconf
arm-buildroot-linux-uclibcgnueabi-gcc-nm arm-linux-ldconfig pkg-config
arm-buildroot-linux-uclibcgnueabi-gcc-ranlib arm-linux-ldd pydoc
arm-buildroot-linux-uclibcgnueabi-gcov arm-linux-nm python
arm-buildroot-linux-uclibcgnueabi-gdb arm-linux-objcopy python2
arm-buildroot-linux-uclibcgnueabi-gprof arm-linux-objdump python2.7
arm-buildroot-linux-uclibcgnueabi-ld arm-linux-ranlib python2.7-config
arm-buildroot-linux-uclibcgnueabi-ld.bfd arm-linux-readelf python2-config
arm-buildroot-linux-uclibcgnueabi-ldconfig arm-linux-size python-config
arm-buildroot-linux-uclibcgnueabi-ldd arm-linux-strings qmake
arm-buildroot-linux-uclibcgnueabi-nm arm-linux-strip qt.conf
arm-buildroot-linux-uclibcgnueabi-objcopy autoconf rcc
arm-buildroot-linux-uclibcgnueabi-objdump autoheader reset
arm-buildroot-linux-uclibcgnueabi-ranlib autom4te smtpd.py
arm-buildroot-linux-uclibcgnueabi-readelf automake tabs
arm-buildroot-linux-uclibcgnueabi-size automake-1.15 tic
arm-buildroot-linux-uclibcgnueabi-strings autoreconf toe
arm-buildroot-linux-uclibcgnueabi-strip autoscan tput
arm-linux-addr2line autoupdate tset
arm-linux-ar captoinfo uic
arm-linux-as clear xmlwf
arm-linux-c++ faked

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章