Skip to content

Embedded Linux System Development

Vu Tang - 2/2019

header

Embedded Linux System Development - What I have to do?

Khái niệm phát triển một hệ nhúng Linux rất rộng. Nhiệm vụ chính của một "Embedded System Engineer" sẽ là:

  • Porting Linux OS cho một custom board
  • Tích hợp hoặc phát triển các User-space application cho một hệ nhúng
  • Phát triển Linux Device Driver cho các ngoại vi

Porting Linux

Porting Linux, ở một khía cạnh khái quát, là quá trình làm cho một bo mạch mới khởi động với hệ điều hành Linux. Để hoàn thành được nhiệm vụ này cần tổ hợp rất nhiều kiến thức khác nhau. Trong đó có một số mục cần lưu ý sau:

  • Kiến trúc máy tính (Computer system architecture). Kiến trúc chung của một hệ máy tính, các thành phần cấu thành. Quá trình hoạt động của một CPU.
  • Trình biên dịch và quá trình biên dịch một chương trình. Quá trình hoạt động của compiler, các khái niệm liên quan đến make system (Makefile). Ngoài ra trong mục này cũng có thể mở rộng đến các công cụ sử dụng cho porting linux như: Xilinx Petalinux, Yocto Bitbake...
  • Linux booting sequence. Các khái niệm liên quan đến bootloader cũng nhưng quá trình khởi động của Linux kernel. Quá trình mounting root file system.

Embedded application development

Một cách minh họa, máy tính cá nhân sau khi cài đặt xong hệ điều hành, người dùng tiến hành cài đặt các ứng dụng (ví dụ như Office...) để thực hiện các nhiệm vụ (ví dụ như soạn thảo văn bản...). Một hệ nhúng cũng tương tự vậy. Quá trình poring Linux giúp board khởi động thành công với hệ điều hành, kỹ sư cần phát triển thêm các ứng dụng nhúng tùy theo yêu cầu của từng hệ thống. Tích hợp và phát triển ứng dụng có thể chia làm hai loại:

  • Các ứng dụng mã nguồn mở (open source) được phát triển bởi cộng đồng. Nhiệm vụ của kỹ sư trong trường hợp này là tích hợp được ứng dụng này vào hệ thống của mình. Trong một số trường hợp, kỹ sư có thể kết hợp tích hợp và tùy biến lại mã nguồn để phù hợp với từng hệ thống. Một số khái niệm quan trọng cần lưu ý trong mục này là:

    • Cross compling
    • Các hệ thống build như cmake, autoconf, make ...
  • Các ứng dụng đặc biệt chỉ có tại hệ thống. Các hệ nhúng thực hiện các nhiệm vụ đặc thù, do đó kỹ sư đặc trong rất nhiều trường hợp cần phát triển các ứng dụng cho hệ nhúng (các ứng dụng này không được phát triển bởi cộng đồng).

Quy trình phát triển một ứng dụng trên hệ nhúng Linux không quá khác biệt so với phát triển một ứng dụng trên Linux Destop.

Linux Device Driver

Quá trình porting giúp board có thể khởi động với hệ điều hành (Linux) nhưng không đảm bảo được tất cả các tài nguyên phần cứng trên board đã có các driver (*) tương ứng. Nhiệm vụ của kỹ sư trong trường hợp này sẽ là:

  • Poring các driver cho các phần cứng. Một số phần cứng cung cấp bởi các vendor sẽ đi kèm mã nguồn cho driver, nhiệm vụ của kỹ sư là tích hợp driver này vào hệ thống để có thể tương thích được với phần cứng.

  • Phát triển các driver cho các phần cứng chuyên dụng trên board.

(*) Khái niệm driver sẽ được thảo luận thêm ở các tài liệu chuyên sâu khác.

References

[1] - Embedded Linux system development - bootlin.com

Back to top