Embedded linux ở việt nam

Embedded linux ở việt nam

Đăng ngày 08/26/2018

Theo style vài ngày một topic ngẫu hứng. Chủ đề hôm nay mình muốn chia sẻ là về công việc Linux embedded ở Việt Nam - Hiện tại chúng ta đang làm gì, những thứ cần chuẩn bị đối với người mới muốn join vào lĩnh vực này.

Đây có lẽ là vấn đề cần tìm hiểu đầu tiên đối với người mới. Mình hiện tại là technical leader về mảng này do đó công việc chủ yếu của mình là tìm hiểu về các kiến thức mới trong Linux embedded, training, phỏng vấn ứng viên, hô hào cổ động tinh thần học hành của anh em trong dự án. Công việc của mình do được tiếp xúc với nhiều người trong lĩnh vực này ở các công ty khác nhau nên đâu đó mình cũng nắm được bức tranh về Linux embedded ở Việt Nam.

Những chia sẻ sau đây là từ view cá nhân của mình, nếu có điểm nào chưa hợp lý thì mọi người cứ góp ý nhé.

1. Linux embedded là gì? Đó là những hệ thống embedded mà người ta chạy hệ điều hành Linux lên đó. Linux embedded có những ưu điểm mà một hệ thống nhúng theo dạng code thuần vi điều khiển không có. Tính năng của nó đa dạng hơn rất nhiều, thời gian phát triển ứng dụng nhanh, được hỗ trợ nhiều từ các thư viện có sẵn trên mạng. Khả năng multi media mạnh, có khả năng tái sử dụng giữa các platform khác nhau.

2. Ở Việt Nam chúng ta đang làm gì về Linux embedded?
Nếu coi cả Việt Nam là một công xưởng sản xuất. Vậy chúng ta sẽ có những đơn vị chuyên làm về hardware. Có những đơn vị sau khi có hardware rồi thì sẽ lập trình các driver chạy trên Linux để điều khiển các hardware đó (nó giống với các bạn lập trình vi điều khiển nhưng ở đây code của các bạn phải chạy được trong hệ điều hành Linux), sau đó họ sẽ tích hợp các driver và chỉnh sửa 1 số thông số của hệ điều hành Linux để có thể chạy được trên hardware của họ. Cuối cùng chúng ta có những đơn vị lập trình các ứng dụng dựa trên hệ điều hành Linux kèm với hardware ở các bước trên. Cách phân chia ở trên là mình dựa chia theo view về kiến thức.

Đối với view về sản phẩm thì hiện tại mạnh nhất là làm Linux embedded cho các thiệt bị trên ô tô. Như mình biết thì có FGA của Fsoft và LG Việt Nam là 2 đơn vị lớn nhất làm về mảng này, ngoài ra còn có thêm 1 công ty nữa của Hàn Quốc có thể là Toshiba hoặc Panasonic gì đó mình cũng ko nhớ rõ nữa. Mạnh nhì là làm Linux embedded cho các thiết bị mạng - bao gồm wifi, switch. Mảng này thì có Viettel và một số công ty như Dasan Việt Nam, Bosh, Humax, Panasonic nếu mình nhớ ko nhầm và một số công ty nhỏ khác mình không kể tên ở đây. Ngoài ra còn có Android embedded cho các thiết bị gia dụng như tivi, tủ lạnh... Mảng này thì tập trung vào các công ty của Hàn Quốc đặt tại Việt Nam như Humax, Panasonic, Samsung, LG... Mình cho Android embedded vào đây vì 1 người có thể làm giữa 2 mảng Android và Linux embedded được mà không gặp nhiều bỡ ngỡ lắm.

Hiện tại ở Việt Nam mình ước tính có khoảng 1 đến 2 nghìn người làm về Linux embedded, nhưng phần lớn mọi người đều tập trung ở tầng application. Cái này do khả năng của chúng ta vẫn chưa đáp ứng được cho việc lập trình dưới tầng kernel. Số người có công việc chính là lập trình dưới tầng kernel chỉ khoảng 10% con số trên. Mục tiêu của group là để tăng con số 10% lên, do đó phần dưới mình sẽ nói về cách chuẩn bị kiến thức để join vào con số 10% này. Đối với các bạn đang làm ở tầng trên có thể post một bài mới để chúng ta thảo luận.

3. Những thứ cần chuẩn bị cho một bạn muốn join vào lĩnh vực Linux embedded? Trước tiên là bạn cần học tốt về C và một chút assembly. Sau đó là nắm chắc kiến thức về vi điều khiển. Bạn phải có khả năng đọc reference manual để lập trình driver cho một peripheral nào đó. Sau đó các bạn cần có kiến thức basic về hệ điều hành như file system, lập lịch, virtual memory... Sau đó là học lập trình Linux device driver basic. Đến đây thì các bạn đã có đủ kiến thức để trở thành 1 junior trong lĩnh vực này.

Cả quá trình trên sẽ kéo dài 1 - 2 năm để học từ đầu. Nếu bạn càng ở những nấc thang cuối thì thời gian cần thiết sẽ càng giảm đi. Nếu đã lập trình tốt vi điều khiển thì mình ước lượng sẽ mất khoảng 3 - 6 tháng để chuyển sang Linux embedded. Hiện tại hệ thống training trên group mình cũng đang xây dựng theo hướng này.

Đến đây là tất cả những gì mình biết. Cảm ơn mọi người đã đọc bài.

Các comment hay:

1. Quân Đậu Cảm ơn anh rất nhiều. Cho em hỏi có nên học cả lập trình tầng app và cả tầng kernel không ạ? Nếu học cả 2 thì khi đi làm có thể đc phát huy cả 2 không hay chỉ làm chuyên về một tầng thôi ạ?

Trả lời: Lập trình tầng app nếu ở dạng lập trình C thì là cần thiết. Vì kể cả sau này em lập trình thuần kernel thì vẫn cần lập trình app ở tầng user để tương tác với code dưới kernel. Còn nếu lập trình app dạng C++ hoặc java thì anh nghĩ ko cần thiết. Sau này nếu công việc cần thì ngồi mò làm sau cũng dc. Như anh đi làm 5 năm nhưng cũng chỉ code mỗi C thôi.

Nếu mọi người làm trong lĩnh vực CNTT ở Việt Nam mình thì sẽ thấy người mình có khả năng làm việc không hề kém nhưng khoản chia sẽ kiến thức và build up cộng đồng thì :sosad:
Linux kernel hoặc Linux embedded là một lĩnh vực khó làm ở Việt Nam, các công ty không tìm được resource để tuyển dụng, ở các trường đại học không có giáo viên có kiến thức lẫn kinh nghiệm để dạy cho sinh viên, người muốn học cũng không biết bắt đầu từ đâu.

Em đam mê máy tính từ nhỏ nhưng gia đình định hướng cho học xây dựng. 2011 em ra trường, nhà có xin cho vào làm nhà nước nhưng được 2 năm xong em bỏ vì chán. 2013 em bắt đầu học lại ở Bách Khoa:sweat:. Từ lúc bắt đầu học em đã thích tìm hiểu về OS, đặc biệt là phần OS kernel. Nhưng hồi đó định hướng nghề nghiệp về OS là một cái gì đó khá là mơ hồ, nên em cũng chỉ tìm hiểu theo kiểu sở thích chứ cũng không biết là để làm gì.:stick:
Học hết 1 kỳ ở Bách Khoa thì em bắt đầu đi làm (cũng do áp lực về kinh tế lẫn gia đình nên em phải cố gắng đi làm sớm), đây có lẽ cũng là số phận an bài, mặc dù em cũng không phải dạng người tin vào bói toán:sweat:. Đầu tiên em phỏng vấn vào 1 vị trí lập trình nhúng nhưng tạch, sau đó em pass thực tập vào 1 công ty game, nhưng 2 ngày sau công ty em tạch lại gọi em lại phỏng vấn vào một vị trí khác và em pass. Xong em quyết định nghỉ ở công ty game và quay lại công ty trước vì vào đó em được làm có lương. Công ty em vào thì chuyên về app và web, nhưng đợt đó anh phỏng vấn em lại đi nước ngoài mất, xong công ty điều chuyển lung tung em lại vào một dự án mà mãi sau em mới biết dự án đó làm về driver:stick:. Công ty đó có khoảng hơn 100 người, nhưng do yêu cầu của khách hàng (Mà khách hàng cũng không biết gì về technical) thành ra nảy sinh 1 team khoảng 3 người làm về driver, 1 lead, 1 dev window và 1 dev MacOS. :surrender::
Em dev driver trên MacOS, mới vào em không thể hiểu nổi code của dự án, những đoạn code vi diệu vkl :stick: Hết 3 tháng thử việc do không code được gì em bị thử việc tiếp (Sau này em mới biết là do em khờ chứ mấy thằng trước nó cũng thế mà chẳng bị làm sao) :sosad:. Trong 6 tháng thử việc em cố ý không ôm nhiều task, mà thay vào đó lấy thời gian rảnh để google tìm hiểu về các đoạn code trong dự án. Sau khoảng 6 tháng thì em bắt đầu hiểu và có thể chỉnh sửa một chút code của driver. :sweat:
Hồi làm dự án đó khá củ chuối, vì cả công ty toàn người làm apps, không ai biết về driver, nên em bị đánh giá KPI rất tệ thì số line code trên 1 ngày rất thấp ~ 2 line 1 ngày. Em làm thêm khoảng 1 năm nhưng không được tăng lương. Đâu đó khoảng 1 năm rưỡi nhưng lương em vẫn như lúc mới ra trường ~5tr. Trong khi mấy thằng mới ra trường được em hướng dẫn toàn 6tr5. :sosad:
Sau khoảng 1 năm rưỡi cố gắng mà vẫn không được ghi nhận nên em cảm thấy khá nản, mặc dù em vẫn code trong dự án đó. Công ty thì chẳng ai biết em đang làm cái gì, đi làm rất buồn. Em quyết định nghỉ, khi em nghỉ ông sếp có nói với 1 câu làm em nhớ như in đến tận bây giờ. Ông nói đam mê của em cũng chẳng để làm gì đâu, ở Việt Nam không có chỗ làm làm về OS kernel cả, em bớt viển vông đi :go:. Câu nói này đã ảnh hưởng rất nhiều đến các kế hoạch mà em viết ở phía dưới.
Nghỉ xong em xin vào 1 công ty game với lương cao hơn. Nói chung đợt đó em xin vào đó tính tá túc 1 thời gian rồi tìm công ty nào làm về OS kernel thì nhảy tiếp. Hồi đó em vẫn còn đi học chưa ra trường, tình cờ em có làm đồ án với một thầy giáo, thầy đó cũng là người em rất tôn trọng. Buổi tối hết giờ học em hay ngồi lại nói chuyện với thầy về đam mê của mình, sau đó thầy khuyên là nên nhảy việc sang 1 công ty mà thầy giới thiệu, công ty đó chuyên về OS kernel hơn. :adore::adore: Sang công ty mới là một bước ngoặt của em, ở đó mọi người đều có kiến thức về Linux kernel, công ty cũng có môi trường học tập rất tốt, vào đó em cảm thấy trình lên vù vù, lương lậu và mọi thứ đều happy. Nhưng được khoảng 1 năm rưỡi nữa do trục trặc gia đình, không có đầu óc tập trung vào công việc nên em quyết định chuyển môi trường để reset lại bản thân.:sweat::sweat:
Sang công ty mới thì việc gia đình cũng lại ổn thỏa, lâu rồi không xích mích gì :stick::stick: Bên này ông sếp em là người có các short skill rất giỏi, em cũng học được rất nhiều từ ổng. Sếp cũng là người có các tư duy khoa học về phát triển con người nên khiến em cảm thấy khâm phục. Sang bên này do vị trí của em là technical leader nên em phải đảm nhiệm chính công việc training cho team, từ đó ngoài việc study về technical, em còn học cả về các skill training cũng như tư duy phát triển con người của ông sếp.
Sang đầu năm nay, do cũng có kinh nghiệm về training cũng như các mối quan hệ về tuyển dụng nên em muốn build up 1 cộng đồng về Linux kernel ở mức độ ngoài công ty. Em mong muốn tập hợp tất cả những người đang làm và mong muốn làm về lĩnh vực này. Dự định này có lẽ là do ảnh hưởng của công ty đầu tiên em làm, hồi đó công việc em cứ làm một mình, tự study 1 mình và không có ai hiểu cả, nên em tự hứa sau này nếu có một người muốn học cái này mà tìm đến hỏi em, em sẽ giúp họ hết mình. Em sẽ chỉ cho họ không chỉ là technical mà sẽ cả về careerpath để họ có thể tránh được các sai lầm mà em đã từng mắc phải.
Group hiện tại được khoảng 500 người, có rất nhiều người giỏi trong đó. Mỗi khi có người post câu hỏi lên thì đều được mọi người trả lời nhiệt tình, em cũng cảm thấy rất vui. Sau khi em đăng bài nói về kế hoạch tạo một bộ tài liệu training free cho người mới thì được rất nhiều người ủng hộ. Có người giúp em làm video, tài liệu, sample code, phòng ốc, hardware... Nếu một mình em làm thì có lẽ không bao giờ xong được thì khối lượng công việc để làm ra bộ tài liệu đó là rất nhiều. Nhờ có mọi người giúp đỡ nên em ước lượng hết năm nay sẽ cho ra version đầu tiên. Hiện tại hằng tuần em cũng up mỗi tuần 1 topic training để mọi người có thể học và làm bài tập.
Nếu ai quan tâm thì có thể join vào group của em nhé. Trên facebook mọi người gõ chữ "Cùng nhau học Linux kernel" là ra. Group của bọn em đúng nghĩa là open source nhé. Tất cả mọi thứ đều public free, không quảng cáo cũng như không có ý định thu bất cứ một khoản chi phí nào cả. Nên đừng có ai kêu là em PR kiếm chác gì ở đây không là ăn gạch đấy :gach::gach:
Bài viết rất dài, cảm ơn mọi người đã đọc.

Update 1: Tình hình của cộng đồng embedded đến cuối năm 2019: Page 16, sorry vì mình không đủ post để post link.