為android原始碼新增新裝置支援概述
1目錄結構概述
原始碼根目錄下的device目錄中儲存的是各個廠商相應的程式碼,故我們可以在這裡建立一個自己的目錄,比如以公司名稱命名,比如felix。公司目錄下是自己的裝置目錄,可以有多個,比如weatherfish。
這樣,我們在device目錄下就由了felix/weatherfish目錄.
2 vendorsetup.sh
在上面建立的目錄下,新建一個vendorsetup.sh檔案,用於在lunch命令的時候呼叫,告知系統你的位置。
內容如下:
add_lunch_combo aosp_weatherfish-userdebug
這個定義是在envsetup.sh中被呼叫的,迴圈遍歷查詢device目錄和vendor目錄下的vendorsetup.sh,找到後就include進去。其中vendor目錄是4.3以前的版本。
# Execute the contents of any vendorsetup.sh files we can find. for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \ `test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` do echo "including $f" . $f done unset f
3 新增AndroidProducts.mk
通過PRODUCT_MAKEFILES 包含指定的makefile檔案,用於指定編譯完成後需要拷貝到裝置檔案系統中的各種檔案;設定系統屬性(/system/build.prop)等功能。
# Get the long list of APNs PRODUCT_COPY_FILES := device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml # Inherit from the common Open Source product configuration $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) PRODUCT_NAME := aosp_weatherfish PRODUCT_DEVICE := weatherfish PRODUCT_BRAND := Android PRODUCT_MODEL := AOSP on Weatherfish PRODUCT_MANUFACTURER := felix PRODUCT_RESTRICT_VENDOR_FILES := true $(call inherit-product, device/felix/weatherfish/device.mk) $(call inherit-product-if-exists, vendor/felix/weatherfish/device-vendor.mk) PRODUCT_NAME := aosp_weatherfish PRODUCT_PACKAGES += \ Launcher3
系統變數說明:
PRODUCT_NAME 產品名稱,最終會顯示在 關於裝置 選項卡中。
PRODUCT_DEVICE 裝置名稱
PRODUCT_BRAND 產品所屬品牌
PRODUCT_MANUFACTURER 產品生產商
PRODUCT_MODEL 產品型號
PRODUCT_PACKAGES 系統需要預裝的程式,如apks
PRODUCT_LOCALES 所支援的國家語言 [兩位元組語言碼]-[兩位元組國家碼]
PRODUCT_POLICY 策略
PRODUCT_TAGS 產品標籤描述
PRODUCT_PROPERTY_OVERRIDES 用於過載系統屬性
4 BoardConfig.mk
用於填寫目標架構、硬體裝置屬性、編譯器的條件標緻、分割槽分佈、boot地址、ramdisk大小等,這部分可以參考其他專案原始碼,內容太多,而且基本類似,完成可以參考其同意系統架構的,這裡就不列出了。
5 Android.mk
這部分是android系統下編譯某個模組的標準的makefile。
然後執行make命令就可以編譯android原始碼了。
6生成檔案分析
編譯完成後回在out/target/product/[YOUR_PRODUCT]/目錄下生產最終的映象檔案。包括以下:
boot.img 包含核心啟動引數,核心等多個元素
randisk.img 一個小型的檔案系統,是android系統啟動的關鍵
system.img android系統執行的程式包(frameworks),被掛載在/system
userdata.img 各程式的資料儲存,被掛載在/data
recovery.img 裝置進入 恢復模式 時所需要的映象包
misc.img 即 miscellaneous 包含各種雜項資源
cache.img 快取區,被掛載在/cache
6.1 boot.img
其由system/core/mkbooting中生成的mkbooting工具製作,有兩個地方會呼叫它:droidcore依賴,和build/core/Makefile.
參考system/core/mkbooting/Bootimg.h檔案,其頭部結構如下:
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
其中1page是4K header中包含一個結構體boot_img_hdr
,該結構體定義也在Bootimg.h中;Kernel,其大小為(kernel_size+page_size-1)/page_size,也就是頁對齊的;ramdisk同樣是頁對齊的;second stage是可選的,用於擴充套件。
6.2 ramdisk.img
可以通過file ramdisk.img
命令檢視其檔案屬性為gzip壓縮檔案,然後新增字尾.gz後,用gzip -d ramdisk.img.gz
解壓縮得到一個cpio格式的ramdisk.img檔案。最後用cpio -i -F ramdisk.img
,解壓出具體內容。
6.3 System.img
可以使用simg2img方式解壓縮system.img檔案, 然後在用mount掛載
simg2img system.img system.img.step1
sudo mount -o loop system.img.step1 system_extracted
7 OTA系統升級
首先是生成升級包,在執行完make命令,生成過system.img檔案後,可以使用如下命令生產升級包
make otapackage
這裡生成的是完整的升級包,也可以使用`build/tools/releasetools/ota_from_target_files 生成差分包。
相關推薦
為android原始碼新增新裝置支援概述
1目錄結構概述 原始碼根目錄下的device目錄中儲存的是各個廠商相應的程式碼,故我們可以在這裡建立一個自己的目錄,比如以公司名稱命名,比如felix。公司目錄下是自己的裝置目錄,可以有多個,比如weatherfish。 這樣,我們在device目錄下就由了
Android系統新增新輸入法並設為預設輸入法
由於產品需求,需將Android原生輸入法先後替換成搜狗輸入法、百度輸入法、谷歌拼音輸入法,本文以替換為谷歌輸入法為例。 packages/apps下新建資料夾,將需替換的第三方輸入法apk放入該資料夾,編寫Android.mk檔案,一谷歌輸入法為例,如下: LOCAL_
Android新增新版本支援包V7後自定義ActionBar左側有空白,不能玩全填充問題解決
最近自定義ActionBar之後,發現左側不能完全填充,總是留一點空白,經過檢視新發布的V7的支援包中的style發現瞭解決方法。 <span style="font-family: Arial, Helvetica, sans-serif; back
為Arch Linux新增控制檯滑鼠支援(gpm)
在控制檯新增滑鼠支援主要是複製貼上比較方便,可以左鍵選中之後自動複製,右鍵貼上。在Arch下一般使用gpm這個包,具體安裝方式如下: 一般情況下,如果是在虛擬機器下或是隻是使用滑鼠的話 $ paceman -S gpm 就可以了,但是如果你是用的是膝上型電腦想要使用觸控板並且不
Android原始碼新增自定義系統服務
1、建立AIDL檔案 在原始碼frameworks/base/core/java/android/os/下面新增了一個ICCCService.aidl 2、將AIDL檔案放到編譯frameworks/base/Android.mk中 在frameworks/ba
為Ubuntu系統新增新的普通使用者
建立一個新的普通使用者 $ sudo useradd -m meow -s /bin/bash $ sudo passwd meow $ sudo adduser meow sudo $ su meow 建立了可以登入的meow使用者並使用/bin/bash作為shell。
android開發新增新的activity的注意事項
一定要記得在AndroidManifest.xml 功能清單上面配置Actiivty的配置程式碼,否則在指向該Activity時會出現閃現現象。 具體如下: <activity android:nam
Oracle為分割槽表新增新分割槽
需求:Message表,在原有分割槽的基礎上新增一個新分割槽 具體描述: 該表有50張,從Message_0到Message_49,資料量比較大,最少的一張有幾千萬資料,50G左右,最大的一張有幾億資料,超過300G. 該表為list分割槽表,有default分割槽,且def
為指定標籤新增新樣式
為特定標籤新增新樣式,這段程式碼實現的是將第三段的內容加上背景色 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DO
通過切面為Spring bean新增新的方法
背景: Performance代表任何型別的現場表演,如舞臺劇、電影或音樂會。 Audience有四個方法,定義了一個觀眾在觀看演出時可能會做的事情。在演出之前,觀眾要就坐takeSeats()並將手機調至靜音狀態silenceCellPhones()。如果演出很精彩的話,
Android下新增新的自定義鍵值和按鍵處理流程
[cpp] view plain copy print? <span style="font-family:FangSong_GB2312;font-size:18px;">/* * Copyright (C) 2010 The Android Open So
Android 系統新增新專案及配置
Android 編譯指令碼: 1. build/envsetup.sh 使用時必須用 source 或者 . 執行,否則設定內容不會到當前bash環境。 2. envsetup.sh 指令碼會掃描 device 或者 vendor 目錄下的 vendorsetup.sh 檔
SpringAOP:為目標類新增新的功能(拓展介面)
比如,原來的手機只能打電話,發簡訊。 現在,手機可以做為pad(掌上電腦),可以上網,看電影,打遊戲。 但是,我不想去繼承實現,我就要用AOP。 這次Aspect可就不同了 首先出場,基礎類
openwrt新增新平臺支援
大多數時候,與SDK一起提供的核心原始碼並不是很乾淨,而且不是標準的Linux版本,它還具有從核心開發樹的CVS或git倉庫返回的架構特定修復。無論如何,一些零件可以很容易地隔離,並作為一個好的開始,使一個香草核心工作你的硬體。 一些目錄很可能需要進行本地修改,以便在Linux下識別和使用您的硬體。首先
Android Studio(8)---為新裝置新增模組
為新裝置新增模組 模組為應用程式的原始碼,資原始檔和應用程式級別設定提供容器,例如模組級構建檔案和Android清單檔案。每個模組都可以獨立構建,測試和除錯。 Android Studio使用模組可以輕鬆地將新裝置新增到專案中。通過遵循Android Studio中的幾個
Android群英傳筆記——摘要,概述,新的出發點,溫故而知新,能夠為師矣!
ram hide 基本 pretty 工具 log 透明 scroll 好的 Android群英傳筆記——摘要。概述,新的出發點,溫故而知新。能夠為師矣! 當工作的越久,就越感到力不從心了,基礎和理解才是最重要的,所以買了兩本書,醫生的《An
Android小技巧(二):為ContentProvider新增資料庫事務支援
介紹:資料庫事務是由一組資料庫操作序列組成,事務作為一個整體被執行。 事務的原子性:包含在其中的對資料庫的操作序列最終要麼全部執行,要麼全部不執行。當全部執行時,事務對資料庫的修改將生效;當全部不執行時,資料庫維持原有的狀態,不會被修改。 問題:最近在做一個從sdcard
愛數選擇SAP S/4HANA Cloud 打造數字化核心,為資料探索之路新增新動力
SAP 與上海愛數資訊科技股份有限公司(以下簡稱「愛數」)日前舉行了簽約儀式。愛數選擇採用 SAP S/4HANA Cloud(ERP雲)為其打造企業數字化核心管理系統,實現高效協同、精細化運營、智慧化管理的數字化升級,為資料探索之路新增新動力,成就智慧企業。 ▲SAP 中國區副總裁、服務行業群總經理裴沵
Android裝置支援USB轉RJ45有線網絡卡( 沐陽網絡卡JP1081B/9700)
Android裝置支援USB轉RJ45有線網絡卡( 沐陽網絡卡JP1081B9700) 網絡卡裝置: 沐陽網絡卡JP1081B/9700 系統平臺: HISI3798MV100 Android : 4.2 1、分析網絡卡驅動在ubuntu系統上通過lsusb命令檢視網絡卡的驅動資訊
新一代免費私有云平臺Nano v0.5.1釋出 - 新增中文化支援/故障遷移/主機遷移
大家好,又一個重大更新發布了。 首先,為了便於國內使用者使用,0.5.1加入了中文支援,大部分介面和資訊已經漢化。只需要在頁面切換即可,瀏覽器會自動儲存,持續生效。 其次,增加了故障切換功能以加強叢集的高可用性。對於使用了NFS共享儲存的計算資源池,只需要在修改介面開啟新增的故障切換開關即可。當計算資