一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 8150|回复: 5

BUILDROOT简单使用

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

; q! }& G- C1 W) Z) F+ B. ^BUILDROOT简单使用# o( s3 N' ?; ^8 x- G

/ R) P8 n. I: S  U使用 Buildroot 可以方便的灵活的构建一个定制的用于嵌入式平台的Linux系统。4 |  L+ t6 I' t% e# N3 R( m

. r7 z; y/ S) V9 h  K1 A7 B公司里有自己开发的类beaglebone的核心板。我之前调试QT程序都时需要在板子里编译程序,很花费时间,也不方便。5 L9 _  y5 W* Q. P: C

* D0 C9 m" i# U9 b最近学会了使用Buildroot来跨平台编译程序,感觉我之前的做法太LOW了,现在在自己的开发机器中可以模拟出ARM平台的编译环境,编译好了的程序在目标机器中可以直接运行。. g4 K& }* W$ n

  b( v) \' J7 \8 aBuildroot的用法很简单,在这里简单记录一下。6 i; \( \0 q6 t, F- g" b% E$ f

; q: H: {# }) G5 j: K' O8 j; L! h下载Buildroot压缩包到本地,解压。
2 B4 b. |+ z# N' |! A$ S在主目录里创建Config.in文件。在configs目录中有许多不同类型的文件已经创建好了,我们公司的ARM板是和beaglebone差不多,所以Config.in来自beaglebone_defconfig文件。' |! C* O3 `2 c/ i1 }
执行make menuconfig调出编译配置界面,在这里可以对目标系统进行各种定制化,包括Kernel, Bootloader, 各种常用的软件包,系统配置等。 设置完成后退成。实际上UI的各种操作是对Config.in文件的操作。7 x0 a5 g. N, }. A1 S2 P6 J7 u
执行make,编译完成后,在output目录下有编译好的文件。
6 @0 F. [& g# K- K8 W怎么样将自己写的程序集成到Buildroot的packages中?% [  K0 i* _! |6 d/ \

. f: T# s4 i! \5 }7 I# c4 B' Q3 v在这里我以我写的一个名为hardware_report程序作为例子,我这个程序是用qt5写的,buildroot需要通过git clone的方式下载代码编译。- r' p- p& k* Y4 w( r5 d

9 @% j/ T! N* O* ]- [# V" h9 T3 `7 A修改package目录中的Config.in文件,加入
  @- a  _& `5 l! ~' X3 Emenu "Shanghai nt projects"+ P6 o+ Y( w( ~- @
  source "package/hardware_report/Config.in"" k' j- S: i9 z" B1 W# l
endmenu/ e7 k  O: r0 G4 R/ f
创将package/hardware_report目录,在其中创建Config.in和hardware_report.mk文件 Config.in文件中的内容如下:
! b3 c6 k  I' P$ A* R5 uconfig BR2_PACKAGE_HARDWARE_REPORT
2 F/ k! \# {3 o; l) l1 [- J% H  bool "hardware_report", n- a; K1 V. t2 [: f$ {
  help
, Z! V% w' b0 B! B; e          this is comment that explains what hardware_report is.  f) t5 {: L8 D$ T
          https://git.xxxxxx.com
. f3 ]8 ?; X& t0 v- ghardware_report.mk文件中的内容如下:
6 r6 R$ x. R+ J
  Z$ s( |( Q! {. y( {0 D$ e+ T################################################################################
2 S0 |2 i3 v  G; o0 W/ k5 B8 E( T, R' G#
# ?* v. l7 e+ t, Q. p5 M# hardware-report% t% ?$ h! C; I1 Q. L  d8 y
#
- U& f2 |1 Z8 @2 e+ `- Z9 _################################################################################
  w: c$ T" b5 ], `
  {6 l- N$ W+ L" e* T8 E5 kHARDWARE_REPORT_VERSION = master
; @7 S% t# w/ C$ uHARDWARE_REPORT_SITE = git@git.xxxxxx.com:qichunren/hardware_report.git
2 d" |; a# _3 v5 q& _+ }HARDWARE_REPORT_SITE_METHOD = git: m6 H2 d# [6 u3 `% I1 W- D) m
HARDWARE_REPORT_INSTALL_STAGING = YES5 N4 z4 D7 `9 Q9 [4 Q$ N/ v  f
HARDWARE_REPORT_DEPENDENCIES = qt5base% L! O! T6 E7 v2 ?4 w- y
/ G" i, O* ]. f5 y0 X
define HARDWARE_REPORT_CONFIGURE_CMDS0 h  C% }2 C' s+ d0 W
        (cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)% ^0 m* Q% H6 M5 W  [2 Z$ U* N
endef( g9 F2 ^' v6 N' S* `% _

; _" R* L9 y% D$ W, F( K9 n% Hdefine HARDWARE_REPORT_BUILD_CMDS
* F6 g  z7 |, u9 {        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
; G7 ~0 ^* q: T) _9 tendef5 p6 T$ @1 n3 s0 d+ X0 x

2 R% y7 Z: u6 ?3 Cdefine HARDWARE_REPORT_INSTALL_STAGING_CMDS
( O' |' l8 |4 G0 `! @3 F; b        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install  {6 `3 ~1 a, [3 B1 }" h! u
endef
4 t' ?8 Z1 ?9 r% F
3 T, l+ c& u; f) y( \+ u#ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)
& i& [7 U( H: h6 Y* _  ~#define PUDGE_GUI_INSTALL_QML# L$ Y1 S" _2 i3 l8 z5 {- y, S
#$        cp -dpfr $(@D)/luna-pudge-ui $(TARGET_DIR)/usr/bin
* o" G1 M7 `! U6 Q#endef. K9 D5 t# [( `" b8 A5 j
#endif0 o7 K6 D6 }! {6 H7 _

3 S0 y! i+ x) P9 x- Odefine HARDWARE_REPORT_INSTALL_TARGET_CMDS) W7 X) X8 M( b. u. T! H
        cp -dpfr $(@D)/bin/hardware_report $(TARGET_DIR)/usr/bin
! {( o! q7 h" N7 ?, _8 Yendef
( }' {# v- N7 F0 Y        #$(QT5WEBKIT_EXAMPLES_INSTALL_QML)
. @1 M+ r4 Z, L9 L8 e% u* [; d5 u+ `- p7 T. L$ F
$(eval $(generic-package))7 S' m7 W4 _; t0 N6 {2 P9 h7 Y, S
单独编译hardware_report项目可以执行make hardware_report, 重新编译执行 make hardware_report-dirclean 目前重新编译hardware_report需要删除hardware_report的下载包 rm dl/hardware_report-master.tar.gz4 Z8 Z2 w% K# Z; M% h
设置程序的自动启动,Buildroot制作的Linux系统自动启动很简单,直接在/etc/init.d/目录中写好启动脚本即可。首先需要开启overlay功能,然后创建overlay目录,在其中创建etc/init.d目录,在其中的init.d目录中添加S92hardware_report文件, 文件名必须以S开始,后面的数字表示启动顺序。& X. A! u% A2 \. }0 O7 p* ^0 J
#!/bin/sh
/ l- r0 ~1 D4 @( U  s& [#
2 x% c9 \" _2 p  A7 U7 _# System-V init script for the hardware_report
% Q0 N' E: E9 P0 T#
2 @  V7 n9 Y- q. O3 D' k, n+ t7 E* n( I, q
DESC="Shanghai nt hardware report tool"' M4 ~' w; x1 T+ t5 w' t" K$ i
NAME="hardware_report"
; P8 n6 h, a) u! V) [* q! R- L, l0 D' Z, `' v, Y+ _  S( [% W
case "$1" in1 N. L! ~) U2 S# T' u
  start)0 S0 s- _: h# v. Y7 d
        echo -n "Starting $DESC: $NAME"
; W( x! h+ }% u+ V, l) b        /usr/bin/hardware_report5 [! \* z* w; t2 _9 w
        echo "."
; i4 a3 j: r* F. d9 L$ V- F$ f        ;;
% I# K7 H" p% h  stop) echo -n "Stopping $DESC: $NAME". d- D2 V3 t: f& Y8 E% j' E
        killall -9 hardware_report; ?8 {! T( ^3 C! ^$ Y
        echo "."- s* g3 _3 U6 H/ b# A+ i+ g
        ;;
' }' G7 Q. i4 Z. j) u! r  restart) echo "Restarting $DESC: $NAME"
, U% {2 r; y8 c$ E- v        $0 stop
& h% @) K5 i' [& M2 k( M+ C4 V- n        sleep 1, D, Q, P9 z6 B8 k
        $0 start: u9 X9 b) [+ t; T  S' }6 G
        ;;5 s7 y- M6 p0 V) u+ f' p
  *) echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
% Y; Y! ~) k8 r: Q$ c        exit 1) M% c4 i, t5 I4 G3 Y! {
        ;;
+ J/ o4 c& p& o/ w3 X6 Q4 `. iesac
' p/ z" a# J: Q1 R8 N  L* T6 B3 t5 \# L/ Y& F6 Z1 C
exit 0
' V1 T% O5 Z. I1 U( ^. SBuildroot文档* y9 \' ?; C/ j; h' `

/ h6 P9 K* R: e4 O  n4 d% e
 楼主| 发表于 2017-4-3 10:59 | 显示全部楼层
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2017-4-4 08:56 | 显示全部楼层
zhixiaoyuhong 发表于 2017-4-3 13:401 Z  J- \/ i; w. O) T# |
楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这 ...

) f6 t! H8 ?. M6 ~, Y& A2 X9 G呵呵 随便找的,只不过见到好东西把它放上来而已9 Y; b9 _+ V9 z; E
回复

使用道具 举报

发表于 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。
: [6 ^% r$ e% c0 L4 e执行结果:4 t* W& V" k3 M, s7 ~
make[1]: *** No rule to make target 'helloworld'.  Stop.' I+ J9 @2 h' X- z. ]& f/ \; m
Makefile:79: recipe for target '_all' failed
2 f% R; b4 ?! P; i  v2 R) [make: *** [_all] Error 22 }7 o1 K7 b! Z8 v8 V
刚接触buildroot,一脸懵x,楼主求救啊
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-1-12 00:44 , Processed in 0.037867 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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