Đây là bài viết tham khảo về cách build yocto cho beaglebone black, đồng thời cũng là bài bổ sung cho các bạn đang học lớp Basic Embedded Linux Training. Hiện tại kernel tạo ra với yocto này có version là 4.5.7.
1.Cài đặt các package yêu cầu cho yocto :
Cũng tương tự với các hướng dẫn cho board khác, việc đầu tiên là chắc chắn bạn đã cài đặt các pagekage phụ thuộc ban đầu cho Linux host. Cụ thể thì bạn cần cái một số package phụ thuộc sau đây (Chọn 1 trong 2 thôi nhé) :
Đối với máy tính cài linux Ubuntu or Debian:
Đối với máy tính cài linux Fedora:
2.Build yocto cho beaglebone black
Dưới đây là trình tự các bước cho việc build yocto beaglebone
- Bước 1 : Tạo thư mục làm việc và download source yocto và các meta cần thiết cho bbb.
Sau khi hoàn thành quá trình download source thì ta sẽ có các thư mục như hình sau :
Bước 2 : Khởi tạo môi trường build. Lúc này bạn di chuyển đúng thư mục yocto_bbb và chạy lệnh sau :
Sau khi chạy lệnh này thì sẽ có 1 thư mục build tự động tạo ra và trong đó có chưa thư mục conf với 2 file quan trọng trong thư mục này là bblayer.conf và local.conf mà bước tiếp theo sẽ cần sửa đến chúng.
Bước 3 : Mở file build/conf/bblayer.conf và thêm vào các layer cần thiết để nội dung giống như sau, lưu ý cần thay đổi đường dẫn cho đúng với máy của bạn vì bên dưới là thư mục làm việc của riêng máy mình :
Sau đó, tiếp tục mở file build/conf/local.conf và tìm đến dòng này và bỏ comment đi : MACHINE ?= “beaglebone”
Bước 4 : Tiến hành fetch và build linux bằng yocto, chắc chắn rằng bạn đang đứng tại thư mục build, vì nếu đứng sai directory sẽ không chạy được :
Quá trình biên dịch ở bước này sẽ mất 1 thời gian khá lâu, tùy theo cấu hình máy tính sẽ mất đến vài giờ hoặc cả ngày. Sau khi build thành công sẽ các file output cho bbb được locate tại : /home/dongpv/data/yocto_bbb/build/tmp/deploy/images/beaglebone
Bước 5 : Ở bước này, ta sẽ tìm hiểu làm thể nào để flash tất cả các component vào thẻ nhớ sdcard để nó có thể boot được.
Mình sẽ kiểm tra trong thư mục meta-bbb/scripts nó có chưa các script hỗ trợ cho việc format và chép các component linux qua thẻ nhớ 1 cách tự động. Trình tự từng bước nhé :
+ Đầu tiên là format sdcard với script có sẵn là mk2parts.sh :
Lưu ý là sdb tương ứng với device file của sdcard sau khi cắm vào. Kiểm tra cẩn thận nếu nhầm phân vùng của linux host sẽ format nhầm và mất dữ liệu của PC.
+ Tạo 1 thư mục để làm mount point cho sdcard sau khi cắm vào linux host (PC):
sudo mkdir /media/card (lệnh này chỉ cần làm 1 lần đầu tiên)
+ Chép uboot vào sdcard:
Việc scripts chép các component vào sdcard sẽ thông qua 1 biến môi trường của thư mục build/tmp vậy nên cần export nó trước :
Chép uboot : meta-bbb/scripts$ ./copy_boot.sh sdb (uboot size nhỏ nên sẽ chép rất nhanh)
+ Chép rootfs vào sdcard :
meta-bbb/scripts$ ./copy_rootfs.sh sdb console
dongpv@ubuntu:~/data/yocto_bbb/poky-krogoth/meta-bbb/scripts$ ./copy_rootfs.sh sdb console
dongpv@ubuntu:~/data/yocto_bbb/poky-krogoth/meta-bbb/scripts$./copy_emmc_install.sh sdb console
Như vậy là ta đã xong việc chép tất cả vào sdcard. Tiếp theo là boot như thế nào?
Bước 6 : sau khi insert sdcard vào bbb thì mình sẽ phải nhấn và giữ button S2 để khi bootloader quét qua phím này sẽ detect được và tự động chuyển sang mode load từ sdcard thay vì load mặc định từ eMMC. Sau khi boot xong thì kết quả như sau :
Xong. Chúc các bạn thành công !
em bị cái này trong lúc format sdCard, bác xem hộ em với là nó bị làm sao vậy?
ngocvu@ngocvu:~/yocto_bbb/poky-krogoth/meta-bbb/scripts$ sudo ./mk2parts.sh sde1
Working on /dev/sde1
umount: /dev/sde1: not mounted
DISK SIZE – 3963617280 bytes
Okay, here we go …
=== Zeroing the MBR ===
1024+0 records in
1024+0 records out
1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,223072 s, 4,7 MB/s
=== Creating 2 partitions ===
Checking that no-one is using this disk right now … FAILED
This disk is currently in use – repartitioning is probably a bad idea.
Umount all file systems, and swapoff all swap partitions on this disk.
Use the –no-reread flag to suppress this check.
sfdisk: Use the –force flag to overrule all checks.
=== Done! ===
em bị lỗi này trong lúc format SdCard, bác xem giúp em là lỗi gì với!!!!
ngocvu@ngocvu:~/yocto_bbb/poky-krogoth/meta-bbb/scripts$ sudo ./mk2parts.sh sde1
Working on /dev/sde1
umount: /dev/sde1: not mounted
DISK SIZE – 3963617280 bytes
Okay, here we go …
=== Zeroing the MBR ===
1024+0 records in
1024+0 records out
1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,223072 s, 4,7 MB/s
=== Creating 2 partitions ===
Checking that no-one is using this disk right now … FAILED
This disk is currently in use – repartitioning is probably a bad idea.
Umount all file systems, and swapoff all swap partitions on this disk.
Use the –no-reread flag to suppress this check.
sfdisk: Use the –force flag to overrule all checks.
=== Done! ===