ANDROID Porting系列六、Bring Up

 

    http://source.android.com/porting/bring_up.html

    一旦你的代码是建立和您确认所有必要的目录存在,如下所述实现上电测试您的设备。Bring up tests通常强调你的系统某个方面,让你来描述设备的测试行为。

 

1。确认了一个基本的Linux内核全新安装, 然后才考虑Android-specific修改Linux内核,验证您可以构建,部署和目标硬件上启动Linux kernel

 

2。修改你的内核配置,以适应Android的驱动程序, 你的内核配置文件应包括以下内容:

 

#
# Android
#
# CONFIG_ANDROID_GADGET is not set
# CONFIG_ANDROID_RAM_CONSOLE is not set
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y
CONFIG_ANDROID_LOGGER=y
# CONFIG_ANDROID_TIMED_GPIO is not set
CONFIG_ANDROID_BINDER_IPC=y

3。写驱动程序

Android附带所有基本功能默认驱动程序,但你可能会希望编写您自己的设备取决于您的硬件配置您自己的驱动程序(或至少定制的默认驱动程序)。见下面的例子主题如何编写自己的驱动程序。

·                                 •音频

·                                 •键盘和键盘

·                                 •显示

 

4。烧ImageFlash

一个 image 代表了一个系统状态或在non-volatile memory的系统的一部分状态。在 build过程应产生以下系统images

bootloader:引导加载程序是一个小程序的启动操作系统的加载负责。

boot

recovery

system:该系统图像存储的机器人作业系统的快照。

data:图像数据存储用户数据。凡是不保存到/数据目录将在重新启动时丢失的设备。

kernel:内核代表了一个操作系统最基本的要素。 AndroidLinux内核负责管理本系统的资源,作为硬件和系统之间的应用软件抽象层的行为负责。

ramdiskRAMDisk的定义了一组随机存取存储器(RAM的部分)的被使用,就好像它是一个硬盘驱动器。

在启动时, 配置bootloader加载内核到RAM中与ramdisk并传递RAMDisk的地址到内核。

5. 启动内核并安装RAMDisk.

6. 调试Android-specificRAMDisk的初始方案

Android-specific初始化方案可以在device/system/init。添加日志信息,以帮助您调试定义device/system/init/init.c.LOG宏潜在的问题。

init程序直接安装所有文件系统和设备的使用或硬编码的文件名称或探测的sysfs文件系统(从而消除了一个/ etc / fstab文件中的机器人需要生成的设备名称)。经过设备/系统文件被安装后,init读取的/ etc / init.rc并调用那里的listed方案(其中第一个是console shell)。

7 验证应用程序已开始

一旦壳可用时,执行%ps 确认下列正在运行的应用程序:

·                                 /system/bin/logd

·                                 /sbin/adbd

·                                 /system/bin/usbd

·                                 /system/bin/debuggerd

·                                 /system/bin/rild

·                                 /system/bin/app_process

·                                 /system/bin/runtime

·                                 /system/bin/dbus-daemon

·                                 system_server

 

这些应用程序的每一个嵌入式LinuxC / C + +,你可以使用任何标准的Linux调试工具来解决应用程序没有运行。% make的情况,以确定确切showcommands build命令。 gdbserver的(GNU调试器),可在该系统分区(请seehttp bin目录:/ / sourceware.org / / GDB中获取更多信息)。

 

8pulling it all together

如果bring up成功,你应该看到下面的Java应用程序的图标()上看到的液晶面板:

com.google.android.phone:与Android应用相关。

com.google.android.home

android.process.google.content

如果他们不可见或不响应键盘控制,运行framebuffer/keypad测试。

And Android Language初始化

AndroidInit语言包括四个报表广泛的类:

     Actionn

     Commands

     Services

     Options

该语言的语法包括以下公约:

•所有的类都行的,并用空格分隔标记组成。 C风格的反斜杠转义可用于插入空白把一个记号。双引号也可以用于防止分裂成多个标记文本的空白。一个反斜杠作为一个行的最后一个字符出现的用于分行。

•#表示行注释,(允许空格)。

•隐式声明的Actions and Services的新sections。所有的命令或选项属于最近声明部分。命令或之前第一部分将被忽略。

Actions and Services 有唯一的名称。如果第二个操作或服务是与作为一个现有的同名声明,它将作为被忽略的一个错误。

 

Actions

Actions被命名的命令序列。用Actions来决定何时行动应该发生一个触发器。当一个事件发生,以配合行动的触发,该操作被添加到一个要被执行的队列尾部(除非它已在队列)。

    队列中的每个Action作出队列顺序。Actions中的每个命令按顺序执行。Init 处理其他activitiesdevice creation/destruction, property setting, process restarting)“与”在activities中的命令执行。

 Actions采取下列形式:

on <trigger>
  <command>
  <command>
  <command>

Services

Services init中启动并(可配置)退出时重新启动。

Services采取下列形式:

  service <name> <pathname> [ <argument> ]*
  <option>
  <option>
  ...

Options

Options会影响运行时初始化service

参数的说明如下表:

Option

Description

disabled

This service will not automatically start with its class. It must be explicitly started by name.

socket <type> <name> <perm> [ <user> [ <group> ] ]

Create a unix domain socket named /dev/socket/<name> and pass its fd to the launched process. Valid <type> values include dgram and stream. user and group default to 0.

user <username>

Change to username before exec'ing this service. Currently defaults to root.

group <groupname> [ <groupname> ]*

Change to groupname before exec'ing this service.  Additional  groupnames beyond the first, which is required, are used to set additional groups of the process (with setgroups()). Currently defaults to root.

capability [ <capability> ]+

Set linux capability before exec'ing this service

oneshot

Do not restart the service when it exits.

class <name>

Specify a class name for the service.  All services in a named class must start and stop together. A service is considered of class "default" if one is not specified via the class option.

Triggers

Triggers是用于匹配的事件字符串,促发某种action发生。

Trigger

Description

boot

This is the first trigger that occurs when init starts (after /init.conf is loaded).

<name>=<value>

Triggers of this form occur when the property <name> is set to the specific value <value>.

device-added-<path>
device-removed-<path>

Triggers of these forms occur when a device node is added or removed.

service-exited-<name>

Triggers of this form occur when the specified service exits.


Commands

Command

Description

exec <path> [ <argument> ]*

Fork and execute a program (<path>). This will block until the program completes execution. Try to avoid exec. Unlike thebuiltin commands, it runs the risk of getting init "stuck".

export <name> <value>

Set the environment variable <name> equal to <value> in the global environment (which will be inherited by all processes started after this command is executed).

ifup <interface>

Bring the network interface <interface> online.

import <filename>

Parse an init config file, extending the current configuration.

hostname <name>

Set the host name.

class_start <serviceclass>

Start all services of the specified class if they are not already running.

class_stop <serviceclass>

Stop all services of the specified class if they are currently running.

domainname <name>

Set the domain name.

insmod <path>

Install the module at <path>.

mkdir <path>

Make a directory at <path>.

mount <type> <device> <dir> [ <mountoption> ]*

Attempt to mount the named device at the directory <dir> <device>. This may be of the form mtd@name to specify a mtd block device by name.

setkey

- currenlty undefined -

setprop <name> <value>

Set system property <name> to <value>.

setrlimit <resource> <cur> <max>

Set the rlimit for a resource.

start <service>

Start a service running if it is not already running.

stop <service>

Stop a service from running if it is currently running.

symlink <target> <path>

Create a symbolic link at <path> with the value <target>.

write <path> <string> [ <string> ]*

Open the file at <path> and write one or more strings to it with write(2).

 

Properties

Init更新一些系统属性,以提供一些系统活动信息::

Property

Description

init.action

Equal to the name of the action currently being executed or "" if none.

init.command

Equal to the command being executed or "" if none.

init.svc.<name>

State of a named service ("stopped", "running", or "restarting").

例如init.conf

下面的代码段是一个不完整的init.conf文件的例子,便是为了让您了解什么是正确的配置类似的想法.

on boot
  export PATH /sbin:/system/sbin:/system/bin
  export LD_LIBRARY_PATH /system/lib
 
  mkdir /dev
  mkdir /proc
  mkdir /sys
 
  mount tmpfs tmpfs /dev
  mkdir /dev/pts
  mkdir /dev/socket
  mount devpts devpts /dev/pts
  mount proc proc /proc
  mount sysfs sysfs /sys
 
  write /proc/cpu/alignment 4
 
  ifup lo
 
  hostname localhost
  domainname localhost
 
  mount yaffs2 mtd@system /system
  mount yaffs2 mtd@userdata /data
 
  import /system/etc/init.conf
 
  class_start default
 
service adbd /sbin/adbd
  user adb
  group adb
 
service usbd /system/bin/usbd -r
  user usbd
  group usbd
  socket usbd 666
 
service zygote /system/bin/app_process -Xzygote /system/bin --zygote
  socket zygote 666
 
service runtime /system/bin/runtime
  user system
  group system
 
on device-added-/dev/compass
  start akmd
 
on device-removed-/dev/compass
  stop akmd
 
service akmd /sbin/akmd
  disabled
  user akmd
  group akmd

 

 

你可能感兴趣的:(ANDROID Porting系列六、Bring Up)