- Linux Programming1
- Linux Porting2
- Linux Device Drivers3
LỘ TRÌNH TRỞ THÀNH KỸ SƯ LẬP TRÌNH LINUX EMBEDDED
Với nhu cầu tăng mạnh về nhân lực chất lượng trên thị trường lập trình nhúng hiện nay, đặc biệt là Embedded Linux. Thông qua bài viết này mình sẽ phân tích về khía cạnh công việc, lộ trình học tập và mức thu nhập của một trung bình cho một bạn sinh viên mới ra trường.
Vậy Embedded Linux là gì
Nói cho đơn giản thì đó là những hệ thống chạy trên nền tảng hệ điều hành Linux, các hệ thống này hiện diện rất nhiều trong cuộc sống của chúng ta cụ thể chính là các thiết bị điện thoại Android (lõi của android là linux kernel), các thiết bị wifi (router, moderm), màn hình giải trí trên xe ô tô, android TV vv.. Nhìn chung, công việc về Embedded Linux rất nhiều chỉ là ta chưa đáp ứng được nhu cầu của doanh nghiệp và tiếp cận nó đúng cách.
4 thành phần quan trọng của một Linux OS
Trước khi đi vào các mảng công việc cụ thể, các bạn cần phải biết tới 4 thành phần quan trọng của một Linux OS, bao gồm:
- 1. Bootloader: Bộ nạp khởi động, có chức năng load OS và các thành phần khác lên trên hệ thống.
- 2. Linux Kernel: Nhân của Linux OS, chứa các trình điều khiển thiết bị (device drivers).ƒ
- 3. Rootfs: Userspace, là không gian để cho developers chúng ta làm việc, phát triển applications.
- 4. Toolchain: Là một công cụ để giúp cho việc phát triển phần mềm, debug nhứ compiler (gcc/g++), debugger (gdb), linker (ld) và các libs cần thiết.
Khi các bạn mua một thiết bị nhúng Linux trên thị trường, lấy ví dụ như board Raspberry pi, board IMX, board Beaglebone thì bên nhà sản xuất thiết bị (vendor) sẽ cung cấp cho chúng ta một bộ 4 thành phần trên và được gọi chung là bộ BSP - Board Support Package.
Các công ty về Embedded Linux hiện nay
Các công ty về Embedded Linux hiện nay nhìn chung được chia theo 2 hướng:
- 1. Công ty out-source (điển hình là FPT): Nhận dự án và hợp tác với các vendor nước ngoài để hoàn thiện bộ BSP cho họ: Lập trình device drivers, bootloader, porting.
- 2. Công ty làm product (VNPT, Lumi, Rạng đông vv..):
Trước tiên phải xét tới quy trình tạo ra 1 sản phẩm:
Về mặt phần cứng:
Ra bài toán cụ thể về sản phẩm, lựa chọn thiết bị thích hợp của một vendor nào đó để phát triển.
Đưa ra được danh sách các tính năng. VD: Gateway có chức năng kết nối wifi, sử dụng được bluetooth, zigbee vv... Từ đó thiết kế lại mạch sao cho các ngoại vi cần thiết hoạt động ổn định, lược bỏ các thành phần không cần thiết để tối ưu chi phí.
Về phần mềm:
Từ bộ BSP nhận được khi hợp tác với vendor, triển khai tối ưu/sử đổi lại uboot, device drivers, applications đảm bảo các ngoại vi và các chức năng chạy đúng, ổn định. Loại bỏ các module không cần thiết ra khỏi hệ thống, dành tài nguyên cho việc phát triển sau này, càng tối ưu được nhiều thì sản phẩm càng có thể phát triển thêm nhiều tính năng. Giai đoạn này được gọi là giai đoạn Porting.
Song Song với giai đoạn Porting là phát triển ứng dụng trên tầng userspace. Tùy vào từng công ty mà các ứng dụng phát triển là khác nhau. Tuy nhiên, do tài nguyên là giới hạn nên hầu hết ứng dụng sẽ được phát triển bằng ngôn ngữ C/C++. Câu hỏi là, tại sao không tăng thêm bộ nhớ, sử dụng tài nguyên tốt hơn mạnh hơn Việc này đồng nghĩa với việc công ty phải bỏ thêm chi phí sản xuất khi cấu hình phần cứng tăng lên, đôi khi là hàng nghìn, chục nghìn thiết bị thì số tiền này không hề nhỏ.
3 mảng kiến thức lớn
Tóm lại từ các công việc trên thì Linux Embedded có thể chia ra thành 3 mảng kiến thức lớn sau:
1. Linux Programming: Viết các ứng dụng trên môi trường Linux.
Lập trình tốt ngôn ngữ C/C++ trên môi trường Linux (FileIO, Process, Thread, Signal vv...). Có kiến thức cơ bản về hệ điều hành.
2. Linux Porting: Phần này sẽ thiên về tối ưu, customize hệ thống.
Cần có kiến thức về Makefile, shell scripts.
Hiểu biết về các build system như build-root, yocto.
Hiểu biết về quá trình khởi động của hệ điều hành.
Biết cách sửa đổi bootloader, kernel, thêm hay loại bỏ các package ở rootfs.
3. Linux Device Drivers: Viết các trình điều khiển thiết bị.
Thường dành cho những bạn đã có kiến thức cơ bản về hai phần trên.
Học viết một số các drivers cơ bản như I2C/SPI/UART/USB/Watchdog vv...
Các kiến thức trên được mình tổng hợp đối với người có kinh nghiệm từ 1,5 - 2 năm kinh nghiệm. Các bạn sinh viên nếu tiếp cận từ sớm đều có khả năng nắm được các kiến thức này trước khi ra khỏi ghế nhà trường.
Về mức lương, đối với sinh viên mới ra trường sẽ rơi vào khoảng 8-13tr và cao hơn đối với các bạn sinh viên tài năng. Đây là giai đoạn các bạn phát triển và chứng mình năng lực. Trên 20tr với trên 2 năm kinh nghiệm.
Dưới đây là 2 khoá học Linux level 1 và level 2 dành cho các bạn: