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


Bài này đã cũ, xin hãy xem bài cập nhật chi tiết hơn tại: Tạo một bản build Linux cho Raspberry PI bằng Yocto Project

Chúng ta đã có bài tìm hiểu về BitBake ở link

Đây là bài thứ 2 trong loại bài phát triển ứng dụng trên Raspberry PI sử dụng OpenEmbedded

http://www.cnx-software.com/2013/07/05/12mb-minimal-image-for-raspberry-pi-using-the-yocto-project/

Trước hết ta nói qua một chút về một bản Linux là gì?

Nhân Linux là mã nguồn mở, hầu hết các phần mềm chạy trên nhân đó cũng là mã nguồn mở.

Có nghĩa bất kì ai, có download source của nhân, các phần mềm về rồi tự build riêng một bản

để chạy. Mỗi bản Linux được công bố rộng rãi được gọi là một distro, về cơ bản chúng đề sử dụng

nhân Linux (có thể khác phiên bản). Các distro ngoài miễn phí, thì đều được một công ty

duy trì để kinh doanh các dịch vụ support hoặc cộng đồng đóng góp.

Và tất nhiên, bất kì ai cũng có thể tự build cho mình 1 distro. Việc này khá phức tạp. Phức tạp vừa ở

việc build chạy trên một môi trường đích ngoài PC chẳng hạn, bạn sẽ phải kiếm 1 compiler cho nó.

Rồi việc cài đặt những phần mềm hệ thống nào, việc phát triển ứng dụng ra sao.

Hầu hết Linux cho hệ nhúng chạy trên 1 hệ thống ít tài nguyên, để quá trình phát triển nhanh,

người ta nghĩ ra việc build trên 1 máy rất khỏe và kết quả thu được nạp vào máy đích để chạy.

Với mỗi môi trường máy đích, thì việc khó khăn đầu tiên là xây dựng 1 distro với yêu cầu tối thiểu,

sau đó tạo môi trường phát triển ứng dụng ().

Theo những gì mình biết, việc tạo ra các bản linux được làm bởi các chuyên gia am hiểu nhân và phần cứng môi trường đích.

Việc phát triển ứng dụng sẽ sử dụng các cross-compiler thương mại hoặc miễn phí.

Quá trình xây dựng bản distro và phát triển ứng dụng có thể không đồng nhất với nhau.

Dự án Yocto http://yoctoproject.org/

sinh ra để giải quyết 2 vấn đề

  • Tìm xây dựng một distro phù hợp nhất với yêu cầu hệ thống sao cho ít tốn công sức nhất.

  • Đồng thời với việc tạo distro thì cũng sinh ra 1 môi trường phát triển cho môi trường đích luôn.

Bản thân Yocto không có source, nó cung cấp các tool, giống như một bộ khung cho người phát triển tùy biến dễ dàng nhất có thể.

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.

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, banjcos 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.

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

Đầ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

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 “.” .

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.

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ồ.

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.

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.

  • 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”

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s