Linux內核中許多晶元的驅動程序都已經存在,為何還要開發這些晶元的驅動?
Linux內核中許多晶元的驅動程序都已經存在,為何還要開發這些晶元的驅動?(驅動小白~)
1、Linux驅動很全,但是你用的版本的Linux未必驅動就是全的。題主是搞嵌入式Linux的吧?不一定所有嵌入式都用最新版的Linux,用2.x的大有人在,沒驅動怎麼辦?移植一個吧。
2、Linux原生驅動有很多bug,可能新版本已經fix了,但如果沒fix要想辦法改了,改法參照第一條。
3、還是有很多生僻的設備沒有Linux驅動的,這種我見過很多,全世界硬體那麼多,Linux和Windows都無法做到全覆蓋。沒驅動怎麼辦?自己寫吧。
4、晶元的新功能Linux驅動里未必就有。
能想到的就這些,待補充。我來試著簡單回答下,題主可能沒明白linux驅動的架構,我覺得這裡面主要有兩個地方需要說明:
1. 一些驅動是和SoC內的控制器的驅動,或者說是平台相關的。Linux提供了一些介面的總驅動,也就是介面,但是至於這個借口具體如何實現,是平台自己需要做的。例如,你有一個晶元上面有SPI介面,Linux提供了SPI驅動的介面,但是當其他的驅動調用到spi transfer的函數的時候,具體該怎麼實現,是跟SoC相關的,這個需要平台廠商去實現。
2. 外設的驅動。Linux內核里確實有大量的外設的驅動,但是嵌入式設備里,外設有千千萬萬,不可能每一種設備都有對應的驅動,所以總是有些要自己去實現的。退一步說,就算這個驅動Linux內核里已經有了,但是驅動實現的功能可能不能滿足你的需要,這時候就需要適當修改。再退一步說,就算功能也不需要改,但是不同平台上,連接的方式總是不同的,比如說掛載在哪條匯流排上,用了哪個GPIO,怎麼供的電,這時候也需要做一些基本的配置,ARM Linux里這些信息是寫在Devicetree裡面的。
其實驅動工程師做的工作還是挺多的,上面就是簡單講了兩點,這是最基本的,希望能幫到你。如果你是在ic原廠,像海思,展訊,amlogic ,瑞星微,全志這種公司工作怎麼辦。。難道你的驅動還是別人開發的?
有種坊間不靠譜說法「Linux開發中,90%是在做驅動開發」,雖然這種說法正確性值得商榷,但是某種程度上說明了Linux驅動開發的需求。
//--------------------------------verilog version-------------------------------------------------------// 先佔個座,下班寫#--------------------------------python version-------------------------------------------------------Linux內核的確已經集成了大多數已經存在的晶元驅動了,但總會有新出來的晶元在內核中找不到驅動的。真正在做Linux內核驅動開發的公司大多是一些晶元設計公司,比如:TI、Intel、Qualcom、Marvell、聯發科等等(當然,還有很多,比如開發顯卡、網卡、網路通信晶元、圖像感測器晶元的公司),他們的晶元推出後,一般需要編寫各種平台的驅動代碼,以便客戶能夠快速應用到自己的產品中。如果你對Linux驅動開發特別感興趣的話,推薦關注這些嵌入式/晶元公司。
我猜你不是講驅動,而是講BSP。講一個最簡單的事情,就算Linux當中含有我所有要的驅動,這些驅動針對某一個晶元的具體實現。但是老大,ARM上ACPI才推行幾年?何況也不流行。那SoC怎麼知道我在我IO port上連接了那些傢伙?何況我又要把這些IO port配置成什麼模式?ARM當中一個IO可能可以工作在GPIO模式,又可工作在SPI模式(作為當中一個腳)。所有,我需要一個board file,不過現在都改dts模式了,來配置kernel,決定什麼IO port要工作在什麼模式,什麼驅動要被加載,並且要使用哪些IO port,等等資源(記憶空間,工作模式)來工作。
1,很多晶元的驅動都已經存在,為什麼存在呢。也之前開發出來了哦。
2,雖然這些驅動已經存在。但不可能正好適應你所用的環境,需要移植。好像大學在網上抄個c語言程序,也要做修改才能編譯過吧。
3,軟體肯定不是完美的,驅動一樣。如果驅動出現問題或晶元無法正常工作。這都是需要驅動開發人員去發現和解決問題的。4,晶元功能新需求。要對原生驅動做修改和增加功能介面才能滿足需求的。推薦閱讀:
※本人想從事嵌入式開發,求指點該怎麼一步一步打基礎?
※lvs 性能,轉發數據的理論極限?
※為什麼很多人喜歡把磁碟分多個區?
※Linux 粉是怎樣煉成的?
※linux 分區有什麼好處?哪些是必要的?