devlinux
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.
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:
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ị.
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:
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
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.
Để 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
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
Hãy tạo một ứng dụng đơn giản để kiểm tra SDK:
Tạo file ~/hello_SDK.c với nội dung sau:
#include <stdio.h>
int main()
{
printf("Devlinux: hello SDK!\n");
return 0;
}
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
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!
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ể.
devlinux
0 Bình luận