Những kiến thức nào cần có để học Embedded System?

Chào các bạn! :smiley:
Mình xin giới thiệu mình là Nam, thành viên mới của forum. Cùng các bạn thảo luận, học hỏi thêm kiến thức về IT.

Cho mình hỏi là chúng ta cần phải học những gì để theo ngành hệ thống nhúng. Mình thấy ngành này hiện nay cũng đang rất cần, mình thấy ngành này cũng khó nên hỏi các bạn. Cảm ơn các bạn :blush:

1 Like

Ngành này là tổng hợp của cả kiến thức phần cứng và phần mềm, mình ko biết nhiều về phần cứng, tuy nhiên ít ra chắc bạn cũng phải có kiến thức về vi điều khiển, vi xử lý, vì chương trình sẽ được nạp vào trong đó.
Và đương nhiên, chương trình phải viết bằng 1 ngôn ngữ nào đó, thường gặp nhất là C. Bạn phải thành thạo nó.
Theo những gì mình biết là như vậy :blush:

4 Likes

Câu hỏi này chắc là bạn muốn hỏi cách tự học, Đạt sẽ trả lời theo hướng tự học.

Học embedded không khó, cái khó là nó yêu cầu nhiều kiến thức ban đầu để có thể bắt đầu làm việc. Đạt làm Embedded Linux nên chỉ có thể đưa ra một số tài liệu có thể tự học Embedded Linux như sau.


Để làm Embedded Linux thì bạn cần phải hiểu về Linux, chọn một distro linux nào đấy mà bạn thấy thích rồi dùng thử. Đạt có viết một trả lời về việc cài đặt Linux cho người lần đầu tiên mới sử dụng.

Để tăng tốc độ học Linux và cũng là một yêu cầu cơ bản để trở thành một Embedded Linux Developer bạn phải biết sử dụng command line và viết Shell Script. Quyển The Linux Command Line hướng dẫn bạn rất chi tiết và cơ bản về cách sử dụng Linux Command Linux, chính xác là trên Ubuntu.

Để hình dung công việc của một Embedded Linux Programmer phải làm hàng ngày bạn nên đọc Embedded Linux Primer: A Practical Real-World Approach (2nd Edition). Quyển này cho bạn khái niệm cơ bản về thế giới Embedded Linux bao gồm Linux cơ bản, cách hệ thống boot, các script được gọi, cách load firmware, cách debug và một số vấn đề chi tiết nho nhỏ khác.

Bạn cần phải biết cách build một hệ thống nhúng, cách tốt nhất là sở hữu một cái board và thực hành. Mình may mắn được học Embedded thông qua công việc hàng ngày nên không phải mua board về thực tập. Để tự học thì bạn có thể mua BeagleBone và thực thành với Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux

Sau khi build được hệ thống, bạn phải viết chương trình cho hệ thống nhúng. Tùy vào mức độ công việc mà bạn cần những kỹ năng khác nhau. Nhưng về cơ bản, bạn cần phải biết C. Nếu bạn chưa biết gì về C thì nên đọc C Primer Plus (6th Edition) (Developer’s Library), nếu bạn đã có cơ bản về lập trình, đọc thêm quyển The C Programming Language

Để lập trình trên Linux, đặt biệt là Embedded Linux có bao gồm Device Driver, bạn phải hiểu cách Kernel hoạt động. Linux Kernel Development (3rd Edition) sẽ cho bạn kiến thức về Kernel, bên cạnh đó một số quyển sách sau sẽ bổ sung thêm kiến thức cho bạn

Hoặc học khóa học CS6210: Advanced Operating Systems

Học Embedded Linux không khó, nó chỉ khó ban đầu

Học Android sẽ dễ hơn ở bước đầu, bạn không cần nhiều kiến thức về Android vẫn có thể viết ứng dụng đầu tiên, sau đó độ khó sẽ tăng dần. Để master, bạn phải bỏ ra rất nhiều công sức.

Học Embedded Linux sẽ khó hơn, vì bạn cần phải hiểu rất nhiều thứ mới có thể viết được “hello world”. Có thể thấy bước đầu sẽ khó, nhưng về sau sẽ dễ hơn.

Nhưng không có nghĩa là Android hay các ngành khác dễ hơn, nếu có thì chỉ là dễ hơn lúc đầu.

46 Likes

Ngoài C thì Assembly có giúp ích gì không?

Có nhưng không nhiều, Assembly được dùng rất ít ngày nay kể cả trong hệ thống nhúng.

4 Likes

Cảm ơn anh đã chia sẽ những góp ý quan trọng này. :grinning: Hiện tại em chỉ có kiến thức nền về Vi điều khiển và nguyên lý hoạt động của phần cứng, Còn về ngôn ngữ C thì cũng tàm tạm. Vì em thấy bên hệ thống nhúng phải học thêm Linux. Trước đây em học cũng có thực hành trên KIT nhưng chỉ build trên hệ điều hành OS, vậy em sẽ học thêm Linux . Tks anh! :blush:

1 Like

câu trả lời của anh @ltd quá đầy đủ rồi, mình bổ sung thêm là nếu ở trường bạn không được học về Operating System thì mình khuyên bạn kiếm sách đọc hoặc kiếm course trên coursera hay udacity học về OS. Mình cũng đang học nhúng linux nhưng lúc trước học điện tử không được học OS nên chả biết mấy khái niệm như thread, process, deadlocks này nọ

2 Likes

Đạt mới bổ sung thêm khóa học CS6210: Advanced Operating Systems theo gợi ý của @mrmike612 :+1:

2 Likes

Mình cũng đang theo ngành này. Mình có thể liên lạc với bạn qua facebook hay skype ?

1 Like

Xin chào!
Em đang đinh hướng học và làm về nhúng sau khi ra trường, hiên nay em đang là sinh viên năm cuối ngành cơ điện tử.
Em có tìm hiểu về nhúng nhưng còn nhiều cái chưa rõ.
Em muốn mua board về thực hành cũng để làm đồ án tốt nghiệp, em nên mua board gì hợp lý để học.
Ngoài ra em nên học trên Fedora, ubuntu…?
Một vấn đề nữa, em không học IT, nên cũng khá mông lung khi định hướng qua nhúng, có anh chị nào hiện đang làm nhúng mà xuất phát không từ IT không ạ, có thể chia sẻ cho em môt vài kinh nghiệm, cũng là để em thấy vững tin hơn!
Em cảm ơn!

ở post #3 ltd nói rồi mà:

Về lập trình thì tuỳ nền tảng, tuỳ phần cứng nhưng đều phải biết ASM, C và có thể cả C++.
Nếu biết về phần cứng có thể tự xây dựng hệ thống cho riền mình. Nếu không thường phải sử dụng phần cứng có sẵn và lệ thuộc vào nó.

2 Likes

Dạ em cảm ơn anh.
vẫn còn 1 vấn để em cũng đang rất tò mò đó là.
“Một vấn đề nữa, em không học IT, nên cũng khá mông lung khi định hướng qua nhúng, có anh chị nào hiện đang làm nhúng mà xuất phát không từ IT không ạ, có thể chia sẻ cho em môt vài kinh nghiệm, cũng là để em thấy vững tin hơn!”
anh Long có thể cho em biết cơ hội cho người không học IT làm nhúng? Anh đã gặp nhiều người như vây chưa a, lơi thế và bất lợi của những người anh chị đó.
Em cảm ơn anh.

Mình cũng không học IT và cũng không làm IT nên không rõ, chờ bạn khác trả lời :joy:

Nhúng với IT thì hơi nhọc vì trang bị ít kiến thức.
Và thường là phát triển phần mềm dựa vào nền tảng phần cứng nào đó (thường tương đối khủng để chạy được OS nào đó ). Những nền tảng khác thường khó làm hơn.

1 Like

Em chào anh, em cũng đang tìm hiểu về hệ thống nhúng.
Em có thể liên lạc với anh như thế nào?
Mail của em: [email protected]

Em đang là sinh viên năm 2 hệ Việt Nhật Bách Khoa Hà Nội, đọc xong các bài viết của anh em thấy tràn đầy động lực học tập :slight_smile: cảm ơn anh rất nhiều ạ! mong anh chỉ giáo nhiều hơn ạ!

2 Likes

@ltd
Anh Đạt cho em hỏi : Embedded Linux thì có khác so với Unix không ạ , em muốn làm vè Linux , nhưng đọc quyển ANSI C phần cuối lại nói về Unix , không biết là đọc cái Unix thì cách thức hoạt động có tương tự như bên Linux k ạ ? :grinning:

Tương tự đấy, nhưng dù tương tự thì cũng phải khác chỗ này chỗ kia. Có điều học lập trình thì không quan trọng là nền tảng hay kiến thức mình có. Cái chủ yếu là khả năng tiếp thu cái mới. Thế nên đừng quan tâm lắm về việc này :slight_smile:

3 Likes

@ltd Hiện tại, em sử dụng thành thạo các loại vi điều khiển. Với embedded linux, em có thể lập trình C được. Anh có thể tư vấn kĩ hơn cho em về lộ trình để phát triển tiếp trong lĩnh vực này không ạ. Mục tiêu của em là có thể build được được linux, lập trình driver, app cho một board bất kì. Em cảm ơn anh ạ :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?