一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 7637|回复: 5

BUILDROOT简单使用

[复制链接]
发表于 2017-4-3 10:57 | 显示全部楼层 |阅读模式
  B6 D5 j% R$ P! M( }. y
BUILDROOT简单使用
; ]$ P( r+ V* L' c% Q
" I7 `3 l8 @3 H6 n% b使用 Buildroot 可以方便的灵活的构建一个定制的用于嵌入式平台的Linux系统。
4 q+ s1 O; O, H1 M' P: O1 Z/ r# c8 [0 r- O* b0 L
公司里有自己开发的类beaglebone的核心板。我之前调试QT程序都时需要在板子里编译程序,很花费时间,也不方便。- |: R2 r1 H4 `( l5 N5 N: G/ h0 Q3 F

) X9 B; D+ w$ Q最近学会了使用Buildroot来跨平台编译程序,感觉我之前的做法太LOW了,现在在自己的开发机器中可以模拟出ARM平台的编译环境,编译好了的程序在目标机器中可以直接运行。
9 n5 _( G; I0 i! J
. D% d4 H5 G2 W; n3 p3 NBuildroot的用法很简单,在这里简单记录一下。
6 Y1 j4 r7 I; a7 B( v  h1 [- u9 ?, Q, q/ y# x7 H1 I
下载Buildroot压缩包到本地,解压。8 }5 G  L8 u/ _/ m9 B
在主目录里创建Config.in文件。在configs目录中有许多不同类型的文件已经创建好了,我们公司的ARM板是和beaglebone差不多,所以Config.in来自beaglebone_defconfig文件。- }9 K/ ]( P' h6 J
执行make menuconfig调出编译配置界面,在这里可以对目标系统进行各种定制化,包括Kernel, Bootloader, 各种常用的软件包,系统配置等。 设置完成后退成。实际上UI的各种操作是对Config.in文件的操作。7 n" H- T  C# F/ }8 K
执行make,编译完成后,在output目录下有编译好的文件。) d! `1 v8 G- w8 n0 y0 a
怎么样将自己写的程序集成到Buildroot的packages中?
5 N& }4 M. ~, Z; ?0 |. C, P, ?, I2 p$ X% W
在这里我以我写的一个名为hardware_report程序作为例子,我这个程序是用qt5写的,buildroot需要通过git clone的方式下载代码编译。0 D: Y( J# ]/ M7 S
2 Y. q% f- n( }" l" ^$ `
修改package目录中的Config.in文件,加入
6 t' K( d% F5 g: _( E5 `# omenu "Shanghai nt projects"4 s: ?+ W  j! B+ A
  source "package/hardware_report/Config.in"
! S  c; f# o: \# _# j& i3 w/ M- _endmenu
0 a; ~6 [) C! \- w: n! m: g9 F创将package/hardware_report目录,在其中创建Config.in和hardware_report.mk文件 Config.in文件中的内容如下:8 u& z( C8 f( n4 a9 d/ P
config BR2_PACKAGE_HARDWARE_REPORT6 n8 G) I, [- o) \) W7 _
  bool "hardware_report"
0 R+ M: f" c2 @$ I6 b" R4 d- p' @  V  help' E/ w9 [) w2 S# Y3 r
          this is comment that explains what hardware_report is.
, X6 a# f" B% N$ E- S9 J          https://git.xxxxxx.com
* _5 O6 I3 s. O( ^hardware_report.mk文件中的内容如下:
; @& j3 d. V$ ]: T( X# C0 g/ M' d* U, J( d6 x. L& Z7 S
################################################################################1 D7 j0 v! T0 f' Y" m
#' A/ i% [+ Q0 h
# hardware-report! a% d6 z0 @1 m6 R4 T
#
3 Q6 y% d1 Q: i7 G  K9 B" C6 C0 ]################################################################################
. A1 _7 x+ d( z3 D, }: W- o
/ g$ s! p8 }7 Q8 HHARDWARE_REPORT_VERSION = master
- {5 s4 _3 [4 Q! h) }1 BHARDWARE_REPORT_SITE = git@git.xxxxxx.com:qichunren/hardware_report.git* o6 H/ \& D# p; E! v* y2 u$ C5 k
HARDWARE_REPORT_SITE_METHOD = git" O/ }3 l$ a) t$ g% V
HARDWARE_REPORT_INSTALL_STAGING = YES
* T/ I8 G* J+ i+ ]4 G1 OHARDWARE_REPORT_DEPENDENCIES = qt5base" {% ]) [3 m, a4 @, ]
* ^' c4 r9 D/ W
define HARDWARE_REPORT_CONFIGURE_CMDS
# {; y9 B) m- F6 C4 t  v        (cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)
9 T( O9 e- D& \/ |  kendef* d7 ^" M2 m" ^- b$ U+ H2 ]

; Z* O6 m& b) i# V: mdefine HARDWARE_REPORT_BUILD_CMDS7 s# W  o( {" t4 N
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)' T0 q+ I1 J3 E  N; Y, P3 S
endef
( l& u7 O  {9 s1 r# Z) V
, [5 c0 @1 o8 Y0 h' t9 S: L" idefine HARDWARE_REPORT_INSTALL_STAGING_CMDS
, v: _  ?7 @0 S5 u" w        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
& O6 b6 z+ f2 P: ^- `8 m1 Y( Tendef! G2 A" n+ L, {( q2 v0 k! _+ o
2 q# |6 ?& N* ?. i, J  Q
#ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)7 N4 N  ~/ D4 d. w
#define PUDGE_GUI_INSTALL_QML
" R% G, w8 q* S* D#$        cp -dpfr $(@D)/luna-pudge-ui $(TARGET_DIR)/usr/bin
$ }" T1 @: F. x8 [1 a: a#endef
' a- h7 j# u9 i  {#endif6 q8 S6 x% a3 L" c8 Q- F, b
- l# z( |9 O; G" O, ]
define HARDWARE_REPORT_INSTALL_TARGET_CMDS2 v% l  p. l/ ^6 X
        cp -dpfr $(@D)/bin/hardware_report $(TARGET_DIR)/usr/bin
# \0 V: Q/ e6 ?) e+ X! c  Vendef
; b3 V/ \" T2 b$ W- v: Y' k- W: o        #$(QT5WEBKIT_EXAMPLES_INSTALL_QML)& P' D; B1 n) [# q7 w6 l

5 x" W  R1 Q3 E( U5 U4 S" x! @7 }) Q$(eval $(generic-package))& o8 X' e1 g3 W( L" r
单独编译hardware_report项目可以执行make hardware_report, 重新编译执行 make hardware_report-dirclean 目前重新编译hardware_report需要删除hardware_report的下载包 rm dl/hardware_report-master.tar.gz% C( P: z* l. ?5 U% G2 s2 ~% ?# l5 P- `
设置程序的自动启动,Buildroot制作的Linux系统自动启动很简单,直接在/etc/init.d/目录中写好启动脚本即可。首先需要开启overlay功能,然后创建overlay目录,在其中创建etc/init.d目录,在其中的init.d目录中添加S92hardware_report文件, 文件名必须以S开始,后面的数字表示启动顺序。, c4 U0 b0 ^3 E2 |; o
#!/bin/sh, v* |& i% s) m2 {% q! J8 E9 N
#
; x/ U& ^# p$ Y2 A# System-V init script for the hardware_report
1 k% H7 Q. F" J. C" H8 M#
% ^% E, I0 t8 Y  D8 K! A9 X$ k' v0 K. }
DESC="Shanghai nt hardware report tool"
1 E% Q& N0 P' i, hNAME="hardware_report"
) I4 h- U$ u7 R6 {2 v9 `9 @" s( [9 L0 ]
case "$1" in
2 m& o: {: w% E! Y4 d0 S  start)
! I& }! {- O! s- i- \        echo -n "Starting $DESC: $NAME"
' Z* r& S6 h- `! r  M& |: n9 t, X        /usr/bin/hardware_report
# }+ g+ m$ f$ E        echo "."
, E  h% _( @" y' }3 z5 h        ;;6 A& {. q* _; w8 ^
  stop) echo -n "Stopping $DESC: $NAME"
3 P* W& f0 Y' U- X) H        killall -9 hardware_report$ b& \" e+ d  A4 ?: o
        echo "."7 h9 b" v+ {7 m
        ;;8 J: ]# h$ y$ e- d$ l+ }2 E
  restart) echo "Restarting $DESC: $NAME"! }2 C7 F6 e& z. u  ^
        $0 stop
0 `4 G  @% N4 L5 R7 Y; @        sleep 1
7 i4 O% F( T% `( L5 @8 U        $0 start0 a5 C+ f( l# [& z2 u
        ;;$ E1 Q# o% i! H
  *) echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
/ K2 A! U! B% [# L- U  L, }        exit 1% E5 n; Z1 t( A; _% y9 d
        ;;
* o) r1 i7 g' w9 nesac+ K! A/ ]8 b0 T/ y

2 l9 q- L* R6 y' @5 S1 a6 E) O; _& ^7 wexit 0$ [" d8 ]) [; g5 ]
Buildroot文档
2 h! W- x& y7 g
. z! }% H& K2 q9 t( L- ~
 楼主| 发表于 2017-4-3 10:59 | 显示全部楼层
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2017-4-4 08:56 | 显示全部楼层
zhixiaoyuhong 发表于 2017-4-3 13:40
! f! i& H# s( N; X楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这 ...

9 \; Q. k! L1 E( A! k呵呵 随便找的,只不过见到好东西把它放上来而已
. L  M( z, p' S/ c
回复

使用道具 举报

发表于 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。 ( o' O: ^9 w  ~8 {6 O* \
执行结果:
" d% z4 Z) P( imake[1]: *** No rule to make target 'helloworld'.  Stop.2 g5 ?9 Z6 G- s% e/ X
Makefile:79: recipe for target '_all' failed6 A/ a: }- a( K' N  k( D3 q. h! O4 s
make: *** [_all] Error 2
! f: h9 J4 F" U6 Q9 y刚接触buildroot,一脸懵x,楼主求救啊
回复

使用道具 举报

本版积分规则

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

GMT+8, 2025-8-20 08:59 , Processed in 0.033643 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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