Wednesday, January 8, 2025



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 


--> Đấy nó in được hello world ra rồi đó

No comments:

Post a Comment