一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 8396|回复: 5

BUILDROOT简单使用

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

/ W8 q! w( y) _! w9 ZBUILDROOT简单使用
/ E$ ]4 T$ Z% G( A# i  E
0 x1 M- Q* o; \& r& T/ B使用 Buildroot 可以方便的灵活的构建一个定制的用于嵌入式平台的Linux系统。# S/ [! X+ ]  B5 G. d  G

% i, ^/ |/ p/ A" W* N公司里有自己开发的类beaglebone的核心板。我之前调试QT程序都时需要在板子里编译程序,很花费时间,也不方便。$ K" ~! Q  v" I& d6 d
  N, }. o* B% q1 ~6 x0 k+ Q; c# Z
最近学会了使用Buildroot来跨平台编译程序,感觉我之前的做法太LOW了,现在在自己的开发机器中可以模拟出ARM平台的编译环境,编译好了的程序在目标机器中可以直接运行。' @# m% O: ~4 d9 b+ u2 N5 R, O: h

+ n4 B0 ]5 }* C; i# V0 O1 o9 |- wBuildroot的用法很简单,在这里简单记录一下。# z* h0 K$ P: j) r% ^

6 T6 @/ z4 ?3 h0 Y下载Buildroot压缩包到本地,解压。
3 {% v! x, q/ Y& d; r) g- r4 w在主目录里创建Config.in文件。在configs目录中有许多不同类型的文件已经创建好了,我们公司的ARM板是和beaglebone差不多,所以Config.in来自beaglebone_defconfig文件。) v) U" }* m6 y
执行make menuconfig调出编译配置界面,在这里可以对目标系统进行各种定制化,包括Kernel, Bootloader, 各种常用的软件包,系统配置等。 设置完成后退成。实际上UI的各种操作是对Config.in文件的操作。4 K0 i2 Z, X) q9 G2 j
执行make,编译完成后,在output目录下有编译好的文件。, I5 X/ [6 |" p7 d' ^, }
怎么样将自己写的程序集成到Buildroot的packages中?3 j3 j% t: O1 D+ H$ t8 C: F- x
% _4 T! g4 E- W- K9 t
在这里我以我写的一个名为hardware_report程序作为例子,我这个程序是用qt5写的,buildroot需要通过git clone的方式下载代码编译。
; \0 F' ?4 W& k7 @* C& J! G7 y3 j! G
修改package目录中的Config.in文件,加入4 S# b; p8 V, q
menu "Shanghai nt projects"
4 [; d; l" w) P# i* V' Z. J  source "package/hardware_report/Config.in"
6 |5 ^# Q: _9 u2 ^endmenu- q! a6 C; o8 ]
创将package/hardware_report目录,在其中创建Config.in和hardware_report.mk文件 Config.in文件中的内容如下:
- A' U5 {3 M. k% yconfig BR2_PACKAGE_HARDWARE_REPORT% l; [  a+ G& ~( T5 p- o
  bool "hardware_report"  X2 I+ i& ?" L3 X$ G% Z
  help
* P! K* z( r1 Z          this is comment that explains what hardware_report is.# E( y: ?, W7 |0 A& P9 r
          https://git.xxxxxx.com
9 ?# j7 V3 @& a* I. }7 Ahardware_report.mk文件中的内容如下:. ]1 \( ~7 Z1 O
  y; A" g: d; A, C0 m% c5 K
################################################################################
9 _; M) L1 }0 W1 w2 n0 \. |#
. v+ {( D4 v" n( l4 }3 K/ i# hardware-report
% h8 P6 R# N. q6 L) U# \, x; e#
6 I0 g4 b6 Q( E+ }################################################################################' m) {9 _- X2 w
  d; W; G0 H/ H7 P& u
HARDWARE_REPORT_VERSION = master
& g2 z% h; R' g' t# |* r0 M6 G' L/ w5 _HARDWARE_REPORT_SITE = git@git.xxxxxx.com:qichunren/hardware_report.git0 b6 g2 H3 L9 A% m6 ^" a3 j
HARDWARE_REPORT_SITE_METHOD = git% z$ z1 t' X8 x1 e0 c
HARDWARE_REPORT_INSTALL_STAGING = YES+ k. q( _# `& D9 y2 Y0 @! M  X
HARDWARE_REPORT_DEPENDENCIES = qt5base
* k) O; V) u& m' Y* _4 _
7 }8 p9 y( k1 x1 ~6 Odefine HARDWARE_REPORT_CONFIGURE_CMDS
7 R3 y1 S$ i( J/ f: ~        (cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)
) t* Y: l0 E' }0 q% L, Zendef
! ^8 y7 m' X9 S' N5 x3 v9 g6 ]3 q4 o
define HARDWARE_REPORT_BUILD_CMDS
. o9 S0 n3 \- I. y9 `0 @! B        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
( S+ m# x. g- Q( h. I  iendef
) _% T( [! w7 T+ C
. n6 N. ^% y2 |define HARDWARE_REPORT_INSTALL_STAGING_CMDS
) u/ B; h* b5 d4 L9 o2 v) g6 T& q        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install; V8 U  q- N7 c" [
endef
7 `4 x5 [' @7 }1 D& O8 |% u+ y- i# R" D. J
#ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)
: O# {/ ?8 O2 Y  U#define PUDGE_GUI_INSTALL_QML( Z$ H4 h6 r4 w" k+ a: W3 u
#$        cp -dpfr $(@D)/luna-pudge-ui $(TARGET_DIR)/usr/bin( Z6 ~# l, `8 _& T# B
#endef
; N) Y- o; r* G#endif" e% f2 [* R+ o/ E

3 ]( l8 B: F' J% X0 b/ P, fdefine HARDWARE_REPORT_INSTALL_TARGET_CMDS
: ~% Z  O2 O* i- T        cp -dpfr $(@D)/bin/hardware_report $(TARGET_DIR)/usr/bin
0 @6 o# v; o9 ?& Z! y0 l1 eendef
5 I" L- ]/ P: w, H! F        #$(QT5WEBKIT_EXAMPLES_INSTALL_QML)
/ [' q- @2 v: w: {
! V9 r* C, D: [7 H/ X4 D$(eval $(generic-package))) U. S! X4 Y1 n5 T5 k
单独编译hardware_report项目可以执行make hardware_report, 重新编译执行 make hardware_report-dirclean 目前重新编译hardware_report需要删除hardware_report的下载包 rm dl/hardware_report-master.tar.gz
% V  s  K; m! A. T设置程序的自动启动,Buildroot制作的Linux系统自动启动很简单,直接在/etc/init.d/目录中写好启动脚本即可。首先需要开启overlay功能,然后创建overlay目录,在其中创建etc/init.d目录,在其中的init.d目录中添加S92hardware_report文件, 文件名必须以S开始,后面的数字表示启动顺序。
, J$ x8 e! z: S7 \0 C#!/bin/sh
" T& s6 J: B9 c, O#+ x8 v  w0 g' F) [3 R" s
# System-V init script for the hardware_report- P$ p- o9 ?2 C( {7 v7 \5 i  T
#
. Y2 Z' r  F4 O2 P7 c# [, x
7 f  X; s! K8 K, @/ a0 BDESC="Shanghai nt hardware report tool"6 ~1 c" A5 \+ e
NAME="hardware_report"# K- J. N% B. v) d

$ v5 M: F, u1 t1 D  Lcase "$1" in
( W6 L+ A- ^: X7 e# q  start)/ O% p& Y$ I5 S; O
        echo -n "Starting $DESC: $NAME"
  \5 u! ~9 b' G. X. d        /usr/bin/hardware_report
- d8 ~6 K" f0 u7 d6 c0 y, [# M        echo "."0 y& l2 A; `( e! T/ D5 q) N0 N4 [9 Z2 ]
        ;;+ `3 W* Q: l/ `+ I: u
  stop) echo -n "Stopping $DESC: $NAME"9 t, s! o: ~5 J2 i1 Z9 c- Z
        killall -9 hardware_report
9 f& Y) c- B7 s% V/ A$ s        echo "."  A! H% E' ]/ F7 E
        ;;
1 N$ X3 c2 T& `/ J# d$ M( N  restart) echo "Restarting $DESC: $NAME"1 P" G. Y* ]2 K4 K% D
        $0 stop
" v" D: d' `" {1 S) w        sleep 1; ]5 h8 {6 O  Y
        $0 start
' d$ c8 ~. R' ^( P  C8 {" ^, e* u        ;;
7 m! b3 D& V4 Y  *) echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
/ U, D" p/ X  \5 U; O7 g6 G5 T        exit 1; T: {& \+ }) {' s
        ;;% F9 h# E+ w( `# [
esac
) |" b% C: N: s' p
9 w- F7 e0 X% T6 y! {5 f  \- v# Lexit 0
4 V! d; m  H3 J. v8 GBuildroot文档. g/ d) U3 V0 H1 B: ]- m0 R

* a4 P7 y' X* q0 {  o
 楼主| 发表于 2017-4-3 10:59 | 显示全部楼层
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2017-4-4 08:56 | 显示全部楼层
zhixiaoyuhong 发表于 2017-4-3 13:40) V7 W  E/ L* ^! P8 V  O7 s
楼主,这些资料你都是咋找的?比如说之前不知道有这个方式,一直用那种低效的方式来搞,楼主怎么突然发现这 ...

1 ?. w9 K4 i% @呵呵 随便找的,只不过见到好东西把它放上来而已
+ u6 x4 G3 V" z$ e, v
回复

使用道具 举报

发表于 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。 - _4 V; Y, B* f
执行结果:
, w2 ?( G" ]4 ymake[1]: *** No rule to make target 'helloworld'.  Stop.
( o- D6 J' Y# O1 r5 OMakefile:79: recipe for target '_all' failed
* r" R& x1 O4 Emake: *** [_all] Error 27 T/ j1 z# T1 C
刚接触buildroot,一脸懵x,楼主求救啊
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-4-17 16:28 , Processed in 0.035656 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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