Android ROM 制作教程

Android ROM 制作教程

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

本文来自: 起点手机论坛 具体文章參考:http://www.qdppc.com/forum.php?mod=viewthread&tid=43751&fromuid=1 

 

1、Android系统是什么?

Android是Google公司于2007年公布的基于Linux的移动终端系统平台。
之所以说是移动终端,是由于现现在手机、MID、Tablet等之间的差距越来越小,而不再存在不可逾越的鸿沟。
凭借Google服务的优势、各移动设备制造商的配合以及Android系统本身对于开发人员良好的亲和性,
Android系统非常快就在移动设备操作系统领域占有了举足轻重的地位。

说究竟,Android也就是基于Linux的操作系统,而所谓基于Linux,指的即是基于Linux内核。
事实上,在移动终端领域,Android不是第一个这样做的,也不是最后一个。
如Web OS、Maemo、Moblin、Bada、Meego等

基于Linux内核就意味着这些系统会有本质的相通之处,也意味着有很多其它的开放性、会吸引很多其它的开发人员。
所以,抛开硬件限制,HD2可以跑Android也就注定能跑Unbuntu和Meego等。(只是可能会涉及的驱动开发以及CPU、存储容量的制约)

2、Android系统结构

接下来就说一说Android系统的结构,对于Android系统结构的了解对于Android软件开发和ROM制作都非常重要。
仅仅有当你真正了解了Android是如何的构成的时候,才干更深刻的理解之后每一步做的是什么,也才干明确出了问题可能是哪里的问题。

(1)宏观

Android是基于Linux内核的,
Linux内核是什么不知道?汗,简单地说就是Linux是一个操作系统,Linux Kernel就是这个系统最最主要的部分,是核心。
好比用户数最多的Windows系统,你看道的那些窗体啊、绘图计算器扫雷那些附件啊什么的,只是是架在Windows的内核之上而已。
所谓内核,就是供上层用户库、用户程序调用的核心。就好比计算所得税有一个公式,而其核心是加减乘除四则运算……扯远了……

简单地说Android就是:Linux内核+第三方库(如sqlite、webkit等)+Android核心库+Java虚拟机+定义提供的一些接口
仅仅要把上边每一个词搞懂是啥了,基本就搞懂Android是如何工作的了。

Android在宏观上的结构例如以下
从上至下依次为:应用程序层、应用程序框架层(提供给应用程序对低层接口)、支持库及Android执行时环境(含核心库及Java虚拟机)、Linux内核
详细当中每层都是什么,英语好的自己看,英语不好的google一下

(2)模块
Android各功能系统模块(看其它部分时可能结合这块看):

(注:还包括基本介绍和宏观结构等哦~~~~推荐~)

(3)Android源码文件夹结构

 

Android 2.2

|– Makefile

|– bionic               (bionic C库)

|– bootable            (启动引导相关代码)

|– build                 (存放系统编译规则及generic等基础开发包配置)

|– cts                    (Android兼容性測试套件标准)

|– dalvik                (dalvik JAVA虚拟机)

|– development      (应用程序开发相关)

|– external             (android使用的一些开源的模组)

|– frameworks       (核心框架——java及C++语言)

|– hardware           (主要保护硬解适配层HAL代码)

|– libcore          

|– ndk          

|– device             

|– out                   (编译完毕后的代码输出与此文件夹)

|– packages           (应用程序包)

|– prebuilt             (x86和arm架构下预编译的一些资源)

|– sdk                   (sdk及模拟器)

|– system              (文件系统库、应用及组件——C语言)

`– vendor              (厂商定制代码)

 

 

bionic 文件夹

|– libc                   (C库)

|   |– arch-arm     (ARM架构,包括系统调用汇编实现)

|   |– arch-x86     (x86架构,包括系统调用汇编实现)

|   |– bionic         (由C实现的功能,架构无关)

|   |– docs           (文档)

|   |– include        (头文件)

|   |– inet            

|   |– kernel         (Linux内核中的一些头文件)

|   |– netbsd         (?netbsd系统相关,详细作用不明)

|   |– private        (?一些私有的头文件)

|   |– stdio           (stdio实现)

|   |– stdlib          (stdlib实现)

|   |– string          (string函数实现)

|   |– tools           (几个工具)

|   |– tzcode         (时区相关代码)

|   |– unistd         (unistd实现)

|   `– zoneinfo      (时区信息)

|– libdl                  (libdl实现,dl是动态链接,提供訪问动态链接库的功能)

|– libm                  (libm数学库的实现,)

|   |– alpha           (apaha架构)

|   |– amd64        (amd64架构)

|   |– arm            (arm架构)

|   |– bsdsrc        (?bsd的源代码)

|   |– i386            (i386架构)

|   |– i387            (i387架构?)

|   |– ia64            (ia64架构)

|   |– include        (头文件)

|   |– man            (数学函数,后缀名为.3,一些为freeBSD的库文件)

|   |– powerpc     (powerpc架构)

|   |– sparc64       (sparc64架构)

|   `– src             (源码)

|– libstdc++           (libstdc++ C++实现库)

|   |– include        (头文件)

|   `– src             (源代码)

|– libthread_db       (多线程程序的调试器库)

|   `– include        (头文件)

`– linker                (动态链接器)

    `– arch          (支持arm和x86两种架构)

 

 

bootable 文件夹

.

|– bootloader                       (适合各种bootloader的通用代码)

|   `– legacy                       (预计不能直接使用,能够參考)

|       |– arch_armv6        (V6架构,几个简单的汇编文件)

|       |– arch_msm7k             (高通7k处理器架构的几个基本驱动)

|       |– include               (通用头文件和高通7k架构头文件)

|       |– libboot               (启动库,都写得非常easy)

|       |– libc                    (一些经常使用的c函数)

|       |– nandwrite           (nandwirte函数实现)

|       `– usbloader           (usbloader实现)

|– diskinstaller                     (android镜像打包器,x86可生产iso)

`– recovery                         (系统恢复相关)

    |– edify                        (升级脚本使用的edify脚本语言)

    |– etc                           (init.rc恢复脚本)

    |– minui                       (一个简单的UI)

    |– minzip                      (一个简单的压缩工具)

    |– mtdutils                    (mtd工具)

    |– res                           (资源)

    |   `– images               (一些图片)

    |– tools                        (工具)

    |   `– ota                    (OTA Over The Air Updates升级工具)

    `– updater                    (升级器)

 

 

build文件夹

.

|– core                         (核心编译规则)

|– history                            (历史记录)

|– libs                        

|   `– host                   (主机端库,有android “cp”功能替换)

|– target                       (目标机编译对象)

|   |– board                 (开发平台)

|   |   |– emulator       (模拟器)

|   |   |– generic         (通用)

|   |   |– idea6410      (自己加入�的)

|   |   `– sim              (最简单)

|   `– product              (开发平台相应的编译规则)

|       `– security      (密钥相关)

`– tools                        (编译中主机使用的工具及脚本)

    |– acp                   (Android “acp” Command)

    |– apicheck           (api检查工具)

    |– applypatch         (补丁工具)

    |– apriori               (预链接工具)

    |– atree                 (tree工具)

    |– bin2asm            (bin转换为asm工具)

    |– check_prereq     (检查编译时间戳工具)

    |– dexpreopt          (模拟器相关工具,详细功能不明)

    |– droiddoc           (?作用不明,java语言,网上有人说和JDK5有关)

    |– fs_config          (This program takes a list of files and directories)

    |– fs_get_stats              (获取文件系统状态)

    |– iself                  (推断是否ELF格式)

    |– isprelinked         (推断是否prelinked)

    |– kcm                  (按键相关)

    |– lsd                    (List symbol dependencies)

    |– releasetools        (生成镜像的工具及脚本)

    |– rgb2565            (rgb转换为565)

   |– signapk             (apk签名工具)

    |– soslim               (strip工具)

`– zipalign             (zip archive alignment tool)

 

dalvik文件夹 dalvik虚拟机

.

|– dalvikvm                  (main.c的文件夹)

|– dexdump                  (dex反汇编)

|– dexlist                      (List all methods in all concrete classes in a DEX file.)

|– dexopt                            (预验证与优化)

|– docs                        (文档)

|– dvz                          (和zygote相关的一个命令)

|– dx                           (dx工具,将多个java转换为dex)

|– hit                           (?java语言写成)

|– libcore                            (核心库)

|– libcore-disabled         (?禁用的库)

|– libdex                       (dex的库)

|– libnativehelper           (Support functions for Android’s class libraries)

|– tests                        (測试代码)

|– tools                        (工具)

`– vm                          (虚拟机实现)

 

 

development 文件夹         (开发人员须要的一些例程及工具)

|– apps                        (一些核心应用程序)

|   |– BluetoothDebug (蓝牙调试程序)

|   |– CustomLocale     (自己定义区域设置)

|   |– Development      (开发)

|   |– Fallback             (和语言相关的一个程序)

|   |– FontLab             (字库)

|   |– GestureBuilder    (手势动作)

|   |– NinePatchLab     (?)

|   |– OBJViewer         (OBJ查看器)

|   |– SdkSetup           (SDK安装器)

|   |– SpareParts          (高级设置)

|   |– Term                 (远程登录)

|   `– launchperf          (?)

|– build                        (编译脚本模板)

|– cmds                       (有个monkey工具)

|– data                         (配置数据)

|– docs                        (文档)

|– host                         (主机端USB驱动等)

|– ide                           (集成开发环境)

|– ndk                          (本地开发套件——c语言开发套件)

|– pdk                          (Plug Development Kit)

|– samples                    (演示程序)

|   |– AliasActivity       ()

|   |– ApiDemos          (API演示程序)

|   |– BluetoothChat     (蓝牙聊天)

|   |– BrowserPlugin    (浏览器插件)

|   |– BusinessCard      (商业卡)

|   |– Compass            (指南针)

|   |– ContactManager (联系人管理器)

|   |– CubeLiveWall**     (动态壁纸的一个简单例程)

|   |– FixedGridLayout (像是布局)

|   |– GlobalTime         (全球时间)

|   |– HelloActivity       (Hello)

|   |– Home                 (Home)

|   |– JetBoy               (jetBoy游戏)

|   |– LunarLander       (貌似又是一个游戏)

|   |– MailSync            (邮件同步)

|   |– MultiResolution   (多分辨率)

|   |– MySampleRss     (RSS)

|   |– NotePad             (记事本)

|   |– RSSReader         (RSS阅读器)

|   |– SearchableDictionary (文件夹搜索)

|   |– **JNI          (JNI例程)

|   |– SkeletonApp       (空壳APP)

|   |– Snake                (snake程序)

|   |– SoftKeyboard     (软键盘)

|   |– Wiktionary          (?维基)

|   `– Wiktionary**(?维基例程)

|– scripts                            (脚本)

|– sdk                          (sdk配置)

|– simulator                  (?模拟器)

|– testrunner                 (?測试用)

`– tools                        (一些工具)

external 文件夹
.
|– aes    (AES加密)
|– apache-http   (网页server)
|– astl    (ASTL (Android STL) is a slimmed-down version of the regular C++ STL.)
|– bison    (自己主动生成语法分析器,将无关文法转换成C、C++)
|– blktrace   (blktrace is a block layer IO tracing mechanism)
|– bluetooth   (蓝牙相关、协议栈)
|– bsdiff    (diff工具)
|– bzip2    (压缩工具)
|– clearsilver   (html模板系统)
|– dbus    (低延时、低开销、高可用性的IPC机制)
|– dhcpcd   (DHCP服务)
|– dosfstools   (DOS文件系统工具)
|– dropbear   (SSH2的server)
|– e2fsprogs   (EXT2文件系统工具)
|– elfcopy   (复制ELF的工具)
|– elfutils    (ELF工具)
|– embunit   (Embedded Unit Project)
|– emma    (java代码覆盖率统计工具)
|– esd    (Enlightened Sound Daemon,将多种音频流混合在一个设备上播放)
|– expat    (Expat is a stream-oriented XML parser.)
|– fdlibm    (FDLIBM (Freely Distributable LIBM))
|– freetype   (字体)
|– fsck_msdos   (dos文件系统检查工具)
|– gdata    (google的无线数据相关)
|– genext2fs   (genext2fs generates an ext2 filesystem as a normal (non-root) user)
|– giflib    (gif库)
|– googleclient (google用户库)
|– grub    (This is GNU GRUB, the GRand Unified Bootloader.)
|– gtest    (Google C++ Testing Framework)
|– icu4c    (ICU(International Component for Unicode)在C/C++下的版本号)
|– ipsec-tools   (This package provides a way to use the native IPsec functionality )
|– iptables   (防火墙)
|– jdiff    (generate a report describing the difference between two public Java APIs.)
|– jhead    (jpeg头部信息工具)
|– jpeg    (jpeg库)
|– junit    (JUnit是一个Java语言的单元測试框架)
|– kernel-headers (内核的一些头文件)
|– libffi    (libffi is a foreign function inte**ce library.)
|– libpcap   (网络数据包捕获函数)
|– libpng    (png库)
|– libxml2   (xml解析库)
|– mtpd    (一个命令)
|– netcat    (** Unix utility which reads and writes dataacross network connections)
|– netperf    (网络性能測量工具)
|– neven    (看代码和JNI相关)
|– opencore   (多媒体框架)
|– openssl   (SSL加密相关)
|– openvpn   (VPN开源库)
|– oprofile   (OProfile是Linux内核支持的一种性能分析机制。)
|– ping    (ping命令)
|– ppp    (pppd拨号命令,好像还没有chat)
|– proguard   (Java class file shrinker, optimizer, obfuscator, and preverifier)
|– protobuf   (a flexible, efficient, automated mechanism for serializing structured data)
|– qemu    (arm模拟器)
|– safe-iop   (functions for performing safe integer operations )
|– skia    (skia图形引擎)
|– sonivox   (sole MIDI solution for Google Android Mobile Phone Platform)
|– speex    (Speex编/解码API的使用(libspeex))
|– sqlite    (数据库)
|– srec    (Nuance 公司提供的开源连续非特定人语音识别)
|– strace    (trace工具)
|– svox    (Embedded Text-to-Speech)
|– tagsoup   (TagSoup是一个Java开发符合SAX的HTML解析器)
|– tcpdump   (抓TCP包的软件)
|– tesseract   (Tesseract Open Source OCR Engine.)
|– tinyxml   (TinyXml is a **, small, C++ XML parser)
|– tremor    (I stream and file decoder provides an embeddable,integer-only library)
|– webkit    (浏览器核心)
|– wpa_supplicant (无线网卡管理)
|– xmlwriter   (XML 编辑工具)
|– yaffs2    (yaffs文件系统)
`– zlib    (a general purpose data compression library)

 

frameworks 文件夹 (核心框架——java及C++语言)
.
|– base    (基本内容)
|   |– api   (都是xml文件,定义了java的api)
|   |– awt   (AWT库)
|   |– build   (空的)
|   |– camera   (摄像头服务程序库)
|   |– cmds   (重要命令:am、app_proce等)
|   |– core   (核心库)
|   |– data   (字体和声音等数据文件)
|   |– docs   (文档)
|   |– graphics (图形相关)
|   |– include   (头文件)
|   |– keystore (和数据签名证书相关)
|   |– libs   (库)
|   |– location (地区库)
|   |– media   (媒体相关库)
|   |– obex   (蓝牙传输库)
|   |– opengl   (2D-3D加速库)
|   |– packages (设置、TTS、VPN程序)
|   |– sax   (XML解析器)
|   |– services (各种服务程序)
|   |– telephony (电话通讯管理)
|   |– test-runner (測试工具相关)
|   |– tests   (各种測试)
|   |– tools   (一些叫不上名的工具)
|   |– vpn   (VPN)
|   `– wifi   (无线网络)
|– opt    (可选部分)
|   |– com.google.android     (有个framework.jar)
|   |– com.google.android.googlelogin   (有个client.jar)
|   `– emoji   (standard message elements)
`– policies   (Product policies are operating system directions aimed at specific uses)
    `– base 
        |– mid (MID设备)
        `– phone (手机类设备,一般用这个)

hardware 文件夹   (部分厂家开源的硬解适配层HAL代码)
|– broadcom    (博通公司)
|   `– wlan    (无线网卡)
|– libhardware    (硬件库)
|   |– include    (头文件)
|   `– modules   (Default (and possibly architecture dependents) HAL modules)
|       |– gralloc   (gralloc显示相关)
|       `– overlay   (Skeleton for the “overlay” HAL module.)
|– libhardware_legacy (旧的硬件库)
|   |– flashlight   (背光)
|   |– gps    (GPS)
|   |– include    (头文件)
|   |– mount    (旧的挂载器)
|   |– power    (电源)
|   |– qemu    (模拟器)
|   |– qemu_tracing (模拟器跟踪)
|   |– tests    (測试)
|   |– uevent    (uevent)
|   |– vibrator    (震动)
|   `– wifi    (无线)
|– msm7k    (高通7k处理器开源抽象层)
|   |– boot    (启动)
|   |– libaudio   (声音库)
|   |– libaudio-qsd8k (qsd8k的声音相关库)
|   |– libcamera   (摄像头库)
|   |– libcopybit   (copybit库)
|   |– libgralloc   (gralloc库)
|   |– libgralloc-qsd8k (qsd8k的gralloc库)
|   |– liblights   (背光库)
|   `– librpc    (RPC库)
|– ril     (无线电抽象层)
|   |– include    (头文件)
|   |– libril    (库)
|   |– reference-cdma-sms (cdma短信參考)
|   |– reference-ril    (ril參考)
|   `– rild     (ril后台服务程序)
`– ti       (ti公司开源HAL)
    |– omap3     (omap3处理器)
    |   |– dspbridge   (DSP桥)
    |   |– libopencorehw (opencore硬件库)
    |   |– liboverlay   (overlay硬件库)
    |   |– libstagefrighthw (stagefright硬件库)
    |   `– omx    (omx组件)
    `– wlan     (无线网卡)

prebuilt 文件夹    (x86和arm架构下预编译的一些资源)
.
|– android-arm   (arm-android相关)
|   |– gdbserver   (gdb调试器)
|   `– kernel    (模拟的arm内核)
|– android-x86   (x86-android相关)
|   `– kernel    (空的)
|– common    (通用编译好的代码,应该是java的)
|– darwin-x86    (drawin x86平台)
|   `– toolchain   (工具链)
|       |– arm-eabi-4.2.1
|       |– arm-eabi-4.3.1
|       `– arm-eabi-4.4.0
|– darwin-x86_64   (drawin x86 64bit平台)
|– linux-x86    (linux x86平台)
|   `– toolchain   (工具链,我们应该主要用这个)
|       |– arm-eabi-4.2.1
|       |– arm-eabi-4.3.1
|       |– arm-eabi-4.4.0
|       `– i686-unknown-linux-gnu-4.2.1 (x86版编译器)
|– linux-x86_64   (linux x86 64bit平台)
|– windows    (windows平台)
`– windows-x86_64 (64bit windows平台)

system 文件夹   (底层文件系统库、应用及组件——C语言)
.
|– Bluetooth   (蓝牙相关)
|– core    (系统核心工具盒接口)
|   |– adb   (adb调试工具)
|   |– cpio   (cpio工具,创建img)
|   |– debuggerd (调试工具)
|   |– fastboot (高速启动相关)
|   |– include   (系统接口头文件)
|   |– init   (init程序源码)
|   |– libacc   (轻量级C编译器)
|   |– libctest   (libc測试相关)
|   |– libcutils (libc工具)
|   |– liblog   (log库)
|   |– libmincrypt (加密库)
|   |– libnetutils (网络工具库)
|   |– libpixelflinger (图形处理库)
|   |– libsysutils (系统工具库)
|   |– libzipfile (zip库)
|   |– logcat   (查看log工具)
|   |– logwrapper (log封装工具)
|   |– mkbootimg (制作启动boot.img的工具盒脚本)
|   |– netcfg   (网络配置netcfg源代码)
|   |– nexus   (google最新手机的代码)
|   |– rootdir   (rootfs,包括一些etc下的脚本和配置)
|   |– sh    (shell代码)
|   |– toolbox   (toolbox,类似busybox的工具集)
|   `– vold   (SD卡管理器)
|– extras    (额外工具)
|   |– latencytop (a tool for software developers ,identifying system latency happen)
|   |– libpagemap (pagemap库)
|   |– librank   (Java Library Ranking System库)
|   |– procmem (pagemap相关)
|   |– procrank (Java Library Ranking System相关)
|   |– showmap (showmap工具)
|   |– showslab (showslab工具)
|   |– sound   (声音相关)
|   |– su    (su命令源代码)
|   |– tests   (一些測试工具)
|   `– timeinfo (时区相关)
`– wlan    (无线相关)
    `– ti    (ti网卡相关工具及库)

packages 文件夹
.
|– apps     (应用程序库)
|   |– AlarmClock   (闹钟)
|   |– Bluetooth   (蓝牙)
|   |– Browser   (浏览器)
|   |– Calculator   (计算器)
|   |– Calendar   (日历)
|   |– Camera    (相机)
|   |– CertInstaller   (在Android中安装数字签名,被调用)
|   |– Contacts   (拨号(调用)、联系人、通话记录)
|   |– DeskClock   (桌面时钟)
|   |– Email    (Email)
|   |– Gallery    (相冊,和Camera类似,多了列表)
|   |– Gallery3D   (3D相冊)
|   |– GlobalSearch (为google搜索服务,提供底层应用)
|   |– GoogleSearch (google搜索)
|   |– HTMLViewer (浏览器附属界面,被浏览器应用调用,同一时候提供存储记录功能)
|   |– IM    (即时通讯,为手机提供信号发送、接收、通信的服务)
|   |– Launcher   (登陆启动项,显示图片框架等等图形界面)
|   |– Launcher2   (登陆启动项,负责应用的调用)
|   |– Mms    (彩信业务)
|   |– Music    (音乐播放器)
|   |– PackageInstaller (安装、卸载程序的响应)
|   |– Phone    (电话拨号程序)
|   |– Provision   (预设应用的状态,使能应用)
|   |– Settings   (开机设定,包含电量、蓝牙、设备信息、界面、wifi等)
|   |– SoundRecorder (录音机,可计算存储所需空间和时间)
|   |– Stk     (接收和发送短信)
|   |– Sync    (空)   ——-○1
|   |– Updater   (空)
|   `– VoiceDialer   (语音识别通话)
|– inputmethods   (输入法)
|   |– LatinIME   (拉丁文输入法)
|   |– OpenWnn   (OpenWnn输入法)
|   `– PinyinIME   (拼音输入法)
|– providers    (提供器,提供应用程序、界面所需的数据)
|   |– ApplicationsProvider   (应用程序提供器,提供应用程序启动项、更新等)
|   |– CalendarProvider    (日历提供器)
|   |– ContactsProvider    (联系人提供器)
|   |– DownloadProvider   (下载管理提供器)
|   |– DrmProvider    (创建和更新数据库时调用)
|   |– GoogleContactsProvider (联系人提供器的子类,用以同步联系人)
|   |– GoogleSubscribedFeedsProvider(设置信息提供器)
|   |– ImProvider     (空)
|   |– ManagementProvider   (空)
|   |– MediaProvider    (媒体提供器,提供存储数据)
|   |– TelephonyProvider   (彩信提供器)
|   |– UserDictionaryProvider (用户字典提供器,提供用户经常使用字字典)
|   `– WebSearchProvider   (空)
|– services    
|   |– EasService     (空)
|   `– LockAndWipe    (空)
`– wall**s      (墙纸)
    |– Basic      (基本墙纸,系统内置墙纸)
    |– LivePicker     (选择动态壁纸)
    |– MagicSmoke    (壁纸特殊效果)
    `– MusicVisualization   (音乐可视化,图形随音乐而变化)

vendor 文件夹    (厂家定制内容)

|– aosp     (android open source project)
|   `– products   (一些板级规则)
|– htc     (HTC公司)
|   |– common-open (通用部分)
|   |   `– akmd   (解压img用的工具)
|   |– dream-open   (G1开放部分)
|   |– prebuilt-open (预编译开放部分)
|   `– sapphire-open (sapphire这款型号开放内容)
|– pv-open    (没东西)
|– qcom     (里面基本是空的)
`– sample    (google提供的例子)
    |– apps    (应用)
    |   |– client   (用户)
    |   `– upgrade (升级)
    |– frameworks   (框架)
    |   `– PlatformLibrary (平台库)
    |– products   (产品)
    |– sdk_addon   (sdk加入�部分)
    `– skins    (皮肤)
        `– WVGAMedDpi (WVGA适用的图片)

 

SDK和OUT文件夹没有列出

 

(4)ROM结构
对于HD2来说,其ROM(不论模拟还是直刷)主要由initrd、zImage、system组成。
这三个部分,对于熟悉Linux的人来说应该并不陌生。
initrd负责的就是启动,其本质就是一个暂时的系统,在引导时使用。(呵呵,话说开机最初那五花八门的开机第一二屏就在这里,比方第一个直刷ROM的那个灰底DFT……)
zImage即为Linux内核镜像,所谓的Android基于Linux内核,其实也就是基于它。
在直刷中,非常多大大通常把这两项单独打包成boot.img,也就是统成为引导镜像。(这两部分将在后面有机会时具体介绍)

至于常出现的system.img、system.bin、system.ext2,即为system。
相应的就是那些原生机的卡刷用的update.zip中的system文件夹,这里面的一切成就了Android的各种特性。
在这部分,先仅仅重点分析一下system文件夹结构(从别处剪了剪放过来,所以这里涵盖不全,并且不同系统因为有各自的定制,内容不同样)
(提前补充,用户安装程序会存在data文件夹,sd卡被挂载在sdcard文件夹):

system/app
–在这个目录下的程序为系统默认的组件,能够看到都是以APK格式结尾的文件,但有些自制的ROM里面还有和APK文件名称相应的odex文件。
\\system\\app\\AlarmClock.apk 闹钟
\\system\\app\\Browser.apk 浏览器
\\system\\app\\Bugreport.apk Bug报告
\\system\\app\\Calculator.apk 计算器
\\system\\app\\Calendar.apk 日历
\\system\\app\\CalendarProvider.apk 日历提供
\\system\\app\\Camera.apk 照相机
\\system\\app\\com.amazon.mp3.apk 亚马逊音乐
\\system\\app\\Contacts.apk 联系人
\\system\\app\\DownloadProvider.apk 下载提供
\\system\\app\\DrmProvider.apk DRM数字版权提供
\\system\\app\\Email.apk 电子邮件client
\\system\\app\\FieldTest.apk 測试程序
\\system\\app\\GDataFeedsProvider.apk GoogleData提供
\\system\\app\\Gmail.apk Gmail电子邮件
\\system\\app\\GmailProvider.apk Gmail提供
\\system\\app\\GoogleApps.apk 谷歌程序包
\\system\\app\\GoogleSearch.apk 搜索工具
\\system\\app\\gtalkservice.apk GTalk服务
\\system\\app\\HTMLViewer.apk HTML查看器
\\system\\app\\HtcTwitter.apk 集成TwitterclientPEEP
\\system\\app\\IM.apk 即使通讯组件包括MSN、yahoo通
\\system\\app\\ImCredentialProvider.apk
\\system\\app\\ImProvider.apk
\\system\\app\\Launcher.apk 启动载入器
\\system\\app\\HtcNaviPanel.apk 导航软件
\\system\\app\\Maps.apk 电子地图
\\system\\app\\MediaProvider.apk 多媒体播放提供
\\system\\app\\Mms.apk 短信、彩信
\\system\\app\\Music.apk 音乐播放器
\\system\\app\\MyFaves.apk T-Mobile MyFaves程序
\\system\\app\\NewsReader.apk 新闻阅读器
\\system\\app\\PackageInstaller.apk apk安装程序
\\system\\app\\Phone.apk 电话拨号器
\\system\\app\\Settings.apk 系统设置
\\system\\app\\SettingsProvider.apk 设置提供
\\system\\app\\SetupWizard.apk 设置向导
\\system\\app\\SoundRecorder.apk 录音工具
\\system\\app\\Street.apk 街景地图
\\system\\app\\Sync.apk 同步程序
\\system\\app\\Talk.apk 语音程序
\\system\\app\\TelephonyProvider.apk 电话提供
\\system\\app\\Updater.apk 更新程序
\\system\\app\\VpnServices.apk VPN服务
\\system\\app\\Vending.apk 制造商信息
\\system\\app\\VoiceDialer.apk 语音拨号器
\\system\\app\\VoiceSearch.apk 语音搜索
\\system\\app\\YouTube.apk Youtube视频

\\system\\bin
这个文件夹下的文件都是系统的本地程序,里面主要是Linux系统自带的组件:
\\system\\bin\\akmd
\\system\\bin\\am
\\system\\bin\\app_process 系统进程
\\system\\bin\\dalvikvm Dalvik虚拟机宿主
\\system\\bin\\dbus-daemon 系统BUS总线监控
\\system\\bin\\debuggerd 调试器
\\system\\bin\\debug_tool 调试工具
\\system\\bin\\dexopt DEX选项
\\system\\bin\\dhcpcd DHCPserver
\\system\\bin\\dumpstate 状态抓取器
\\system\\bin\\dumpsys 系统抓取器
\\system\\bin\\dvz
\\system\\bin\\fillup
\\system\\bin\\flash_image 闪存映像
\\system\\bin\\hciattach
\\system\\bin\\hcid HCID内核
\\system\\bin\\hostapd
\\system\\bin\\hostapd_cli
\\system\\bin\\htclogkernel
\\system\\bin\\input
\\system\\bin\\installd
\\system\\bin\\itr
\\system\\bin\\linker
\\system\\bin\\logcat Logcat日志打印
\\system\\bin\\logwrapper
\\system\\bin\\mediaserver
\\system\\bin\\monkey
\\system\\bin\\mountd 存储挂载器
\\system\\bin\\netcfg 网络设置
\\system\\bin\\ping Ping程序
\\system\\bin\\playmp3 MP3播放器
\\system\\bin\\pm 包管理器
\\system\\bin\\qemud QEMU虚拟机
\\system\\bin\\radiooptions 无线选项
\\system\\bin\\rild RIL组件
\\system\\bin\\sdptool
\\system\\bin\\sdutil
\\system\\bin\\service
\\system\\bin\\servicemanager 服务管理器
\\system\\bin\\sh
\\system\\bin\\ssltest SSL測试
\\system\\bin\\su**ceflinger 触摸感应驱动
\\system\\bin\\svc 服务
\\system\\bin\\system_server
\\system\\bin\\telnetd Telnet组件
\\system\\bin\\toolbox
\\system\\bin\\wlan_loader
\\system\\bin\\wpa_cli
\\system\\bin\\wpa_supplicant

\\system\\etc
从目录名称来看保存的都是系统的配置文件,比方APN接入点设置等核心配置。
\\system\\etc\\apns-conf.xml APN接入点配置文件
\\system\\etc\\AudioFilter.csv 音频过滤器配置文件
\\system\\etc\\AudioPara4.csv
\\system\\etc\\bookmarks.xml 书签数据库
\\system\\etc\\dbus.conf 总线监视配置文件
\\system\\etc\\dhcpcd
\\system\\etc\\event-log-tags
\\system\\etc\\favorites.xml 收藏夹
\\system\\etc\\firmware 固件信息
\\system\\etc\\gps.conf GPS设置文件
\\system\\etc\\hcid.conf内核HCID配置文件
\\system\\etc\\hosts 网络DNS缓存
\\system\\etc\\init.goldfish.sh
\\system\\etc\\location 定位相关
\\system\\etc\\mountd.conf 存储挂载配置文件
\\system\\etc\\NOTICE.html 提示网页
\\system\\etc\\permissions.xml 权限许可
\\system\\etc\\pvplayer.conf
\\system\\etc\\security
\\system\\etc\\wifi WLAN相关组件
\\system\\etc\\location\\gps
\\system\\etc\\location\\gps\\location 定位相关
\\system\\etc\\location\\gps\\nmea GPS数据解析
\\system\\etc\\location\\gps\\properties
\\system\\etc\\security\\cacerts.bks
\\system\\etc\\security\\otacerts.zip OTA下载验证
\\system\\etc\\wifi\\Fw1251r1c.bin
\\system\\etc\\wifi\\tiwlan.ini
\\system\\etc\\wifi\\wpa_supplicant.conf WPA验证组件

\\system\\fonts
字体目录
\\system\\fonts\\DroidSans-Bold.ttf
\\system\\fonts\\DroidSans.ttf
\\system\\fonts\\DroidSansFallback.ttf
\\system\\fonts\\DroidSansMono.ttf
\\system\\fonts\\DroidSerif-Bold.ttf
\\system\\fonts\\DroidSerif-BoldItalic.ttf
\\system\\fonts\\DroidSerif-Italic.ttf
\\system\\fonts\\DroidSerif-Regular.ttf

\\system\\framework
framework主要是系统平台框架
\\system\\framework\\am.jar
\\system\\framework\\am.odex
\\system\\framework\\android.awt.jar AWT库
\\system\\framework\\android.awt.odex
\\system\\framework\\android.policy.jar
\\system\\framework\\android.policy.odex
\\system\\framework\\android.test.runner.jar
\\system\\framework\\android.test.runner.odex
\\system\\framework\\com.google.android.gtalkservice.jar GTalk服务
\\system\\framework\\com.google.android.gtalkservice.odex
\\system\\framework\\com.google.android.maps.jar 电子地图库
\\system\\framework\\com.google.android.maps.odex
\\system\\framework\\core.jar 核心库,启动桌面时首先载入这个
\\system\\framework\\core.odex
\\system\\framework\\ext.jar
\\system\\framework\\ext.odex
\\system\\framework\\framework-res.apk
\\system\\framework\\framework-tests.jar
\\system\\framework\\framework-tests.odex
\\system\\framework\\framework.jar
\\system\\framework\\framework.odex
\\system\\framework\\input.jar 输入库
\\system\\framework\\input.odex
\\system\\framework\\itr.jar
\\system\\framework\\itr.odex
\\system\\framework\\monkey.jar
\\system\\framework\\monkey.odex
\\system\\framework\\pm.jar 包管理库
\\system\\framework\\pm.odex
\\system\\framework\\services.jar
\\system\\framework\\services.odex
\\system\\framework\\ssltest.jar
\\system\\framework\\ssltest.odex
\\system\\framework\\svc.jar 系统服务
\\system\\framework\\svc.odex

\\system\\lib
lib文件夹中存放的主要是系统底层库,如平台执行时库。
\\system\\lib\\libaes.so
\\system\\lib\\libagl.so
\\system\\lib\\libandroid_runtime.so Android执行时库
\\system\\lib\\libandroid_servers.so 系统服务组件
\\system\\lib\\libaudio.so 音频处理
\\system\\lib\\libaudioeq.so EQ均衡器
\\system\\lib\\libaudioflinger.so 音频过滤器
\\system\\lib\\libbluetooth.so 蓝牙组件
\\system\\lib\\libc.so
\\system\\lib\\libcamera.so 超相机组件
\\system\\lib\\libcameraservice.so
\\system\\lib\\libcorecg.so
\\system\\lib\\libcrypto.so 加密组件
\\system\\lib\\libdrm1.so DRM解析库

\\system\\media
媒体目录,除了常规的铃声外另一些系统提示事件音以及开机动画(bootanimation.zip)等
\\system\\media\\audio
\\system\\media\\audio\\alarms 闹铃音
\\system\\media\\audio\\notifications 提示音
\\system\\media\\audio\\ringtones 铃声
\\system\\media\\audio\\ui 界面操作事件音

\\system\\sounds
默认的音乐測试文件,仅有一个test.mid文件,用于播放測试的文件。
\\system\\sounds\\test.mid

\\system\\usr
用户目录,包括共享、键盘布局、时间区域文件等。
\\system\\usr\\keychars
\\system\\usr\\keylayout
\\system\\usr\\share
\\system\\usr\\srec

 

4、ROM制作的第一步——编译

假设仅仅是定制ROM而不是自己从头做ROM(那样太费精力,一是麻烦,而是不是必需,一般这种工作都由大神级人物替咱们完毕),
那么这部分是没有必要看的。

有机友嫌我不更新,确实没时间,并且饭得一口一口吃不是?
这次抽点时间,为了满足大家对于更新量的要求,我干脆也不用自己话讲了,从别的站点摘了个Android系统的编译教程算了。
为了节省版面,发个文本文件吧:

 

事实上说白了,Generic Android系统的编译非常easy,都有makefile了,还说什么呢?直接make一下不就输出编译了吗?
(写给小白:makefile即编译脚本文件,其内容配置了源代码文件夹、库文件夹、编译命令以及编译选项等。
欲了解具体内容请百度或參考SUN出的makefile用户手冊。make命令即是根据makefile进行自己主动化编译。)
只是难点就在于,对于不同的机型须要改动源代码、编译选项等……
而假设什么都不改动(如上),编译出来的实际上就是一个通用的,这个通用并非全部手机都能用的含义。

另外须要指出,因为源代码量非常大,一次编译须要N小时,而且产生上G的数据,
所以……反正我是从没编译过…等哪天真正不用工作学习了再慢慢玩吧

编译之后产生的文件夹结构如以下文件中所述:

 

上面这是叙述的android系统的编译,即从Google开放的源代码到大家用的system.img的过程。
眼下Google是开放Android源代码的,那个编完之后出的就是最原始的所谓无Sense版……
而HTC眼下也有几款机型的ROM开源,具有代表性的如EVO。
这些源代码大家能够从网上下载到并编译,从头做ROM。

另外,前面也提到了zImage,那是Linux内核,是执行的底层。
(大家刷完机后用ES之类的看一下根文件夹下就会发现除了system.img中的文件,还多了非常多其它在system镜像中没有的东西。)
zImage是Linux Kernel编译来的,方法见附件:

以下这个是凯撒机子的zImage的编译:

在zImage的编译中相同须要注意配置。

上面的Android编译完了生成有相关文件夹和镜像,然后再由其进行打包(或创建镜像盘写入)而得到system.img或bin或ext2等
事实上上面描写叙述的都是主要的方法,这些方法是通用的,也就是说并未根据HD2量身定做。
所以,单纯的按上面编译,可由代码变成刷机须要的原始文件(即zImage和前面楼层所讲的Android ROM的文件夹结构)
可是,注定会出这样那样的问题,甚至无法执行(卡死或重复重新启动)。问题何在?就在于配置。
至于怎样配置,那就是须要摸索了,这也是为什么如MDJ等大大总在发Kernel的原因了(话说MDJ以前好几次一天两三次发Kernel更新…)
当中Android系统依照Gerneric方法编译出问题的地方可能少些(重点在那些so文件easy出问题,在lib下),
即使出了问题,仅仅要不大也能够单个的编译部分模块更新。
而因为zImage是总体的(单个文件),所以一出问题就意味着总体替换……

常常遇到ROM出各种各样的问题,比方以前DHD版本号非常长时间不能用照相机。
这些问题的产生都是因为编译时无法使源代码和编译选项与HD2的硬件完美契合造成的。
当大神们重复尝试改动源代码、编译选项之后,才可能解决这个问题。
所以,很应该向发内核的大大们致敬~~

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118367.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号