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

embedded

(Nguyen Van Nam) #1

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:


Một cuốn sách về Embedded System, có ai đã đọc hay biết ko?
(Mr. July) #2

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:


Lập Trình Nhúng là gì? Muốn theo con đường đó bắt đầu từ đâu?
(Lê Trần Đạt) #3

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.


Lập trình nhúng và firmware
Lộ trình học Device Driver như thế nào?
Muốn học trình nhúng trên linux mà chưa biết gì về linux thì nên bắt đầu từ đâu?
Sau khi học C basic thì nên học gì tiếp theo?
Muốn cái thiện lập trình nhúng thì cần học thêm những thứ gì và bắt đầu từ đâu?
(Minh Hoàng) #4

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


(Lê Trần Đạt) #5

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.


(Nguyen Van Nam) #6

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:


(minh tran) #7

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ọ


(Lê Trần Đạt) #8

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


(ntd) #9

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 ?


(Trần Khánh) #10

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!


([email protected]) #11

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


(Văn Dương) #12

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ó.


(Trần Khánh) #13

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.


([email protected]) #14

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:


(Văn Dương) #15

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.


(Tran Khanh Dat) #16

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]


(Nguyễn Thăng Long) #17

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 ạ!


(Nguyễn Mạnh Quân) #18

@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:


(Lê Trần Đạt) #19

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:


(Nguyễn Văn Quân) #20

@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:


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