文档章节

x4418&ibox项目实战10-使用buildroot搭建linux文件系统

h
 hjj1987
发布于 2015/07/14 11:31
字数 1219
阅读 117
收藏 0

上一章节我们讲述了最简单的文件系统的搭建方式,在实际应用场景中,我们需要添加很多第三方文件,比如busybox,tslib,qt,vim,交叉编译工具等,如果我们手动移植里面的任何一个源码包,都会花费我们少则半个小时,多则半天,甚至一天,大大的浪费了我们宝贵的时间。buildroot可以很方便的解决这些问题。我们只需要通过menuconfig配置我们需要的功能,不需要的功能去掉,再执行make指令编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建成我们所需要的嵌入式根文件系统。使用传统的文件系统的搭建方式,对于老手至少需要两三天,对于新手,很可能两三个星期,而使用buildroot,并不在乎老手新手,只要正确的配置buildroot,所有事情交给buildroot来完成,下载,编译整个时间不超过3个小时。下面我们将结合开发板实例解说buildroot的搭建过程。
一:获取buildroot
我们可以从buildroot官网(http://buildroot.uclibc.org/download.html)获取buildroot源码包,buildroot基本上三个月更新一次,这里我们我们以实际下载的源码包buildroot-2015.05.tar.gz讲解,不同的版本命名方式仅仅是后面的日期不同而已。
二:配置buildroot
将buildroot-2015.05.tar.gz拷贝到ubuntu的samba目录,使用如下指令解压源码包:

  1. tar   xvf  buildroot-2015.05.tar.gz
复制代码


进入解压的目录buildroot-2015.05,执行如下指令配置buildroot:

  1. make  menuconfig
复制代码


配置界面如下:
 
        进入Target options目录:
 
        将Target Architecture配置为ARM(littlt endian),将Target Architecture Variant配置为cortex-A9,将Target ABI配置为EABI,将ARM instruction set配置为ARM,再退回上一界面后,进入Toolchain目录:
 
将Toolchain type配置为External toolchain,然后在Toolchain中选择交叉编译工具的版本,如ARM 2013.11,在Toolchain origin中选择Toolchain to be downloaded and installed,后面编译时,buildroot将会自动下载对应的工具链并自动安装。选中Enable MMU support,退回上一界面后,进入System configuration界面:
 
        在System hostname一栏中输入开发板的名称,如x4418,在Init system中选择BusyBox,在/dev management中选择Dynamic using mdev,即使用mdev动态加载设备节点的方式,然后 在Path to the permission tables中选择设备节点的配置表,这里我们一定要选择system/device_table_dev.txt,否则后面在dev目录下将不会生成各种设备节点。当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。Root password为配置进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root。选中Run a getty(login prompt)after boot,再进入下面的getty options选项:
 
        将TTY port配置为ttyAMA0,将baudrate配置为115200,对应x4418&ibox开发板的打印串口。再返回上一界面,将Root filesystem overlay direc…设置为board/9tripod/x4412/rootfs-overlay,这里表示该路径下的所有文件将会无条件覆盖buildroot默认的相关路径文件。配置这一步的同时,我们一并将开发板光盘中的相关文件拷贝到buildroot对应的board目录。
        继续返回上一界面,进入Filesystem images目录:
 
选中ext2/3/4 root filesystem,然后在ext2/3/4 variant中选择ext4,选中tar the root filesystem,最后保存当前的配置并退出,配置完成。用户也可以根据自己的实际需要进行配置。        
三:编译buildroot
我们只需在buildroot的根目录下执行make指令即可编译整个buildroot。值得注意的是,第一次编译肯定会弹出一些错误,这基本上是没有安装一些第三方工具造成的。我们预先安装一些必备的工具包:

  1. sudo apt-get install g++
  2. sudo apt-get install git
  3. sudo apt-get install mercurial python-iniparse tortoisehg tortoisehg-nautilus python-nautilus  
复制代码


再执行make指令编译,这时buildroot会自动下载所需要的相关源码包,自动编译安装。下载的源码包在buildroot根目录的dl目录下,如下图所示:
 
编译完成后,编译出来的各种文件会放在buildroot目录下面的output目录下,如下图所示:
 
我们需要烧写的最终的映像文件在images目录下:
 
在target目录下为对应未打包的文件系统,在调试时可借助于该目录下的文件分析原因。
四:验证buildroot
使用fastboot命令将我们新制作的文件系统烧写到开发板:

  1. fastboot  flash  system  rootfs.ext4
复制代码

© 著作权归作者所有

h
粉丝 0
博文 1
码字总数 1219
作品 0
深圳
私信 提问
从零开始构建嵌入式系统实践指南

近期花费了一段时间从零搭建一个嵌入式系统,从Uboot,Kernel,文件系统的编译到配置一步一步的实践,采坑到现在的顺理成章,经历了一个痛苦的过程,因此把搭建过程中的经验整理成了一篇详细...

程序手艺人
2018/08/29
0
0
BuildRoot FOR BeagleBone

BeagleBone 刚买没两天,里面配的是AngStorm 系统,也是基于Linux 内核的一种嵌入式发行版本,这里就不展开了,另有文章介绍。这里要说的是BuildRoot ,Why BuildRoot? 吸引我的首先是其对B...

Cedric_Sun
2013/01/26
2.8K
2
4 种用于构建嵌入式 Linux 系统的工具

了解 Yocto、Buildroot、 OpenWRT,和改造过的桌面发行版以确定哪种方式最适合你的项目。 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备。令人震惊的支持了各种芯...

06%
2018/07/06
0
0
Linux Lab 发布 v0.2-rc1,以实际行动支持国产龙芯处理器

Linux Lab 是一套用于 Linux 内核学习、开发和测试的即时实验室,可以极速搭建和使用,功能强大,用法简单! 可以用它来高效地学习处理器架构、Linux 内核、嵌入式 Linux 系统、C 语言编程、...

lzufalcon
07/23
2.5K
1
构建嵌入式 Linux 系统的4种有效工具

导读 了解 Yocto、Buildroot、 OpenWRT,和改造过的桌面发行版以确定哪种方式最适合你的项目。 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备。令人震惊的支持了...

问题终结者
2018/07/14
106
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
43分钟前
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部