刷機那點事兒

昨天閒的蛋疼,忙活一個下午給手機換操作系統。結果鋪天蓋地的教程看的我淚流滿面...


最新的Android已經到2.3.4了,我那還是Android 2.1的,有個比較大的缺陷是軟件不能裝到SD卡里,所以當時用很快就讓空間爆滿了,一個Fruit Nija怎麼都裝不上去T T。而且據說2.2以後的系統對內核做了待機優化,可以省下不少電。...另外還有感覺比較糟糕的一點是網絡問題,好像經常會阻塞在那裏,一定要等阻塞結束才能繼續上網。


綜合各種原因於是決定把原配踢飛了。


這是我第一次刷手機,之前聽多了某些人危言聳聽,搞的很是焦慮。爲了防止意外發生,於是幾乎把各式各樣的教程都看了一遍。。。


從刷機一點頭緒都沒有到確認使用某幾個教程是花了點時間的,挑選系統和引導也費了點心思,大概共打開了近百個網頁,一個個看過,關掉。教程已經多的跟雪花一樣,我就不再貼了,反正我也是用了別人的方法。


這學期上嵌入式系統的3門課(嵌入式系統原理、嵌入式WinCE、嵌入式Linux),其實也就是天天刷機器,其實就是各種電子設備的簡陋版。所以就算這回換成了手機,也能見到其中諸多類似的地方。


系統程序保存在ROM中運行,一般分爲兩部分——引導程序和系統程序。

其中“引導程序”並不是操作系統內部的引導程序,而是類似於PC上的BIOS,它實現了由硬件提供的接口,由此“引導”完成一些初始化工作,再爲操作系統提供啓動的接口。只要目標操作系統實現了這個接口便可以順利“接軌”啓動了,接下來的工作交給操作系統的boot進行。


雖然是ROM(Read Only Memory),也只是說不能通過常規手段寫入,但並不是完全不可寫,通常使用特定的燒寫器都是可以把數據寫入的,其實就是ROM提供了特定的寫入開關,平時不開啓,但只要打開開關就沒問題了。


以前給MP4燒過系統,很簡單,只要按照教程在PC上開個軟件,再下載系統文件firm一下就可以了。這個跟上面提到的兩個部分不大一樣。燒MP4的時候並沒有改動基礎BOOT,而新操作系統對老BOOT的接口實現也沒有變動,所以只燒一個程序就可以了(接口統一的好處啊,所以定義接口的時候一定要慎重)。


這學期涉及的嵌入式系統三門課之中,嵌入式原理是最底層的。前面幾節課連底層BOOT都要我們自己編寫(Assembly),代碼倒是尋常,就是配置麻煩,要手動設置起始地址。這在前面幾節課初次接觸的時候比較頭疼,對那些數據不容易理解,不過半個多學期下來,覺得這些也是不足以成爲焦慮的理由,其實都是可以通過芯片使用手冊清楚的(即所謂“硬件”接口)。以後對於任意新的芯片過來,只要開發人員只要仔細閱讀手冊即可。如果手冊寫的不好,開發人員不會用是很正常。


後來嵌入式原理課程終於脫離彙編進入C語言時代了(C實際上也算是低級語言),其實還是不能完全擺脫彙編。在C運行前,還是需要用匯編編寫相應初始化代碼,才能讓C運行起來。這裏跟上面提到的手持設備兩部分程序類似,都是提供了底層引導,然後才能由主程序繼續運行。主要是因爲芯片內部沒有操作系統,而PC上相應的工作由編譯器和操作系統分工完成了。


後來稍微深入看C++,知道全局變量是在main運行以前就在一個初始化隊列裏初始化完成的,也就是相當於在給C++提供運行環境的階段吧,只是添加了一些高級機制,如這裏的初始化隊列,這是編譯器的功勞。


以前對大二和上學期上的《計算機組成原理》、《彙編語言》、《微機接口技術》、《操作系統》這幾門課的確是厭煩,不過現在來看的確都是依賴這幾門課的。就算以前不學到後來也還是要補,以前上課都在打醬油,有的課是因爲老師噁心,有的是因爲不對胃口,有的是因爲那陣子忙其他的去了...總之這幾門沒有一門學的像樣的。現在倒也談不上有多後悔,這是很正常,就算讓我現在去上這幾門課我毫無疑問還是會去打醬油的。不過打醬油的時候好歹大概把這門課說的是什麼個故事搞清楚了,其實也足夠了。就像對於程序,我們要做的也只是在不同的抽象層次上切換着工作,逐層去完成,並沒有把所有的源代碼都看一遍——這顯然是扯淡。程序員的工作歸根結底就是Code Manager而已。雖然編碼的工作少不了,只是相對管理代碼而言,編寫幾行代碼實在是沒啥難度罷了,隨手一編(要知道很多公司老闆或者科學家都是自己寫代碼來輔助工作的)。


高級語言的目標也是讓開發越來越簡便,越來越多的人可以順利的開發。所以如果開發人員只是在意自己是否能寫一手好代碼那就太OUT了,雖然這也是基礎的一部分。時代變了,現在講的不是單打獨鬥寫個好代碼,而是“軟件構建”(注:軟件構建也只是軟件工程的一個環節罷了)。——貌似有點扯遠了,不過對於計算機專業的嵌入式課來說,還真談不上是“搞硬件”——如果這個概念不是說手碰到了CPU和ROM就可以認爲是搞硬件的話。說穿了都是程序,只是脫離了PC罷了,廣義的計算機,包括一切有稍具運算能力的設備。只是個別地方要稍稍有點電學知識罷了,跟電氣工程師那還差得遠,現如今計算機領域對電氣層細節屏蔽,只要知其然就夠了。


經常可以看到搞低級語言的歧視搞高級語言的,說他們不懂原理,搞算法的鄙視做應用的說他們搞小兒科。各自只是工作在不同的抽象層面上罷了,如果一個個東西都要一下子搞清楚過去,估計學個3、4年也未必能做個像樣的東西出來。計算機系的這個地方酸的不得了,都說文人相輕,幾個程序猿還相輕了,屌絲何苦爲難屌絲。我覺得還是要儘快找到自己希望進入的層面,然後前人的知識迅速整合起來,跑前線去工作,不要在從小學數學英語語言學到大學還在基礎基礎了。所以我覺得之前花了2、3個學期學什麼組成原理,什麼彙編操作系統的,浪費時間了。其實可以兩三週上完的。這也是大學其中一個噁心的地方,隨便來一門課不給你上個一個學期根本不甘心。另外還從不把教學效果和學生時間當回事兒,大學你個碧池。


還是回來說手機,手機用的是ARMv6的CPU,實驗室用的ARM7和ARM9,不過手機作爲一個產品刷起系統來的確麻煩了不少。沒有試驗儀上面調試的這麼方便。由於只有一根寒磣的USB線跟電腦連,所以所有的燒寫工作都交給USB了,免不了要裝一大堆特殊的USB驅動。這些驅動沒有整合成統一的驅動包,所以基本上一塊功能一個驅動,要裝好幾個,但其實本質就是幾個通信協議了。


先要關閉手機,然後啓動fastboot模式,然後由PC端軟件發送指令和數據到手機。Android手機還有個麻煩的地方,即系統和boot都必須是配套的,所以只能先刷boot,再刷系統。一般手持設備都內置了好幾個模式,需要通過特殊按鍵觸發。通常有的人說手機刷成磚頭了,大概都是因爲在刷boot的時候杯具了,然後系統既起不來,也不知道怎麼重新刷boot進去吧。


如果連boot都崩潰,那最後能夠挽救手機的也只有硬件開關了,通過硬件開關再打開放boot的地址空間就是,做到這一點方法有很多,總之並不難。所以除非那些產品的工程師是白癡,不然應該是要考慮到這點的。


boot燒完之後,只要讓手機切換到Recovery模式(手機boot裏的一部分功能,也要用硬件開關觸發),再由Recovery程序尋找系統鏡像安裝系統。


不過通過這種方式我燒失敗了。原因是網上的boot和系統鏡像很多都是分開發布的,但要順利安裝則這兩個必須成對。我試了好幾個都提示不匹配,最後沒轍用了另外一種方法。(網上說什麼線刷卡刷,看的我暈死,那麼多概念根本就懶得鳥)


另一種方法是軟件包辦,裝了一個SUT(Software Update Tool),然後手機開啓fastboot模式,然後配置下軟件點幾下鼠標就刷好了。這個原理也很簡單,只要驅動安裝好,這個軟件就可以自己找驅動提供的接口去代替手工操作就是。


手機成功刷到2.3.4,論壇上說2.3.4這裏有問題,那裏有問題,弄的我提心吊膽,生怕出什麼問題又要重新刷。不過放我手機上好像沒有什麼明顯的問題,至少用了一天是這樣。一切正常,不知道是界面確實好看了還是我看2.1的界面看久了覺得膩,總之感覺不錯。軟件都交給一個叫“豌豆夾”的軟件了,可以直接在PC端完成下載安裝一條龍,也可以發短信備份通訊錄什麼的比較方便。


上WinCE的時候用過Platform Builder,用於定製WinCE軟件,設置編譯選項之後編譯一下再扔設備上運行就可以了(即交叉編譯)。關鍵參數有幾項用於選擇運行環境的,主要是CPU型號,有些設備上的指令和內存是高位存儲的,有些是低位存儲的,都知道編譯後的東西是2進制文件,一旦高底錯位根本就不可能正常運行,這也是導致不能兼容的主要原因。一般可以通過CPU去區分(一般存儲器控制單元都做在CPU上,存儲器本身並不自行管理)。


該軟件先是提供了WinCE操作系統內核和一些常用的軟件,再給你一個像Soft Market的工具條,可以按需要把它加入到目標系統裏,大多是些源代碼。這丫放到實驗室那破電腦要編譯10分鐘,以爲很久,結果Linux下面很多軟件一編譯就要大半小時,才知小巫見大巫。Android用的是Linux內核,不過大體上做系統也應該跟WinCE的方法差不多的。只要有有心之人做個集成環境,相信會自己做系統的就有一大片了。主要編譯的時候不要弄錯CPU就行了,很多手機剛安裝完系統就在裏面的軟件都是在構建系統的時候這麼放進去的。


如果沒有IDE就比較麻煩,前幾天給Linux編譯軟件,發現編譯器的編譯選項各種複雜...或者也不能說複雜,總之就是要翻手冊纔好看懂,再加上那些亂七八糟的設置---比如對應用軟件的源文件放置肯定也是有一些要求的,這樣純手工去操作就會比較麻煩。


...Android用戶默認是沒有Root權限的,後來被很多人給Hack出來,我手機的系統就這麼給QJ了..現在用的惴惴不安。萬一弄進什麼吸金軟件我就欲哭無淚了...

 

等有時間咱自己做一個rom去。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章