【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】
? ? ? ? 隨著經濟越來越走向常態化發展,將來的公司基本是兩個趨勢,一個是公司越做越大,越來越趨向于壟斷;另外一方面,公司越做越小,可能2-3個人就能開公司、做產品、搞營銷。就拿linux來說,從前的linux soc開發可能很復雜,將來不管是芯片公司,還是硬件設計,其實一個人,多一點,1-2個人肯定是可以開發產品的。
1、選擇集成化程度高的soc
? ? ? ? 大部分soc都是運行linux,在這個基礎之上跑ubuntu,或者是android。不過如果人數不多,可以選擇集成化程度高的、可以定制image的、價格合適的soc,比如內置ddr的soc。一方面門檻低,另外一方面比較好上手,能做的東西多。
? ? ? ? 相比較mcu,soc生態豐富,cpu頻率高,特別是音視頻和網絡,優勢明顯。
2、購買板子
? ? ? ? 本著先軟件,后硬件的原則,一開始的時候不要自己做板子。買市場上相同soc的板子,如果沒有,買類似的板子即可。起初一定要降低難度,先邁出第一步再說。
3、安裝好交叉編譯環境
? ? ? ? 我們自己的電腦一般是跑windows系統的,開發的時候通常需要交叉編譯環境。這個時候要學會用virtualbox安裝交叉編譯環境。編譯uboot、編譯kernel、編譯rootfs,生成image之后,再用廠家提供的上位機軟件燒錄進去,這就算完成第一步了。
4、編寫第一個程序
? ? ? ? 第一個程序可以是hello world,可以是qt,根據自己的實際情況來。用交叉編譯完成之后,再用tf卡拷貝到板子上,如果跑起來,代表應用層沒問題,下面就可以正式進行開發了。
5、驅動用到哪個做哪個
? ? ? ? 常用的linux驅動其實不復雜,一般就是key、uart、gpadc、pwm、tf、屏幕、網口這些。很多的soc廠家,默認都帶了這些驅動。就算屏幕這樣的驅動,也是可以根據廠家的demo進行修改的。當然,屏幕本身特殊一點,不僅需要soc廠家的幫助,還需要屏廠的支持。
? ? ? ? 現在的驅動開發不復雜,主要就是看menuconfig、dts和dmesg,如果實在不行,就去看一下驅動代碼即可。廠家有芯片手冊提供還好,沒有的話,只能自己去慢慢扒了。
6、第三方庫添加
? ? ? ? 常用的第三方庫,最好自己會編譯,比如boost、opencv、qt、lvgl、xmlrpc、lua等等。不會編譯,廠家如果已經提供了對應的sdk,那也是可以的,這樣我們就可以直接借助于廠家的sdk進行軟件開發,不需要從0到1做起。
7、芯片特殊的sdk內容
? ? ? ? 很多soc有特殊的sdk,特別是硬件加速部分,這部分一般都是不開源的。不管是底層的ko驅動,還是上層的so、.a庫,我們可以參考它們提供的文檔和代碼,一點一點去坑,最終才能把soc的特色功能挖掘出來,而不是簡單的linux編程,這就沒意思了。
8、重點放在核心應用上
? ? ? ? 不管是硬件也好,軟件也好,本身都是為產品服務的。硬件是平臺,軟件是實施手段,產品才是最終目的。多去看看市場上什么產品賣的好,自己能不能做。如果能做,應該怎么做,怎么推廣。一開始不用想那么多,一步一步去實現,就會慢慢發現自己其實路走了很遠。
? ? ? ? 以應用為出發點,硬件、驅動、第三方庫都是隨時可以修改的。
9、先實現再優化
? ? ? ? 開發的時候,用git把代碼管起來。很多功能,先實現,再優化和測試。完成比完美更重要,特別是一些常年銷量比較高的嵌入式產品,肯定有一些槽點是一直沒有解決的,這部分就是個人開發的機會。技術本身,只是手段,不是目的。