Tạo Bản phân phối Linux của riêng bạn với Yocto trên Ubuntu 16.04

Trong bài viết này, ta tập trung vào việc tạo một bản phân phối Linux bằng cách sử dụng dự án Yocto trên nền tảng Ubuntu. Dự án Yocto rất nổi tiếng trong thế giới nhúng Linux vì tính linh hoạt và dễ sử dụng của nó. Mục đích của dự án Yocto là tạo ra một bản phân phối Linux cho các nhà sản xuất phần cứng và phần mềm nhúng. Một bản phân phối Linux mới sẽ được tạo cho qemu làm máy thử nghiệm (qemu là một phần mềm giả lập cơ bản) và chúng tôi sẽ chạy nó trong qemu.

Điều kiện tiên quyết 

  • RAM ít nhất 4 - 6 GB.
  • Hệ điều hành Ubuntu.
  • Ổ đĩa trống ít nhất 60-80 GB dung lượng trống.
  • Cài đặt các gói bắt buộc trước khi tạo bản phân phối Linux mới.
  • Tải xuống nhánh stable Yocto (Poky là môi trường phát triển tối thiểu) mới nhất.
Cập nhật hệ thống và cài đặt các package cần thiết:
    apt-get update
  apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop

Như hình dưới đây, cần có kích thước gần 1 GB để cài đặt các gói phát triển bắt buộc.
Trong hướng dẫn này, bản phát hành ổn định "morty" của poky được cài trên hệ thống.

    git clone -b morty git://git.yoctoproject.org/poky.git

Vào bên trong thư mục "poky" và chạy lệnh sau để thiết lập một số biến để phát triển yocto.
    source oe-init-build-env
Như được hiển thị bên dưới, sau khi chạy tập lệnh xây dựng môi trường nhúng mở, vị trí đường dẫn trong terminal sẽ được thay đổi thành thư mục "build" để cấu hình thêm và biên dịch bản phân phối mới.

Ảnh chụp màn hình ở trên cho thấy tệp "local.conf" được tạo bên trong thư mục "conf". Đây là tệp cấu hình cho yocto chỉ định chi tiết của máy target và SDK cho kiến trúc mong muốn, v.v.
Như hình dưới đây, thiết lập máy mục tiêu "qemux86-64".
Bỏ ghi chú các tham số sau trong tệp "local.conf" như được hiển thị trong ảnh chụp màn hình.
    DL_DIR ?= "${TOPDIR}/downloads"
    SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
    TMPDIR ?= "${TOPDIR}/tmp"
    PACKAGE_CLASSES ?= "package_rpm"
    SDKMACHINE ?= "i686"
Như hình dưới đây, hãy đặt mật khẩu trống cho Linux dựa trên nền tảng Yocto và bao gồm các tham số sau trong tệp local.conf. Nếu không, người dùng sẽ không thể đăng nhập vào bản phân phối mới.
    EXTRA_IMAGE_FEATURES ?= "debug-tweaks"

Biên dịch Yocto

Bây giờ hãy chạy lệnh của tiện ích bitbake để bắt đầu tải xuống và biên dịch các gói cho máy target đã chọn.
    bitbake core-image-minimal
Điều quan trọng là phải chạy lệnh trên với tư cách người dùng Linux bình thường chứ không phải người dùng root. Như được hiển thị trong ảnh chụp screenshot sau đây, một lỗi được tạo ra khi bạn chạy lệnh bitbake với tư cách là người dùng root.
Một lần nữa, hãy chạy tập lệnh export các biến môi trường (oe-init-build-env) và chạy lại lệnh tương tự để bắt đầu quá trình tải xuống và biên dịch.
Như được hiển thị bên dưới, bước đầu tiên của tiện ích script xây dựng là phân tích cú pháp.
Ảnh chụp màn hình sau đây cho thấy việc hoàn thành bước phân tích cú pháp của tập lệnh build. Nó cũng hiển thị các chi tiết của hệ thống xây dựng mà trên đó bản phân phối dựa trên yocto mới sẽ được tạo.
Sau khi tải xuống SDK và các thư viện cần thiết, bước tiếp theo là tải xuống và biên dịch các gói. Ảnh chụp màn hình sau đây cho thấy nhiệm vụ cho bản phân phối mới. Bước này sẽ mất 2-3 giờ vì trước tiên, nó tải xuống các gói cần thiết và sau đó biên dịch cho bản phân phối Linux mới.
Ảnh chụp màn hình sau đây cho thấy việc hoàn thành danh sách nhiệm vụ.
Các hình ảnh mới được biên dịch cho kiểu máy mục tiêu "qemux86-64" nằm bên trong đường dẫn "build/tmp/deploy/images/qemux86-64" như hình dưới đây.

Như hình dưới đây, một lệnh sẽ tạo ra lỗi nếu chạy trong Putty.

Lệnh trên lại được chạy bên trong terminal thông qua rdp trên nền tảng Ubuntu.
Một màn hình khác được mở cho trình giả lập qemu cho bản phân phối Linux dựa trên nền tảng yocto mới.
Màn hình đăng nhập của bản phân phối mới được hiển thị bên dưới, màn hình này cũng hiển thị phiên bản tham chiếu của dự án yocto. Tên người dùng mặc định là root và mật khẩu trống.
Cuối cùng, đăng nhập vào bản phân phối mới với tên người dùng root và mật khẩu trống. Như được hiển thị trong ảnh chụp màn hình sau, các lệnh cơ bản (date, ifconfig và uname) được chạy trong phiên bản Linux tối thiểu.