1. 程式人生 > >為android原始碼新增新裝置支援概述

為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共享儲存的計算資源池,只需要在修改介面開啟新增的故障切換開關即可。當計算資