Zalo Inbox

Build SDK bằng Yocto


  • author-image

    devlinux

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


Trong chuỗi bài viết về Yocto, hôm nay chúng ta sẽ tìm hiểu cách xây dựng và sử dụng SDK (Software Development Kit) - một công cụ thiết yếu cho việc phát triển ứng dụng trên hệ thống nhúng.

1. Tổng quan về SDK trong Yocto

SDK (Software Development Kit) là bộ công cụ toàn diện giúp các nhà phát triển xây dựng, kiểm thử và triển khai ứng dụng cho hệ thống nhúng. Một SDK tiêu chuẩn trong Yocto bao gồm các thành phần chính:

  • Cross-development toolchain: Bộ công cụ biên dịch chéo cho phép bạn phát triển code trên máy host (như PC) nhưng tạo ra các file thực thi cho máy target (như board nhúng).
  • Thư viện và header files: Các thành phần cần thiết để phát triển ứng dụng
  • Scripts thiết lập môi trường: Giúp cấu hình môi trường phát triển một cách nhanh chóng.

2. Các phương pháp xây dựng SDK

2.1. Tích hợp SDK trực tiếp vào image

Cách đơn giản nhất để có SDK là tích hợp nó trực tiếp vào image của hệ thống. Để làm điều này, chúng ta thêm cấu hình vào file build/conf/local.conf:

EXTRA_IMAGE_FEATURES ?= "tools_sdk"

Sau đó, tiến hành build lại image:

bitbake core-image-minimal

Với cách này, các công cụ phát triển như gcc, make và các thư viện phát triển sẽ được cài đặt trực tiếp trên hệ thống target, cho phép bạn phát triển ứng dụng ngay trên thiết bị.

2.2. Tạo file cài đặt SDK độc lập

Phương pháp phổ biến hơn là tạo một SDK độc lập có thể cài đặt trên máy host. Yocto hỗ trợ hai loại SDK:

2.2.1. Standard SDK

bitbake core-image-minimal -c populate_sdk

Sau khi quá trình build hoàn tất, file cài đặt SDK sẽ được lưu trong thư mục build/tmp/deploy/sdk/:

~/yocto/poky/build$ cd tmp/deploy/sdk/
~/yocto/poky/build/tmp/deploy/sdk$ ls
poky-glibc-x86_64-core-image-minimal-arm1176jzfshf-vfp-raspberrypi0-wifi-toolchain-3.1.33.host.manifest
poky-glibc-x86_64-core-image-minimal-arm1176jzfshf-vfp-raspberrypi0-wifi-toolchain-3.1.33.sh
poky-glibc-x86_64-core-image-minimal-arm1176jzfshf-vfp-raspberrypi0-wifi-toolchain-3.1.33.target.manifest
poky-glibc-x86_64-core-image-minimal-arm1176jzfshf-vfp-raspberrypi0-wifi-toolchain-3.1.33.testdata.json

2.2.2. Extensible SDK (eSDK)

bitbake core-image-minimal -c populate_sdk_ext

eSDK là phiên bản mở rộng, bao gồm tất cả các thành phần của SDK tiêu chuẩn và thêm các công cụ devtool mạnh mẽ giúp đơn giản hóa quy trình phát triển.

3. Cài đặt và sử dụng SDK

3.1. Cài đặt SDK

Để cài đặt SDK trên máy host, chạy script cài đặt .sh:

~/yocto/poky/build/tmp/deploy/sdk$ ./poky-glibc-x86_64-core-image-minimal-arm1176jzfshf-vfp-raspberrypi0-wifi-toolchain-3.1.33.sh

Bạn có thể chỉ định đường dẫn tùy chỉnh hoặc sử dụng đường dẫn mặc định là /opt/poky/3.1.33.

Sau khi cài đặt, bạn sẽ thấy cấu trúc thư mục như sau:

/opt/poky/3.1.33$ ls -l
total 36
-rw-r--r-- 1 root root  4087 Thg 4   8 17:37 environment-setup-arm1176jzfshf-vfp-poky-linux-gnueabi
-rw-r--r-- 1 root root 22604 Thg 4   8 17:37 site-config-arm1176jzfshf-vfp-poky-linux-gnueabi
drwxr-xr-x 4 root root  4096 Thg 4   8 17:37 sysroots
-rw-r--r-- 1 root root   122 Thg 4   8 17:37 version-arm1176jzfshf-vfp-poky-linux-gnueabi

3.2. Thiết lập môi trường phát triển

Trước khi bắt đầu phát triển, bạn cần thiết lập môi trường bằng cách chạy script:

/opt/poky/3.1.33$ source environment-setup-arm1176jzfshf-vfp-poky-linux-gnueabi

Script này sẽ cấu hình các biến môi trường cần thiết như PATH, CC, CXX, v.v., giúp bạn có thể sử dụng trình biên dịch chéo và các công cụ khác.

Kiểm tra xem môi trường đã được thiết lập chính xác chưa:

/opt/poky/3.1.33$ echo $PATH
/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/usr/sbin:/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/bin:/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/sbin:/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/usr/bin/../x86_64-pokysdk-linux/bin:/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:/opt/poky/3.1.33/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-musl:/home/aosp/Working/yocto/sources/poky/scripts:/home/aosp/Working/yocto/sources/poky/bitbake/bin:/home/aosp/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

4. Thử nghiệm SDK với ứng dụng đơn giản

Hãy tạo một ứng dụng đơn giản để kiểm tra SDK:

4.1. Tạo file mã nguồn

Tạo file ~/hello_SDK.c với nội dung sau:

#include <stdio.h>

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

4.2. Biên dịch ứng dụng

Sử dụng biến $CC đã được thiết lập bởi script môi trường để biên dịch ứng dụng:

/opt/poky/3.1.33$ $CC -o ~/hello_SDK_app ~/hello_SDK.c

4.3. Triển khai và chạy trên thiết bị target

Copy file thực thi sang thiết bị target (trong trường hợp này là QEMU):

/opt/poky/3.1.33$ scp ~/hello_SDK_app root@192.168.7.2:~/

Kiểm tra và chạy ứng dụng trên thiết bị target:

root@qemux86:~# ./hello_SDK_app
Devlinux: hello SDK!

5. Lợi ích của việc sử dụng SDK

  • Phát triển nhanh chóng: Không cần phải build lại toàn bộ image mỗi khi thay đổi code.
  • Môi trường phát triển quen thuộc: Phát triển trên máy host với các công cụ và IDE quen thuộc.
  • Tính nhất quán: Đảm bảo môi trường phát triển giống với môi trường target.
  • Tiết kiệm tài nguyên: Không cần cài đặt các công cụ phát triển trên thiết bị với tài nguyên hạn chế.

6. Kết luận

SDK là công cụ không thể thiếu khi phát triển ứng dụng cho hệ thống nhúng sử dụng Yocto. Với SDK, quá trình phát triển trở nên đơn giản và hiệu quả hơn, cho phép các nhà phát triển tập trung vào việc viết code thay vì lo lắng về môi trường phát triển.

Trong các bài viết tiếp theo, chúng ta sẽ khám phá các tính năng nâng cao của SDK và cách tùy chỉnh SDK cho các nhu cầu phát triển cụ thể.

author_photo
devlinux

0 Bình luận