Giới thiệu cơ bản về porting Linux embedded cho người mới.

Khi nghiên cứu về Linux embedded, có không ít người chưa mường tượng được công việc porting cho board sẽ như thế nào. Bài viết này sẽ đưa ra cho các bạn một góc nhìn đúng đắn về việc porting nhưng đủ đơn giản để người mới có thể hiểu được.

I. Tổng quan về porting

1. Đầu vào của việc porting:

Đầu vào của chúng ta sẽ là 1 SoC (System on Chip): Là 1 con chip có core là 1 con CPU có thể là arm hoặc powerPC… Sau đó, người ta thiết kế các peripheral xung quanh cho con CPU đó. Ví dụ như DRAM, ethernet, uart, i2C, CAN… Sau khi làm xong peripheral, người ta sẽ đóng gói tất cả lại thành 1 con chip mới kích thước to hơn. Và gọi chúng là SoC – system on chip. SoC sẽ kết nối ra ngoài thông qua các chân. Nhìn giống như lúc các bạn tháo chip ở máy tính bàn vậy.

2. Đầu ra của việc porting:

Sản phẩm cuối cùng của việc porting là một con chip SoC và 1 bộ source code dùng để build ra boot loader và một hệ điều hành Linux hoàn chỉnh mà có thể chạy được trên con SoC đó. Cả bộ đó người ta gọi là BSP (Board Support Package). Chúng ta sẽ bán bộ BSP cho các khách hàng – những người sẽ phát triển thêm các ứng dụng trên BSP của chúng ta.

Ví dụ với con wifi ở nhà các bạn hay dùng. Đầu tiên, bên làm wifi họ sẽ mua 1 bộ BSP từ 1 nhà cung cấp nào đó. Sau đó, họ sẽ thiết kế board mạch cho wifi rồi gắn con chip SoC vào giữa. Tiếp đó, họ sẽ build OS từ bộ source code của BSP rồi cài lên con wifi. Lúc này, con wifi có thể khởi động lên nhưng mới chỉ có một số chức năng phần cứng đơn giản như giao tiếp qua uart… Để có thể phát ra wifi thì bên làm wifi họ sẽ phải viết ra 1 ứng dụng cho phép bạn truy cập vào từ web, cấu hình thông số wifi và truyền giá trị cấu hình đó cho phần cứng. Lúc này thiết bị mới có thể phát ra wifi. Tuy nhiên còn rất nhiều ứng dụng họ phải phát triển thêm nữa, có thể kể đến như: firewall, xem tivi qua wifi….

Như vậy, mấu chốt của việc porting là làm ra bộ source code dùng để build ra boot loader + OS (OS sẽ bao gồm OS kernel và OS root file system). Porting vì thế cũng sẽ được chia làm 3 giai đoạn, bao gồm:

  • Porting boot loader.
  • Porting kernel.
  • Porting rootfs.

II. Chi tiết về 3 giai đoạn trong porting

1. Porting boot

  • Khái niệm: Boot loader là một chương trình được chạy trước cả hệ điều hành. Sau khi ấn nút nguồn, hệ thống sẽ chạy rom code nằm trong CPU sau đó rom code sẽ chạy chương trình boot loader. Nhiệm vụ của boot loader là phải khởi tạo mọi thứ để chuẩn bị cho việc load OS. Đầu tiên nó phải khởi tạo trình điều khiển cho DRAM và UART. Nếu OS được load từ thẻ nhớ thì nó phải khởi tạo trình điều khiển cho thẻ nhớ. Nếu OS được load qua ethernet thì nó phải khởi tạo trình điều khiển cho ethernet. Vân vân và vân vân. Sau đó nó sẽ load OS image và giải nén vào ram. Cuối cùng nó sẽ start kernel của OS.
  • Công việc porting boot loader: Đầu tiên chúng ta phải tải 1 bộ source code của boot loader về. Có rất nhiều loại boot loader nhưng phổ biến nhất thì có U-boot và Grub. Sau khi tải source của boot loader về, chúng ta phải config để có thể build được như ý muốn. Ví dụ như lựa chọn những file source code nào của boot loader sẽ được build, lựa chọn các chức năng cho boot loader. Sau khi xong phần config để build, chúng ta sẽ tiến hành viết driver cho boot loader. Nếu bạn muốn boot loader tương tác được với user qua console thì chúng ta phải viết UART driver cho nó. Nếu muốn load OS từ ethernet thì chúng ta phải viết Ethernet driver cho nó. Sau khi viết xong hết driver cho boot loader thì chúng ta đã xong bước porting boot loader.

2. Porting Linux kernel

Cũng giống như porting boot loader. Đầu tiên các bạn cũng phải tải 1 bộ source Linux kernel từ trên mạng về. Sau đó config chức năng cho nó. Lực chọn file nào sẽ được build rồi tiến hành build thử. Sau khi build thử ok thì sẽ viết các driver cho nó. Lúc này nếu con board của bạn có module nào thì bạn sẽ phải viết driver cho module đấy. Khi porting kernel thì sẽ phải viết device tree cho board. Device tree sẽ mô tả lại phần cứng đề sau đó các driver có thể lấy thông tin phần cứng từ device tree. Đến đây là chúng ta đã xong phase porting kernel. Tuy nhiên đến đây thì con board của chúng ta vẫn chưa chạy được các chức năng cơ bản nhất – ví dụ như đăng nhập. Nguyên nhân là nó chưa có root file system – nơi chứa tất cả các ứng cho nó. Ví dụ như đăng nhập ls, cp, cd… Do vậy chúng ta cần làm nốt bước thứ 3 đó là porting root file system.

3. Porting root file system

Ở bước này chúng ta phải build ra được 1 hệ thống file giống như hệ thống file trong máy tính ubuntu vậy. Cái này sẽ được gọi là root file system. Trong 1 root file system sẽ có rất nhiều ứng dụng, ví dụ như /bin/ls, /bin/cp, /bin/cd … Nhưng việc của chúng ta chỉ là config để build được chúng từ source code có sẵn chứ ko cần viết code mới làm gì. Thông thường, người ta sẽ sử dụng một hệ thống như Yocto để build ra root file system.

4. Tổng kết:

Sau khi làm xong 3 bước trên thì chúng ta đã có một bộ source code, mà từ đó có thể build ra boot loader và OS cho con board của mình. Sau khi chúng ta build xong và ghi vào thẻ nhớ của board, lúc này nó có thể khởi động lên và sử dụng các chức năng cơ bản của hệ điều hành một cách bình thường. Và công việc porting của chúng ta đến đây là kết thúc.

Đây là một link đầy đủ về quá trình porting, các bạn có thể tham khảo nhé: https://elinux.org/…/Schulz-how-to-support-new-board-u…

1 thought on “Giới thiệu cơ bản về porting Linux embedded cho người mới.”

  1. Hi bạn, thanks bạn đã chia sẻ thông tin, mình có một số câu hỏi liên quan tới một nội dung nhỏ trong bài, đó là làm thế nào để bán bsp:
    1. Theo bạn việc bán bộ BSP có được coi là một mô hình kinh doanh khả thi không? Có những thách thức và cơ hội gì trong việc này?
    2. Khi bán bộ BSP, làm thế nào để đảm bảo tuân thủ các quy định của GPL, đặc biệt là với các thành phần như boot loader và Linux kernel?
    3. Có những biện pháp cụ thể nào để đảm bảo rằng việc phân phối bộ BSP tuân thủ hoàn toàn các điều khoản của GPL?
    4. Làm thế nào để cân bằng giữa việc tuân thủ GPL và duy trì lợi nhuận từ việc bán bộ BSP? Có những mô hình kinh doanh nào trên thế giói vừa có hiệu quả trong việc phân phối BSP mà vẫn tuân thủ GPL?

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top