29/03/2025
🔥 Android Embedded Roadmap - Part 2
𝐈. 𝐋𝐢𝐧𝐮𝐱 𝐄𝐦𝐛𝐞𝐝𝐝𝐞𝐝
Dành cho các bạn đã nắm vững kiến thức về Embedded Advanced và muốn tìm hiểu về Embedded trên OS.
Trước khi bắt đầu tìm hiểu sâu về Linux Embedded, các bạn nên cài Ubuntu và tìm hiểu một số kiến thức:
📝 Làm quen với command line cơ bản như ls, cd, rm, mkdir, chmod,...
📝 Viết một chương trình C cơ bản và sử dụng GCC để build
📝 Viết chương trình sử dụng multi-thread, giao tiếp giữa các thread
📝 Giao tiếp giữa Server và Client sử dụng socket
Sau khi làm quen các kiến thức trên, các bạn có thể quen cách làm việc trên Linux. Tiếp theo, các bạn cần tìm hiểu:
📝 User space và Kernel space
📝Các loại driver được sử dụng trên Linux (character, network, block device driver)
📝 Hiểu và phân biệt được device driver và bus driver
📝 Hiểu được chức năng và cách sử dụng của bootloader, kernel, rootfs, device tree trong Linux Embedded
📝 Build image và chạy được trên board
Bài tập đề nghị: Build được image và flash thành công trên BeagleBone Black hoặc Raspberry Pi. Viết một chương trình điều khiển led sử dụng character device driver
Linux Embedded thực sự rất rộng, sâu và khó. Ở các công ty lớn đều rất cần nhân lực cho mảng này.
⚠️ Quá trình tìm hiểu và làm được ở mức cơ bản cần 1 năm kinh nghiệm trở lên
𝐈𝐈. 𝐀𝐧𝐝𝐫𝐨𝐢𝐝 𝐄𝐦𝐛𝐞𝐝𝐝𝐞𝐝
Dành cho các bạn đã nắm được Embedded Advanced. Tuyệt vời hơn khi bạn đã nắm được cơ bản về Linux Embedded.
Các phần cần tìm hiểu về Android:
📝 Hiểu rõ Android Architecture giúp bạn nắm được tổng quan về hệ thống
📝Tìm hiểu về System Service trên Android. Do System Service được viết bằng Java nên bạn cũng cần học thêm Java nếu chưa biết
📝 Tìm hiểu về HAL. Do HAL được generate từ HIDL hoặc AIDL nên bạn cần tìm hiểu thêm khái niệm về HIDL hoặc AIDL, làm sao để generate HAL code từ các file.
📝 Để nâng cao tốc độ và khả năng đọc hiểu code HAL, mình khuyên bạn nên tìm hiểu về Modern C++ và Design Pattern (nếu bạn chưa biết)
📝 Hiểu được cách hoạt động của SELinux. Bởi vì SELinux sẽ quản lý tất cả các quyền (đăng ký, đọc, ghi,...) của ứng dụng nên phần này cực kì quan trọng.
📝 Nếu bạn muốn tìm hiểu về Automotive Android, bạn có thể tham khảo các tài liệu có sẵn trên trang chủ của Android để có cái nhìn tổng quan và sự khác biệt giữa Automotive Android và Mobile phone Android.
⚠️ Lời khuyên ở đây là các bạn cần tập trung vào một tính năng cụ thể. Ví dụ bạn muốn tìm hiểu về Bluetooth, bạn tập trung tìm hiểu về Bluetooth flow in Android, Bluetooth HAL, Bluetooth System Service.
Bởi vì mỗi tính năng của Android đều liên quan tới nhiều layer và nhiều file nên việc bạn tìm hiểu đại khái khá là vô nghĩa.
Một số công việc khi bạn làm việc với Android ở các công ty:
🔨 Thêm chức năng mới vào HAL
🔨 Thêm service mới vào System Service
🔨 Chỉnh sửa quyền trong SELinux
🔨 Tạo hoặc chỉnh sửa các file config trong Android
🔨 Tối ưu resource, power,.. của thiết bị sử dụng Android
Ở đây có 2 lựa chọn về mặt phần cứng:
- Raspberry pi 4: dễ mua, dễ tiếp cận. Nhược điểm là giá cả khá cao, nhiều bug tiềm ẩn
- NXP board: khó mua hơn, giá cả cũng cao. Ưu điểm là source code được NXP cung cấp nên tài liệu đầy đủ, người mới chỉ cần làm theo Document là có thể chạy được Android. Source code của NXP rất xịn nên bạn có thể học hỏi được nhiều.
📌 Nếu bạn cảm thấy giá cả là một vấn đề lớn, bạn cũng có thể sử dụng source code của Google kết hợp cùng Emulator. Nhược điểm ở đây là bạn rất khó/ không thể để viết các driver cho các ngoại vi.