第一篇:基于Android平臺軟件開發(fā)技術(shù)研究論文
在科技持續(xù)發(fā)展的浪潮下,移動式操作系統(tǒng)應(yīng)運而生,移動終端傳統(tǒng)定位發(fā)生了質(zhì)的變化,移動終端已成為移動網(wǎng)絡(luò)業(yè)務(wù)方面的核心平臺以及應(yīng)用載體,有利于移動互聯(lián)網(wǎng)產(chǎn)業(yè)持續(xù)發(fā)展。就Android平臺技術(shù)開發(fā)而言,建立在AndroidFramework基礎(chǔ)上,開發(fā)相關(guān)程序的同時,采用Java編程語言,必須綜合分析主客觀影響因素,客觀分析Android平臺軟件開發(fā)技術(shù),將其靈活應(yīng)用到實踐中,更好地發(fā)揮自身多樣化作用。
1Android系統(tǒng)架構(gòu)與Android軟件開發(fā)流程
1.1Android系統(tǒng)架構(gòu)
站在客觀的角度來說,Android是一種移動式操作系統(tǒng),以Linux內(nèi)核為基點的嵌入式開發(fā)平臺。由于面向移動智能終端,Android系統(tǒng)也是一種作用于移動智能終端的軟件棧,其架構(gòu)可分為多個層次,比如,中間件層:多種庫、運行環(huán)境;操作系統(tǒng)層:Linux內(nèi)核,各結(jié)構(gòu)層次處于隔離狀態(tài),有利于軟件開發(fā)人員更加關(guān)注其具體的應(yīng)用需求,更好地滿足不同層次客戶多樣化客觀需求,提高他們的滿意度。
1.2Android軟件開發(fā)流程
以Android平臺為基點的應(yīng)用程序開發(fā)建立在Java語言基礎(chǔ)上,和Android系統(tǒng)和Linux內(nèi)核開發(fā)緊密相連,建立在Linux內(nèi)核開發(fā)基礎(chǔ)上,其中的C/C++語言必須滿足特定情況下的客觀需求。Android平臺具有多樣化的優(yōu)勢,靈活性、開源性、可移植性等,應(yīng)用到其開發(fā)環(huán)境中的開發(fā)工具、軟件開發(fā)包特別多,必須根據(jù)具體情況,加以優(yōu)化利用。在搭建Android平臺環(huán)境中,軟件開發(fā)人員必須綜合考慮主客觀因素,科學(xué)設(shè)置和PC操作系統(tǒng)相關(guān)的環(huán)境變量,將Path值、CLASSPATH值等巧妙添加到系統(tǒng)變量中,將PATH值等巧妙添加到用戶變量中,搭建好Android平臺開發(fā)環(huán)境之后,應(yīng)用程序開發(fā)人員可以圍繞其開發(fā)環(huán)境,開展一系列相關(guān)的軟件開發(fā)工作。在此基礎(chǔ)上,應(yīng)用程序開發(fā)人員要以Android平臺為基點,合理開發(fā)移動式應(yīng)用系統(tǒng),全面、深入研究對應(yīng)的啟動流程,確保軟件開發(fā)各環(huán)節(jié)順利進(jìn)行,避免增加開發(fā)成本。
2基于Android平臺的軟件開發(fā)技術(shù)
2.1數(shù)據(jù)存儲技術(shù)
在應(yīng)用軟件開發(fā)過程中,數(shù)據(jù)存儲是必不可少的關(guān)鍵性環(huán)節(jié),關(guān)乎相關(guān)軟件的順利實施。在Android平臺中,數(shù)據(jù)存儲并不單一,即內(nèi)部存儲、外部存儲,文件存儲、SQLite數(shù)據(jù)庫存儲、系統(tǒng)配置都屬于前者,網(wǎng)絡(luò)、內(nèi)容提供器屬于后者,內(nèi)部存儲技術(shù)在Android平臺軟件開發(fā)中的應(yīng)用特別多。在開發(fā)過程中,開發(fā)人員要借助SharedPrefereneces類,一種并不復(fù)雜的數(shù)據(jù)存儲方式,借助鍵值,有效存儲基本數(shù)據(jù)信息,有利于合理保存應(yīng)用軟件的系統(tǒng)配置,確保應(yīng)用軟件處于高效運行中。就文件存儲而言,開發(fā)人員要優(yōu)化利用Linux文件系統(tǒng),創(chuàng)建對應(yīng)的私有文件,只有應(yīng)用程序才能進(jìn)行訪問,存儲一系列信息數(shù)據(jù),而文件可以保存在存儲器、外部存儲設(shè)備上。在文件訪問方面,就Android平臺來說,TAVA多種輸入與輸出方法等都能順利實現(xiàn),甚至可以提供和文件讀寫相關(guān)的函數(shù)。同時,在該平臺軟件開發(fā)中,開發(fā)人員采用的用戶ID并不相同,創(chuàng)建的各類文件具有鮮明的私有特點,只有用戶自己才能訪問。如果必須交換信息數(shù)據(jù),相關(guān)人員必須優(yōu)化利用外部存儲技術(shù),借助內(nèi)容提供器,在兩個或者以上程序中順利進(jìn)行。就SQLite數(shù)據(jù)庫存儲來說,相關(guān)人員要借助標(biāo)準(zhǔn)化的SQL語句進(jìn)行一系列的操作,采用ASCII碼形式存儲各類信息數(shù)據(jù),以Android平臺為基點的數(shù)據(jù)存儲提供的類可以簡化SQLite數(shù)據(jù)庫操作,創(chuàng)建數(shù)據(jù)特別方便,SQLiteDatabase類可以封裝該數(shù)據(jù)庫運行中的接口數(shù)據(jù)信息,使其相關(guān)操作更加簡化,比如,查詢、添加,而SQLiteOpenHelper類也可以進(jìn)行多種操作,創(chuàng)建新的數(shù)據(jù)庫、打開并關(guān)閉數(shù)據(jù)庫。以創(chuàng)新新數(shù)據(jù)庫為基點,相關(guān)人員要客觀分析應(yīng)用軟件相關(guān)的數(shù)據(jù)表格,結(jié)合應(yīng)用程序特征、性質(zhì),合理創(chuàng)建并打開數(shù)據(jù)庫,再創(chuàng)建SQLiteDatabase類、數(shù)據(jù)庫接口,以數(shù)據(jù)庫接口為紐帶,巧妙利用SQL語句,進(jìn)行相關(guān)操作,并創(chuàng)建合理化的查詢接口,便于查詢創(chuàng)建的數(shù)據(jù)庫及關(guān)閉數(shù)據(jù)庫。在開發(fā)數(shù)據(jù)庫中,想要控制與訪問其他應(yīng)用數(shù)據(jù)庫,需要將SQLite數(shù)據(jù)庫封裝到ContentProvider中,以順利實現(xiàn)信息數(shù)據(jù)處理的共享。
2.2二次開發(fā)技術(shù)
二次開發(fā)技術(shù)也是基于Android平臺軟件開發(fā)重要組成元素之一,體現(xiàn)在兩個方面:以應(yīng)用層為基點的開發(fā)技術(shù)和以底層組件為媒介的開發(fā)技術(shù)。應(yīng)用開發(fā)技術(shù)的開發(fā)周期并不長,技術(shù)也比較成熟,在Android平臺軟件開發(fā)中的應(yīng)用特別多,優(yōu)化利用Framework開發(fā)框架,充分發(fā)揮JAVA通用類庫及Android平臺相關(guān)類庫多樣化的作用,以便順利進(jìn)行該應(yīng)用程序的二次開發(fā),借助JNI機(jī)制功能與NDK二次開發(fā)工具,二次開發(fā)底層組件。當(dāng)下,由于科技迅猛發(fā)展,不同行業(yè)和領(lǐng)域的很多公司都建立了Android平臺的二次開發(fā)平臺,有利于Android平臺一系列軟件順利進(jìn)行二次開發(fā),提高其利用效率,還在一定程度上簡化了二次開發(fā)一系列操作,縮短了該平臺軟件開發(fā)周期,大幅度提高了開發(fā)效益。就應(yīng)用層開發(fā)技術(shù)來說,谷歌公司還提供了相應(yīng)的droidFramework開發(fā)框架,其中包含了無數(shù)的API二次開發(fā)接口,優(yōu)化利用Java通用類庫及Android特殊化類庫,順利對應(yīng)用程序進(jìn)行二次開發(fā),使其具有多樣化的功能需求。
3結(jié)語
總之,在社會市場經(jīng)濟(jì)背景下,移動智能終端的出現(xiàn)與發(fā)展為移動互聯(lián)網(wǎng)產(chǎn)業(yè)迅猛發(fā)展注入了新鮮的血液,方便了人們的工作與生活,而科學(xué)開發(fā)移動智能終端軟件已成為相關(guān)領(lǐng)域急需要解決的重大課題,這也是未來軟件開發(fā)的一種必然趨勢。在開發(fā)過程中,開發(fā)人員必須根據(jù)Android系統(tǒng)架構(gòu)與開發(fā)流程,科學(xué)開發(fā)相關(guān)的軟件技術(shù),促使各類軟件得到優(yōu)化利用,具有較好的人機(jī)交互能力,更好地滿足社會大眾的客觀需求,促進(jìn)社會經(jīng)濟(jì)持續(xù)發(fā)展。
參考文獻(xiàn)
[1]王柯,馬宏斌,王一圣.基于Android平臺的軟件開發(fā)若干關(guān)鍵技術(shù)研究[J].測繪與空間地理信息,2014(9):14-16,24.[2]趙海涵.基于Android平臺軟件開發(fā)技術(shù)探析[J].電腦知識與技術(shù),2014(36):8684-8685.[3]王萌.基于Android平臺軟件開發(fā)方法的研究與應(yīng)用[J].中國新通信,2015(18):77.[4]喬婷.試論Android平臺下軟件開發(fā)的關(guān)鍵技術(shù)[J].電子技術(shù)與軟件工程,2015(21):52.
第二篇:軟件開發(fā)管理平臺設(shè)計分析論文
摘要:就軟件開發(fā)管理平臺進(jìn)行了多元化的分析和設(shè)計,并根據(jù)相關(guān)技術(shù)和基本框架分別進(jìn)行了探討,希望在軟件開發(fā)建設(shè)方面可以提供一定的借鑒和指導(dǎo)作用。
關(guān)鍵詞:軟件開發(fā)管理平臺;多元化;設(shè)計;基本框架
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2016)02-0073-0
20引言
近些年來,軟件開發(fā)管理系統(tǒng)方面的技術(shù)有比較穩(wěn)定的發(fā)展,在逐漸完善的同時功能需求也越來越大,因此為了滿足功能需求軟件開發(fā)管理平臺必須進(jìn)行進(jìn)一步的發(fā)展和升級。在目前我們主要研究的軟件開發(fā)管理平臺還存在局限性,從整體出發(fā)進(jìn)行多元設(shè)計是我們現(xiàn)階段必須掌握的技術(shù)。
1軟件開發(fā)管理的相關(guān)內(nèi)容
在現(xiàn)階段對軟件開發(fā)管理可以通過多種途徑進(jìn)行優(yōu)化,例如加強(qiáng)生產(chǎn)計劃、改進(jìn)軟件開發(fā)過程等,可以使軟件開發(fā)管理達(dá)到一體化的標(biāo)準(zhǔn),促進(jìn)企業(yè)的融合和發(fā)展,并且可以為企業(yè)的自動化和一站式服務(wù)提供技術(shù)支持。提升企業(yè)管理和項目管理兩大基礎(chǔ)功能。項目管理和企業(yè)管理分別從配置管理和設(shè)計管理等出發(fā),完成測試自動化進(jìn)程。質(zhì)量一直是軟件開發(fā)企業(yè)追求的目標(biāo),也是一個企業(yè)賴以生存和發(fā)展的根本。對于軟件企業(yè)而言,鑒定軟件的質(zhì)量問題往往需要專門測試的軟件,這是最為關(guān)鍵的部分。因此測試軟件也是一項比較困難的問題,要采用先進(jìn)的技術(shù)確保測試結(jié)果的準(zhǔn)確性,合理的方法和工具是測試成功的重要保證。在我國現(xiàn)階段市場中已經(jīng)出現(xiàn)了關(guān)于測試過程管理的工具,這在很大程度上能夠在大企業(yè)中發(fā)揮一定的作用并取得良好的效果,但是針對小公司來說還缺乏定制一個測試管理平臺來提高工作效率和自動化水平。
2針對軟件開發(fā)管理系統(tǒng)的多元化分析
多元化軟件開發(fā)系統(tǒng)中最為關(guān)鍵的部分就是關(guān)于軟件開發(fā)管理的自動化,要以此為設(shè)計目標(biāo)和方向,不斷的有機(jī)結(jié)合軟件開發(fā)管理和企業(yè)資源規(guī)劃兩種資源,從整體上形成高效管理模式的軟件開發(fā)管理平臺。
2.1軟件開發(fā)管理平臺的初始化目標(biāo)
在軟件開發(fā)管理平臺中要發(fā)揮多種管理的能力和潛能,充分調(diào)動各個部分的作用,例如系統(tǒng)需求管理、設(shè)計管理、項目管理和配置管理等多方面內(nèi)容。在多元化方面主要體現(xiàn)在關(guān)鍵的位置上,一般存在于軟件工程、項目管理和企業(yè)管理三個主要方面。充分促進(jìn)企業(yè)管理和項目管理的相互協(xié)調(diào),互相配合,可以使軟件開發(fā)管理更為科學(xué)、提高效率。為了滿足不同規(guī)模的軟件企業(yè)需求必須對軟件開發(fā)企業(yè)進(jìn)行足夠的技術(shù)支持和資金支持,才能為多元化的設(shè)計提供可行性條件。
2.2軟件開發(fā)管理平臺的概況和特征
網(wǎng)絡(luò)技術(shù)在當(dāng)今社會的普及程度越來越強(qiáng),同時在軟件開發(fā)管理平臺的應(yīng)用也越來越多。網(wǎng)絡(luò)技術(shù)在軟件開發(fā)中起到拓展功能的作用,在此基礎(chǔ)上,軟件開發(fā)企業(yè)的工作中心在于對開發(fā)軟件的多元性方面,主要體現(xiàn)在基礎(chǔ)功能和分析功能兩個方面的拓展。在數(shù)學(xué)模型的基礎(chǔ)上建立模擬基礎(chǔ)工作流程,提高預(yù)測的準(zhǔn)確性和開發(fā)更多的項目管理功能,以達(dá)到兼容能力更強(qiáng)、在線管理更健全的目的。在目前的研究水平下,我們更應(yīng)該注意軟件開發(fā)管理系統(tǒng)的多元化設(shè)計,應(yīng)該投入更多的精力和資金,這樣會有益于資源方面的控制力,還能實時監(jiān)控進(jìn)度和質(zhì)量問題,全方位的對項目進(jìn)程進(jìn)行跟蹤和指導(dǎo)。
3軟件開發(fā)管理平臺的多元化技術(shù)依托和基本結(jié)構(gòu)
在實際操作中針對多元化設(shè)計一般最需要的就是先進(jìn)的技術(shù)支撐。最為普遍的技術(shù)就是SOA技術(shù),這項技術(shù)的最主要用途在于對系統(tǒng)的分解作用,不僅如此,還可以按照一定的序列對服務(wù)進(jìn)行編排,在此基礎(chǔ)之上能夠擴(kuò)大軟件管理平臺的功能和規(guī)模,并且大大增強(qiáng)了軟件管理平臺的可擴(kuò)展性和靈活性兩種性質(zhì)。另一種比較常見的技術(shù)是基于WebServices技術(shù),這種技術(shù)的主要作用是輔助SOA,對軟件開發(fā)管理系統(tǒng)的兼容性有所擴(kuò)展,并且同時構(gòu)建SOA架構(gòu)。第三種技術(shù)是XML技術(shù),這種技術(shù)的主要作用在于能夠規(guī)范Web服務(wù),平臺的建立需要此種技術(shù)作為標(biāo)準(zhǔn),而平臺中數(shù)據(jù)的相互轉(zhuǎn)換則需要自描述功能。第四種技術(shù)是RUI技術(shù),這種技術(shù)的界面采用富用戶,但在外觀上分辨不出和普通應(yīng)用程序的差別,但是要想構(gòu)建人機(jī)交互的功能則必須要有服務(wù)功能,平臺系統(tǒng)更容易進(jìn)行操作,并且界面更加簡潔。第五種技術(shù)是J2EE標(biāo)準(zhǔn),平臺系統(tǒng)要保持在運行過程中不依靠其他運行程序則必須采用分布式結(jié)構(gòu),可以大大加強(qiáng)系統(tǒng)軟件的靈活性,減少平時的維護(hù)費用和運行成本。在多元化方案的設(shè)計環(huán)節(jié)應(yīng)該注意系統(tǒng)的生命周期,在軟件開發(fā)管理平臺多元化設(shè)計中最關(guān)鍵的部分就是通常要采取B/S網(wǎng)絡(luò)結(jié)構(gòu)模式,在我們現(xiàn)階段的研究當(dāng)中大多數(shù)都采取這種技術(shù),這種技術(shù)最為簡便的地方就是可以在不安裝客戶端的情況下進(jìn)行運行,可以體現(xiàn)出更加模塊化的技術(shù)特點。另外數(shù)據(jù)庫的規(guī)模應(yīng)該擴(kuò)大,這樣有利于邏輯關(guān)系的簡潔化,操作系統(tǒng)也更加方便快捷,在數(shù)據(jù)的完整性方面有更多體現(xiàn)。系統(tǒng)的安全性和開放性也應(yīng)該有所約束,讓系統(tǒng)的安全性有一定的技術(shù)保證,針對不同用戶采用分級管理模式,并以加密和訪問權(quán)限兩種手段來提高軟件開發(fā)平臺的安全性。另外平臺在平時的運行過程中,要時刻注意到客戶端和軟硬性的先進(jìn)性,并且要注意日常應(yīng)用程序和數(shù)據(jù)庫服務(wù)器的運行狀況保持良好,保證在正常生命周期內(nèi)保持良好的運行狀態(tài)。軟件開發(fā)管理平臺在多元化設(shè)計的框架構(gòu)建方面一般分為四個層次,分別是基礎(chǔ)設(shè)施層、交互層、支撐層和應(yīng)用層,在一般情況下交互層、基礎(chǔ)設(shè)施層和應(yīng)用層分別代表用戶、信息和系統(tǒng)的核心部分。主要代表模塊分別是企業(yè)管理功能、項目管理功能和軟件功能自動化三大模塊。除這些外還需要一些支撐層把組件進(jìn)行合理構(gòu)建,用于軟件開發(fā)管理平臺的多元化設(shè)計。三大主要功能模塊涵蓋了以上相關(guān)內(nèi)容。項目功能主要體現(xiàn)在兩個方面,一是項目計劃模型,二是實際需求。在項目進(jìn)行審核發(fā)布之前,需要根據(jù)管理和條目兩種手段對項目進(jìn)行預(yù)覽,這樣能形成最優(yōu)化的配置管理模式。在對軟件的功能管理方面要采取自動化手段,在原始模型和文檔的基礎(chǔ)上形成新的模型,并且要單獨為其設(shè)計模式和范例,不斷優(yōu)化升級文檔質(zhì)量的管理,在設(shè)備的運作過程中要優(yōu)化各技術(shù)路線相互配合作用。在目前的企業(yè)管理中,要深入考慮企業(yè)的需求內(nèi)容,履行合同上的信息要求,針對子系統(tǒng)和標(biāo)準(zhǔn)模塊進(jìn)行自定義的程序設(shè)置,及時對客戶信息進(jìn)行回訪和自動報警兩種功能,這兩種功能要根據(jù)客戶信息才得以實現(xiàn)。
4軟件開發(fā)管理平臺的相關(guān)軟件內(nèi)容
開發(fā)的軟件必須具有通用性強(qiáng)、適用范圍廣、提高工作效率等一系列優(yōu)勢,這樣可以協(xié)助工作人員把項目中的軟件開發(fā)管理平臺做到更好。因此要求所開發(fā)的軟件應(yīng)具備以下功能:(1)能夠在各種環(huán)境下運行,適應(yīng)性要強(qiáng)。任何軟件都需要一定的運行環(huán)境,而軟件的適應(yīng)性強(qiáng)弱將直接影響著軟件的使用效果和穩(wěn)定性。(2)能夠積極協(xié)助指導(dǎo)項目開展相關(guān)工作,運用開發(fā)制約和方法學(xué)等手段構(gòu)建軟件架構(gòu),這樣的好處是可以潛移默化的影響使用者的開發(fā)方式和風(fēng)格,開發(fā)出來相似的項目間可以很通暢地進(jìn)行協(xié)作和交流。(3)要做好項目的設(shè)計、開發(fā)和再測試的相關(guān)工作,能完成項目成果各方面數(shù)據(jù)的轉(zhuǎn)換和協(xié)作,這就體現(xiàn)出最關(guān)鍵的銜接作用。其中最主要的部分就是關(guān)于程序設(shè)計和數(shù)據(jù)庫設(shè)計向開發(fā)階段的代碼程序生成的過程。另外的作用就是在進(jìn)行單元測試的過程中要把大多數(shù)相似的測試代碼由輔助程序員把它們篩選出來。(4)在開發(fā)軟件的相關(guān)工作中比較重要的就是常見功能組件,有很多數(shù)據(jù)需要進(jìn)行操作和整理,例如字符串的操作、數(shù)字操作等,不僅如此,還會涉及到文檔讀寫、上下載等一些相關(guān)問題。在一般情況下出于對靈活性的考慮,很少會設(shè)置這些功能組件,需要在實際工作中由程序員針對需要來分別寫出代碼。所以軟件架構(gòu)平臺需要有這些協(xié)助程序員的相關(guān)功能組件才能大大提高工作效率。(5)分層結(jié)構(gòu)和框架技術(shù)支持是我們軟件開發(fā)管理平臺需要的兩種技術(shù)。根據(jù)項目需要,項目的開發(fā)人員要制定不同的框架來提供選擇的余地。要改變框架去適應(yīng)實際項目需要,這樣更容易開展開發(fā)工作。(6)要考慮不同業(yè)務(wù)人員的需要,盡量提供一些底層業(yè)務(wù)組件。在普通的業(yè)務(wù)系統(tǒng)中,配置管理、用戶管理、角色權(quán)限管理所涉及到的功能區(qū)別不明顯,而底層平臺可以在提供底層應(yīng)用模塊的同時起到減少項目重復(fù)開發(fā)量的效果,是一個非??茖W(xué)合理的設(shè)計。(7)性能和安全是必須考慮的兩大要素,因此在構(gòu)建平臺時要平衡性能和安全兩者的關(guān)系,在確保安全的前提下盡可能的保證性能,這樣也能給后續(xù)關(guān)于技術(shù)指引、工具和方法的建立提供良好的基礎(chǔ),例如權(quán)限控制組件和緩存組件等。(8)方便操作也是我們需要考慮的一個方向,平臺應(yīng)該能在業(yè)界的大多數(shù)人中使用,因此要方便理解和操作,簡單的操作流程是能夠提供便捷功能服務(wù)的前提。還可以節(jié)約使用平臺的學(xué)習(xí)費用和節(jié)省學(xué)習(xí)精力。在進(jìn)行編碼實施的過程中,關(guān)于程序編碼的設(shè)定要采取統(tǒng)一標(biāo)準(zhǔn),并且符合相關(guān)的編寫要求,能夠保證可讀性和運行的連貫性,方便日后的維護(hù)工作。在平臺框架完成以后,還要不斷的進(jìn)行系統(tǒng)測試,保證使用效果和最初的設(shè)計效果相符合,測試出現(xiàn)問題后,要根據(jù)設(shè)計的框架找出問題原因,運用相關(guān)技術(shù)進(jìn)行修改,并達(dá)到預(yù)期效果。
5結(jié)語
目前針對多元化軟件的開發(fā)是一項比較艱巨的任務(wù),其結(jié)構(gòu)復(fù)雜、信息量較大。該軟件分為很多不同的部分,故要把需求、分析、測試、設(shè)計、運行等諸多因素考慮進(jìn)來。在目前比較常見的業(yè)務(wù)系統(tǒng)中,基礎(chǔ)底層軟件架構(gòu)不但能夠提高工作效率,還可以節(jié)約開發(fā)所需要的投入,提高利潤。在提高質(zhì)量方面則可以采取嚴(yán)格的規(guī)范約束和框架設(shè)計技術(shù)兩種手段。在信息技術(shù)不斷發(fā)展的前提下,軟件開發(fā)管理平臺取得飛快的進(jìn)展,然而多元化軟件的開發(fā)不僅在我國受到格外關(guān)注,國外也正積極針對這一方面展開研究工作,并且運用到實際運行當(dāng)中,軟件開發(fā)管理平臺也顯示著其強(qiáng)大的生命力,為我國的軟件開發(fā)項目管理信息化做出了較大的貢獻(xiàn)。
參考文獻(xiàn)
[1]吳曉慧.軟件開發(fā)管理系統(tǒng)的面向多元化的設(shè)計[J].計算機(jī)光盤軟件與應(yīng)用,2014,12(6):256-257.[2]王珊珊,趙青.淺談軟件項目在軟件開發(fā)管理中的作用[J].有色金屬設(shè)計,2003,30(1):55-59.[3]曹鍵.軟件開發(fā)管理平臺的構(gòu)建[J].電信工程技術(shù)與標(biāo)準(zhǔn)化,2008(12):46-50.[4]黃若儒.基于軟件架構(gòu)技術(shù)的系統(tǒng)開發(fā)基礎(chǔ)平臺分析與設(shè)計[D].廣州:華南理工大學(xué),2014.[5]張清蘭.面向目標(biāo)識別應(yīng)用的算法開發(fā)管理平臺的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2013.
第三篇:手機(jī)軟件開發(fā)必學(xué)Android技術(shù)
手機(jī)軟件開發(fā)必學(xué)Android技術(shù)
席卷IT培訓(xùn)市場,開發(fā)因其領(lǐng)域新,覆蓋面廣,而受到廣大應(yīng)屆畢業(yè)生的關(guān)注?,F(xiàn)在大學(xué)生空有一張文憑,就業(yè)形勢卻頗為緊張,相反,Android開發(fā)的職位空缺卻相當(dāng)大,所以很多大學(xué)生看準(zhǔn)這塊“肥肉”,紛紛投身Android培訓(xùn),希望通過系統(tǒng)培訓(xùn)解決當(dāng)前就業(yè)難,薪水低的問題。
學(xué)習(xí)Android開發(fā),先要了解主要開發(fā)什么。其實主要是針對Android平臺開發(fā)應(yīng)用軟件和游戲軟件。應(yīng)用軟件涉及種類廣泛,如辦公工具、通信工具、視頻播放工具、閱讀器等,在智能手機(jī)普及的今天,手機(jī)用戶對于各種應(yīng)用軟件的需求越來越高。這個時候不但需要大量的Android人才儲備,還對其技術(shù)有了更高的要求。而手機(jī)游戲是目前最受年輕人喜愛的,趣味性更強(qiáng),薪水也樂觀。如此耀眼的舞臺,自然給了年輕人更多發(fā)揮的空間,但這里要注意,學(xué)習(xí)Android開發(fā),需要對軟件開發(fā)感興趣,具備一定的Java基礎(chǔ)。
甲骨文盈佳科技通過一個多月的零基礎(chǔ)階段教學(xué),讓學(xué)員掌握扎實的編程功底,課程內(nèi)容包含Java開發(fā)環(huán)境、編程語言基礎(chǔ)、面向?qū)ο笏枷?、設(shè)計模式、數(shù)據(jù)結(jié)構(gòu)等。而在學(xué)員掌握基本的Android開發(fā)能力后,甲骨文盈佳科技第三階段教學(xué),會重點講授Android游戲開發(fā),利用四周的時間,使學(xué)員可以掌握基于Cocos2d框架進(jìn)行游戲開發(fā)的能力。
其實大學(xué)生能有足夠遠(yuǎn)見去學(xué)一門技術(shù),說明能夠認(rèn)識自身問題。選擇Android開發(fā)這個新領(lǐng)域,發(fā)揮自身學(xué)習(xí)能力強(qiáng)的優(yōu)勢,在培訓(xùn)中鍛煉自己實際操作的能力,彌補(bǔ)動手能力弱,無項目經(jīng)驗的弱點,自然可以從根本上解決大學(xué)生就業(yè)問題。現(xiàn)在移動互聯(lián)網(wǎng)屬于朝陽產(chǎn)業(yè),正敞開懷抱吸納Android開發(fā)人才。今天選擇學(xué)習(xí)Android開發(fā),就是為今后的成功打下堅實的基石。
第四篇:android軟件開發(fā)工程師轉(zhuǎn)正個人總結(jié)
個人總結(jié)
我于2012年8月13日進(jìn)入公司,根據(jù)公司的需要,目前擔(dān)任Android軟件工程師 一職,負(fù)責(zé)綜合代維,考務(wù)通手機(jī)客戶端的開發(fā)工作。將近3個月的時候在這個新的工作環(huán)境我收獲頗深。開始讓我獨立完成整個項目,這還是我的第一次,之前在公司是多人完成,過程中也遇到了許多困難,但是都一一解決了,我想這是我最寶貴的經(jīng)歷,通過三個月的不斷學(xué)習(xí),在項目開發(fā)中的不斷鍛煉以及同事、領(lǐng)導(dǎo)的幫助,我已逐漸融入這個大家庭,個人的工作技能也有了明顯的提高,雖然仍有一些不足,但三個月以來我付出了不少,也收獲了不少,我感覺自己成長了,也逐漸成熟了。
初到公司,加入了咨詢與信息化部,加入了綜合代維項目組,我也曾擔(dān)心自己不知道該怎么與項目組的同事溝通,擔(dān)心不知道怎么做好工作,但是項目組的前輩們都很親切,也很耐心的教導(dǎo)我,解答我的疑問,以及他們團(tuán)結(jié)向上的精神,讓我很快的熟悉了工作,融入了項目組。
在這三個月的學(xué)習(xí)和工作中,我一直嚴(yán)格要求自己,遵循公司的規(guī)章制度,認(rèn)真完成領(lǐng)導(dǎo)布置的每一項任務(wù),遇到的問題虛心的向項目組的前輩們學(xué)習(xí)、請教,不斷的提高、充實自己。開發(fā)過程中出現(xiàn)的一些差錯,也有前輩們耐心的指出和指導(dǎo)我修改,這些經(jīng)歷讓我不斷成熟,處理問題時考慮得更全面,杜絕類似情況的發(fā)生。在此我要特地感謝部門的領(lǐng)導(dǎo)和同事們對我的指引和幫助,感謝他們對我工作上失誤的提醒和指正。
經(jīng)過這三個月,我已經(jīng)能獨立進(jìn)行開發(fā)任務(wù),按時按質(zhì)的完成分配的工作任務(wù),當(dāng)然還有許多不足,開發(fā)的經(jīng)驗仍有待提高,編寫代碼的簡潔性和完整性也需要進(jìn)一步增強(qiáng),需要不斷的繼續(xù)學(xué)習(xí)以提高自己的工作能力。
總之,這三個月來我學(xué)到了很多,感悟了很多;看到公司的迅速發(fā)展,看到部門的同事越來越多,我深深地感到驕傲和自豪,也更加迫切的希望以一名正式員工的身份在這里工作,實現(xiàn)自己的奮斗目標(biāo),體現(xiàn)自己的人生價值,和公司一起成長。
我會用謙虛的態(tài)度和飽滿的熱情做好我的本職工作,為公司創(chuàng)造價值,同公司一起展望美好的未來!
XX
2012年11月13日
第五篇:Qualcomm平臺android開發(fā)總結(jié)
1、高通平臺android開發(fā)總結(jié).7 1.1 搭建高通平臺環(huán)境開發(fā)環(huán)境.7 1.2 搭建高通平臺環(huán)境開發(fā)環(huán)境.7 1.2.1 高通android智能平臺概述.7
1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之間的關(guān)系.7 1.2.2 選擇合適的源代碼以及工具.8
1.2.2.1 獲取經(jīng)過高通打補(bǔ)丁的android 源代碼.8 1.2.2.2 獲取高通針對不同處理器的vendor源代碼.9 1.2.2.3 獲取 modem 源代碼.9
1.2.2.3.1 高通 modem 源代碼編譯前的修正.13 1.2.3 建立 Android 開發(fā)環(huán)境.14 1.2.4 建立 modem 開發(fā)環(huán)境.15 1.2.4.1 補(bǔ)充.16
1.2.4.1.1 獲取 licenses 16
1.2.4.1.2 Flex 簡單使用指南.16 1.2.4.1.3 啟動 license 服務(wù)器.18
1.2.4.1.4 license 沒有辦法從服務(wù)器獲取的幾種情況.18 1.2.4.1.5 破解 rvds 的license 19 1.2.5 在高通開發(fā)板上燒錄文件系統(tǒng).19
1.3 高通平臺,android和 modem 編譯流程分析.21 1.3.1 android代碼編譯流程分析.21 1.3.1.1 編譯工具檢測.22 1.3.1.1.1 22
1.3.1.2 appsboot.mbn 生成過程解析.22
1.3.1.3 boot.img 生成過程解析,怎樣手動生成 boog.img 28 1.3.1.4 編譯過程存在的問題.32
1.3.1.4.1 prelinkmap 的時候 base 0xaff00000 out of range 32 1.3.1.4.2 LOCAL_SDK_VERSION 使應(yīng)用程序不能訪問hide的api 32 1.3.1.4.3 armv5te-vfp 導(dǎo)致一些游戲運行不了.32 1.3.2 分布式編譯 android 代碼.33 1.3.3 modem 代碼編譯流程分析.33
1.3.3.1 單獨編譯某個模塊(如:qcsbl oemsbl).34 1.3.3.2 $(TARGETDIR)/exist 規(guī)則解析.36 1.3.3.3 setup規(guī)則解析.36
1.3.3.3.1 corebsp_create_incpaths 36 1.3.3.3.2 create_incpaths 36 1.3.3.3.3 amsssetup 36
1.3.3.3.4 amsslinkaddress 36 1.3.3.3.5 firmware 38 1.3.3.4 deps規(guī)則解析.38
1.3.3.5 corebsp_build規(guī)則解析.38 1.3.3.5.1 corebsp_build_action 38 1.3.3.5.1.1 corebsp_scons 規(guī)則.39 1.3.3.5.1.1.1 corebsp_scons_start 39 2.3.3.5.1.1.1 corebsp_scons_action 39
1.3.3.5.1.1.2.1 命令 pboot_gen_elf image_header pboot_add_hash 解析.40
1.3.3.5.1.1.2.2 env.BinBuilder 過程解析.41 1.3.3.5.1.1.2.3 env.MbnBuilder 過程解析.41
1.3.3.5.1.1.2.4 env.MbnDummyBuilder 過程解析.42 1.3.3.5.1.1.2.5 fsbl.mbn 生成過程解析.43 1.3.3.5.1.1.2.6 dbl.mbn 生成過程解析.43
1.3.3.5.1.1.2.7 AMSS_AABBQOLYM.mbn 生成過程解析.43 1.3.3.5.1.1.2.8 adsp.mbn 生成過程解析.43 1.3.3.5.1.1.2.9 osbl.mbn 生成過程解析.44
1.3.3.5.1.1.2.10 enandprg_AABBQOLYM.mbn 生成過程解析.44 1.3.3.5.1.1.2.11 nandprg_AABBQOLYM.mbn 生成過程解析.45 1.3.3.5.1.1.2.12 emmcbld.mbn 生成過程解析.45 3.3.3.5.1.1.1 corebsp_scons_done 46 1.3.3.5.1.2 corebsp 46
1.3.3.5.2 corebsp_create_incpaths 46 1.3.3.5.3 corebsp_setup 46 1.3.3.6 libs 46
1.3.3.7 copybar規(guī)則解析.47 1.3.3.8 exe規(guī)則解析.47
1.3.3.8.1 CORELIBS_AABBQOLYM.mbn生成過程解析.47 1.3.3.8.2 amss.mbn 生成過程解析.47 1.3.3.9 bldprod規(guī)則解析.48
1.3.3.10 create_mem_feat_html規(guī)則解析.48 1.3.3.10.1 50
1.3.3.11 partition規(guī)則解析.50
1.3.3.11.1 eMCC 啟動和 NAND 啟動的分區(qū)格式是不一樣的,如果是 eMCC 啟動,多了編譯選項:.50
1.4 高通平臺 7630 啟動流程分析.52 1.4.1 啟動流程概述.52 1.4.2 pbl 流程.52 1.4.3 dbl 流程.52 1.4.4 osbl 流程.54
1.4.4.1 osbl 裝載 appsbl 過程分析.56
1.4.5 appsbl 流程(源代碼在 android中).56
1.4.5.1 aboot_init 過程分析(需要側(cè)重關(guān)心的部分).58 1.4.5.1.1 fastboot 模式分析.61
1.4.5.1.1.1 什么是 fastboot 模式.61
1.4.5.1.1.2 fastboot 模式與 recovery 模式的區(qū)別.61 1.4.5.1.1.3 怎樣進(jìn)入 fastboot 模式.62
1.4.5.1.1.4 android 系統(tǒng)手機(jī)刷機(jī)過程分析(補(bǔ)充知識)62 1.4.5.1.2 appsbl 引導(dǎo) android 系統(tǒng).63
1.4.5.1.2.1 Android 系統(tǒng)啟動過程中存在的問題.67 1.4.5.1.1.1.1 linker 問題導(dǎo)致系統(tǒng)無法啟動.67 1.4.6 AMSS 流程.69
1.5 android 系統(tǒng)重啟關(guān)機(jī)流程分析.82 1.5.1 c語言中調(diào)用 reboot 函數(shù).82 1.5.2 通過 adb 讓系統(tǒng)重啟.82
1.5.3 fastboot 模式下系統(tǒng)重啟.83 1.5.4 系統(tǒng)關(guān)機(jī).84
1.5.5 內(nèi)核中的系統(tǒng)調(diào)用 reboot 85 1.6 軟件調(diào)用流程分析.89 1.6.1 設(shè)置sim卡狀態(tài).89 1.6.2 設(shè)置背光.90 1.6.3 獲取電池信息.90
1.7 python scons 語法學(xué)習(xí).94 1.8 python 語法學(xué)習(xí).94 1.8.1 Python中文全攻略.94
1.8.2 推薦一款Python編輯器.94
1.8.3 使用 pyExcelerator 讀 Execl 文件.94 1.8.4 xlrd 解析 xls 文件.95 1.8.5 xlrd 生成 xls 文件.95
1.9 Python 語言之 scons 工具流程分析.95 1.9.1 Program 方法.100 1.9.2 Library 方法.100
2、高通常用工具使用.101 2.1 QPST 101 2.2 QXDM 101 2.3 QCAT 101
3、工程模式.101
4、Android 系統(tǒng)更新升級總結(jié).104 4.1 刷機(jī)基本知識.104
4.1.1 各品牌代表手機(jī)刷機(jī)模式進(jìn)入方法.104 4.1.1.1 HTC G1 104
4.1.1.2 三星 Galaxy i7500 104 4.1.1.3 Google Nexus One 105 4.1.2 fastboot 模式.105
4.1.2.1 fastboot 模式概述.105
4.1.2.2 PC端fastboot 命令分析.106 4.1.2.2.1 命令選項 –w –s-p –c 106 4.1.2.3 手機(jī)端fastboot 命令分析.107 4.1.2.3.1 boot 107 4.1.2.3.2 erase 107 4.1.2.3.3 flash 107 4.1.2.3.4 continue 107 4.1.2.3.5 reboot 107
4.1.2.3.6 reboot-bootloader 107 4.1.2.3.7 getvar 107 4.1.2.3.8 download 108 4.1.2.3.9 update 108
4.1.2.3.9.1 system/core/fastboot/fastboot.c:294: 108 4.1.2.3.9.2 fprintf(stderr, “archive does not contain '%s'n”, name);108 4.1.2.4 fastboot 模式流程分析.108 4.1.3 recovery 模式.108
4.1.3.1 recovery 模式概述.108 4.1.3.2 軟件升級包.109
4.1.3.3 recovery v1跟recovery v2的區(qū)別.109 4.1.3.4 軟件升級腳本語法解析.109 4.1.3.4.1.1 mount 110 4.1.3.4.1.2 getprop 111
4.1.3.4.1.3 file_getprop 111 4.1.3.4.1.4 assert 111 4.1.3.4.1.5 format 111
4.1.3.4.1.6 apply_patch_check 111 4.1.3.4.1.7 apply_patch_space 111 4.1.3.4.1.8 apply_patch 111
4.1.3.4.1.9 package_extract_file 112 4.1.3.4.1.10 ui_print 112
4.1.3.4.1.11 META-INF/com/google/android/update-script 腳本分析.1124.1.3.4.2 Recovery 模式中 install_package 函數(shù)解析.117 4.1.3.5 Recovery 流程分析.118 4.1.3.5.1 恢復(fù)出廠設(shè)置.118 4.1.3.5.2 系統(tǒng)更新流程.119
4.1.3.5.3 通過sd卡實現(xiàn)刷機(jī).121 4.1.3.6 系統(tǒng)升級包案例分析.122 4.1.4 工程模式(HBoot)模式.122 4.1.4.1 HBOOT降級方法.122
4.2 如何制作升級包 update.zip 123 4.2.1 手動制作升級包.123 4.2.2 自動制作升級包.123 4.3 Android 簽名機(jī)制.125
4.4 android 文件系統(tǒng)權(quán)限概述.125 4.4.1 獲取手機(jī)root權(quán)限.127 4.4.2 adb默認(rèn)權(quán)限分析.128
4.4.3 adb root命令切換到 root 權(quán)限.129 4.4.4 掛載系統(tǒng)分區(qū)為讀寫(remount)130
4.4.5 通過修改 boot.img 獲取 Nexus One 權(quán)限.132 4.5 系統(tǒng)應(yīng)用移植.132
4.5.1 Android 2.2在線升級的移植.132
4.5.2 解決donut Gtalk、Market登錄不了的問題.133 4.5.3 apk反編譯問題總結(jié).133
4.5.4 系統(tǒng)重啟.133
5、高通linux內(nèi)核驅(qū)動開發(fā).133 5.1 添加串口調(diào)試.133 5.2 Sensor 傳感器.133
5.3 USB 枚舉 USB Composition 134 5.4 USB 枚舉 USB Composition 136
6、從 android 源代碼制作 sdk 136 6.1 linux sdk 137 6.2 windows sdk 137
7、程序安裝與調(diào)試.138
8、android 框架流程分析.138 8.1 屏幕顯示相關(guān).138 8.1.1 屏幕分辨率.138 8.1.2 屏幕模式.139
8.2 Android 開機(jī)充電.141 8.3 Android 開機(jī)動畫.141 8.3.1 內(nèi)核開機(jī)畫面.141 8.3.2 文件系統(tǒng)開機(jī)畫面.141
8.3.2.1 開機(jī)顯示的 ANDROID 文字.141 8.3.2.2 ANDROID 發(fā)光動畫.142
8.3.2.3 initlogo.rle 文件分析.143
8.3.2.4 bootanimation.zip 文件分析.143 8.3.3 三星I9000 開機(jī)動畫.144 8.4 JNI調(diào)用流程.145
8.5 Android 開機(jī)鈴聲.145 8.6 GPS 導(dǎo)航.145
8.6.1 GPS導(dǎo)航原理.145 8.6.2 GPS導(dǎo)航軟件.145
9、高通modem框架流程分析.146 9.1.1 添加自定義rpc調(diào)用.146
9.1.1.1 從AP端獲取modem的系統(tǒng)分區(qū)信息.146 9.1.2 添加自定義 AT命令.146
10、linux 應(yīng)用.146
10.1 嵌入式Linux通過幀緩存截圖包括Scheduling(調(diào)度), File system(文件系統(tǒng)), Networking(網(wǎng)絡(luò)), Device driver(設(shè)備驅(qū)動程序), Memory management(存儲管理), Paging(存儲頁面管理)-都在內(nèi)核中完成.一直到現(xiàn)在廣泛應(yīng)用的操作系統(tǒng),如UNIX,Linux,和Windows還大都是monolithic kernel操作系統(tǒng).但隨著操作系統(tǒng)變得越來越復(fù)雜(現(xiàn)代操作系統(tǒng)的內(nèi)核有一兩百萬行C程序是很常見的事情),把所有這些功能都放在內(nèi)核中使設(shè)計難度迅 速增加.微內(nèi)核是一個與Monolithic Kernel相反的設(shè)計理念.它的目的是使內(nèi)核縮到最小,把所有可能的功能模塊移出內(nèi)核.理想情況下,內(nèi)核中僅留下Address Space Support(地址空間支持),IPC(Inter-Process Communication,進(jìn)程間通訊),和Scheduling(調(diào)度),其他功能模塊做為用戶進(jìn)程運行。
REX 是在 L4 之上封裝的服務(wù),是一個搶占式,多任務(wù)的RTOS,所有的任務(wù)都以task的形式存在,REX提供包括任務(wù)創(chuàng)建,同步,互斥,計時器,中斷控制等功能的 API,這里的task實際上就是我們的線程,每個 task對應(yīng)著一個線程。REX維護(hù)一個task list(雙向鏈表),始終運行高優(yōu)先級的task。products里面所有的服務(wù)包括3g協(xié)議棧等都是以task的形式跑在rex之上的。而Brew的話是運行的環(huán)境,跟Java 有點兒類似,相當(dāng)于是一個虛擬機(jī)。AMSS――高級的移動用戶軟件(Advanced Mobile Subscriber Software)技術(shù),是一種新的軟件架構(gòu),是對原來軟件架構(gòu) DMSS 的升級。AMSS源代碼實際上是QC BREW(Binary Runtime Environment For Wireless)平臺的的底層部分,去掉了為應(yīng)用程序提供接口的AEE(application execution environment)部分,高通在Dual Proc芯片上的其他平臺基本上都是采用的這樣的架構(gòu)。
參考文檔:
微內(nèi)核操作系統(tǒng)及L4概述
http://wenku.baidu.com/view/90929762caaedd3383c4d311.html MSM平臺上的AMSS http://blog.csdn.net/yili_xie/archive/2010/01/04/5129469.aspx
1.2.2 選擇合適的源代碼以及工具 要編譯出可供燒寫使用的鏡像文件需要三部分代碼: 1)獲取經(jīng)過高通打補(bǔ)丁的 android 源代碼 2)獲取高通針對不同處理器的 vendor 源代碼 3)獲取 modem 源代碼
1.2.2.1 獲取經(jīng)過高通打補(bǔ)丁的android 源代碼 網(wǎng)址:
http://004km.cn1312 Chipset(such as QSC6270):MSM7227-1 RF chipset(such as RGR6240):RTR6285 PMIC chipset(such as PM7540):PM7540 WCMDA Supported Bands(900,1900,2100?.if support WCDMA):2100 CMDA Supported Bands(450,850,1900,2100? if support CDMA):not suport OS(Brew,BMP,Android,WM,ThinUI(no UI)?):android froyo OS version(Android Donuts?): android froyo
1.2.2.3.1 高通 modem 源代碼編譯前的修正
從高通獲取的源代碼直接編譯會存在一些問題,以下為可能的問題以及解決方法:
1)為相應(yīng)的腳本加上編譯選項
vim./AMSS/products/7x30/build/ms/xxxxxx.cmd 加上: BUILD_UNIX=yes
2)如果編譯過程出現(xiàn).pl 文件沒有執(zhí)行權(quán)限而退出,那么為工程下面所有的 pl 文件加上可執(zhí)行屬性,命令:
find./-name “*.pl” |xargs chmod 755
3)無法找到需要的 pl 腳本解析器
vim./AMSS/products/7x30/tools/build/depgen.pl 修改
#!/pkg/perl/5.6.1/bin/perl-w 為
#!/usr/bin/perl-w
4)如果出現(xiàn)錯誤:
“AMSS/products/7x30/core/bsp/build/data/incpathsaaabqmlym.py”, line 14 IndentationError: expected an indented block 修改文件:./AMSS/products/7x30/core/bsp/build/scripts/genpaths.pl 內(nèi)容:
#if($line =~ /^# makefile(from/)為:
if($line =~ /^# makefile /)原因分析:
genpaths.pl 會對編譯過程的中間信息 :...line=# makefile(from'incpaths.min',line 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc...等信息進(jìn)行解析,由于我們使用的是中文系統(tǒng),所以以上內(nèi)容變?yōu)椋?line=# makefile(從'incpaths.min',行 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc 所以導(dǎo)致:
#if($line =~ /^# makefile(from/)判斷條件為為 false 無法正確生成 incpathsaaabqmlym.py,python 在解析該文件的時候認(rèn)為存在語法錯誤。
在 modem 代碼 M7630AABBQMAZM2020(HY11-N2280-2.zip)中開始使用 genincpaths.py 產(chǎn)生
./AMSS/products/7x30/core/bsp/build/data/incpathsaaabqoazm.py 文件,所以修改文件 amend-source-code-qualcomm-modem.sh 在腳本中需要加入以下內(nèi)容: incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/genincpaths.py if test-f $incpathsxxx_py;then PERL=`which /usr/bin/perl` sed-i “s/(from//g” $incpathsxxx_py fi./AMSS/products/7x30/multimedia/audio/drivers/Adie/AdieCodecDb/src/DALAdieCodecDb.c #DalAdieCodecDbInternal.h 改為: #include “DALAdieCodecDbInternal.h”
5)如果出現(xiàn) make: execvp:../../../../platform/cs/bin/cifc: Permission denied 錯誤,執(zhí)行以下命令:
chmod-R 755 AMSS/platform/cs/bin/*
1.2.3 建立 Android 開發(fā)環(huán)境(略)
curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH 1)安裝基本軟件
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
2)安裝 sun-java5-jdk ubuntu 下通過命令: sudo apt-get install sun-java5-jdk 將會安裝下面的包 sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre sun-java5-plugin 如果ubuntu 發(fā)布版本中沒有 sun-java5-jdk 那么 sudo vim /etc/apt/source.list #for sun-java5-jdk deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse sudo apt-get update sudo apt-get sun-java5-jdk 或者,如果 ubuntu 版中不支持 apt-get,那么用手動安裝: sudo mount-t nfs 172.20.127.15:/home/shared /mnt sudo dpkg-i /mnt/tools/debs/java-1.5.0-sun/sun-java5-*
3)配置usb cd /etc/udev/rules.d/ sudo vi 50-android.rules # adb single interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“d00d”, MODE=“0664”, GROUP=“plugdev” # adb composite interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“deed”, MODE=“0664”, GROUP=“plugdev” # Sooner low-level bootloader BUS==“usb”, SYSFS{idVendor}==“0bb4”, SYSFS{idProduct}==“0a51”, MODE=“0664”,GROUP=“plugdev” sudo /etc/init.d/udev restart
1.2.4 建立 modem 開發(fā)環(huán)境
與android 源代碼不同,modem 編譯工具使用的是 RVDS ,實際上只用到其中的 RVCT 編譯器,高通不提供該工具,我們必須從arm公司獲取相應(yīng)的授權(quán),RVDS 是 ADS 的升級版本,從 ADS 1.2 開始到 RVDS 3.1 我們公司都有其授權(quán),按照高通的要求我們目前必須使用 RVDS 2.2 并且使用他的 349 patch。RVDS 2.2 安裝以及使用步驟如下:
1).RVDS 2.2 共享在 172.20.127.15:/home/shared/ 目錄 sudo mount-t nfs 172.20.127.15:/home/shared/ /mnt cd /mnt/qualcommon/RVDS-2.2/ linux下rvds2.2的安裝程序為:
./rvds2.2_linux-pentium/setuplinux.bin 執(zhí)行以上命令,按照默認(rèn)步驟安裝,安裝路徑為:~/ARM 注意事項:
安裝過程如果出現(xiàn)錯誤:
..................java.lang.UnsatisfiedLinkError: /tmp/ismp001/6073753.tmp: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory 從網(wǎng)上下載 libstdc++-libc6.2-2.so.3 拷貝到 /usr/lib 目錄 ,或者從下面地址獲?。?/p>
http://172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-libc6.2-2.so.3 工具的安裝通過腳本進(jìn)行了簡化,具體過程請參考文檔: 80-N0216-2_A_M7630AABBQMAZM1170.pdf 80-VR881-7_B_M7630AABBQMLZA1200.pdf 80-VR192-1_C_AMSS_Linux_Software_Users_Guide.pdf 80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf
2)安裝高通指定的 593 patch cd /mnt/qualcommon/RVDS2.2/下執(zhí)行命令:./setup-patch-rvct2.2-bin593-lib349.sh
目前版本只支持 32 位的系統(tǒng) 1.2.4.1 補(bǔ)充
vim./AMSS/products/7x30/core/bsp/build/scripts/defaults.py 定義了工作線程
#num_jobs = num_cpu * 2 modified by mhf num_jobs = 2 if num_jobs < 4: num_jobs = 2 if num_jobs > 8: num_jobs = 8 env.SetOption('num_jobs', num_jobs)――――――― 獲取 RVDS 官方網(wǎng)站下載評估版本
https://silver.arm.com/browse http://004km.cn/wiki/QAEP#Branch_Releases http://004km.cn/wiki/QLBEP 下載 M7630AABBQMLZA1150 分支:
February 1, 2010 M7630AABBQMLZA1150 msm7630 eclair M7630AABBQMLZA1150.xml 命令如下:
mkdir-pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 repo init-u git://codeaurora.org/platform/manifest.git-b eclair-m M7630AABBQMLZA1150.xml nohup repo sync 代碼下的 vendor/qcom-proprietary 來自包 HY11-VR881-5.zip 以上兩部分代碼已經(jīng)下載并且合并,共享在:
http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150---------------編譯 eclair 代碼
svn co http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150$../setenv.sh../make-image.sh ======= modem代碼從高通網(wǎng)站:https://support.cdmatech.com/login/ 上獲取 我們目前使用的是: 共享在:
http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220-------編譯 modem 代碼
svn co http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220 cd modem-M7630AABBQMAZM1220../setenv-qualcomm.sh../make ======== 編譯結(jié)果分別如下:------------其中 adsp.mbn,amss.mbn,dbl.mbn,osbl.mbn,partition.mbn 位于以下目錄:./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/adsp.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/amss.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/dbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/osbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn------------appsboot.mbn,boot.img,system.img,userdata.img 位于以下目錄:./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/appsboot.mbn./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/boot.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img.ext3./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img.ext3------------eMMC 啟動使用的是 ext3 文件系統(tǒng),需要使用鏡像 system.img.ext3 userdata.img.ext3 補(bǔ)充說明:
partition.mbn 文件的原始數(shù)據(jù)來自配置文件:
./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.xml
1.3 高通平臺,android和 modem 編譯流程分析 android 代碼編譯流程分析 modem 代碼編譯流程分析 1.3.1 android代碼編譯流程分析
1.從服務(wù)器下載 android 源碼到當(dāng)前目錄
http://smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/ svn co http://172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/ cd froyo_almond-M76XXTSNCJNLYA6050/../setenv.sh 設(shè)置環(huán)境變量 Setting Environment...通常情況下 generic 用于編譯模擬器版本 Options are: 1.generic 2.msm7627_surf 3.msm7627_ffa 4.tiny-system ====從以上列表中選擇==== Which would you like? [1]
燒錄的鏡像文件appsboothd.mbn appsboot.mbn boot.img system.img userdata.img persist.img 來自 android 源碼 appsboot.mbn 的主要功能是裝載 linux 內(nèi)核,通過 linux 的引導(dǎo)來完成 android 系統(tǒng)的加載,appsboot.mbn 被燒寫在相應(yīng)的分區(qū),它的加載由 osbl.mbn 來完成,osbl.mbn 程序來自 modem。
7x30 7x27 系列 appsboot 不一樣,7x30 的 appsboot.mbn 是 7x27 appsboothd.mbn appsboot.mbn 兩個文件的合并
1)appsboot.mbn 生成過程解析
2)boot.img 生成過程解析,怎樣手動生成 boog.img
1.3.1.1 編譯工具檢測
make out/target/product/msm7630_surf/appsboot.mbn 1.3.1.1.1
1.3.1.2 appsboot.mbn 生成過程解析
make out/target/product/msm7630_surf/appsboot.mbn make out/target/product/msm7630_surf/nandwrite make out/target/product/msm7630_surf/emmc_appsboot.mbn 分別執(zhí)行:
make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_EMMC_OBJ msm7630_surf EMMC_BOOT=1 生成 nandwrite =============== #build nandwrite as a part of Android Build TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite
nandwrite_clean: $(hide)rm-f $(TARGET_NANDWRITE)$(hide)rm-rf $(NANDWRITE_OUT)
$(NANDWRITE_OUT): mkdir-p $(NANDWRITE_OUT)
$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1 ================
vim./bootable/bootloader/lk/makefile:98: TARGET := msm7630_surf #./bootable/bootloader/lk/project/msm7630_surf.mk PLATFORM := msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/rules.mk msm7x30 msm7630_surf.mk msm7630_surf_nandwrite ============================= include project/$(PROJECT).mk include target/$(TARGET)/rules.mk include target/$(TARGET)/tools/makefile include platform/$(PLATFORM)/rules.mk include arch/$(ARCH)/rules.mk include platform/rules.mk include target/rules.mk include kernel/rules.mk include dev/rules.mk include app/rules.mk...include make/module.mk...include make/build.mk ======================== vim bootable/bootloader/lk/make/module.mk INCMODULES := $(MODULES)$(info including $(INCMODULES))include $(addsuffix /rules.mk,$(INCMODULES))展開為:./bootable/bootloader/lk/app/nandwrite/rules.mk./bootable/bootloader/lk/dev/fbcon/rules.mk./bootable/bootloader/lk/dev/keys/rules.mk./bootable/bootloader/lk/lib/debug/rules.mk./bootable/bootloader/lk/lib/heap/rules.mk./bootable/bootloader/lk/lib/libc/rules.mk./bootable/bootloader/lk/lib/ptable/rules.mk ======================== bootable/bootloader/lk/make/build.mk:29: include arch/$(ARCH)/compile.mk
./bootable/bootloader/lk/project/msm7630_surf_nandwrite.mk 中有: MODULES += app/nandwrite./bootable/bootloader/lk/platform/msm7x30/rules.mk中有: MODULES += dev/fbcon./bootable/bootloader/lk/kernel/rules.mk 中有: MODULES += lib/libc lib/debug lib/heap./bootable/bootloader/lk/target/msm7630_surf/rules.mk 中有: MODULES += dev/keys lib/ptable 所以:
MODULES= app/nandwrite dev/fbcon dev/keys lib/debug lib/heap lib/libc lib/ptable 因為
ifeq($(BUILD_NANDWRITE), 1)APPSBOOTHDR_FILES := else out/host/linux-x86/bin/acp-fpt out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk out/target/product/msm7630_surf/nandwrite
25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk arm-eabi-objcopy-O binary../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.lst generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.debug.lst generating symbols:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.size make[2]:正在離開目錄
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk make[1]:正在離開目錄
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk target Prebuilt:(out/target/product/msm7630_surf/nandwrite)
make-C bootable/bootloader/lk BOOTLOADER_OUT=./out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make[2]: 正在進(jìn)入目錄
`/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk` msm7630_surf_nandwrite make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 ==》生成 mkheader 工具
gcc target/msm7630_surf/tools/mkheader.c-o target/msm7630_surf/tools/mkheader
$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld @echo generating $@ @$(MKDIR)$(NOECHO)sed “s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/” < $< > $@
generating../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/system-onesegment.ld compiling arch/arm/crt0.S compiling arch/arm/crt0.S。。compiling lib/ptable/ptable.c compiling lib/ptable/ptable.c
vim bootable/bootloader/lk/platform/msm7x30/rules.mk-----LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld include platform/msm_shared/rules.mk-----
./build/core/product_config.mk:177:TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)./build/core/envsetup.mk:152:OUT_DIR := $(TOPDIR)out./build/core/envsetup.mk:159:TARGET_OUT_ROOT_release := $(OUT_DIR)/target./build/core/envsetup.mk:161:TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))./build/core/envsetup.mk:178: TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product./build/core/envsetup.mk:184:PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)build/core/envsetup.mk:200:TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj bootable/bootloader/lk/AndroidBoot.mk:4:BOOTLOADER_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ bootable/bootloader/lk/makefile:32:BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk 所以:
TARGET_PRODUCT_OUT_ROOT=out/target/product/ PRODUCT_OUT=out/target/product/msm7630_surf/ TARGET_OUT_INTERMEDIATES=out/target/product/msm7630_surf/obj/ BOOTLOADER_OUT=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/ 所以:
BUILDDIR=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf 所以:
OUTELF=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk
make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf
bootable/bootloader/lk/makefile OUTELF := $(BUILDDIR)/lk./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@
vim./bootable/bootloader/lk/AndroidBoot.mk TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk $(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1
BOOTLOADER_EMMC_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ
vim./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@
bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/lk.bin bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk
./lk/platform/msm7x30/rules.mk:23:LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld
==》鏈接 lk linking../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk linking../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk generating image:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating image:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin text data bss dec hex filename 29592 7388 42720 79700 13754../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk text data bss dec hex filename 25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk
==》以 binary 格式,把文件
out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk 輸出到:
out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin arm-eabi-objcopy-O binary out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin ==》
生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.debug.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size make[1]:正在離開目錄 /opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk ==》
make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig make[1]: 正在進(jìn)入目錄
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/kernel generating symbols:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size
mkheader 從 lk.bin 生成 appsboothd.mbn 語法: mkheader
out/target/product/msm7630_surf/appsboot.mbn cat out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin > out/target/product/msm7630_surf/appsboot.mbn 刪除:out/target/product/msm7630_surf/appsboothd.mbn ==== 1.3.1.3 boot.img 生成過程解析,怎樣手動生成 boog.img boot.img 包括兩個部分: kernel 和 ramdisk,通過命令: make out/target/product/msm7630_surf/boot.img showcommands 會自動生成 kernel 和 ramdisk,然后把兩者合并制作成燒寫的鏡像文件:boot.img kernel 為
out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage 或者 out/target/product/$TARGET_PRODUCT/kernel , kernel 是 zImage 的拷貝
編譯內(nèi)核之前必須獲取一個默認(rèn)的配置文件.config ,此配置文件可以生成,或者來自默認(rèn)配置,高通中 msm7630_surf 的
默認(rèn)配置文件名為: msm7630-perf_defconfig 在文件: vendor/qcom/msm7630_surf/AndroidBoard.mk:45 中通過: KERNEL_DEFCONFIG := msm7630-perf_defconfig 進(jìn)行了指定。我們可以通過命令:
make-j3 ARCH=arm CROSS_COMPILE=arm-eabi-kernel showcommands 或者通過如下命令一步步完成:
1.獲取默認(rèn)的內(nèi)核配置并生成.config 的命令如下: make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig-C kernel 告訴 make 進(jìn)入 kernel 工作目錄,到其下面尋找 makefile 文件
O 內(nèi)核編譯的中間文件以及編譯結(jié)果等都存儲在該目錄下,此做法的好處是不會在kernel源代碼目錄下生成垃圾文件
ARCH=arm 告訴系統(tǒng)到./kernel/arch/$ARCH/configs/ 目錄下找文件 msm7630-perf_defconfig,生成的.config 保存在:
out/target/product/msm7630_surf/obj/KERNEL_OBJ/.config 2.手動編譯內(nèi)核
make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/ 3.如果需要配置內(nèi)核,使用下面的命令 make kernelconfig 他首先會進(jìn)入 menuconfig 界面,用戶配置完成以后,會把修改后的配置文件$(KERNEL_OUT)/.config 更新為默認(rèn)的配置文件
cp out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config kernel/arch/arm/configs/msm7627-perf_defconfig kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)
4.手動生成 ramdisk 執(zhí)行命令
make out/target/product/msm7630_surf/ramdisk.img showcommands 會用到命令:
out/host/linux-x86/bin/mkbootfs out/target/product/msm7630_surf/root | out/host/linux-x86/bin/minigzip > out/target/product/msm7630_surf/ramdisk.img 5.手動生成 boot.img 需要使用命令 mkbootimg ,語法如下: mkbootimg--kernel 內(nèi)核--ramdisk ramdisk鏡像--cmdline 命令行--base 基地址--pagesize 大小--output 輸出的boot.img ========== KERNEL=out/target/product/$TARGET_PRODUCT/kernel KERNEL=out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage RAMDISK=out/target/product/$TARGET_PRODUCT/ramdisk.img CMDLINE=“console=ttyDCC0 androidboot.hardware=qcom” BASE=0x00200000 PAGESIZE=4096 OUTPUT=out/target/product/$TARGET_PRODUCT/boot.img out/host/linux-x86/bin/mkbootimg--kernel $KERNEL--ramdisk $RAMDISK--cmdline “$CMDLINE”--base $BASE--pagesize $PAGESIZE--output $OUTPUT =========================================
編譯 bootloader(appsboot.mbn),nandwrite 生成過程解析./vendor/qcom/msm7630_surf/AndroidBoard.mk:25: include bootable/bootloader/lk/AndroidBoot.mk =================== 因為有:
bootable/bootloader/lk/AndroidBoot.mk:3: TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn INSTALLED_BOOTLOADER_TARGET := $(PRODUCT_OUT)/bootloader file := $(INSTALLED_BOOTLOADER_TARGET)