[OE] Build một bản Linux cho Raspberry PI B+ sử dụng OpenEmbedded

Poky là một hệ distro linux ở dạng tham chiếu của Yocto Project.

OpenEmbedded là một phần trong đó.

Nào thế đủ rồi, ta đi vào phần chính.

1. Về Yocto project và ứng dụng cho Rasberry PI

Lần trước, tôi có viết một hứng về việc tạo ra một ảnh cho Raspberry dựa trên Raspbian (chụp lại ảnh của một hệ thống đang chạy). Với kết quả lúc trước, thì vấn đề là nó không thực sự nhỏ hơn, khi giải nén ra nó vẫn chiếm khoảng 414MB.

Nào, ngay hôm nay, tôi sẽ hướng dẫn để tạo một ảnh của hệ thống (Linux distro) sử dụng Yocto Project,

1 platform cho phép bạn build một Embedded Linux Distribution phù hợp chính xác với yêu cầu của dự án.

Một điểm nữa là, quá trình build có thể được configure với các configure file. Nó khá năng suất trong việc tạo ra một bản distro chỉ với rất ít thao tác.

Nếu bạn muốn image, bạn có thể download về ngày qua link này.

Sau khi download về rồi thì giải nén nó, ghi vào SD card. Rồi chạy thôi.

Còn nếu bạn muốn customize nó thì tiếp tục đọc.

Tôi đã thử với hướng dẫn từ pimpmypi. Nhưng nó khá cũ, giờ mọi thứ dường như trở nên đơn gian hơn.

2. Thực hiện

Với môi trường thực hiện là Ubuntu 14.04 LTS.

2.1 Lấy source

Đầu tiên chúng ta lấy source của poky và meta layer dành cho Raspberry PI.

mkdir yocto

cd yocto

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

cd poky

git clone -b dylan git://git.yoctoproject.org/meta-raspberrypi

2.2 Thiết lập biến môi trường

Chạy lệnh sau để setup một số biến môi trường


. oe-init-build-env build

Nhất định phải có dấu cách sau dấu “.” . (Dấu này đại diện cho lệnh source)

Sau khi chạy xong lệnh trên và succecced.

Con trỏ lệnh sẽ tự động chuyển về thư mục build.

2.3 Build

Chúng sẽ edit 1 file cấu hình để giúp bitbake sử dụng CPU của PC chúng ta build tốt hơn.

Giúp tiết kiệm thời gian build.


Edit conf/local.conf

BB_NUMBER_THREADS = "9"

PARALLEL_MAKE = "-j 9"

MACHINE ?= "raspberrypi"

GPU_MEM = "16"

Trường nào không có thì bỏ qua, kết quả cuối cùng không thay đổi tuy nhiên, nếu cấu hình chính xác

với thông tin của máy sẽ giúp quá trình build nhanh hơn.

Cuối cùng, để OE build một image cho Raspberry PI, ta cần thêm lớp của RPI vào danh sách các lớp

mà OE có thể biết.


Edit conf/bblayers

BBLAYERS ?= " \

poky/meta \

poky/meta-yocto \

poky/meta-yocto-bsp \

poky/meta-raspberrypi \

"

Giờ là lệnh build, có 2 option cho file image. Đó là rpi-basic-imagerpi-hwup-image.

Cả 2 đều là minimal image. Nhưng rpi-basic-image có sẵn ssh-server-dropbear và splash

(cho splash screen).

Chúng ta sẽ build rpi-basic-image

Lệnh build như sau


`bitbake rpi-basic-image`

Quá trình build này phụ thuộc vào perform của máy và tốc độ mạng.

Có thể mất cả tiếng đồng hồ.

2.4 Kết quả

Khi quá trình build này hoàn thành, bạn sẽ thấy file ảnh nằm ở đây

tmp/deploy/images/rpi-basic-image-raspberrypi.rpi-sdimg

Ghi file đó ra SD Card là bạn đã có thể boot ngay vào PI được rồi.

User là root và không cần pass.

2.5 Đặc điểm của bản build

Bản linux này bao gồm những đặc điểm sau

  • shell chạy là : busybox, đương nhiên là thư viện là uglibc rồi.

+ Không tích hợp driver cho wifi dongle.

  • Chưa thấy code car wlan0.
  • Có sắn driver cho Ethernet

Tình trạng sau khi khởi động của máy như thế này

Featured image

Trong hình trên, dù đã kết nối wireless dongle với PI qua USB rồi.

Kiểm tra lại log hệ thống để xem, PI đã nhận dạng được thiết bị này chưa.

Log như hình sau, ở đây t sử dụng lệnh


`tail -f /var/log/messages `

Ta sẽ thấy log dưới đây khi cắm wire dongle vào PI.

Featured image

Từ màn hình log ta thấy, thiết bị dường như đã được nhận dạng thành công.

Hiện tại có thể đã lỗi tại dòng

phy3: Failed to initialize wep : -2

Mình có 2 suy đoán ở đây

  • Có thể phần wireless thiếu file cấu hình nên xảy ra tình trạng này.
  1. Có thể vẫn do lỗi driver, thiếu cái gì đó vì nếu chỉ khởi động bị failure thì phần hàm ifconfig phải list ra được chứ nhi.

Giờ sẽ thử làm theo hướng dẫn này, đưa file cấu hình wifi vào PI

http://www.jann.cc/2012/08/08/building_freescale_s_community_yocto_bsp_for_the_olinuxino.html#extending-the-wifi-support

Trong thư mục build của yocto, add thêm dòng này vào conf/local.conf
IMAGE_INSTALL_append = " wpa-supplicant wireless-tools dhcp-client linux-firmware"