Nhân build YOCTO - How to add a custom app (such as helloworld) to Root File System
1. Tạo meta layer để chứa recipe example để chứa app hellowold của mình
vbuser@Ubuntu18:~/Desktop/selfstudy$ tree -L 1 .
.
├── meta-example
└── poky
2. tạo file conf cho meta-example trong folder conf
vbuser@Ubuntu18:~/Desktop/selfstudy/meta-example$ cat conf/layer.conf
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipe-*/*/*.bb \
${LAYERDIR}/recipe-*/*/*.bbappend"
BBFILE_COLLECTIONS += "meta-example"
BBFILE_PATTERN_meta-example = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-example = "6"
*** chú ý:
+ BBFILE_COLLECTIONS: theo sao đó là tên của meta của mình
+ BBFILE_PATTERN_meta-example: BBFILE_PATTERN theo vào sao là tên của meta
+ BBFILE_PRIORITY_meta-example: cái này cũng vậy, theo sao BBFILE_PRIORITY là tên của meta
+ BBFILES: nó sẽ search những file recipe ở trong pattern này, do đó khi mình đặt tên theo format recipe-<name>
3. tạo recipe-custom trong đây sẽ chứa những app của mình
vbuser@Ubuntu18:~/Desktop/selfstudy/meta-example$ tree -L 4 .
.
├── conf
│ └── layer.conf
└── recipe-custom
└── helloworld
├── files
│ └── helloworld.c
└── helloworld_0.1.bb
4. tạo file helloworld_0.1.bb
cái tên file cũng phải theo format: <tên recipe>_<version recipe>.bb
Dưới đây là nội dung của file .bb:
vbuser@Ubuntu18:~/Desktop/selfstudy/meta-example$ cat recipe-custom/helloworld/helloworld_0.1.bb
DESCRIPTION = "Simple helloworld application"
LICENSE = "CLOSED"
SRC_URI = "file://helloworld.c"
S = "${WORKDIR}"
TARGET_CC_ARCH += "${LDFLAGS}"
do_compile() {
${CC} helloworld.c -o helloworld
}
do_install() {
install -d ${D}${bindir}
install -m 0755 helloworld ${D}${bindir}
}
chú ý:
+ TARGET_CC_ARCH += "${LDFLAGS}": để bypass lỗi QA, "ERROR: helloworld-0.1-r0 do_package_qa: QA Issue: No GNU_HASH in the ELF binary /home/vbuser/Desktop/selfstudy/poky/build/tmp/work/core2-32-poky-linux/helloworld/0.1-r0/packages-split/helloworld/usr/bin/helloworld, didn't pass LDFLAGS? [ldflags]"
5. tạo file helloworld.c vào lưu nó vào thư mục "files"
vbuser@Ubuntu18:~/Desktop/selfstudy/meta-example$ cat recipe-custom/helloworld/files/helloworld.c
#include <stdio.h>
int main()
{
printf("hello world \r\n");
return 0;
}
6. Bây giờ tiến hành sử dụng bitbake để build helloworld xem được không
- Trước khi chạy bitbake thì mình cần phải qua về build trước nha.
vbuser@Ubuntu18:~/Desktop/selfstudy/poky/build$ bitbake helloworld
WARNING: Layer meta-example should set LAYERSERIES_COMPAT_meta-example in its conf/layer.conf file to list the core layer names it is compatible with.
WARNING: Layer meta-example should set LAYERSERIES_COMPAT_meta-example in its conf/layer.conf file to list the core layer names it is compatible with.
Loading cache: 100% |#############################################################################################################################| Time: 0:00:00
Loaded 1302 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.44.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "i686-poky-linux"
MACHINE = "qemux86"
DISTRO = "poky"
DISTRO_VERSION = "3.0.4"
TUNE_FEATURES = "m32 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp = "zeus:daf096e295121ea49ebf21f8070e9a6e28f5d46c"
meta-example = "master:8148d045406cbb2b66a6848ea93371808d206323"
Initialising tasks: 100% |########################################################################################################################| Time: 0:00:00
Sstate summary: Wanted 0 Found 0 Missed 0 Current 76 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Setscene tasks completed
NOTE: Tasks Summary: Attempted 476 tasks of which 476 didn't need to be rerun and all succeeded.
Summary: There were 2 WARNING messages shown.
--> Đấy, nó build thành công rồi đó
7. Bây giờ build lại image xem nó có được add vào root file system chưa nhé.!!!
vbuser@Ubuntu18:~/Desktop/selfstudy/poky/build$ runqemu qemux86 nographic
8. Chạy máy ảo lên xem đã có helloworld trong đó chưa nhé.!!!
qemux86 login: root
root@qemux86:~# helloworld
hello world
No comments:
Post a Comment