一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 7896|回复: 5

BUILDROOT简单使用

[复制链接]
发表于 2017-4-3 10:57 | 显示全部楼层 |阅读模式

" x. z6 I$ `3 L8 X/ YBUILDROOT简单使用
0 @% k) ?- f& I
, U$ f, \2 X: D使用 Buildroot 可以方便的灵活的构建一个定制的用于嵌入式平台的Linux系统。
: ]2 u  U# R  J1 ~& }/ v6 @; i+ T5 X( z$ h7 a6 @/ ]' t! P
公司里有自己开发的类beaglebone的核心板。我之前调试QT程序都时需要在板子里编译程序,很花费时间,也不方便。
* P- x7 [! M9 q! r- t0 y, _1 ^  b
# Y! u* |6 X% p! O. n" ~最近学会了使用Buildroot来跨平台编译程序,感觉我之前的做法太LOW了,现在在自己的开发机器中可以模拟出ARM平台的编译环境,编译好了的程序在目标机器中可以直接运行。+ ^9 n, q0 J' }$ E$ x
* t2 _9 r' z7 W/ ]
Buildroot的用法很简单,在这里简单记录一下。
4 l7 @- y6 O% G0 k! P
5 k9 C- z5 ]/ @1 p' p下载Buildroot压缩包到本地,解压。
" K+ [& H6 o: R: M. S: W; g0 I9 N+ X在主目录里创建Config.in文件。在configs目录中有许多不同类型的文件已经创建好了,我们公司的ARM板是和beaglebone差不多,所以Config.in来自beaglebone_defconfig文件。9 H; \4 Z5 }3 A" }" {$ O/ D
执行make menuconfig调出编译配置界面,在这里可以对目标系统进行各种定制化,包括Kernel, Bootloader, 各种常用的软件包,系统配置等。 设置完成后退成。实际上UI的各种操作是对Config.in文件的操作。
' B! g; ~! p$ o3 `9 T执行make,编译完成后,在output目录下有编译好的文件。
9 J4 Z5 l" C$ `' R怎么样将自己写的程序集成到Buildroot的packages中?7 y+ g6 F% [0 W% R5 r3 S. B( a( S
6 R: ~' q( T; u3 ^
在这里我以我写的一个名为hardware_report程序作为例子,我这个程序是用qt5写的,buildroot需要通过git clone的方式下载代码编译。1 }& a& h& n* c7 _# R( U/ x

2 n  I6 {, b9 r+ k  ~修改package目录中的Config.in文件,加入) E- s$ [$ h2 m7 n
menu "Shanghai nt projects"
9 n2 h- Q; W& N9 D8 e  source "package/hardware_report/Config.in"
! X: `  y& x( U& x7 K! q" _3 j' ?endmenu
8 {" D  ~* N  B' b- ]- l1 O创将package/hardware_report目录,在其中创建Config.in和hardware_report.mk文件 Config.in文件中的内容如下:2 @5 l0 K) a1 F. V* S( @0 A
config BR2_PACKAGE_HARDWARE_REPORT$ [) {8 V$ g8 b9 u8 p
  bool "hardware_report"( c* g. u9 j$ M  J; j
  help
3 n" ?. u' [+ V' W( ?          this is comment that explains what hardware_report is.7 t+ x2 X: H3 E/ d* k; J! t
          https://git.xxxxxx.com
& b# ?) A& X: H1 g! d, N5 Thardware_report.mk文件中的内容如下:3 K! a. F& ~7 }: z! ]/ g

0 W, P2 h) T/ Y0 G################################################################################
# }5 t: B# `0 {! W9 T#
4 T6 u- l4 _' z) v: T8 I# hardware-report
. E! e  a6 k+ U" Q5 _, A6 }+ \. w#
" u: K2 p: J2 W2 v0 X5 s################################################################################
; N) A" ^  M* g5 }
5 P' U$ f% U  Z" a. UHARDWARE_REPORT_VERSION = master0 p& x7 n4 s2 d$ l
HARDWARE_REPORT_SITE = git@git.xxxxxx.com:qichunren/hardware_report.git
" B+ `3 H! X8 x* y1 E4 w" nHARDWARE_REPORT_SITE_METHOD = git
% F: v) L/ }/ B" eHARDWARE_REPORT_INSTALL_STAGING = YES
" C: Q9 ]1 e' _HARDWARE_REPORT_DEPENDENCIES = qt5base% m3 j( ]& M5 t* B& N8 v* ^

- p) x2 N4 ?# P7 N( tdefine HARDWARE_REPORT_CONFIGURE_CMDS9 T) g" `9 L/ X' L. t" D& n& W' k
        (cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)% L( i0 e+ k* Q$ B  @0 J8 ~
endef
7 U( R! q. H1 D+ e  B8 N1 A! G' `; U' o! Q' g# I
define HARDWARE_REPORT_BUILD_CMDS) `, p( R: G5 y$ s9 t0 t/ f6 j: b
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)2 F' `2 W, M8 K3 Z% E& l# ?1 s4 t
endef
, u0 x7 {' z- W: f/ T4 X5 Q2 [# z+ Y
define HARDWARE_REPORT_INSTALL_STAGING_CMDS
3 U: l% g1 d( `4 \        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
" X6 E, V; [& R  q/ L# cendef1 B* x) a7 K) D6 f
) s7 L2 x" D* K
#ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)
' I8 i3 s: o4 e#define PUDGE_GUI_INSTALL_QML9 C/ `9 |1 Q: a0 F
#$        cp -dpfr $(@D)/luna-pudge-ui $(TARGET_DIR)/usr/bin
5 t5 n( ]. l- N& r$ X#endef, f3 S) L8 x1 V% h5 z  R3 P) D
#endif
3 j$ C& p# d/ t- @! `8 o3 ~! R. g" v6 j+ j% [- {
define HARDWARE_REPORT_INSTALL_TARGET_CMDS
& h8 T" A- b! `        cp -dpfr $(@D)/bin/hardware_report $(TARGET_DIR)/usr/bin
+ e, A- A5 b+ y# v7 B  E5 Rendef
2 L( t) K; t" i" }: i3 B" e0 i        #$(QT5WEBKIT_EXAMPLES_INSTALL_QML), W, w. }7 o0 z( O( X2 _

9 t8 a, G( G) P& h+ l3 e$(eval $(generic-package))
3 \* y1 }; ~6 R/ a单独编译hardware_report项目可以执行make hardware_report, 重新编译执行 make hardware_report-dirclean 目前重新编译hardware_report需要删除hardware_report的下载包 rm dl/hardware_report-master.tar.gz% C/ d2 k5 @( r- l2 d, Q5 O
设置程序的自动启动,Buildroot制作的Linux系统自动启动很简单,直接在/etc/init.d/目录中写好启动脚本即可。首先需要开启overlay功能,然后创建overlay目录,在其中创建etc/init.d目录,在其中的init.d目录中添加S92hardware_report文件, 文件名必须以S开始,后面的数字表示启动顺序。
( }) l' t% Y6 Y' w1 ~#!/bin/sh
* h& P" {- m. _: B9 }& U" s#: p. J: _; `3 H6 p
# System-V init script for the hardware_report
$ P+ M) Y' S8 k8 l#; h1 m2 d$ h& s4 o; ]: d
3 Y' @3 u) {" k4 V' d
DESC="Shanghai nt hardware report tool"
4 t. w' i; Z4 g0 TNAME="hardware_report"
: y$ S7 T: c& c/ B8 O: ^5 w  F0 w# j
case "$1" in' w8 y% x( B* e' P0 s- y
  start)7 y/ F1 t, {6 s& `
        echo -n "Starting $DESC: $NAME". n$ a. x- S" @
        /usr/bin/hardware_report
& Z9 S+ r4 A) H" ]        echo "."
; l& n- E' V  J8 l2 e# H        ;;
, g/ G. C& i  d- R; S7 U  stop) echo -n "Stopping $DESC: $NAME"" [  U3 C3 O9 v
        killall -9 hardware_report
. Q/ g5 e  S3 G" c        echo "."
; Y2 K' _& w+ W9 b7 b' }        ;;1 Y( q- x; B  ~* }0 z& u( q5 ^6 l
  restart) echo "Restarting $DESC: $NAME"# W( K. ?) Y6 X1 b1 X) K# E' r
        $0 stop
* q1 q  O; C* j- q. Y        sleep 1! p) K, ?# R( E$ f. @% Y
        $0 start
9 Q7 W' x$ i" G        ;;3 ^. G" {6 }/ v" }
  *) echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
, M" `( t9 c) `        exit 15 Y' V6 `! n5 f! \
        ;;
5 |  ~/ R+ m. Q$ z( n* z# nesac9 l- y) _0 R% s  h1 O! U
9 }5 |+ R9 U% @! |+ I
exit 0% _- F( p" ^' O( I/ L) j; }
Buildroot文档7 H, H1 x, h' ~/ i

5 J0 T  e( T7 D: ~
 楼主| 发表于 2017-4-3 10:59 | 显示全部楼层
回复

使用道具 举报

发表于 2017-4-3 13:40 | 显示全部楼层
楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这种新大陆的?
回复

使用道具 举报

 楼主| 发表于 2017-4-4 08:56 | 显示全部楼层
zhixiaoyuhong 发表于 2017-4-3 13:40
' o6 [4 m2 Q; L! \. e: x6 z楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这 ...

6 R# x2 s  n/ S" Q1 L7 Z呵呵 随便找的,只不过见到好东西把它放上来而已" a+ p, E( r3 B" ]) K
回复

使用道具 举报

发表于 2018-5-9 11:25 | 显示全部楼层
楼主,我在buildrot官网下载了buildroot-2018.02.2,解压并运行于ubuntu16上,然后 1、按照手册编写了一个helloworld程序,包括Config.in 和mk文件。2、将软件包放在了package文档下,在package文档下添加 source "package/helloworld/Config.in"。  最后,执行make helloworld。 " v8 A; U6 U% l: t. W
执行结果:, N, m' L; v) A2 s
make[1]: *** No rule to make target 'helloworld'.  Stop." f  @$ E% ^' C1 F9 m! C- W1 r8 F
Makefile:79: recipe for target '_all' failed* K( X/ ~' @- j2 X* u
make: *** [_all] Error 2
. E* ~. B, [5 e# s8 T# c" u刚接触buildroot,一脸懵x,楼主求救啊
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-28 06:17 , Processed in 0.035169 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表