Zalo Inbox

Tạo layer đơn giản và thêm chương trình Helloworld


  • author-image

    devlinux

  • blog-tag yocto
  • blog-comment 0 Bình luận
  • blog-comment 295 Views
  • created-date 10 Feb, 2025
blog-image


Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách tạo một layer Yocto mớixây dựng ứng dụng HelloWorld trong Yocto. Đây là một bài hướng dẫn cơ bản nhưng rất hữu ích, giúp bạn làm quen với cách tổ chức và quản lý layer cũng như cách tích hợp ứng dụng vào hệ thống Yocto.

1. Tạo một Layer Yocto mới

1.1. Layer của Yocto là gì?

Layers (meta-layers) là cách Yocto Project tổ chức và quản lý các thành phần của hệ điều hành. Mỗi layer chứa các recipe, patch, và cấu hình liên quan đến một bộ chức năng hoặc một loại phần cứng cụ thể. Điều này giúp chia nhỏ hệ thống và quản lý chúng một cách hiệu quả.

  • meta-layer: Một lớp có thể chứa các cấu hình phần cứng (ví dụ: meta-raspberrypi cho Raspberry Pi, meta-beaglebone cho BeagleBone), phần mềm (ví dụ: meta-openembedded), hoặc các layer riêng của dự án bạn tạo ra.

1.2. Các bước tạo Layer

1.2.1. Thiết lập môi trường

Đầu tiên, chúng ta cần thiết lập môi trường Yocto bằng cách chạy lệnh sau trong thư mục dự án Yocto (thư mục: poky):

source oe-init-build-env

Kết quả:

~/yocto/poky$ source oe-init-build-env

### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    core-image-sato
    meta-toolchain
    meta-ide-support

You can also run generated qemu images with a command like 'runqemu qemux86'

1.2.2. Tạo layer mới

Sử dụng công cụ bitbake-layers để tạo layer mới:

~/yocto/poky/build$ bitbake-layers create-layer ../meta-devlinux
NOTE: Starting bitbake server...
Add your new layer with 'bitbake-layers add-layer ../meta-devlinux'

Điều này sẽ tạo một layer mới có tên là meta-devlinux, trong đó:

  • meta: Tiền tố cố định, không thay đổi.
  • devlinux: Tên layer

Thêm layer mới vào hệ thống

bitbake-layers add-layer ../meta-devlinux

2. Thêm chương trình Helloworld

2.1. Tạo recpipe

Đi đến thư mục meta-devlinux trong môi trường Yocto của bạn. Tạo một thư mục mới cho ứng dụng:

cd meta-devlinux
mkdir -p recipes-apps/hello-world

Tiếp theo, tạo file hello-world.bb trong recipes-apps/hello-world:

DESCRIPTION = "Simple hello-world application"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://hello-world.c"

S = "${WORKDIR}"

do_compile() {
	${CC} hello-world.c ${LDFLAGS} -o hello-world
}

do_install() {
	install -d ${D}${bindir}
	install -m 0755 hello-world ${D}${bindir}
}

2.2. Tạo mã nguồn

Tạo file hello-world.c trong thư mục ./files/hello-world.c

#include <stdio.h>

int main() {
    printf("Devlinux: hello world!\n");
    return 0;
}

2.3. Thêm chương trình vào dự án

Mở file conf/local.conf trong thư mục build/conf và thêm ứng dụng vào danh sách các ứng dụng sẽ được xây dựng:

IMAGE_INSTALL_append = " hello-world"

Thay đổi biến để MACHINE xây dựng máy ảo QEMU cho kiến trúc ARM.

MACHINE ?= "qemux86-64"

2.4. Build image

Bây giờ chúng ta có thể xây dựng image với ứng dụng hello-world:

bitbake core-image-minimal

2.5. Chạy ứng dụng

Sau khi quá trình xây dựng hoàn tất, bạn có thể bắt đầu chạy máy ảo QEMU.

runqemu qemux86-64 nographic

Đăng nhập sau đó chạy chương trình helloworld:

hello-world

Kết quả:

root@qemux86-64:~# hello-world
Devlinux: hello world!

3. Kết luận

Chúng ta đã tạo thành công một layer Yocto mới và xây dựng ứng dụng helloworld. Từ đó bạn có thể mở rộng và tùy chỉnh layer của mình để thêm nhiều ứng dụng và tính năng hơn.

author_photo
devlinux

0 Bình luận