4 thành phần của Embedded Linux

4 thành phần của Embedded Linux

Ta biết rằng Linux chạy ở khắp nơi từ siêu máy tính, máy chủ, máy để bàn (máy xách tay), điện thoại (android)…cho đến các thiết bị gia dụng, gia đình.

Khi sử dụng máy tính cá nhân, server ta dễ dàng “sờ” thấy được các thành phần của Linux như các tiến trình, shell..etc.
Hầu hết các bản phân phối phổ biến làm hết những thứ liên quan đến phần cứng, nhân hệ điều hành, driver cho ta rồi. Ta thường chỉ quan tâm đến ứng dụng chạy trên đó thôi.

Nhưng ở một mảng ứng dụng khác của Linux, nơi mà trên đó ta thường chỉ chạy 1 ứng dụng, rất khó thấy các thành phần bên trong, hầu như không thay đổi được…thì Linux như thế nào, nó giống với các bản phân phối ta vẫn gặp không. Tiếp tục đọc

So sánh giữa Buildroot và Yocto Project

Bài này sẽ dịch lại Slide thảo luận giữa 2 diễn giả là Alexandre Belloni, Thomas Petazzoni
từ Free Electrons tại Embedded Linux Conference 2016.

So sánh giữa Buildroot và OpenEmbedded/Yocto Project

1. Điểm chung

  • Đều là build-system cho Embedded Linux.
    Mục tiêu là có thể customize, build hoàn chỉnh một Embedded Linux System.
    Bao gồm: filesystem, toolchain, kernel, bootloaders
  • Đều được build từ source
  • Sử dụng cross-compilation
  • Rất actively trong cả dự án đang maintained và phát triển.
  • Được sử dụng rộng dãi trong công nghiệp.
  • Tài liệu tốt, nhiều khóa đào tạo.
  • Sử dụng Free Software (phần mềm tự do)
    Tiếp tục đọc

Quá trình load firmware của Driver trong Linux

Để các kernel module sử dụng được các firmware thì cần 2 điều kiện sau:

  1. Khi kernel được build, các tham số sau phải được bật (ENABLE)
    CONFIG_FW_LOADER : Cho phép load firmware
    CONFIG_EXTRA_FIRMWARE > CONFIG_EXTRA_FIRMWARE_DIR : Đường dẫn chưa các firmware.

  2. Các firmware phải được copy vào thư mục CONFIG_EXTRA_FIRMWARE_DIR đã set ở trên.

Một số điều lưu ý liên quan đến firmware:

  1. Các firmware là binary(closed source) được cung cấp từ các nhà sản xuất thiết bị,
    nó không nằm trong luồng chính của kernel, được maintain ở địa chỉ sau:
    (http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git)%5Bhttp://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git%5D

  2. Các firmware này không phụ thuộc vào platform chạy Linux, cho dùng là ARM, x86 hay MIPS, etc đều dùng chung 1 nguồn cả. Vì thế, nếu bản Linux Embedded xuất hiện lỗi thiếu firmware cho thiết bị mà chạy tốt trên Linux Desktop, thì cách giải quyết rất có thể là copy firmware bị thiếu từ Desktop sang Linux Embedded.

Driver và Firmware trong Linux

Gần đây, khi tìm hiểu cách cài đặt driver cho USB Wifi, mình có tìm hiểu thêm về quá trình tạo nhân Linux. Đặc biệt, việc thiết lập cấu hình trước khi build tạo ảnh của kernel.
Mình thấy ngoài Driver, tức là thành phần trung gian giữa ứng dụng và phần cứng, còn có 1 khái niệm nữa. Đó là Firmware.
Tiếp tục đọc

Tìm Driver cho Linux

Trong quá trình tìm cách cài đặt driver cho bản build Raspberry PI sử dụng Yocto, mình có tìm hiểu driver trong Linux và tìm được cuốn sách Linux in A Nutshell (link tại đây ) của pro này.

Chương 7, chương mà tác giả đặc biệt “tự hào”, nói về Customize một Linux Kernel.
Trong chương này, tác giả cũng nói đến việc xác định các driver đang được sử dụng trên hệ thống hiện tại.
Tiếp tục đọc

Một chút về Driver cho USB Device trong Linux

Trong loại bài dịch trước đây nói về USB, tôi có nhắc một chút đến việc load đúng driver thì phía Host làm thế nào?

Như ta đã biết, khi một thiết bị USB được cắm vào máy (Host), phía Host sẽ thực hiện một loạt thao tác từ xác định nguồn (bus, hay self), lấy thông tin tốc độ, các thông tin về descriptor (thiết bị, giao diện, các Endpoint). Cuối cùng để sử dụng các tính năng chính mà thiết bị cung cấp, thì hệ điều hành phía Host, dù là Windows, hay Linux, hay MacOS sẽ phải load driver tương ứng với thiết bị. Tiếp tục đọc

Cài thêm driver usb-wifi adapter cho bản build Raspbery PI sử dụng Yocto Project

Như ta đã làm trong bài trước, sau khi thực hiện việc setup các biến môi trường bằng lệnh source, ta thực hiện build tạo image có có tên là rpi-basic-image thông qua lệnh:

$bitbake rpi-basic-image

Thực ra còn 2 image khác ta có thể build đó là rpi-hwup-image rpi-test-image. Ta có thể thấy 2 file bb cho 2 image ở thư mục meta-raspberrypi/recipes-core/images/.

rpi-hwup-image : là image nhỏ nhất (có dịp sẽ thử)
rpi-basic-image: là image ta vấn dùng đến bây giờ.
rpi-test-image : là image dùng cho việc test. (có dịp sẽ thử) Tiếp tục đọc

Thiết lập IP mặc định của bản build Linux cho Raspberry PI bằng Yocto Project

Để tiếp tục customize bản OS được build trong bài trước.
Hôm nay ta sẽ thực hiện một nhiệm nhỏ. Đó là thiết lập một IP cho bản build.
Tức là ta sẽ thiết lập 1 IP mặc định được gán cho Raspberry PI khi nó được khởi động bằng bản build của chúng ta.

Như thường lệ ta cần thiết lập các biến môi trường trước khi định thực hiện bất cứ thay đổi nào trên bản build.

$source poky/oe-init-build-env build

Tiếp tục đọc

Thêm samba server vào bản build Linux cho Raspberry PI bằng Yocto Project

Ta đã nói đến việc build một bản phân phối Linux cho Raspberry PI ở bài Tạo một bản phân phối Linux cho Raspberry PI bằng Yocto Project.

Một trong những giao thức truy cập file phổ biến nhất hiên nay là SMB, vốn ban đầu được hỗ trợ trên các máy Windows, dùng cho giao thức chia sẻ file trong mạng nội bộ. Trên Linux, để tạo một server như thế, người ta dùng Samba (cái tên cũng na ná nhỉ).

Trong bài này, sẽ trình bày cách đưa Samba vào bản phân phối Linux đã được build ở bài trước.

Tiếp tục đọc

Phân biệt Build vs Host vs Target

Khái niệm Cross-compiling là rất phổ biến khi phát triển các hệ thống nhúng.
Với người mới, hiểu rõ khái niệm là rất quan trọng.

Bài này sẽ cố gắng phân biệt 3 khái niệm về môi trường. Đó là Host Enviroment, Build Enviroment, và Target Enviroment. Có thể dịch nôm na là Môi trường chủ, Môi trường biên dịch, và Môi trường chạy đích.
Vì có thể dẫn đến hiểu nhầm hoặc không rõ nghĩa nên chúng ta nên sử dụng trực tiếp thì hơn.

Trước khi bắt đầu với các ví dụ, ta nên xem qua một số nguồn diễn giải 3 khái niệm này.

Tiếp tục đọc