一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 6056|回复: 5
收起左侧

BUILDROOT简单使用

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

: X; _) U& ~( o$ p. ]BUILDROOT简单使用& h1 N! U; a. t3 a' V3 t) p2 b. P3 D
9 I7 S3 }- F1 ]
使用 Buildroot 可以方便的灵活的构建一个定制的用于嵌入式平台的Linux系统。
* R+ s4 a0 P7 T$ Z5 ?1 Q
( O- S* x$ G* C! k1 J/ }公司里有自己开发的类beaglebone的核心板。我之前调试QT程序都时需要在板子里编译程序,很花费时间,也不方便。
! O1 M+ \, Z' `* Z7 G& {5 x0 C8 R8 n/ V
最近学会了使用Buildroot来跨平台编译程序,感觉我之前的做法太LOW了,现在在自己的开发机器中可以模拟出ARM平台的编译环境,编译好了的程序在目标机器中可以直接运行。
- J9 r* M+ E" P& J. c5 P3 T# s$ p5 z( J- B( X. a0 A. h' y
Buildroot的用法很简单,在这里简单记录一下。  |7 e8 p8 B: Y) N! m6 [& m6 U
# j# N' W. E$ ^1 R  I+ m( k& o6 u# P
下载Buildroot压缩包到本地,解压。! ^9 |+ G: r6 _" J6 N$ w
在主目录里创建Config.in文件。在configs目录中有许多不同类型的文件已经创建好了,我们公司的ARM板是和beaglebone差不多,所以Config.in来自beaglebone_defconfig文件。
% ]0 t* a: D5 {; k8 I执行make menuconfig调出编译配置界面,在这里可以对目标系统进行各种定制化,包括Kernel, Bootloader, 各种常用的软件包,系统配置等。 设置完成后退成。实际上UI的各种操作是对Config.in文件的操作。
( L' j# M- b' d9 R执行make,编译完成后,在output目录下有编译好的文件。( k: X/ a4 X0 _  @: ]5 Q% N8 |
怎么样将自己写的程序集成到Buildroot的packages中?8 h, p) o( H) \

8 N+ t- o* R4 W) Z6 L* x% [在这里我以我写的一个名为hardware_report程序作为例子,我这个程序是用qt5写的,buildroot需要通过git clone的方式下载代码编译。3 f9 k/ l: B0 v* N' k& R: M
$ l! M6 C! r+ g9 J: g) R
修改package目录中的Config.in文件,加入5 J3 q8 h0 m6 q9 [; v, M
menu "Shanghai nt projects"9 T5 W8 E% Y+ ]' Q. H4 C1 a) B8 g
  source "package/hardware_report/Config.in"
, m" _. `7 x3 q% hendmenu
* [( u0 M& A+ \; n2 `& x8 I. ~创将package/hardware_report目录,在其中创建Config.in和hardware_report.mk文件 Config.in文件中的内容如下:
. D; p$ M8 n: s1 ?1 ^config BR2_PACKAGE_HARDWARE_REPORT7 c$ _, ]1 q# p
  bool "hardware_report"
% A7 A2 o; Q3 F* E  help
/ s  E+ a2 d& ]: v/ |( `          this is comment that explains what hardware_report is.% y8 W* l' y/ n0 U" R2 K* {, S! r
          https://git.xxxxxx.com! v; A# g9 s9 w0 P5 d
hardware_report.mk文件中的内容如下:' J* _  Q2 H5 A1 l
0 ~* T  T. s1 [' u; U
################################################################################& j) i: W- j( |* s2 Q
#
* N7 X' X! O7 M9 e# A# hardware-report
* l) t! q9 N. u5 A: J# \# C#
( K* |! |  x( U8 V: ^" P$ R################################################################################7 V+ ]/ x2 b5 |( x0 u8 g) B% ^
6 u- `' i( u& g; I( P0 x
HARDWARE_REPORT_VERSION = master
# Q: F. G; W0 uHARDWARE_REPORT_SITE = git@git.xxxxxx.com:qichunren/hardware_report.git
  h$ p$ J, O8 CHARDWARE_REPORT_SITE_METHOD = git
& U  d: g5 G. u% VHARDWARE_REPORT_INSTALL_STAGING = YES# E8 s/ n( b2 c9 [( ?3 M
HARDWARE_REPORT_DEPENDENCIES = qt5base6 j* a% h0 j' _# T( I" {
( D, E. W  Z5 {2 p3 i$ p' Q
define HARDWARE_REPORT_CONFIGURE_CMDS  F0 T2 H& `' f8 `+ `
        (cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)$ u: V$ W, s& M: K' ^
endef# H7 ^- [1 d! |* j
8 O( W# M! ~  Z7 b) i3 ?: a
define HARDWARE_REPORT_BUILD_CMDS- b. a! T6 K! i7 O( ?* L
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)% p) E* f. K- ^, b+ V3 Y
endef6 ^: @. f" z' \' x4 ^8 ~3 e9 M
! k# }( I# y5 h% j* e
define HARDWARE_REPORT_INSTALL_STAGING_CMDS6 r8 y! x# f7 a6 ^3 {
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install- {! e) B# a5 F$ B4 H
endef
9 q/ v, U+ D1 u, N
. O' n- W" S' R$ D: O, V" T, E2 F#ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)) Q0 u; v. O) Q9 K! d
#define PUDGE_GUI_INSTALL_QML2 z: D$ o" {3 z2 h) |, K7 L' B
#$        cp -dpfr $(@D)/luna-pudge-ui $(TARGET_DIR)/usr/bin
) d0 j. A! |. y1 c9 R1 t#endef& _$ E# b2 f  w: D7 N, f
#endif
' D- @7 }9 R$ F1 Q% O
7 r  L  D) C4 |# idefine HARDWARE_REPORT_INSTALL_TARGET_CMDS
. x1 K) Z) A3 |$ J0 t        cp -dpfr $(@D)/bin/hardware_report $(TARGET_DIR)/usr/bin
2 [. M4 x; n0 r# O) ^, ^# Hendef
  x% s$ k+ R, p% P. E  J8 a        #$(QT5WEBKIT_EXAMPLES_INSTALL_QML)
' @6 T0 j, z4 K) V5 C/ l5 l1 B& x( Q8 q$ i: m: |) [# T$ J
$(eval $(generic-package))
0 L, @. m8 G$ P, h0 z单独编译hardware_report项目可以执行make hardware_report, 重新编译执行 make hardware_report-dirclean 目前重新编译hardware_report需要删除hardware_report的下载包 rm dl/hardware_report-master.tar.gz
; O- `" G; m2 n+ {. ~- I设置程序的自动启动,Buildroot制作的Linux系统自动启动很简单,直接在/etc/init.d/目录中写好启动脚本即可。首先需要开启overlay功能,然后创建overlay目录,在其中创建etc/init.d目录,在其中的init.d目录中添加S92hardware_report文件, 文件名必须以S开始,后面的数字表示启动顺序。5 j! |; R7 ~. Y7 c* E: H3 i- S
#!/bin/sh. ]! o5 T5 t9 P, [6 ~
#
( a" {/ U# `4 D# m: \# System-V init script for the hardware_report% D6 X7 |. T4 f# P$ o! y1 ~! X/ |
#: T* H2 r9 S9 G. e% G$ u
# ^& }- i) n3 l1 F4 p
DESC="Shanghai nt hardware report tool"
$ m+ _7 V/ Z+ F8 B3 oNAME="hardware_report"* L* n2 h: i& A) y5 ~- X
: s, c1 C) _+ d* W0 x
case "$1" in# Y8 N- @- ~6 V9 j# Y
  start)" t( q; u5 c4 i9 _, B  O( O6 f
        echo -n "Starting $DESC: $NAME"
2 |3 b  Q- y9 o& R" b" c0 M* I. R        /usr/bin/hardware_report
- f7 p  U, X& U        echo "."; k5 a. D' k; j1 Z% Z# T
        ;;
2 g2 Z2 V' t# {1 t- V$ y  stop) echo -n "Stopping $DESC: $NAME"% s) J8 G0 o+ \( I4 k! F/ _' n8 X
        killall -9 hardware_report: n/ k. M, L% z( M. ^
        echo "."
" [# P, y" Y$ x0 X! j        ;;
! B4 A: S7 T3 K) u4 W  restart) echo "Restarting $DESC: $NAME"  N9 P# l( R9 n9 S. w( A; T' s; J
        $0 stop4 s; V- [4 y5 P
        sleep 1/ |; z) D5 V* t, d9 V0 D
        $0 start
( {6 w; q8 i; r1 H        ;;
' y" ^- N! E( [3 u" j4 d; ~3 ^/ I  *) echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&21 P( g6 d6 s& T! e( Y& s
        exit 1
. T: p5 Q5 l* F- |( N" X% O        ;;* {2 Z# t9 ]! D& v; |4 [0 E" A
esac/ f4 Y+ L) f& {' U; e
3 [9 v$ m4 c% f
exit 0; j$ B' {/ L- U( F/ g5 X
Buildroot文档
( w6 v+ ]: y* g+ Y
8 i: U0 y, p$ @
 楼主| 发表于 2017-4-3 10:59 | 显示全部楼层
发表于 2017-4-3 13:40 | 显示全部楼层
楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这种新大陆的?
 楼主| 发表于 2017-4-4 08:56 | 显示全部楼层
zhixiaoyuhong 发表于 2017-4-3 13:40" t3 t9 o  \7 V( I
楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这 ...

1 N+ i' _0 S( w$ j/ l% ]呵呵 随便找的,只不过见到好东西把它放上来而已
0 p2 z& y& c# r) d0 i
发表于 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。 1 g2 b/ l& s% a' ~# e
执行结果:$ z/ j% Q3 V9 n. B: U* h
make[1]: *** No rule to make target 'helloworld'.  Stop.
, n" W  w9 N: sMakefile:79: recipe for target '_all' failed1 @: {1 P$ R; G( H, n+ @: A
make: *** [_all] Error 2& v' S: K9 K& s. I# R: N
刚接触buildroot,一脸懵x,楼主求救啊

本版积分规则

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

GMT+8, 2024-4-20 21:51 , Processed in 0.049891 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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