嵌入式方向可以完全不學 Linux 嗎?

說明一下自身情況,大學期間跟隨一位導師學習,他是我們學校計算機學院的,研究的是嵌入式方向,但我們平常玩的最多的是windows下用labview寫程序,學習各種單片機、FPGA什麼的,單片機做的最多的是LED屏的控制、數模轉換、pwm脈衝(一個同學做了一個項目是用一個能通過一個帶wifi的mcu模塊控制遙控器)買回來工控機裝win7系統,老師拿到一些開發板,像Intel的伽利略,總是先考慮圖形化界面下編程,而且儘可能屏蔽操作系統,越高級越簡單的開發環境越好,可能是想注重一個系統的整體而不是優化,所以我們現在連伺服器都是windows的,基本不考慮Linux,學習的大部分是電路方面的知識,作為一個計算機專業的學生,開始迷茫了,感覺自己不是不感興趣,相反自己對軟硬體都感興趣,只是搞不懂嵌入式應該這樣做嗎?


謝邀。

完全可以其實我就完全不做Linxu。暫時也沒有用Linux的打算。

其實根據IEEE的定義「Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants」來看,嵌入式這個概念是包含很廣的電子電氣設備。

比如一個只用8051單片機和熱電偶做的檢測室內環境溫度的小電路板,也叫做嵌入式設備。(你覺得8051上能跑一個Linux系統么?)

一個做為步進電機或者無刷直流電機控制的驅動器,其PWM信號是由一個16bit or 32bit的DSP晶元控制。它可能可以上Linux,但沒必要,也不能上Linux系統。

嵌入式設備是否上操作系統,是看這個設備使用在什麼地方,如何用。


嵌入式linux和嵌入式mcu得分開哦。

嵌入式Linux也分寫driver和application的

嵌入式mcu也只是個工具,看你做什麼方向。

所以mcu開發者也不是必須會用linux。

當然兩者肯定有交叉的,比如去用rtos,因為大部分rtos是跑在mcu上,編程和裸機並無太大區別,但又因為引入了os的概念,會多出很多和linux開發相像的東西。

以下是個人私貨:

你說你是讀計算機的,所以我覺得你提高自己在軟體上的素養顯然比學習dsp去搞雷達,學習模電,射頻去設計電路更好,電路不是簡單的用一些野雞工具畫個pcb,深入起來都是很專業,很需要理論基礎的知識,所以不要妄想雙修了,最多輔修。。。

所以就算你只想做mcu,我覺得也有必要接觸下linux,或者^_^直接用linux做開發環境,因為linux是對開發者很有友好的系統,接觸各種千奇百怪的開源硬體,rtos,嵌入式庫起來比windows要舒服很多,能幫助你學習到很多有用的軟體知識。

在windows下安裝個rtos構建工具,編譯鏈都要半天,在linux下只要幾條命令。

在linux下可以很容易的自己寫構建腳本,寫調試腳本,自動化工作還不用糾結於keil,iar某個選項某個按鍵的意思。

總之,linux對開發者很友好,linux能提高你的軟體素養,所以用linux吧(逃

再回來。。如果你就是帶個ad讀讀數據,控制個da搞微波,電源板子,並不需要太多軟體技巧,還是別用linux了,好好學專業知識。


感覺lz對嵌入式這個概念還不是很清楚啊,其實嵌入式是一個很寬泛的行業,嵌入式分硬體和軟體工程師。而寫代碼的嵌入式軟體工程師呢,又分硬體驅動軟體工程師和應用軟體工程師。驅動軟體工程師的主要工作就調試好硬體,提供介面,讓應用軟體工程師可以調用相關的底層介面去操作硬體以實現相應的業務。

LZ你說的你們導師讓你們做圖像界面編程,其實就是做寫業務代碼的應用軟體工程師。那為什麼不用去深究底層硬體呢,因為你們拿到的都是晶元廠商做好的demo板,硬體外設驅動基本都已經由晶元廠商的驅動工程師調試好了,導師需要的就是你們在這個板子上面把他需要的業務開發出來,跑起來,這樣子就可以賣錢了。

看lz的樣子應該是對寫業務代碼興趣不大,對調試硬體驅動方面比較感興趣,我想80%電子出身的同學都應該是這樣子想的。

嵌入式要不要搞linux,其實linux沒有這麼難,去搞一塊三星的2440開發板,少打兩局lol,對著移植一遍linux系統,對整個嵌入式linux系統組成(boot、內核、驅動、根文件系統、應用程序)有個概念就可以了。然後我想你應該就知道自己想往哪個方向竄了,不要覺得linux很高不可及,linux也是一個很寬泛的概念。

好像因為搞嵌入式的基本都是從C51入門的,所以導致大家從一開始就覺得搞嵌入式就必須硬體、軟體都精通的樣子,其實這是個誤區。因為C51本身比較簡單,基本也不會上RTOS,通常就一個main函數while(1)就算是系統加應用了,所以我們才這麼覺得。但是真正稍微大一些的嵌入式系統,能完全一個人搞定硬體、操作系統、嵌入式應用軟體、PC應用軟體開發的是很少的。

所以LZ你要知道自己要往哪個方向發展,或者是天生大牛類型,可以通吃上面這些。

另外還是再說說驅動開發這個,想要做的深入,最好是進一家晶元公司,做晶元的驅動工程師,因為基本上90%的嵌入式公司都是買了晶元公司的demo板,稍微改一下板子,外面加些其他簡易外設,操作系統也是用的晶元公司移植好的,然後直接寫業務代碼做產品的。

還有LZ說的FPGA,90%的FPGA工程師也是FPGA應用程序開發工程師,開發業務代碼的,只是換了一種語言罷了。

總之術業有專攻,無論嵌入式硬體工程師也好,驅動工程師也好,應用工程師也好,做好了都是好工程師,錢都不會少,只是你要想好你要做哪種工程師。


謝邀,但我在這裡回答過這個問題了:計算機專業學生,在大學裡學到什麼是最重要的?

軟體是種技能,技能能讓你謀生,需要讓技能變成工作。好比你武功高,你要不當保鏢,要不當演員,要不打擂台什麼的,武功高不能讓你謀生。但武功高確實能讓你更好當保鏢,更好當武打演員(這個其實有點遠),更好打擂台。但僅僅有那個還不夠,如果你不知道黑道的規矩,不知道如何如何和客戶,和官府打交道,你還是當不好保鏢。

軟體是一樣的,你說你懂Linux,你知道Linux運行在PPC平台的時候,啟動的時候臨時映射的的內存有多大,是用段式映射還是頁式映射的嗎?你又知道2.6.18和3.18在這個問題上的實現上有什麼不一樣嗎?其實,如果你不是做PPC的最基礎的enable,你根本沒有必要知道,我估計連Linus Torvalds也不知道。

所以還是那句話,你在學校是學基礎知識的,學實操的東西能很讓人感覺「務實」,但只是錯覺而已。我這樣說,不是讓你不要不做好眼前要求做好的東西,但你的志氣得超越這點小東西。

好了,如果你可以明白這一點,如果單純從計算機專業學生這個角度,我認為你儘可能學會使用Linux(我說使用,包括日常應用,開發環境和直接對Linux進行代碼維護)。我們不要被網路上那些個裝B的觀點迷惑了,他們根本不是在討論Linux有什麼用,他們討論的是「我用Linux,我比你們Cool」,和「我不用Linux,我自豪,我冷靜」……這些都是面子,不是里子。

「里子」是什麼?「里子」是Linux代表了計算機演算法發展時間最長的名稱空間。posix這種使用最長時間的OS介面,仍是Linux開發的主流介面語言(在Windows上你早就看不見了——雖然它支持)。Linux又代表了最新的開發模式——「開源」。「開源開發」是把「維護分支」和「戰地分支」分離,使軟體架構可以做到極致。這些,都是「面子犯」們看不見的東西。他們們都沒有入門。而你,得先用得起來,然後才談得上入門。

說簡單點,你在Windows拿著那些工具寫半天,你知道你的代碼是怎麼被運行起來的么?——我現在做面試,99%的所謂程序員們都搞不清楚這個問題,他們從來當不了架構師,只是個工匠而已。

那就要看你如何選擇了。


對軟硬體都感興趣,你應該下學VHDL上學c語言進入IC業。

嵌入式嘛。。你還沒發現是坑?

————

一段對話,僅供參考

蕭井陌 00:03:45

你寫程序難道不希望有更快的電腦更好的屏幕更好的鍵盤滑鼠各種先進的工具?

蕭井陌 00:03:53

難道用最新科技不是你的願望?

蕭井陌 00:04:00

嵌入式毀掉了你的願望

蕭井陌 00:04:20

你寫嵌入式程序,面對的大部分問題,都不是技術問題,也不可能享受到最新技術。

蕭井陌 00:04:59

如果有錢,一段腳本難道不比c語言快?調用視頻難道還需要關心這個破板子用了什麼編譯不過去的破驅動?

蕭井陌 00:05:06

都應該是標準api才對

蕭井陌 00:05:16

你遇到的所有問題,解決的所有雜事,對你幫助不大。

蕭井陌 00:05:59

為什麼要為幾十年前的電腦寫軟體,嵌入式就是幾十年前的電腦,資源匱乏,工具鏈差,開發困難

蕭井陌 00:06:09

說完了


很多嵌入式設備不用linux的,都是被培訓機構忽悠的。


我其實是來反對(其實理解成補充也好) @蕭井陌 的答案的.

樓好多...先引用一下....

蕭井陌 00:03:45

你寫程序難道不希望有更快的電腦更好的屏幕更好的鍵盤滑鼠各種先進的工具?

蕭井陌 00:03:53

難道用最新科技不是你的願望?

蕭井陌 00:04:00

嵌入式毀掉了你的願望

蕭井陌 00:04:20

你寫嵌入式程序,面對的大部分問題,都不是技術問題,也不可能享受到最新技術。

蕭井陌 00:04:59

如果有錢,一段腳本難道不比c語言快?調用視頻難道還需要關心這個破板子用了什麼編譯不過去的破驅動?

蕭井陌 00:05:06

都應該是標準api才對

蕭井陌 00:05:16

你遇到的所有問題,解決的所有雜事,對你幫助不大。

蕭井陌 00:05:59

為什麼要為幾十年前的電腦寫軟體,嵌入式就是幾十年前的電腦,資源匱乏,工具鏈差,開發困難

蕭井陌 00:06:09

說完了

搞最新的技術, 不做雜事, 期望用更好的, 更先進的工具, 用更"易用"的標準 API, 等等等等.

我覺得是一件挺開心的事情.

但是, 除了這些之外, 其實還有一些動機在驅使著許多技術人去在這麼慢...這麼不先進...有這麼多雜事...這麼不標準的 API .... 上投入心血.

比如, 做出一個確確實實好用/有用/酷的產品.

我其實一直覺得技術人可能有兩個不同的方向, 一個是以技術為方向的, 鑽研最深入/最先進的技術. 一個是以業務和產品為方向的(不是說要轉 PM 的職位哈). 兩種人都很重要, 看不同人的喜好和選擇罷了.

貌似和題目沒什麼關係.... 摺疊我吧...


不行,原因是知己知彼的去了解其他東西。你在這個圈子混怎麼能不認識他們的老大?


就相當於沒讀九年制義務教育


一般也就是想了解一下你對嵌入式操作系統有多少了解.UCOS.RTT這類會也可以的.............


伺服器當然可以用windows. 但是你要定製嵌入式平台操作系統一般只能用linux. 既然板子跑的是linux, 不了解linux怎麼寫驅動,怎麼debug? 當然如果你的平台是arduino uno這種實時的microcontroller, 沒有os, 程序都是燒上去的也就無所謂了。


取決於你的目標。

如果混口飯吃,就按照老師說的做。

如果想出類拔萃,那麼至少得明白什麼是嵌入系統。這樣才能寫出來最好的程序。而windows給不了你這些。

屏蔽操作系統的代價是軟體效率低,優點是通用性。

但是,通用性那麼重要嗎?

看了樓上的回答,很多觀點我不太認同。

當然,我能夠理解大多數人不在乎技能,只在乎工資。

但是反過來想,你的無可替代的技能不就意味著無可匹敵的工資嗎?

膚淺的在計算機外面逛一輩子是在浪費生命。

不要受到外界的影響,看到計算機的本質。


推薦閱讀:

打算學慣用C語言進行linux網路編程,求推薦學習路徑?
不考慮非同步io的epoll方式的非阻塞伺服器端為了接收文件,臨時把socket設為阻塞,做法正確嗎?

TAG:Linux | 嵌入式系統 | Linux開發 | 嵌入式開發 | 嵌入式系統開發 |