天天看點

我學嵌入式Linux(一)吐槽

1.第一次寫文章,記錄些無關的東西,因工作和學習的需要,買了友善之臂的Nanopi Neo小開發闆,初衷是等着将來空閑有心情且想學的時候,學習下嵌入式Linux系統方面的知識,工作快7年,剛開始接觸這塊,很多優秀的工作機會都是跟系統相關,這塊沒啥經驗隻能望而卻步。

2.選擇這款開發闆的原因,便宜,小巧玲珑,配上鋁制的盒子,看着舒服,就當買塊磚頭也罷。

3.以前不是沒有學習嵌入式linux開發闆的想法,看到那些繁瑣的工具鍊安裝,還要在linux系統裡面操作,真是麻煩,哪有單片機的開發環境簡單,比如keil,連makefile都給省了,隻需要關心晶片的核心内容,時鐘,終端,外設配置,ram空間檢查下,任務邏輯,用IDE一步步調試,沒了。

反觀嵌入式Linux系統開發,除了晶片硬體相關的外,還要懂makefile;ld linker腳本文法;線上調試還需要知道gdb的指令;改uboot要知道uboot下面的指令,跑Linux系統還需要熟悉Linux的環境,samba,NFS網絡共享;添加裝置,要修改裝置樹,還有裝置樹文法;還要添加裝置驅動,有了驅動後根據應用還要開發應用邏輯功能的開發,還有roof檔案系統的制作。。。這些學校裡沒有相關課程,工作後買了書,千篇一律,大都還是基于老版本的Linux核心,更多的是操作,看了就想睡覺。

4.機緣巧合,新工作需要在rk3399上添加個小驅動,隻能硬上,一開始虛的不行,看資料的效率賊高,推薦一本,宋寶華的,基于Linux4.0核心的《Linux 裝置驅動開發詳解》,Linux裡面那些關于信号量,字元驅動,塊驅動的幾乎别的嵌入式系統資料都有,這本也不例外,這本多了些裝置驅動的軟體架構思想,裝置樹dts,dtsi檔案文法的介紹,針對的核心比較新,比什麼5-6本寶典系類的要好多了,之前買了個寶典,具體多少本記不清了,翻了一遍,體會就是,把知識寫薄的書才是好書。Uboot和Linux本身自帶document檔案夾,全部吃透肯定牛掰,書本講那麼多的例子,感覺是為了填充紙張。

5.友善之臂推出的開發闆,一般都附帶開發環境和所需要的工具鍊,使用者所需要的做的任務就是複制,copy,抄(與某國的技術發展之路保持高度一緻)。原理步驟咋辦,管他呢,先把友善的系統運作起來再說,後來發現抄的路也不是很順利,這個Nanopi Neo的編譯環境,除了安裝工具鍊,源代碼外,還搞了一套生成SD卡鏡像檔案的環境,用了bash等腳本自動跑,連python,swig等工具安裝也包含在裡面,至今不明白這裡面到底在幹嘛,也真不想了解(雖然想,但驅動這些核心我都沒開始整,鳥你幹嘛)。最終,依葫蘆畫瓢,可以到達手冊的操作結果了(一般這時候阿Q精神會附體,so easy)。

6.如何改之,首先先有具體的需求和硬體實驗驗證的環境(我是因為工作),做法還是依葫蘆畫瓢,Linux是國外設計出和維護的(作業系統的疼),大部分驅動問題網上總能收到類似的,比如,如何在裝置樹中的I2C下添加裝置,驅動咋添加,用printk列印,可以定位驅動内部大部分邏輯問題。系統核心的研究(很多面試官都會問這句,特别高大上,真正研究改它的,有自信改了,也不敢随便用吧)随緣吧(我也想一口吃成胖子)。目前就寫了兩個驅動,一個SPI驅動和外設通信;基于現有的Alsa架構,更改audio codec的驅動;App應用通路之可行。

寫這兩個驅動接觸到了,

裝置樹及其文法

platform驅動思想(晶片的外設控制器皆為platform)

alsa聲霸卡codec i2c驅動,SPI字元驅動

其他也沒啥了

7.後續計劃研究下uboot過程和具體實作,啥relocation,board_f,board_r, dtb,boot啟動指令等,到底怎麼就進系統了,裡面怎麼轉?

8.為啥用linux,從使用者的角度來說,linux有很多現成的工具,比如samba,nfs服務,網絡等等,更新一下就可以直接用了。測個晶片的SPI接口,用linux系統搭個測試平台就太那個啥了吧。。。

9.Linux雖然一直在更新,但整體的架構更新是很慢的,了解思想,保持活到老學到老的心态,管他呢。。

10.公司以賺錢活下去為第一任務,學習要圍繞應用為首要目的,能不上系統就用單片機,能不自己寫就外包,uboot裡面readme好像有個開發者就說,有錢就請人搞,沒錢有時間自己搞,沒錢有時間但搞不定就換方案吧。當然這些好像不是說給我等屌絲聽的,一種向往吧,祝你們都有一天把錢砸我臉上,我搞。

繼續閱讀