日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 這里略過(guò)對(duì)android在手機(jī)上的文件系統(tǒng)框架的闡述(google或者baidu都能幫助你找到對(duì)應(yīng)的信息),主要看google是如何把生成合適的rootfs的工作整合到它的build體系當(dāng)中,同時(shí)

 這里略過(guò)對(duì)android在手機(jī)上的文件系統(tǒng)框架的闡述(google或者baidu都能幫助你找到對(duì)應(yīng)的信息),主要看google是如何把生成合適的rootfs的工作整合到它的build體系當(dāng)中,同時(shí),會(huì)順帶看一下CyanogenMod中對(duì)應(yīng)各種機(jī)型的build機(jī)制。

首先,來(lái)看一下Android的build系統(tǒng)中,使用到的編譯選項(xiàng)和相關(guān)工具

具體的目錄在:mydroid/build/tools/下

|-- acp

這是一個(gè)稍微改良的cp命令,用來(lái)應(yīng)付在windows/MAC/Linux下的cp命令的缺陷,其中的README很值得一看!

|-- adbs

這是一個(gè)用來(lái)查看crash問(wèn)題的工具,詳細(xì)請(qǐng)看《Android調(diào)試工具之a(chǎn)dbs》

|-- Android.mk

|-- apicheck

用來(lái)進(jìn)行發(fā)布前的API檢查(參見(jiàn)mydroid/build/core/tasks/apicheck.mk),是否新編譯的系統(tǒng)中有破壞API兼容性或是非法的API

這里的代碼是用Java寫(xiě)的用來(lái)檢查編譯時(shí)生成的API相關(guān)信息的xml文件(mydroid/framework/base/api/中),可以參考里面對(duì)于xml文件解析的代碼

|-- apriori

實(shí)現(xiàn)prelink的工具,簡(jiǎn)單介紹參見(jiàn)(mydroid/bionic/linker/README.TXT)

|-- atree

為android SDK服務(wù)的一個(gè)工具,用來(lái)按照指定xxx.atree文件中的內(nèi)容進(jìn)行一些文件操作

|-- bin2asm

不太明白具體的用處,應(yīng)該是用來(lái)應(yīng)付mac上編譯android一些與gcc相關(guān)的問(wèn)題

|-- buildinfo.sh

生成target中的各種xxx.prop文件,如system.prop, build.prop等

|-- check_builds.sh

包裝了diff,用來(lái)看2個(gè)發(fā)布版本之間變化

|-- check_prereq

device上進(jìn)行ota升級(jí)時(shí)的工具之一

|-- compare_fileslist.py

與check_builds.sh配合完成版本比較的腳本

|-- droiddoc

Android更具javadoc的一些移植

|-- dump-package-stats

簡(jiǎn)單的查看一個(gè)jar/apk文件內(nèi)的dex和其它文件的大小信息

|-- event_log_tags.py

處理event-log-tags的內(nèi)容,關(guān)于event-log-tags文件的意義參見(jiàn)《Android學(xué)習(xí)之event-log-tags是神馬》

|-- fileslist.py

簡(jiǎn)化的列出指定目錄下所有文件及大小的腳本 -- 可以放入自己的工具庫(kù)了使用:)

|-- findleaves.py

在指定目錄中(可多個(gè))找指定文件的腳本 -- 可以放入自己的工具庫(kù)了使用:)

|-- fixlinebreaks.sh

把windows中的換行改為linux下的 -- 可以放入自己的工具庫(kù)了使用:)

|-- fs_config

列出指定文件夾及文件的權(quán)限

|-- fs_get_stats

得到指定文件夾下文件的簡(jiǎn)單stats信息

|-- iself

判斷文件是否是ELF格式

|-- isprelinked

判斷文件是否是prelink過(guò)的

|-- java-event-log-tags.py

處理event-log-tags的內(nèi)容,關(guān)于event-log-tags文件的意義參見(jiàn)《Android學(xué)習(xí)之event-log-tags是神馬》

|-- kcm

key character map的工具, 相關(guān)資料參照:http://www.kandroid.org/online-pdk/guide/keymaps_keyboard_input.html#androidKeymapKeyCharMap

|-- lsd

!!!!!! ???

|-- merge-event-log-tags.py

處理event-log-tags的內(nèi)容,關(guān)于event-log-tags文件的意義參見(jiàn)《Android學(xué)習(xí)之event-log-tags是神馬》

|-- mktarball.sh

與fs_get_stats配合而執(zhí)行的打包工具

|-- print_module_licenses.sh

顯示當(dāng)前目錄下所有module信息

|-- releasetools

-- check_target_files_signatures

|-- common.py

|-- edify_generator.py

|-- img_from_target_files

|-- ota_from_target_files

`-- sign_target_files_apks

|-- rgb2565

rgb轉(zhuǎn)換工具

|-- signapk

命令行下對(duì)jar包簽名的工具

|-- soslim

Android定制的編譯工具之一,簡(jiǎn)單介紹參見(jiàn)(mydroid/bionic/linker/README.TXT)

|-- warn.py

解析Android系統(tǒng)編譯log的工具

`-- zipalign

zipfile的對(duì)齊工具,參見(jiàn)該文件夾下的README.TXT

在來(lái)看看Android編譯系統(tǒng)中定義的一些通用XXX.mk文件

mydroid/build/core/

|-- armelflib.x

|-- armelf.x

|-- armelf.xsc

|-- base_rules.mk

|-- binary.mk

|-- build_id.mk

|-- build-system.html

|-- checktree

|-- cleanbuild.mk

|-- cleanspec.mk

|-- clear_vars.mk

|-- combo

|-- config.mk

|-- copy_headers.mk

|-- definitions.mk

|-- device.mk

|-- dex_preopt.mk

|-- distdir.mk

|-- droiddoc.mk

|-- dumpvar.mk

|-- dynamic_binary.mk

|-- envsetup.mk

|-- executable.mk

|-- filter_symbols.sh

|-- find-jdk-tools-jar.sh

|-- help.mk

|-- host_executable.mk

|-- host_java_library.mk

|-- host_native_test.mk

|-- host_prebuilt.mk

|-- host_shared_library.mk

|-- host_static_library.mk

|-- java_library.mk

|-- java.mk

|-- legacy_prebuilts.mk

|-- main.mk

|-- Makefile

|-- multi_prebuilt.mk

|-- native_test.mk

|-- node_fns.mk

|-- notice_files.mk

|-- package.mk

|-- pathmap.mk

|-- phony_package.mk

|-- prebuilt.mk

|-- process_wrapper_gdb.cmds

|-- process_wrapper_gdb.sh

|-- process_wrapper.sh

|-- product_config.mk

|-- product.mk

|-- proguard.flags

|-- proguard_tests.flags

|-- raw_executable.mk

|-- raw_static_library.mk

|-- root.mk[!--empirenews.page--]

|-- shared_library.mk

|-- static_java_library.mk

|-- static_library.mk

|-- tasks

|-- user_tags.mk

`-- version_defaults.mk

這里,目錄在mydroid/build/core/tasks/有一些特別的task

|-- apicheck.mk, 判斷api是否符合AOSP的規(guī)范

|-- cts.mk cts測(cè)試, 可以在代碼根目錄, make cts, 編譯結(jié)束之后,進(jìn)入out/host/linux-x86/bin/下,執(zhí)行cts命令

|-- ide.mk IDE開(kāi)發(fā)環(huán)境

|-- product-graph.mk

`-- sdk-addon.mk

NDK的build環(huán)境沒(méi)有包含在標(biāo)注難得AOSP的/build/目錄下

而是在mydroid/ndk/build下

$ cd ndk/build/tools

$ export ANDROID_NDK_ROOT=aosp-root/ndk

$ ./make-release --help

一些小技巧

如何顯示每次編譯所包含的所有xxx.mk文件

找到build/core/main.mk

把include $(subdir_makefiles)替換為

[plain] view plaincopy $(foreach subdir_makefile, $(subdir_makefiles), \

$(info Including $(subdir_makefile)) \

$(eval include $(subdir_makefile)) \

)

subdir_makefile :=

如果遇見(jiàn)API相關(guān)的PACKAGING/checkapi-current-timestamp] Error 38

需要執(zhí)行:make update-api

如何在AOSP代碼目錄之外編譯

[plain] view plaincopy # Paths and settings

TARGET_PRODUCT = generic

ANDROID_ROOT = /home/karim/android/aosp-2.3.x

BIONIC_LIBC = $(ANDROID_ROOT)/bionic/libc

PRODUCT_OUT = $(ANDROID_ROOT)/out/target/product/$(TARGET_PRODUCT)

CROSS_COMPILE = \

$(ANDROID_ROOT)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

# Tool names

AS = $(CROSS_COMPILE)as

AR = $(CROSS_COMPILE)ar

CC = $(CROSS_COMPILE)gcc

CPP = $(CC) -E

LD = $(CROSS_COMPILE)ld

NM = $(CROSS_COMPILE)nm

OBJCOPY = $(CROSS_COMPILE)objcopy

OBJDUMP = $(CROSS_COMPILE)objdump

RANLIB = $(CROSS_COMPILE)ranlib

READELF = $(CROSS_COMPILE)readelf

SIZE = $(CROSS_COMPILE)size

STRINGS = $(CROSS_COMPILE)strings

STRIP = $(CROSS_COMPILE)strip

export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF \

SIZE STRINGS STRIP

# Build settings

CFLAGS = -O2 -Wall -fno-short-enums

HEADER_OPS = -I$(BIONIC_LIBC)/arch-arm/include \

-I$(BIONIC_LIBC)/kernel/common \

-I$(BIONIC_LIBC)/kernel/arch-arm

LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker \

$(PRODUCT_OUT)/obj/lib/crtbegin_dynamic.o \

$(PRODUCT_OUT)/obj/lib/crtend_android.o \

-L$(PRODUCT_OUT)/obj/lib -lc -ldl

# Installation variables

EXEC_NAME = example-app

INSTALL = install

INSTALL_DIR = $(PRODUCT_OUT)/system/bin

# Files needed for the build

OBJS = example-app.o

# Make rules

all: example-app

.c.o:

$(CC) $(CFLAGS) $(HEADER_OPS) -c {1}lt;

example-app: ${OBJS}

$(CC) -o $(EXEC_NAME) ${OBJS} $(LDFLAGS)

install: example-app

test -d $(INSTALL_DIR) || $(INSTALL) -d -m 755 $(INSTALL_DIR)

$(INSTALL) -m 755 $(EXEC_NAME) $(INSTALL_DIR)

clean:

rm -f *.o $(EXEC_NAME) core

distclean:

rm -f *~

rm -f *.o $(EXEC_NAME) core

如何增加一個(gè)新的設(shè)備

[plain] view plaincopy $ cd ~/android/aosp-2.3.x

$ . build/envsetup.sh

$ mkdir -p device/acme/coyotepad

$ cd device/acme/coyotepad

進(jìn)入AndroidProducts.mk

PRODUCT_MAKEFILES := \

$(LOCAL_DIR)/full_coyotepad.mk

對(duì)于full_coyotepad.mk

$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)

$(call inherit-product, $(SRC_TARGET_DIR)/product/full.mk)

DEVICE_PACKAGE_OVERLAYS :=

PRODUCT_PACKAGES +=

PRODUCT_COPY_FILES +=

PRODUCT_NAME := full_coyotepad

PRODUCT_DEVICE := coyotepad

PRODUCT_MODEL := Full Android on CoyotePad, meep-meep

在BoardConfig.mk中

TARGET_NO_KERNEL := true

TARGET_NO_BOOTLOADER := true

TARGET_CPU_ABI := armeabi

BOARD_USES_GENERIC_AUDIO := true

USE_CAMERA_STUB := true

打開(kāi)vendorsetup.sh

add_lunch_combo full_coyotepad-eng

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

憑借AI驅(qū)動(dòng)創(chuàng)新、可量化客戶(hù)影響力及行業(yè)領(lǐng)先的商業(yè)化卓越表現(xiàn)獲此殊榮 新澤西州伯克利高地2026年3月26日 /美通社/ -- 作為生命科學(xué)行業(yè)AI優(yōu)先數(shù)據(jù)分析解決方案的全...

關(guān)鍵字: ST OS AN BSP

深圳2026年3月26日 /美通社/ -- AI圈正上演一場(chǎng)反轉(zhuǎn),揭開(kāi)了AI普及浪潮下被忽視的真相:工具越來(lái)越簡(jiǎn)單,人的能力差距反而被放大。 從“代裝”到“代卸”:工具平權(quán)幻象背后的應(yīng)用能力斷層 這場(chǎng)反轉(zhuǎn)所暴露出的深...

關(guān)鍵字: LAB OS AI 模型

深圳2026年3月27日 /美通社/ -- 2026年以來(lái),全球科技圈被兩則重磅消息引爆,看似獨(dú)立,實(shí)則共同揭示了一個(gè)正在成型的現(xiàn)實(shí)。 一邊是基礎(chǔ)設(shè)施的"價(jià)格警報(bào)":3月18日,阿里云、百度智能云相...

關(guān)鍵字: TOKEN AI LAB OS

開(kāi)放語(yǔ)義交換構(gòu)建了一套開(kāi)放、供應(yīng)商中立的框架,用于在數(shù)據(jù)和 AI 平臺(tái)之間交換業(yè)務(wù)含義和語(yǔ)義加利福尼亞州帕洛阿爾托, March 25, 2026 (GLOBE NEWSWIRE) -- 數(shù)據(jù)管理領(lǐng)域的全球領(lǐng)導(dǎo)者?De...

關(guān)鍵字: AI OS SI 數(shù)據(jù)管理

上海2026年3月24日 /美通社/ -- 由生成式人工智能(AI)驅(qū)動(dòng)的臨床階段生物醫(yī)藥科技公司英矽智能(Insilico Medicine, 03696.HK)今日宣布,已與日本一家專(zhuān)注于內(nèi)科、婦產(chǎn)科領(lǐng)域的...

關(guān)鍵字: ARMA TARGET BSP 模型

深圳2026年3月18日 /美通社/ -- 近期,開(kāi)源垂直模型 OpenCLaw 在技術(shù)社區(qū)引發(fā)熱議。這一聚焦通用任務(wù)執(zhí)行的AI工具,被視為大模型從"通用聊天"走向"行業(yè)深水區(qū)"的...

關(guān)鍵字: 模型 OPENCL LAB OS

阿聯(lián)酋迪拜2026年2月26日 /美通社/ -- 納斯達(dá)克上市公司 Robo.ai Inc.(NASDAQ: AIIO,以下簡(jiǎn)稱(chēng)“Robo.ai”)今日宣布,在本月初與 Da...

關(guān)鍵字: 數(shù)據(jù)采集 AI OS 模型

合作從電信領(lǐng)域啟動(dòng),并設(shè)立專(zhuān)門(mén)的Anthropic卓越中心,未來(lái)將擴(kuò)展到金融服務(wù)、制造業(yè)和軟件開(kāi)發(fā)領(lǐng)域 Infosys Topaz?和Anthropic的Claude模型(包括Claude Code)相結(jié)合,共...

關(guān)鍵字: PIC 人工智能 OS AN

利用Infosys Topaz和Infosys Cobalt助力數(shù)字化基礎(chǔ)設(shè)施轉(zhuǎn)型 印度班加羅爾2026年2月13日 /美通社/ -- 下一代數(shù)字服務(wù)和咨詢(xún)的全球領(lǐng)軍者Infosys(NSE, BSE, NYSE: I...

關(guān)鍵字: 人工智能 OS SE 數(shù)字化

憑借壽險(xiǎn)AI理賠自動(dòng)化與決策能力獲評(píng) 紐約和新加坡2026年2月11日 /美通社/ -- Neutrinos作為保險(xiǎn)行業(yè)AI驅(qū)動(dòng)智能自動(dòng)化領(lǐng)域的領(lǐng)導(dǎo)者宣布,公司已...

關(guān)鍵字: OS CE AN AUTOMATION
關(guān)閉