Android是基於Linux內核的軟件平臺和操作系統,是Google在2007年11月5日公佈的手機操作系統平臺,早期由Google開發,後期由開放手機聯盟(Open Handset Alliance)開發。它采用瞭軟件棧分層的架構,主要分為三部分。底層以Linux核心工作為基礎,隻提供基本功能;[……]
標籤: 培訓班
Android培訓班(2) – Android移動開發技術文章_手機開發 Android移動開發教學課程
前面介紹瞭怎麼樣配置編譯環境、編譯代碼,那麼現在就開始把編譯出來的目標文件寫到開發板裡運行瞭,以便確認整個系統是可以成功運行的。一個完整的Android系統至少由三部分組成,分別是bootloader、kernel、rootfs,這與典型的linux系統的結構是一致的。下面介紹如何燒寫一個完整的An[……]
Android培訓班(3) – Android移動開發技術文章_手機開發 Android移動開發教學課程
從linux目錄裡可以看到如下圖所示:
現在接著來介紹一級目錄的大體功能:
bin:這個目錄主要用來放下載android代碼的執行文件。
bionic: Android的libc庫,包含瞭一些基礎庫,其存在的意義在於其可規避GPL,同時減少庫的體積,針對arm進行指令和內存優化。
bo[……]
Android培訓班(4) – Android移動開發技術文章_手機開發 Android移動開發教學課程
要想Android運行起來,不但要編譯內核正確,還需要有正確地安裝根文件系統,才可以運行起來。第一步,就是從模擬器裡提取data目錄的數據。也許你會問,為什麼要從模擬器裡提取呢?因為這樣做是最方便的,不必要每個目錄和文件,都要自己去建立。在一個終端裡運行模擬器,並且運行android系統正常,然後再[……]
Android培訓班(5) – Android移動開發技術文章_手機開發 Android移動開發教學課程
在一塊開發板裡,當加電時,它是直接從CPU缺省的地址開始加載指令,然後進行運行。目前設計的嵌入式芯片,都帶有一段小小的引導代碼,但這段代碼功能都是比較有限,隻支持加載幾百字節然後跳到相應內存運行,比如不帶網絡加載,不帶RAM初始化,不帶USB驅動等等,不過現在S3C6410引導功能也比較[……]
Android培訓班(6) – Android移動開發技術文章_手機開發 Android移動開發教學課程
網絡文件系統(NFS,Network File System)是一種將遠程主機上的分區(目錄)經網絡掛載到本地系統的一種機制,通過對網絡文件系統的支持,用戶可以在本地系統上像操作本地分區一樣來對遠程主機的共享分區(目錄)進行操作。
在嵌入式Linu[……]
Android培訓班(7) – Android移動開發技術文章_手機開發 Android移動開發教學課程
在嵌入式linux開發過程中經常需要從電腦下載引導程序uboot,如果每次都使用燒寫到flash或者SD卡的方式,那是比較低效率的開發方式,導致公司沒有競爭力,開發出來的產品也沒有競爭力,在市場上就會落後挨打瞭。
這裡就來介紹tftp方式從linux主機下載文件到開發板裡運行,因此需要[……]
Android培訓班(8) – Android移動開發技術文章_手機開發 Android移動開發教學課程
Android的代碼是比較龐大的,如果要全部編譯一遍,是花費比較多時間,這樣導致開發效率非常低,那麼有沒有辦法隻編譯修改那一部份代碼呢?答案是肯定有的,因為面對這麼多代碼,如果沒有好的方法是開發不成功的。下面就來學習怎麼樣單個目錄編譯的方法。
在android的頂層目錄裡,運行下面的命[……]
Android培訓班(9) – Android移動開發技術文章_手機開發 Android移動開發教學課程
android系統的初始化過程是從那裡開始呢?它在加載linux基本內核後,就開始運行一個初始化進程,叫做init進程,那麼怎麼樣知道它是加載init進程的呢?難道上天就註定的嗎?呵呵,不是的,原來是從android加載linux內核時,就設置瞭下面的參數:
Kernel command line:[……]
Android培訓班(10) – Android移動開發技術文章_手機開發 Android移動開發教學課程
Android培訓班(11) – Android移動開發技術文章_手機開發 Android移動開發教學課程
Android培訓班(12) – Android移動開發技術文章_手機開發 Android移動開發教學課程
#059
#060 get_hardware_name();
這段代碼是獲取當前android系統運行的硬件信息,比如硬件的CPU名稱。主要從/proc/cpuinfo裡讀到相關的信息。
#061&[……]
Android培訓班(21) – Android移動開發技術文章_手機開發 Android移動開發教學課程
前面學習瞭屬性系統的初始化和加載,還有保存到屬性文件等功能,下面來學習屬性服務的方面,它主要用來提供一種服務的方式給java虛擬機上層使用,或者java應用程序使用。start_property_service函數的代碼如下:
#001 int start_property_servic[……]
Android培訓班(25) – Android移動開發技術文章_手機開發 Android移動開發教學課程
<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>
其中Android.mk是工程管理文件,to565.c是源程序,就是實現原始圖片生成565格式,或者從565格式的圖片生成原始格式。那麼什麼樣的格式叫做原始格式呢?什麼[……]
Android培訓班(13) – Android移動開發技術文章_手機開發 Android移動開發教學課程
Android培訓班(14) – Android移動開發技術文章_手機開發 Android移動開發教學課程
Android培訓班(15) – Android移動開發技術文章_手機開發 Android移動開發教學課程
在主函數main裡調用這個函數來做什麼呢?而這個函數是怎麼樣實現的呢?下面就來瞭解這個函數的功能與產現,具代碼如下:
#001 void open_devnull_stdio(void)
#002 {
#003 in[……]
Android培訓班(16) – Android移動開發技術文章_手機開發 Android移動開發教學課程
parse_config_file函數是分析*.rc配置文件,並且把裡面的參數組成鏈表的方式。下面來仔細地分析代碼,如下:
#001 int parse_config_file(const char *fn)
#002 {
輸入來的參數是文件名稱的路徑。
#00[……]
Android培訓班(17) – Android移動開發技術文章_手機開發 Android移動開發教學課程
在上面函數主要識別的關鍵字有:
copy capability chdir chroot class class_start class_stop console chown chmod critical disabled domainname device exec export group ho[……]
Android培訓班(18) – Android移動開發技術文章_手機開發 Android移動開發教學課程
通上面的函數就可以把服務和事件觸發的命令添加隊列裡。其實是在文件parser.c頭部,就聲明瞭下面三個鏈表,如下:
static list_declare(service_list);
static list_declare(action_list);
static list_decl[……]
Android培訓班(19) – Android移動開發技術文章_手機開發 Android移動開發教學課程
在init初始化進程裡,設備初始化是怎麼進行的呢?如果要瞭解這方面,就需要仔細分析下面的代碼,如下:
#001 int device_init(void)
#002 {
#003 suseconds_t t0, t1[……]
Android培訓班(20) – Android移動開發技術文章_手機開發 Android移動開發教學課程
在android系統裡,設計有一種系統叫做屬性系統,它是用來做什麼呢?這樣設計有什麼優勢呢?其實這個屬性系統主要是用來保存系統配置,或者用來交換不同進程的信息。這樣的系統最大的優勢是統一瞭系統配置的方式,統一瞭信息交換方式,通過共享內存的方式提高系統的性能。
下面就來分析屬性系統的初始化函數,代碼如[……]