一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 7638|回复: 5

BUILDROOT简单使用

[复制链接]
发表于 2017-4-3 10:57 | 显示全部楼层 |阅读模式
: t) w: P/ n; s0 E* M6 @& c$ q
BUILDROOT简单使用
/ L: @! Y* D- ?; K7 ^) M/ u0 f+ q
使用 Buildroot 可以方便的灵活的构建一个定制的用于嵌入式平台的Linux系统。
8 v" E' B1 h* u! |7 R
3 b5 K; h5 G/ {0 u公司里有自己开发的类beaglebone的核心板。我之前调试QT程序都时需要在板子里编译程序,很花费时间,也不方便。8 H. ~" [& }; V7 M& |

* @0 p! u! s* d5 z( ?最近学会了使用Buildroot来跨平台编译程序,感觉我之前的做法太LOW了,现在在自己的开发机器中可以模拟出ARM平台的编译环境,编译好了的程序在目标机器中可以直接运行。8 Z! B: P: y- j3 y! R* Z, B5 E2 s

! H' N) \7 ]9 `# n/ r( d; ]Buildroot的用法很简单,在这里简单记录一下。; u0 `( ]' v7 m9 J5 R3 F

4 V5 H6 e* g; L3 i* k下载Buildroot压缩包到本地,解压。
2 c& E, B& f8 S& p, h$ W; c在主目录里创建Config.in文件。在configs目录中有许多不同类型的文件已经创建好了,我们公司的ARM板是和beaglebone差不多,所以Config.in来自beaglebone_defconfig文件。
  q& S/ w7 ]9 S7 S执行make menuconfig调出编译配置界面,在这里可以对目标系统进行各种定制化,包括Kernel, Bootloader, 各种常用的软件包,系统配置等。 设置完成后退成。实际上UI的各种操作是对Config.in文件的操作。
: U/ U0 _; m, u3 P执行make,编译完成后,在output目录下有编译好的文件。/ r( f  T, e" H9 S
怎么样将自己写的程序集成到Buildroot的packages中?) n1 l0 T6 U9 O" x

% `3 D3 L" n5 E& k在这里我以我写的一个名为hardware_report程序作为例子,我这个程序是用qt5写的,buildroot需要通过git clone的方式下载代码编译。
3 w# \) S0 _5 j. l
: D- j" ?1 n, T  M! ]修改package目录中的Config.in文件,加入
. k0 u8 T9 E- R0 F8 g* qmenu "Shanghai nt projects"6 p( S, a4 l6 h
  source "package/hardware_report/Config.in": C- Z2 o8 s  O5 O. u  T% x
endmenu
8 e! s3 i. Y8 _( ^1 K- y* m/ h  L创将package/hardware_report目录,在其中创建Config.in和hardware_report.mk文件 Config.in文件中的内容如下:- x. o6 X1 z! o+ Z3 X
config BR2_PACKAGE_HARDWARE_REPORT4 `$ Q% H9 J5 G2 n& i' y$ f
  bool "hardware_report", P% t, d7 e! ]" H' r/ ]2 [1 O
  help9 W0 o! V  Z4 g( m  E8 \
          this is comment that explains what hardware_report is.3 Q, ^8 U& ^; y# B" Z; o4 z
          https://git.xxxxxx.com
! H2 u2 a: N2 r: ?. ^hardware_report.mk文件中的内容如下:
! |# }; Y: Q$ |" }
, Q& c0 u! I6 Q: k- @5 X################################################################################& D: b7 `  P) ^7 U- i
#- Q" }/ v. d7 b( F# I- r, b
# hardware-report6 h  ^2 w7 q4 M( u
#
8 D1 N' H# K" R% R################################################################################  q3 [  X! U3 x3 o- c

3 N) L* [( ]3 H! s5 G& R' lHARDWARE_REPORT_VERSION = master( p$ ?( b3 ^4 {
HARDWARE_REPORT_SITE = git@git.xxxxxx.com:qichunren/hardware_report.git
* F5 N8 {- U: ^  |' _* q& R7 FHARDWARE_REPORT_SITE_METHOD = git
9 e- p1 d. u6 m4 J2 Z7 dHARDWARE_REPORT_INSTALL_STAGING = YES/ |% j7 c  Q# {4 _- m6 ~1 w+ r
HARDWARE_REPORT_DEPENDENCIES = qt5base
0 v/ \0 D' W, V; t  V* L2 U  m7 `8 ^+ O4 D, @5 _1 Z9 P
define HARDWARE_REPORT_CONFIGURE_CMDS
+ |# Y/ Q, [) T- }1 c# T7 S        (cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)
" h/ u8 N8 r8 F: o. F5 {endef' _$ q( c9 G- |6 B2 f

& Y% i. s; ^+ |# `! F" edefine HARDWARE_REPORT_BUILD_CMDS
" ~3 C7 l" }, a5 t6 Q        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
' X% |$ a  p/ v$ ?' n4 S0 uendef- U* w5 f7 O- w% T+ E
4 c9 Y* F3 c+ S4 h; x/ w
define HARDWARE_REPORT_INSTALL_STAGING_CMDS) o/ A, G% f, M$ @7 D
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install' P/ n+ [& B2 B/ o" v* E
endef
: h* y4 @: o# z$ n: y, u% Q$ F" D$ i5 A5 m
#ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)
( B! X7 Y/ z- [0 K- F  b' f% _  }#define PUDGE_GUI_INSTALL_QML
; h; W( h! ]7 o. X#$        cp -dpfr $(@D)/luna-pudge-ui $(TARGET_DIR)/usr/bin
! k+ F8 [1 v# o#endef
1 l, v2 O' K8 H+ q#endif( {% k$ |4 G1 {

% Q. G" `' k$ I, R7 W. N7 tdefine HARDWARE_REPORT_INSTALL_TARGET_CMDS* N* h, X: |% G
        cp -dpfr $(@D)/bin/hardware_report $(TARGET_DIR)/usr/bin& Q* o2 t! h1 X1 Z8 Q4 `
endef2 D# v6 R* L( G
        #$(QT5WEBKIT_EXAMPLES_INSTALL_QML)) ^& D2 Q( h: D/ q: F

" j" [, u. v* f: Y$(eval $(generic-package))
  [$ Q$ U% b$ P) i单独编译hardware_report项目可以执行make hardware_report, 重新编译执行 make hardware_report-dirclean 目前重新编译hardware_report需要删除hardware_report的下载包 rm dl/hardware_report-master.tar.gz& e) \7 G& D$ n. F3 P7 {9 g5 v; t9 ?
设置程序的自动启动,Buildroot制作的Linux系统自动启动很简单,直接在/etc/init.d/目录中写好启动脚本即可。首先需要开启overlay功能,然后创建overlay目录,在其中创建etc/init.d目录,在其中的init.d目录中添加S92hardware_report文件, 文件名必须以S开始,后面的数字表示启动顺序。( W) e$ n; {" H" s1 M" C9 e
#!/bin/sh
9 E$ M. [3 e+ `& O#
: X& v  p; U! w: _. @$ k7 d% ?4 }/ |# System-V init script for the hardware_report% G; ~! E3 T, ^8 a+ ]
#& |; v: p8 F) S7 m" a

2 x) \) Z3 C/ j3 s) j" X8 i7 |" h+ _DESC="Shanghai nt hardware report tool"* [) |. J9 u0 @8 y9 O2 M) H
NAME="hardware_report"9 X+ o: b" p7 E, O/ B
2 f) {# A- f4 p' Z! t
case "$1" in
/ w/ D: U( M7 d) L, u9 c$ j: U  start)8 S# N$ ?6 W( }# C
        echo -n "Starting $DESC: $NAME"' e% R! m  v3 Z0 i
        /usr/bin/hardware_report
1 O8 s1 F  x& u        echo "."
4 H! H7 v) R' P( V3 {        ;;
9 \9 ]* B" b( K/ C  Z) T  stop) echo -n "Stopping $DESC: $NAME"
, |+ O! O9 N) e* L7 V; E! W& l( X        killall -9 hardware_report- G9 n1 |; y& y9 k4 X0 Y, g
        echo "."
! Q* i( V( Z7 i* w        ;;  L2 F( T! o+ z5 v  o4 a  ?
  restart) echo "Restarting $DESC: $NAME"7 w# N. B5 J, c8 j: h; u0 ~
        $0 stop
- x1 V6 K1 c1 f) h8 ~* {( N# q$ O        sleep 1
5 O4 R6 P  w6 z6 X4 c0 D  ]        $0 start
- M8 m* ^$ [% V* t' ]% x9 Z        ;;
! F' a+ n* Z% L9 z  *) echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
, w  c/ A, v" ?        exit 1
- y  o7 y9 W. s: K9 r6 V4 s; z        ;;
1 ?$ F  q, |3 a1 [% w4 ~6 {esac
: ?4 Q* z2 y" [4 O2 V( U
. |* W8 k1 A- r( B7 yexit 0# z! `( p" b3 @# u; L; C6 a  O) Q
Buildroot文档. q/ W! ]. Q6 h5 F
( V/ v5 b( l8 B$ y  n
 楼主| 发表于 2017-4-3 10:59 | 显示全部楼层
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2017-4-4 08:56 | 显示全部楼层
zhixiaoyuhong 发表于 2017-4-3 13:40
  R8 ]. B$ e, W1 D7 e楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这 ...
& J! q, D- O0 h- \; A" i+ y% H5 o
呵呵 随便找的,只不过见到好东西把它放上来而已
, {% J- L7 H/ n, n% a" H
回复

使用道具 举报

发表于 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。   h5 K. V8 |$ U# H4 R
执行结果:+ Q1 B5 b1 s* x+ A
make[1]: *** No rule to make target 'helloworld'.  Stop.
! S  B+ F0 i$ ?* zMakefile:79: recipe for target '_all' failed
3 ?6 V& ^$ b4 D$ Q* x5 p; d/ Jmake: *** [_all] Error 2
* t6 H% i" H4 L' C, e: A刚接触buildroot,一脸懵x,楼主求救啊
回复

使用道具 举报

本版积分规则

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

GMT+8, 2025-8-20 09:18 , Processed in 0.034146 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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