搜档网
当前位置:搜档网 › A33 Android快速移植指南

A33 Android快速移植指南

A33 Android快速移植指南
A33 Android快速移植指南

A33

快速移植指南

C o n

f i d e

n t i a

l

文档履历版本号日期制/修订人制/修订记录V1.02014-06-09初始版本

C o n f i d e

n t i a

l

目录

A33 .................................................................................................................................................................. 1 1. 概述 (5)

1.1. 名词解释 ................................................................................................................................. 5 2. 方案定制 . (6)

2.1. overlay 说明 (6)

2.1.1. 为产品添加Overlay 目录 .............................................................................................. 6 2.1.2. 改变mk 文件来添加overlays 的编译项....................................................................... 6 2.1.3. 在overlay 目录下创建资源文件 ................................................................................... 7 2.2. 预装APK .. (7)

2.2.1. 默认预装APK ................................................................................................................ 7 2.2.2. 预装到system/app 目录 ................................................................................................. 7 2.2.3. 预装到system/preinstall 目录 ........................................................................................ 8 2.3. 配置data 分区 ........................................................................................................................ 8 2.4. 修改启动LOGO ..................................................................................................................... 8 2.5. 修改启动动画 ......................................................................................................................... 9 2.6. 修改充电图标 ......................................................................................................................... 9 2.7. 定制recovery 功能 .. (9)

2.7.1. 键值的查看 ..................................................................................................................... 9 2.7.2. 按键选择 ....................................................................................................................... 10 2.7.3. 功能使用 ....................................................................................................................... 10 2.8. 内存自适应 ........................................................................................................................... 10 2.9. 配置dalvik vm 参数 ............................................................................................................. 11 2.10. 配置单用户说明 ................................................................................................................... 11 3. 模块配置 .. (14)

3.1. 自定义按键配置 (14)

3.1.1. KEY 的硬件原理 .......................................................................................................... 14 3.1.2. 驱动与硬件对应的关系 ............................................................................................... 14 3.1.3. Android 按键功能的映射 ............................................................................................. 15 3.2. WiFi/BT 配置 (15)

3.2.1. 使用AP6181/AP6210 ................................................................................................... 15 3.2.2. 使用rtl8188eu/rtl8723bs............................................................................................... 18 3.2.3. 使用esp8089 ................................................................................................................. 21 3.3. LCD Panel 配置 .. (23)

3.3.1. 配置文件的修改 ........................................................................................................... 23 3.3.2. 配置UI 方向属性 ......................................................................................................... 24 3.4. Touch Panel 配置 (24)

3.4.1. 配置文件的修改 ........................................................................................................... 24 3.4.2. Android 层的配置修改 ................................................................................................. 25 3.4.3. touch panel 驱动使用说明............................................................................................ 26 3.5. G-Sensor 配置 .. (27)

3.5.1. 打包配置文件修改 ....................................................................................................... 28 3.5.2. Android 层配置修改 .. (28)

C

o n

f i

d e n

t i

a l

3.6.

Camera 配置 ......................................................................................................................... 29 3.6.1. 打包配置文件修改 ....................................................................................................... 29 3.6.2. Android 层的配置修改 ................................................................................................. 31 3.6.3. Camera 参数配置 .......................................................................................................... 31 3.7. 震动马达配置 .. (34)

3.7.1. 配置文件修改 ............................................................................................................... 34 3.7.2. Android 层配置修改 ..................................................................................................... 34 3.8. SD 卡配置 ............................................................................................................................. 34 3.9. CTP 与Sensor 自动检测使用说明 .. (36)

3.9.1. GSENSOR 自适应使用说明 ........................................................................................ 36 3.9.2. Recovery 功能tp 的自适应使用说明 .......................................................................... 37 3.10. 安全控制配置 ....................................................................................................................... 39

4.

Settings 设置 ......................................................................................................................................... 40 4.1. 默认LCD 关闭时间设置 ..................................................................................................... 40 4.2. 默认亮度设置 ....................................................................................................................... 40 4.3. 默认字体大小设置 ............................................................................................................... 40 4.4. 蓝牙选项设置 ....................................................................................................................... 40 4.5. Miracast 功能设置 ................................................................................................................ 40 4.6. 快速开关机功能设置 ........................................................................................................... 40 5.

Launcher 及界面设置 ........................................................................................................................... 41 5.1. 电池电量百分比显示 ........................................................................................................... 41 5.2. 默认壁纸设置 ....................................................................................................................... 41 5.3. 添加壁纸 ............................................................................................................................... 41 5.4. Launcher 默认图标和快捷栏设置 ....................................................................................... 41 5.5. 下拉菜单QuickSetting 中的开关显示 ................................................................................ 42 6.

系统调试 ............................................................................................................................................... 43 6.1. 生成debug 固件 ................................................................................................................... 43 6.2. 使用fastboot . (43)

6.2.1. 进入fastboot 模式 ........................................................................................................ 43 6.2.2. fastboot 常用命令 ......................................................................................................... 43 7. Declaration .. (44)

C

o n

f i

d e n

t i

a l

1.概述

A33 平台快速移植文档,本文基于A33 astar-y3方案。

1.1.名词解释

1.vendor-name

softwinner

2.device-name

astar-y3

3.product-name

astar_y3

C o n f i d e

n t i a

l

2. 方案定制

方案目录device/vendor-name/device-name/

2.1. overlay 说明

Android overlay 机制允许在不修改apk 或者framework 源代码的情况下,实现资源的定制。 以下几类能够通过overlay 机制定义: 1. Configurations (string, bool, bool-array) 2. Localization (string, string-array)

3. UI Appearance (color, drawable, layout, style, theme, animation)

4. Raw resources (audio, video, xml) 更详细的资源文件可浏览android 网站:

https://www.sodocs.net/doc/ff4575811.html,/guide/topics/resources/available-resources.html

2.1.1. 为产品添加Overlay 目录

有两种不同的overlay 目录定义:

1. PRODUCT_PACKAGE_OVERLAYS

用于指定产品

2. DEVICE_PACKAGE_OVERLAYS

用于同一设备模型的一系列产品

如果包含同一资源,那么PRODUCT_PACKAGE_OVERLAYS 将覆盖

DEVICE_PACKAGE_OVERLAYS 。如果要定义多个overlays 目录,需要用空格隔开,同一资源的定义,将使用先定义的目录中的资源。

在方案目录下创建overlay 和product-name/overlay 目录,分别用于device 通用及product 使用的overlay 文件夹。

2.1.2. 改变mk 文件来添加overlays 的编译项

在文件device/vendor-name/device-name/product-name.mk 中添加: PRODUCT_PACKAGE_OVERLAYS := \

device/vendor-name/device-name/product-name/overlay \ $(PRODUCT_PACKAGE_OVERLAYS) DEVICE_PACKAGE_OVERLAYS := \

device/vendor-name/device-name/overlay \ $(DEVICE_PACKAGE_OVERLAYS)

注: 必须加上$(PRODUCT_PACKAGE_OVERLAYS)变量否则将找不到默认资源。

C

o n

f i

d e n

t i

a l

2.1.

3. 在overlay 目录下创建资源文件

在overlay 目录下创建和要替换资源所在文件相同的路径的文件,此路径是相对于android platform 目录。如替换framework-res 路径为:platform/framework/base/core/res/res/value/config.xml 中的某一项,则在overlay 中创建对应的路径:overlay/framework/base/core/res/res/value/config.xml 并添加要修改的一向配置,如:

1

2.2. 预装APK

预装apk 安装有两种方法,可以安装到system/app 目录下,也可以安装到system/preinstall 目录下。注:apk 名字不能含有中文、空格等特殊字符。

2.2.1. 默认预装APK

APK

说明

FileExplore 文件管理器 Update OTA 升级 4KPlayer 4K 播放器 AWGallery 快拍 DragonFire 工厂测试应用 DragonPhone

工厂测试应用

由于涉及版权问题,建议不安装GAPP 应用,GMS 需安装Google 提供的正版GAPP 应用。

2.2.2. 预装到system/app 目录

1. 将apk 使用winrar 打开,将lib/armeabi 下的so 库解压到 device/vendor-name/device-common/prebuild/apklib/目录中中,并在同目录的Android.mk 文件中加入:

include $(CLEAR_V ARS)

LOCAL_MODULE_TAGS := optional

LOCAL_PREBUILT_LIBS := libjni1.so libjni2.so (so 库的文件名,建议将同一apk 的so 库写在一起,空格隔开;编译系统会根据文件名自动生成模块名,如对应的:libjni1和libjni2) include $(BUILD_MULTI_PREBUILT)

2. 将apk 放入device/vendor-name/device-common/prebuild/apk/目录中,并且在同目录的Android.mk 文件中加入:

include $(CLEAR_V ARS)

LOCAL_MODULE := APK_MODULE_NAME (模块的唯一名字)

C

o n

f i

d e n

t i

a l

LOCAL_MODULE_TAGS := optional

LOCAL_OVERRIDES_PACKAGES := OVERRIDES_MODULE (要替代的模块) LOCAL_SRC_FILES := name.apk (同目录下apk 的文件名) LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED

LOCAL_REQUIRED_MODULES := libjni1 libjni2(apk 包含的so 库的模块名,多个可用空格隔开) include $(BUILD_PREBUILT)

3. 在方案mk 文件(device/vendor-name/device-name/product-name.mk )中PRODUCT_PACKAGES 项中加入:

PRODUCT_PACKAGES += APK_MODULE_NAME (apk 模块名字,预装多个apk 用空格隔开)

2.2.

3. 预装到system/preinstall 目录

1.这些apk 将在系统第一次启动时安装到用户data 目录,用户可自行卸载。

2.将apk 放入device/vendor-name/device-common/prebuild/preinstallapk/目录中,并且在同目录的Android.mk 文件中加入:

include $(CLEAR_V ARS)

LOCAL_MODULE := APK_MODULE_NAME (模块的唯一名字) LOCAL_MODULE_TAGS := optional LOCAL_CERTIFICATE := PRESIGNED

LOCAL_MODULE_PA TH := $(TARGET_OUT)/preinstall LOCAL_MODULE_CLASS := APPS

LOCAL_SRC_FILES := name.apk (同目录下apk 的文件名) include $(BUILD_PREBUILT)

3.在方案mk 文件(device/vendor-name/device-name/product-name.mk )中PRODUCT_PACKAGES 项中加入:

PRODUCT_PACKAGES += APK_MODULE_NAME (apk 模块名字,预装多个apk 用空格隔开)

2.3.

配置data 分区

data 分区大小可以由BoardConfig.mk 文件的BOARD_USERDATAIMAGE_PARTITION_SIZE 指定,单位是字节。 注: 多用户方案一般将最后一个分区作为data 分区,该分区大小是Nand 或者eMMC 总容量减去其他分区大小;如果需要烧写data 分区镜像,分区大小需要预留一定预度,防止超出Nand 或者eMMC 容量。

2.4.

修改启动LOGO

启动LOGO 为初始引导阶段的LOGO 。

将启动logo 放入位置:lichee/tools/pack/chips/sunxi/configs/device-name/bootlogo.bmp

C

o n

f i

d e n

t i

a l

2.5. 修改启动动画

将动画放入:device/vendor-name/device-name/media/bootanimation.zip bootanimation 格式:bootanimation.zip 包含part0 part1文件夹和desc.txt 文件,part0,part1 文件夹里面放的是动画拆分的图片,格式为png 或jpg 。desc.txt 文件内容如下: 800 480 15 p 1 0 part0 p 0 0 part1

说明: 第一行:800为宽度,480为高度,15为帧数。第二行开始p 为标志符,接下来第二列为循环次数(0为无限循环),第三项为两次循环之间间隔的帧数,第四项为对应的目录名。播放动画时会按照图片文件名顺序自动播放。

打包格式要求: windows 使用winrar 打包,选择ZIP 格式,压缩标准要选“储存”;linux 下,zip -0

-r ../bootanimation.zip ./* linux 命令使用-0指定压缩等级为最低等级stored ,即只归档不压缩,否则可能由于包格式问题引起动画显示为黑屏。打包完之后修改其权限值:chmod 777 bootanimation.zip

2.6. 修改充电图标

替换platform/system/core/charger/images/目录下图标,如图片数量不同需修改代码platform/system/core/charger/charger.c

2.7.

定制recovery 功能

Recovery 是Android 的专用升级模式,用于对android 自身进行更新;进入recovery 模式的方法是,在android 系统开机时,按住一个特定按键,则会自动进入android 的recovery 模式。

2.7.1. 键值的查看

按键是通过AD 转换的原理制成。当用户按下某个按键的时候,会得到这个按键对应的AD 转换的值。同时,所有的按键的键值都不相同,并且,键值之间都有一定的间隔,没有相邻。比如,键值可能是5,10,15,20,但是不可能是5,11,12,13。

为了方便用户查看不同按键的键值,这种方法要求连接上串口使用,因此适合于开发阶段使用。具体步骤是:

把小机和PC 通过串口线连接起来,设置屏幕焦点在串口调试软件上;用户开机之前,按住PC

键盘上的数字键“3”

;开机,等待,1秒后可以松开电脑键盘;经过这样的步骤,用户会看到屏幕上有如下的打印信息出现:

welcome to key value test

press any key, and the value would be printed press power key to exit

这表示系统已经进入了按键的键值测试模式,这种模式下将一直等待用户按下按键,并在串口屏幕上把按键的键值打印出。这样,用户可以很方便地查看不同按键的键值。比如,当按下某一个按键,用户可以看到如下的打印信息。

key value = 8

C

o n

f i

d e n

t i

a l

key value = 8 key value = 8 key value = 63

由于AD 采用的速度非常快,所以同一个按键按下,屏幕上会出现多个值。用户可以看出,这个按键的键值是8。最后出现的63是松开按键的时候的采用,是需要去掉的干扰数据。因此,用户查看按键键值的时候只要关注前面打印出的数值,后面出现的应该忽略不计。

2.7.2. 按键选择

通常情况下,一块方案板上的按键个数不同,或者排列不同,这都导致了方案商在选择作为开机阶段recovery 功能的按键有所不同。因此,系统中提供了一种方法用于选择进入recovery 模式的按键:

在efex\sys_config.fex 配置脚本中,提供了一项配置,用于选择按键的键值,如下所示: [recovery_key]

key_max = 4

key_min

= 6

它表示,所选择用于作为recovery 功能的按键的键值范围落在key_min 到key_max 之间,即4到6之间。由于所有按键的选择都可以通过前面介绍的方法查看,因此,假设用户要选的按键是a ,用户这里选择配置的方法是:

按照前面介绍的方法,读出所有按键的键值;

读出a 的键值a1,同时取出两个相邻于a 的键值,记为b1和c1,b1>c1; 计算出(a1 + b1)/2,(a1 + c1)/2,分别填写到key_max 和key_min 处;

如果a1刚好是所有按键的最小值,则取key_min 为0;如果a1刚好是所有按键的最大值,则取key_max 为63;

经过以上的步骤,就可以选择一个特定的按键进入recovery 模式。取了一个平均值的原因是考虑到长时间的使用,电阻的阻值可能会略有变化导致键值变化,取范围值就可以兼容这种阻值变化带来的键值变化。

2.7.

3. 功能使用

在android 编译完毕之后,使用如下命令 $ get_uboot

$ make otapackage

就可以在platform/out/target/product/device-name/目录下生成一个product-name-ota-buildtime.zip 文件。在系统启动时,按住设定的特定按键进入recovery 模式,进入该模式后,可以选择升级文件升级。

2.8. 内存自适应

内存自适应属性为ro.memopt.disable ,false 表示启用,true 表示不启用。启用后系统会根据内存

大小选择不同参数,如下:

512M

1G

dalvik.vm.heapsize 184m 384m dalvik.vm.heapstartsize

5m

8m

C

o n

f i

d e n

t i

a l

dalvik.vm.heapgrowthlimit 48m 96m dalvik.vm.heapminfree 512K 2m dalvik.vm.heapmaxfree 2m

8m

LCD 分辨率达到2048x1536的方案建议关闭内存自适应功能,dalvik vm 参数配置参考2.9。

2.9.

配置dalvik vm 参数

LCD 分辨率达到2048x1536的方案推荐使用以下参数:

dalvik.vm.heapsize 512m dalvik.vm.heapstartsize 16m dalvik.vm.heapgrowthlimit 192m dalvik.vm.heapminfree 2m dalvik.vm.heapmaxfree

8m

2.10. 配置单用户说明

1.修改分区表配置(lichee/tools/pack/chips/sunxi/configs/device-name/sys_partition.fex ),添加data 分区:

------------------------------>mmcblk0p8/nande [partition]

name = data size = 2097152 user_type = 0x8000

并修改UDISK 分区,添加属性: ;------------------------------>nandk, UDISK [partition]

name = UDISK user_type = 0x8100 downloadfile = "diskfs.fex" verify = 0

2.设置用户数为1,修改文件platform/framework/base/core/res/res/value/config.xml 1

注:可通过overlay 方式修改,具体请参照2.1overlay 说明。

3.修改方案mk 文件(device/vendor-name/device-name/product-name.mk ),删除ro.sys.storage_type 属性定义,将https://www.sodocs.net/doc/ff4575811.html,b.config 属性的mtp 改为mass_storage 。

4.修改存储列表文件platform/frameworks/base/core/res/res/xml/storage_list.xml :

android:storageDescription="@string/storage_internal" android:primary="true" android:removable="false" android:emulated="false "

C

o n

f i

d e n

t i

a l

android:mtpReserve="100"

android:allowMassStorage="true " android:maxFileSize="0"/>

android:storageDescription="@string/storage_sd_card" android:primary="false" android:removable="true" android:emulated="false" android:mtpReserve="0"

android:allowMassStorage="true" android:maxFileSize="0"/>

android:storageDescription="@string/storage_usb" android:primary="false" android:removable="true" android:emulated="false" android:mtpReserve="0" android:maxFileSize="0"/>

注:可通过overlay 方式修改,具体请参照2.1overlay 说明。

5.修改device/vendor-name/device-name/fstab.sunxi ,

-/dev/block/by-name/UDISK /data ext4 noatime,nosuid,nodev,nomblk_io_submit,barrier=1,noauto_da_alloc wait,check,encryptable=/dev/block/by-name/databk

+/dev/block/by-name/data /data ext4

noatime,nosuid,nodev,nomblk_io_submit,barrier=1,noauto_da_alloc wait,check

+/devices/virtual/block/nandk auto vfat defaults wait,check,noemulatedsd,voldmanaged=sdcard:auto

+/devices/platform/sunxi-mmc.2/mmc_host auto vfat defaults wait,check,noemulatedsd,voldmanaged=sdcard:auto

删掉红色部分,添加蓝色部分。

6.修改device/vendor-name/device-name/recovery.fstab -/dev/block/by-name/UDISK /data ext4 defaults defaults +/dev/block/by-name/data /data ext4 defaults defaults +/dev/block/by-name/UDISK

/sdcard

vfat defaults defaults

删掉红色部分,添加蓝色部分。

7.修改device/vendor-name/device-name/init.sunxi.rc 在on init 中:

C

o n

f i

d e n

t i

a l

- mkdir /mnt/shell/emulated 0700 shell shell - mkdir /storage/emulated 0555 root root -

- mkdir /mnt/extsd 0700 media_rw media_rw - mkdir /storage/extsd 0700 root root

- mkdir /mnt/usbhost 0700 media_rw media_rw - mkdir /storage/usbhost 0700 root root -

- export EXTERNAL_STORAGE /storage/emulated/legacy

- export EMULATED_STORAGE_SOURCE /mnt/shell/emulated - export EMULATED_STORAGE_TARGET /storage/emulated -

- # Support legacy paths

- symlink /storage/emulated/legacy /sdcard - symlink /storage/emulated/legacy /mnt/sdcard - symlink /storage/emulated/legacy /storage/sdcard0

- symlink /mnt/shell/emulated/0 /storage/emulated/legacy + mkdir /mnt/sdcard 0700 shell shell + mkdir /mnt/extsd 0700 shell shell + mkdir /mnt/usbhost 0700 shell shell +

+ symlink /mnt/sdcard /sdcard

+ export EXTERNAL_STORAGE /mnt/sdcard

删掉红色部分,添加蓝色部分。

在on fs 中,加入: format_userdata /dev/block/by-name/UDISK LABEL

删除服务定义:

# virtual sdcard daemon running as media_rw (1023)

service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated class late_start

service fuse_extsd /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/extsd /storage/extsd class late_start disabled

service fuse_usbhost /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/usbhost /storage/usbhost class late_start disabled

C

o n

f i

d e n

t i

a l

3. 模块配置

3.1.

自定义按键配置

3.1.1. KEY 的硬件原理

目前KEY 检测使用了ADC 转换的原理实现的,由于该原理的限制,所以不能区分组合键(功能键,不包括电源键);按照目前公版原理图,0.2V 的电压变化可以区分一档,所以最多可以实现10个键,硬件原理如下:

3.1.2. 驱动与硬件对应的关系

Key 的驱动实现文件位置:lichee/linux-3.3/drivers/input/keyboard/sw-keyboard.c;

实现原理:通过检测电压值的数字量来区分当前是第几个按键:

//0.2V mode

static unsigned char keypad_mapindex[64] = {

0,0,0,0,0,0,0,0, //key 1, 8个, 0-7 1,1,1,1,1,1,1, //key 2, 7个, 8-14 2,2,2,2,2,2,2, //key 3, 7个, 15-21 3,3,3,3,3,3, //key 4, 6个, 22-27 4,4,4,4,4,4, //key 5, 6个, 28-33 5,5,5,5,5,5, //key 6, 6个, 34-39 6,6,6,6,6,6,6,6,6,6, //key 7, 10个,40-49 7,7,7,7,7,7,7,7,7,7,7,7,7,7 //key 8, 17个,50-63 };

按键对应的键值:

static unsigned int sw_scankeycodes[KEY_MAX_CNT] = { [0 ] = KEY_VOLUMEUP,

C

o n

f i

d e n

t i

a l

[1 ] = KEY_VOLUMEDOWN, [2 ] = KEY_MENU, [3 ] = KEY_ENTER, [4 ] = KEY_HOME, [5 ] = KEY_RESERVED,

[6 ] = KEY_RESERVED, [7 ] = KEY_RESERVED, [8 ] = KEY_RESERVED, [9 ] = KEY_RESERVED, [10] = KEY_RESERVED, [11] = KEY_RESERVED, [12] = KEY_RESERVED,

};

当有按键事件时,通过以上两次映射将最终的键值上报:

scancode = keypad_mapindex[key_val&0x3f];

input_report_key(swkbd_dev, sw_scankeycodes[scancode], 1); input_sync(swkbd_dev);

3.1.3. Android 按键功能的映射

映射文件为device/vendor-name/device-name/configs/sunxi-keyboard.kl :

key 102 HOME W AKE key 1 BACK W AKE

key 139 MENU W AKE_DROPPED key 115 VOLUME_UP key 114 VOLUME_DOWN

key 后面的数字为驱动中上报的键值,后面为对应的功能,自定义按键时仅需要将前面的映射值和后面的功能对应起来即可。(W AKE_DROPPED : 唤醒屏幕,但是这个按键不会发给当前应用程序,WAKE :唤醒屏幕,但是这个按键需要发送给应用程序,后面不加的代表没有唤醒功能)

3.2.

WiFi/BT 配置

3.2.1. 使用AP6181/AP6210

1)配置Android BoardConfig

修改device/vendor-name/device-name/BoardConfig.mk ,配置一下红色标识信息(AP6210为例): #bt default config

BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/vendor-name/device-name/bluetooth

# 1.2 broadcom wifi support BOARD_WIFI_VENDOR := broadcom

ifeq ($(BOARD_WIFI_VENDOR), broadcom)

BOARD_WPA_SUPPLICANT_DRIVER := NL80211

C

o n

f i

d e n

t i

a l

WPA_SUPPLICANT_VERSION := VER_0_8_X

BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd BOARD_HOSTAPD_DRIVER := NL80211

BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_bcmdhd BOARD_WLAN_DEVICE := bcmdhd

WIFI_DRIVER_FW_PATH_PARAM := "/sys/module/bcmdhd/parameters/firmware_path"

#SW_BOARD_USR_WIFI := AP6181 SW_BOARD_USR_WIFI := AP6210

WIFI_DRIVER_FW_PATH_STA := "/system/vendor/modules/fw_bcm40181a2.bin" WIFI_DRIVER_FW_PATH_P2P := "/system/vendor/modules/fw_bcm40181a2_p2p.bin" WIFI_DRIVER_FW_PATH_AP := "/system/vendor/modules/fw_bcm40181a2_apsta.bin" #SW_BOARD_USR_WIFI := AP6330

#WIFI_DRIVER_FW_PATH_STA := "/system/vendor/modules/fw_bcm40183b2_ag.bin" #WIFI_DRIVER_FW_PATH_P2P := "/system/vendor/modules/fw_bcm40183b2_ag_p2p.bin" #WIFI_DRIVER_FW_PATH_AP := "/system/vendor/modules/fw_bcm40183b2_ag_apsta.bin" endif

# 2. Bluetooth Configuration

# make sure BOARD_HAVE_BLUETOOTH is true for every bt vendor BOARD_HAVE_BLUETOOTH := true BOARD_HAVE_BLUETOOTH_BCM := true

SW_BOARD_HAVE_BLUETOOTH_NAME := ap6210 #SW_BOARD_HAVE_BLUETOOTH_NAME := ap6330

注:红色是当前AP6210的配置,绿色为AP6181和AP6330配置,处于被注释状态 2)配置init.sunxi.rc

增加如下信息,并去除其它wifi 模组类信息

insmod /system/vendor/modules/bcmdhd.ko ........ # bluetooth

# UART device

chmod 0660 /dev/ttyS1

chown bluetooth net_bt_stack /dev/ttyS1

# power up/down interface

chmod 0660 /sys/class/rfkill/rfkill0/state chmod 0660 /sys/class/rfkill/rfkill0/type

chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type

# bluetooth LPM

chmod 0220 /proc/bluetooth/sleep/lpm chmod 0220 /proc/bluetooth/sleep/btwrite

chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite

C

o n

f i

d e n

t i

a l

.......

# 2. broadcom wifi service

# 2.1 broadcom wifi station and softap

service wpa_supplicant /system/bin/wpa_supplicant \

-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -I/system/etc/wifi/wpa_supplicant_overlay.conf \ -O/data/misc/wifi/sockets \

-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0

# we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi

# group wifi inet keystore class main

socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot

# 2.2 braodcom wifi sta p2p concurrent service

service p2p_supplicant /system/bin/wpa_supplicant \

-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -I/system/etc/wifi/wpa_supplicant_overlay.conf \ -O/data/misc/wifi/sockets -N \

-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ -I/system/etc/wifi/p2p_supplicant_overlay.conf \

-puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin \ -g@android:wpa_wlan0

# we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi

# group wifi inet keystore class main

socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot

注:如果模组没有BT 功能,需要把bluetooth 部分的操作注释掉

3)配置product-name.mk

增加如下信息,并去除其它wifi 模组类信息

# ap6181/6210/6330 sdio wifi fw and nvram #$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6181/device-bcm.mk)

$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6210/device-bcm.mk) #$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6330/device-bcm.mk)

C

o n

f i

d e n

t i

a l

4)配置sys_config.fex

[mmc1_para]

sdc_used = 1 ...

[uart1]

uart_used = 1 ...

[wifi_para] wifi_used = 1 wifi_sdc_id = 1 wifi_usbc_id = 1 wifi_usbc_type = 1 wifi_mod_sel = 2 wifi_power = ""

wifi_power_ext1 = "" wifi_power_ext2 = ""

wifi_power_switch = port:power0<1><0><0>

; 1 - ap6181 sdio wifi gpio config

;ap6xxx_wl_regon = port:PLXX<1><0> ;ap6xxx_wl_host_wake = port:PLXX<4><0>

; 2 - ap6210 sdio wifi gpio config

ap6xxx_wl_regon = port:PLXX<1><0> ap6xxx_wl_host_wake = port:PLXX<4><0> ap6xxx_bt_regon = port:PLXX<1><0> ap6xxx_bt_wake = port:PLXX<1><0> ap6xxx_bt_host_wake = port:PLXX<4><0> ap6xxx_lpo_use_apclk = 1

[bt_para]

bt_used = 1 bt_uart_id = 1

注:不带蓝牙的不需要配置蓝牙和UART

3.2.2. 使用rtl8188eu/rtl8723bs

1)配置Android BoardConfig

修改device/vendor-name/device-name/BoardConfig.mk ,配置一下红色标识信息(rtl8723bs

为例):

#bt default config

BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/vendor-name/device-name/bluetooth

C

o n

f i

d e n

t i

a l

# 1.1 realtek wifi support BOARD_WIFI_VENDOR := realtek

ifeq ($(BOARD_WIFI_VENDOR), realtek)

WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_DRIVER := NL80211

BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl BOARD_HOSTAPD_DRIVER := NL80211

BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_rtl

#SW_BOARD_USR_WIFI := rtl8188eu #BOARD_WLAN_DEVICE := rtl8188eu

SW_BOARD_USR_WIFI := rtl8723bs BOARD_WLAN_DEVICE := rtl8723bs endif

# 2. Bluetooth Configuration

# make sure BOARD_HAVE_BLUETOOTH is true for every bt vendor BOARD_HAVE_BLUETOOTH := true BOARD_HAVE_BLUETOOTH_RTK := true BLUETOOTH_HCI_USE_RTK_H5 := true

SW_BOARD_HAVE_BLUETOOTH_NAME := rtl8723bs 注:红色是当前rtl8723bs 的配置,绿色为rtl8188eu 配置,处于被注释状态

2)配置init.sunxi.rc

增加如下信息,并去除其它wifi 模组类信息

# bluetooth

# UART device

chmod 0660 /dev/ttyS1

chown bluetooth net_bt_stack /dev/ttyS1

# power up/down interface

chmod 0660 /sys/class/rfkill/rfkill0/state chmod 0660 /sys/class/rfkill/rfkill0/type

chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type

# bluetooth LPM

chmod 0220 /proc/bluetooth/sleep/lpm chmod 0220 /proc/bluetooth/sleep/btwrite

chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm

chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite write /proc/bluetooth/sleep/lpm 1 ......

C

o n

f i

d e n

t i

a l

# 1. realtek wifi service

# 1.1 realtek wifi sta service

service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \

-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0

# we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi

# group wifi inet keystore class main

socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot

# 1.2 realtek wifi sta p2p concurrent service

service p2p_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \ -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ -e/data/misc/wifi/entropy.bin -N \

-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \ -g@android:wpa_wlan0 class main

socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot

注:如果模组没有BT 功能,需要把bluetooth 部分的操作注释掉 3)配置product-name.mk

增加如下信息,并去除其它wifi 模组类信息

#rtl8723bs bt fw and config

$(call inherit-product, hardware/realtek/bluetooth/rtl8723bs/firmware/rtlbtfw_cfg.mk) ....................

PRODUCT_PROPERTY_OVERRIDES += \

persist.sys.timezone=Asia/Shanghai \ https://www.sodocs.net/doc/ff4575811.html,nguage=zh \ persist.sys.country=CN \

ro.product.8723b_https://www.sodocs.net/doc/ff4575811.html,ed = true 4)配置sys_config.fex [mmc1_para]

sdc_used = 1 ...

[uart1]

uart_used = 1

C

o n

f i

d e n

t i

a l

android系统开发工作介绍

android系统开发工作介绍 一、android的开发工作 Android的开发分为三个类型:移植开发移动设备系统;android系统级开发和应用程序开发。 1、移植开发移动设备系统 2、Android系统级开发,指的是扩展android的框架或者是修改bug,这方面比较少,除非有些开发移动设备的厂商,比如做gps,可以往里面加入一些自己的特定系统东西,这可能导致一些不兼容。当然也可能是简单的修复bug,详细的内容后面还有说。 3、开发应用程序,这应该是比较主流的开发,也就是给android系统写应用程序。当然我们这里主要是研究android的framework如何给这些应用程序提供服务的。 总结一下,我们可以把android分为四个层次,从底层往上依次为:linux内核、C/C++库、java 框架和java应用程序。移植开发移动设备涉及到linux内核(包括其驱动);android系统级开发涉及到C/C++库的开发及给上层java框架;android应用程序开发就是调用java的框架写应用程序。 简单的从上到下,android应用程序需要有java框架支持,比如它要发送短信,就需要java 框架,java框架其实就是将C/C++库包装成为了一个JNI,而实现具体的功能是C/C++库,最后驱动硬件完成功能,这也就是linux内核部分。 所谓framework,也就是系统级开发,这将是本文的重点,虽然android的framework 开发比较少,但是对其了解后更有利于整体开发的进行,当然很多设备厂商还是非常需这要些的。 二、android系统架构

Linux内核及驱动、C/C++框架、java框架、java应用程序。 1)、Linux内核及驱动 其中linux内核及驱动是内核层的(本人对linux内核也有过痴迷的时候,就像现在android 痴迷一样),系统总是需要操作系统的支持的,比如内存管理、进程管网理、络协议栈等。 2)、android的C/C++框架 系统C库:用的是libc,没什么好说的,C程序员都知道。多媒体库SurFace Manager:显示子系统的管理器LibWebCore:web浏览器引擎,支持android浏览器SGL:skia图形库,底层的2D图形引擎 3D库:OpenGL FreeType:字体显示Android的运行环境,这个也应该属于这个框架里面的,android的虚拟机叫做Dalvik,运行环境就是由这个虚拟机和基础的java类库组成。 3)、android应用框架 提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器活、动管理器。 视图非常丰富:list、grid、text box、button等。内容提供器是使得应用程序可以访问另一个程序的数据。资源管理器是提供访问非代码的资源访问,如布局文件。通知管理器,使得程序可以在状态栏中显示自定义的提示信息。活动管理器,用来管理程序生命周期。 4)、android应用程序Android所有的应用程序都是用java写的,当然现在好像也支持一些脚本语言,如 ruby,但是不支持C开发,所谓支持C开发是指jni的形式。 。。。。。。。。。

安卓Android ROM定制、移植:第六篇:boot.img、recovery解包和打包

太抱歉了,因为教程实在是有点粗浅了,其实很多东西都不知道怎么去写,这不是复制粘贴,当然很多只是一步步的走的,不过也许我自己觉得已经阐述的很清楚了,可是一旦别人看起来,还是感觉很深奥,没办法,本人就这点能力了,呵呵! 大家都知道安卓的核心更换呢,那是在boot.img里面,那么如何在WINDOWS下去解开它呢,LINUX的自己略过。。。。 首先百度BOOTIMG.EXE,然后你懂的,会出来一大堆,这得感谢制作bootimg.exe的作者,本来是为华为的机器做的分解工具,不过我们也可以拿来分解boot.img、recovery.img等,OK!先来谈谈这两个文件的基础,部分来自网络。 boot和recovery映像的文件结构 boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk 内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。此类文件的定义可以从源代码android-src/system/core/mkbootimg找到一个叫做bootimg.h的文件。 (译者的话,原文是一个叫做mkbootimg.h的文件,但从Android 2.1的代码来看,该文件名应该是改为bootimg.h了)。 /* ** +-----------------+ ** | boot header | 1 page ** +-----------------+ ** | kernel | n pages ** +-----------------+ ** | ramdisk | m pages ** +-----------------+ ** | second stage | o pages ** +-----------------+

S3C6410 移植Android 内核移植经验

主要过程: . 安装lunux 环境 . 安装编译工具 . 下载Linux kernel . 安装Android SDK . 获得root file system . 修改Linux kernel 源码 . 配置Linux kernel . 修改root file system . 编译Linux kernel . 下载kernel Image 1.安装linux 环境 安装Ubuntu Linux 系统,从网站上下载操作系统安装光盘映像,地址: https://www.sodocs.net/doc/ff4575811.html,/ubuntu/releases/8.04/ 下载ubuntu-8.04.2-desktop-i386.iso,刻录成光盘安装,安装可以在windows 系统下进行, 选取有15G 空间的硬盘安装,输入用户密码开始安装 这一步结束退出光盘重启进入Ubuntu 系统,完成余下系统安装。 Linux 安装完成,进入Ubuntu 系统,确保电脑连接Internet,安装一些必要软件。 打开终端输入命令框,进行下面的操作: $ sudo apt-get install ssh $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

$ sudo apt-get install valgrind $ sudo apt-get install sun-java6-jdk $ sudo apt-get install libncurses5-dev 所有软件系统会自动从网络下载安装,完成后可以开始Android 的移植。 2.安装编译工具 下载: $ wget https://www.sodocs.net/doc/ff4575811.html,/public/gnu_toolchain/arm-none-linux-gnuea bi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 安装: $ tar -xjvf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 3.下载Linux kernel 从下面地址获得: https://www.sodocs.net/doc/ff4575811.html,/p/android/downloads/list?can=1&q=&colspec=File name Summary Uploaded Size DownloadCount Kernel : linux-2.6.23-android-m5-rc14.tar.gz 解压文件 $ tar -xf linux-2.6.23-android-m5-rc14.tar.gz 4.安装Android SDK 从网上下载linux 版本的Android SDK,如下 https://www.sodocs.net/doc/ff4575811.html,/android/android-sdk_m5-rc15_linux-x86.zip 下载后解压,获得android-sdk_m5-rc15_linux-x86 文件 5.获得root file system ⑴下载busybox 工具从下面地址 http://benno.id.au/blog/2007/11/14/android-busybox(linux 环境中下载)⑵运行emulator 获取root file system $ cd <目录>/ android-sdk_m5-rc15_linux-x86/tools $ ./emulator& 等待emulator 启动,看到出现Android 系统画面,进入菜单ALL/Dev Tools/Development Settings 下,将Wait for debugger,Show running processes,Show screen updates 这三项打勾,回到命令输入终端。 $ ./adb push /busybox /data $ ./adb shell # /data/busybox tar -czf system.tar.gz /system # /data/busybox tar -czf data.tar.gz /data # /data/busybox tar -czf etc.tar.gz /etc # /data/busybox tar -czf sbin.tar.gz /sbin # exit $ ./adb pull /system.tar.gz ./ $ ./adb pull /data.tar.gz ./

【IT专家】yolo模型移植到android手机端

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 yolo模型移植到android手机端 2017/08/18 665 之前写了android demo在手机上的运用,但是模型都是官方给的,想要替换成自己的模型,因此尝试了下将自己训练的yolo模型来替换demo给的模型。首先,darknet的训练和.weight文件到.pb文件的转化,以及android demo 的实现见之前的博客。在此不再叙述sdk,nkd等配置问题,且直接使用.pb文件。其次,默认已安装android studio。 (1)终端进入(android安装目录)/bin,输入./stuodio.sh开启android studio ?(2)点击new,import project导入(tensorflow所在路径)/tensorflow/examples/android文件夹(可连接手机先run,保证demo能够正常运行后再行修改) ?(3)将build.gradle中68行的bazelLocation改为自己bazel的路径:def bazelLocation = ‘/home/seven/bin/bazel’185行apply from: “download-models.gradle”注释掉,并在第112行,增加//*/(不然后面的内容都被当做注释了): ?if (nativeBuildSystem == ‘bazel’ || nativeBuildSystem == ‘makefile’) { // TensorFlow Java API sources. java { srcDir ‘../../java/src/main/java’ exclude ‘**/examples/**’//*/ } // Android TensorFlow wrappers, etc. java { 最后,将第76行开始的内容改为自己需要的版本号: android { compileSdkVersion 25 buildToolsVersion “26.0.1” if (nativeBuildSystem == ‘cmake’) { defaultConfig { applicationId = ‘org.tensorflow.demo’ minSdkVersion 21 targetSdkVersion 25 ndk { abiFilters “${cpuType}” } (4)将转化得到的.pb文件放在(tensorflow所在路径)/tensorflow/examples/android/assets文件夹内,为方便起见,可将此.pb重命名为graph-tiny-yolo-voc.pb。若文件夹中已存在此文件名的文件,删除之。 ?(5)该项目将一次性生成三个app,因为我只需要detect一个,在AndroidManifest.xml中删除关于另外的两个activity,修改后的文件如图 ?

Android_ROM制作移植及精简教程

Android_ROM制作,精简及移植教程 本教程主要内容有:Android系统文件夹结构解析、应用软件说明、定制精简、ROM签名把包等内容。刷机有风险,出问题自负。其实这个教程一早就想写的,但由于时间及本人的懒惰,一直拖着。今晚终于静下心来写好本文,本文有部份内容来自于网络。 速度与华丽,你喜欢那个。是不是想要一个又够速度又华丽的ROM呢?我是一个追求新鲜的人,对于手机的ROM,我又追求稳定、精简、美观、省电。现在Hero ROM有很多,最新的有第三方Android 2.1版本,但这些ROM的制作者都会跟据自已的个人喜欢会增加和增少相应的功能或是界面,但我们往往不喜欢这些ROM的某些小方面,所以随着而来面对的问题就是怎样把这个ROM修改成为一个自已真正需要的ROM呢?以往一直是依靠“大杀器”来解决,但觉得还是过于麻烦,所以寻求办法自己动手修改ROM。于是有了本文。废话少说,进入题。 一、Android系统文件夹结构 一个完整的ROM根目录会有以下几个文件夹及文件: data META-IN system boot.img 系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 /system/app/*.apk 2)用户安装应用程序所在目录 /data/app/*.apk 3) 注意: a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除 b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adb install杀死正在运行的程序时,有时旧的就会被启动 2.用户数据所在目录 /data/data/应用包名/shared_prefs 配置文件 /data/data/应用包名/databases/* 库文件所在目录 3. SD卡对应目录 /sdcard/

安卓系统移植经验之谈,教你三分钟移植

每当我闲下来时不发Rom时,就会整理一下思路,发发教程啥的,我觉得能带动机油们自己打造、改造Rom,共同提升,才是Romer的追求。 发Rom也好,教程也好,我的宗旨是不设回复可见,如果你觉得好,回复或者评分鼓励一下,我就很开心了。 不过这样做的一个遗憾就是,我的帖子通常回复率不够高,沉得快。 好了,闲话少说,上教程。 注:可能你会觉得文字教程比较干枯,不够形象生动,但是请精心看,我会尽量讲得具体、清晰。 首先,我并不算是移植高手,这个教程只是我在自己移植过程中的的一些收获体会,一些经验之谈。 如果你觉得有什么不对或值得改进的地方,欢迎和我交流,我们一起来完善这个教程。 因为移植所涉及的机型、配置相当多变和复杂,所以我无法讲具体细节,只能讲大致的原则。 可以结合我移植U8800+的JoyOS到U8860的例子作为参考进行理解。 我把这些原则抽象出来,命名为Rom移植5步法,具有一定的通用性。 Rom移植的方向有正向和逆向之分: 正向的做法通常就是,找个目标机型的底包,然后把要移植的包的app和framework提取出来替换进去。 这样的优点是改动无需太大,非常快捷;缺点是经常因为一些bin下的程序或者

库文件的差异而导致成功率不够高。 逆向的做法是,拿要移植的包作为底包,把目标机型的内核、wifi驱动、传感器库文件、配置文件等替换进去。 这样做要复杂一些,需要准确两个包的差异,知道应该改哪里; 优点自然是不成则已,一旦移植成功能最大限度地发挥Rom性能,因为框架、程序与底层的契合度要比正向法好。 我这个教程以逆向法为例。 另外,Rom移植有风险,刷机测试需谨慎,如有本人操作不当导致出现任何问题,本人概不负责。 Rom移植5步法: 1.Rom移植涉及的东西比较偏底层,所以在移植之前必须清楚目标机型的硬件配置,分区结构。 这里的配置不是说主频多少、内存多少,这两个参数基本上不会影响移植的进行。对于移植,最关键的因素是主板平台,通常采用同一系列的cpu的不同机型的Rom移植的成功率要高很多。 比如,U8800+和U8860均是高通8255处理器,虽然主频不一样,但它们却同属于同样的MSM7x30平台。 他们之间的互相移植,绝对要比与MSM7K平台的中兴V880互相移植来的容易得多。 至于为什么要弄清分区结构,会在下面讲到。

ANDROID Platform GT818 驱动移植说明书

Android平台GT818驱动移植说明书 【程序总揽】 本程序针对Android2.1系统,移植的硬件平台为华天正科技开发的Real6410(基于S3C6410)。本驱动支持多指,能够在系统支持的情况下在主控进入关屏状态时自动调整GT818工作状态,达到省电的目的。 1.1系统资源使用 1.2系统运行流程 为了便于移植,程序中采用了中断和定时查询两种方式,并建议使用中断方式。以中断方式为例,系统的主运行流程如下所示: 1.创建Guitar对应的i2c_client对象,其中完成了该适配器的相关信息设置; 2.加载触摸屏驱动,注意该驱动必须在I2C总线驱动已经加载的情况下才能进行,否则I2C通信将 出错。程序中将其加载优先级设为最低; 3.创建驱动结构体,探测Guitar设备,并将其挂载到I2C总线驱动上;测试I2C通信,注册input 设备,申请IO口和中断资源,完成Guitar初始化工作(如有需要,烧录升级在此进行); 4.开启触摸屏中断,等待数据接收; 5.收到触摸屏数据中断,关中断; 6.通过I2C传输数据,分析手指信息,; 7.更新按键信息,上报手指坐标、按键等信息,开中断; 8.重复4-7之间的循环。

【移植指南】 4.准备工作 本驱动采用GPL许可证,代码没有采用模块方式,所以使用本驱动前需要重新编译内核。在编译内核前,

我们需要做好以下准备工作: 1、在硬盘上或使用虚拟机(如VmWare)安装Linux系统,推荐使用Ubuntu9.10; 2、安装gcc及arm-linux-gcc和其他编译工具,将CC和LD指定为arm-linux-gcc; 3、获取平台对应的Android源码,解压到自己的工作目录。 4、了解移植平台的IO口、中断、I2C总线的使用方式。 5.内核编译配置 在编译代码前我们需要进行内核编译配置,可以使用下面命令中的一个: #make xconfig (基于QT的图形配置界面,非常直观,推荐使用) #make menuconfig (基于文本菜单的配置界面) 下面我们以make xconfig为例,将我们的驱动增加到内核中去。假定我们源代码目录为: ~/android/kernel/ 将编写的源代码复制到Linux内核源代码的相应目录: ~/android/kernel/driver/input/touchscreen/goodix_touch.c ~/android/kernel/include/linux/goodix_touch.h ~/android/kernel/include/linux/goodix_update.h //如果不做烧录则可以不加 1.在目录touchscreen的Kconfig文件中增加新源代码对应项目的编译配置选项: #----------------------------------------------------------------- config TOUCHSCREEN_GOODIX_GT818 # 配置项名称 tristate "S3C6410 TouchScreen Driver" #选择项,选择Y标识要将其编译进内核 default y #默认编译选项 depends on I2C #依赖项,本驱动必须工作在I2C总线驱动的基础上 help #帮助信息 It is a android driver to support Gooidx's touchscreen whose name is guitar on s3c6410 platform. The touchscreen can support multi-touch not more than two fingers. Say Y here to enable the driver for the touchscreen on the S3C SMDK board. If unsure, say N.To compile this driver as a module, choose M here: the module will be called goodix_touch.ko. #----------------------------------------------------------------- 注意: 当将编译选项设置为M时,编译生成的驱动需要我们手动挂载。如需要系统启动时自动挂载,需要将模块goodix_touch.ko拷贝到系统模块加载目录,并修改对应的启动过程的rc脚本。 2.在目录touchscreen的makefile文件中增加对新源代码的编译条目; #这里的二进制文件名必须与源文件名移植,如goodix_touch

任意安卓移植ROM教程,超详细ROM技术学习

任意安卓移植ROM教程,超详细ROM技术学习 相信有过刷机经历的都知道安卓系统的构造,我们讲述一下安卓的几大组成:从内核基于linux开始,整个系统就运行在一个虚拟机上,这是安卓的一大特征!! 那么我们移植的时候要修改哪一部分?这就是我们这个帖子的重点了。在刷机时,我们大多使用zip格式的升级包进行刷机,那zip格式的升级包是怎么样的一个组成呢?一个zip升级包的完整构造,其中我们要移植所需要修改的就是META-INF里的刷机脚本。 对于这个构造,有必要完整的解释一次。 META-INF 这里面主要是签名文名和刷机时执行的脚本(updater-script),移植时,我们主要要更改的就是刷机的脚本。system 这里面就是android的系统部分app 这里存放的是系统的app,每个app都有两个文件,一个*.apk,一个*.odex,我们在移植时,要将这个文件合并到对应的*.apk里面去,apk文件其实就是一个zip文件,可以用WinRAR或7zip打开的,当然,合并odex文件不是把它改名直接放到apk里去这么简单的,后面具体介绍一下。还有,这个文件夹里面的程序,刷完以后是不能通过程序管理来卸载的。bin 这里面存放的是native程序,不好意思,一下子忘掉中文怎么说了。简单来说,apk是JAVA 程序,而这个是C/C++的程序。etc 这里面存放的是系统默认的配置文件,GPS的配置也在这里J。fonts 这个是字体文件夹,一般很少改动,除非要做美化framework 这里存放的是android框架,移植MIUI,很多改动在这个文件夹里,美化ROM的话,主要改framework-res.apk就可以了。当然,MIUI本身就有主题机制了,不用这么麻烦去改。这个文件夹里也会有对应的odex文件。lib 一些通过的类库,一般是由app/bin里面的程序调用的。media 媒体文件,要添加系统默认的铃声就在这里了。如果是别的ROM的话,壁纸也会放在这里面。

android系统移植emmc记录(2)--u-boot烧写emmc方式

android系统移植emmc记录(2)--u-boot烧写emmc方式 U-boot 支持2种方式烧写 emmc设备: Fastboot命令:通过usb接口烧写。 步骤: 1.编写u-boot支持从sd卡启动,里面涉及到文件的修改,下面讲解。 2.按照上述方法,把u-boot烧录到sd上,使开发板从sd卡启动。 3.进入开发板命令终端 # : 4.首先格式emmc,目的是分配4个分区。分别为vfat分区, system 分区, userdata分区, Cache分区. # : fdisk -c 0 -c :表示格式当前设备 0:表示初始化的emmc设备节点,mmc/sd设备加载顺序,分配的节点从0开始到3结束。不管你从哪个通道指定起始设备,多从0开始分配。如:emmc占用通道0口, 分配的节点是 0,sd卡占用通道2口,分配的节点是 1. 如果不初始化emmc,只使用sd卡模式,在sd卡占用通道2口时,分配的节点是 0.这点请了解源代码,后续会修改。 所以,如果想给板子上SD分区的话,使用如下命令(在emmc也初始化成功的情况下) #: fdisk -c 1 查看设备分区情况: #:fdisk -p 0 5.格式化分区,vfat分区为fat32格式。其它都为 ext3文件系统格式. 格式vfat分区: #:fatformat mmc 0:1 0:同上意思,表示的已经加载的emmc设备节点。 1:表示第1个分区,注意。程序默认第一个分区必须为fat分区, 只能指定为 1,程序会比较是否为分区1,不是就不会格式化。 格式ext3分区: #:ext3format mmc 0:2 //system #:ext3format mmc 0:3 //userdata #:ext3format mmc 0:4 //cache 6:烧写文件: #:fastboot 给开发板通过usb线跟pc连接。 下载工具:fastboot到windows下,把要烧录的文件 zImage system userdata放到fastboot 文件里面。 点windows下开始 ---->运行 :输入:cmd 在控制行下进入fastboot所在的路径如: 输入命令: fastboot flash bootloader u-boot.bin fastboot flash kernel zImage fastboot flash ramdisk ramdisk-uboot.img

安卓Android ROM定制、移植教程。

CyanogenMOD移植教程 转自秋叶随风Ivan;乐蛙论坛等。 第一章:环境的搭建 一.系统选择和安装 建议使用ubuntu LTS 10.04 X64 新手朋友推荐Deepin Linux 基于ubuntu定制的,适合新手使用https://www.sodocs.net/doc/ff4575811.html,/download 系统安装教程,以下方法通用于UBUNTU官方版本 U盘安装:https://www.sodocs.net/doc/ff4575811.html,/index.php/Unetbootin 光盘安装:https://www.sodocs.net/doc/ff4575811.html,/index.php/光盘安装 搭建android编译环境: 英文好的请猛击这里:WIKI: https://www.sodocs.net/doc/ff4575811.html,/index.php?title=Building_from

_source 1.安装JDK 因为ANDROID大部分东西是java写的,所以首先我们需要安装JDK 打开终端按照如下命令输入或者直接复制粘贴: 编译android 2.3 或者更新的版本请使用jdk 6 $ sudo add-apt-repository "deb https://www.sodocs.net/doc/ff4575811.html,/ lucid partner" $ sudo apt-get update $ sudo apt-get install sun-java6-jdk如果你需要编译的是2.2以下的版本请使用JDK 5,因为现在大家都是使用Gingerbread 以上的系统,这里就不介绍jdk5如何安装的了,如果有需要请度娘或者google 2.安装各种依赖包 64位环境:依然是终端中输入 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \

Android系统分析

Android操作系统分析 穆英华 基于Linux内核的Android操作系统尽管非常年轻,却已经占领了智能手机9%的市场,而且还在向其它移动平台及嵌入式领域迅速扩张着。下图为2010年一季度的智能手机操作系统占有率统计。在国内外制造商纷纷推出基于Android的产品、Android Market中的应用程序飞速增长的背景下,有必要对Android操作系统的情况进行调研,对比其与Midinux的优劣势、估计其机遇或威胁。本文将从以下几个方面分析Android:目标用户群、支持硬件架构、平台技术架构、应用程序数量、未来发展方向。 一.目标用户群 覆盖高、中、低端智能手机用户是Android的主要目标,尤其是市场上基于ARM11处理器的智能手机已经降到1000元人民币的价格,让低成本的硬件配置也可以运行Android系统,更使得Android从中高端扩展到低端成为可能。除智能手机外,Android已经渗透到了平板电脑、上网本,乃至汽车电子、机顶盒、电子相册、无绳电话等各移动平台和嵌入式产品领域。 对于Android的智能手机和平板电脑用户,Android Market中种类丰富和数量众多的应用程序是其选择Android的重要原因,没有众多可选择的第三方应用程序,操作系统就是再性能优异,也不会对用户有任何杀伤力。这一点类似于苹果的iOS,但总体来说,Android 的用户不会像苹果用户那样忠诚、他们中的很大一部分也不会像苹果用户那样为数码产品花费那么多金钱,可以说Android更大众一些。 二. 支持硬件架构 1.支持的硬件架构 目前Android已经移植到了ARM、X86、M IP S各体系架构中的很多处理器核、处理器芯片、以及更多的板级结构上,对PPC等体系架构的移植也早已开始。如高通、三星等芯片制造商推出的基于ARM C ortex-A8处理器核及P o w er V R显示核心的处理器芯片早已移植Android成功,并被联想的Le Ph one、魅族的M9等许多手机采用,多核的C ortex-A9也蓄势待发。随着

基于android平台的移动查询系统设计与实现

xx大学 毕业设计(论文)开题报告 题目:基于android平台的移动查询系统设计与实现学院:软件学院 专业:软件工程 班级: 学号: 姓名: 指导教师: 填表日期:2012 年3月5日

一、选题的依据及意义: 2012年是移动互联网高速发展的一年。市场分析机构Informa数据显示,2012年全球销售的Android智能手机约达4.61亿台,其中三分之一的Android智能手机在中国销售,Android智能机的普及大大推动了Android市场的发展。而移动查询系统是一款非常实用的APP,该应用程序拥有手机号码归属地查询、城市天气查询、IP地址信息查询等模块。 智能手机的移动查询系统,越来越多的融入到人们的生活当中,现代的人们的生活越来越的信息化和规范化。人们对于自己的行为都开始有比较规范的计划。出门查看天气,旅游查看火车路线、时间信息,休闲时查看陌生手机号码归属地、上网IP地址信息等。所有的方便都无时无刻的存在大家身边。所以现代的人们都会青睐这些方便小软件的存在。这些小软件存在我们大家的手机中,首先它可以随时随地的查询,而且非常的方便携带,对于大家在应急方面有着不可替代的作用。 一款专业的移动查询软件是手机中必不可少的要素,几乎市场上所有的手机用户都会下载一个移动查询软件,通过软件可以对页面中一些必要的元素进行人性化的设置,同时在操作的时候也能得到一定的便利,但是不能满足用户的所有要求,所以网上就出现了各种各样的手机移动查询软件,来满足不同用户的不同要求。不同手机平台的手机,所支持的移动查询软件也是各不相同,而现在最流行的手机平台就是google的android手机平台,所以本课题就致力于开发出一款基于android手机平台的移动查询系统,来满足用户的使用需求。 二、国内外研究现状及发展趋势(含文献综述): 2012年第三季度,Google 的Android 系统拿下全球75% 的市场份额,而2009年同期Android市场份额只有3.5%。移动互联网的蓬勃发展促使手机终端产业链变化,应用和服务逐渐成为竞争的焦点。无论是电信运营商,终端厂商还是应用开发商,目前都在向操作系统领域进军,试图对内容的聚拢和对应用体系的把控,稳固或加强自己在产业链中的影响力。在这一过程中Android系统因多方面因素逐渐受到各方的青睐。,Android手机在中国市场的销量在未来还将有较大发展空间。 随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网访问Web网站并处理各种各样的业务。因此,智能手机的应用软件及其需要的服务将有广阔的发展前景。不论身在何地,查询当时当地的天气,出差旅行查询火车车次信息等都是比不可少的工具。随着社会的发展,人们更不肯离开便捷的查询工具,甚至会对其产生依赖。 三、本课题研究内容 主要内容 根据需求分析与系统功能设计目标,结合实际情况本系统功能模块设计分为如 下几个模块: 1.应用主页:在这里我们可以选择要进行的信息查询。 2.手机号码归属地查询:在手机号码归属地查询窗口,输入待查询手机号,系统弹出提示框显示手机号码归属地、手机卡类型。

MIUI移植基本教程

首先介绍制作rom的环境使用的工具: 1.制作环境 必须要有一个Linux操作系统,我用的是ubuntu 10.4,JDK6,当然如果你能建立一个完整的编译Android系统的环境更好,如何建立这样的系统,网上有很多文章,这里就不多讲了。可以在物理硬盘分区上安装Linux,也可以向我一样在VirualBox虚拟机上安装。 2.厨房 虽然它只是个在终端下由脚本驱动的程序集,但对我们提高制作rom的效率作用是巨大的完全掌握这个厨房的使用方法,需要写一篇单独的教程,本贴只针对移植所需的相关方法作出说明。 1)解包和打包 解包:把要打磨的rom包放到original_update目录中,rom包的类型一般是zip压缩包,也可以是img镜像文件;运行厨房(menu脚本),输入1(Set up working folder from ROM),根据提示选择你要解包的那个文件号,厨房解包并创建工作目录(WORKING_xxx),如果已存在一个WORKING_xxx的工作目录,厨房会自动把它移到到OLD_WORKING目录中。打包:输入99(Build ROM from working folder),厨房自动打包工作目录然后签名并把rom 文件放到OUTPUT_ZIP目录中。 2)deodex 官方发布的rom一般都会把apk中的dex文件抽出并优化修改为同名的odex文件,为了修改它们,需要将这些odex文件打回到各自的apk文件中,在厨房中输入0(ADV ANCED OPTIONS)->11(Deodex files in your ROM),厨房自动搜索工作目录下所有odex文件,根据提示输入即可。 3)文件签名 在(ADV ANCED OPTIONS)屏输入21(Sign APK file(s)),厨房搜索工作目录下所有apk 文件,根据提示输入,这里要注意,无论你选择哪一项,厨房都不会自动签名framework目录下的apk文件,需要你输入s(自定义签名文件)。 4)处理boot.img 此厨房一个非常强大的功能,你可以更换核心,修改init进程配置文件。 在(ADV ANCED OPTIONS)屏输入20(Unpack or re-pack a boot.img)->输入w(Extract kernel and ramdisk from boot.img in working folder)厨房将boot.img解包到目录BOOT-EXTRACTED,其中文件boot.img-kernel为android的Linux核心,你可以用其他的核心文件替换它,可以编辑这些文件,但不能改名。完成后输入b(Build boot.img from BOOT-EXTRACTED folder (for working folder)),重新打包创建新的boot.img文件并自动替换掉工作目录下的旧文件。 提示:如果更换了核心,还需要更换system/lib/modules/*为相应的文件! 3.编译和反编译classes.dex 要用到两个工具,smali和baksmali,来自开源项目访客无法浏览链接,请先注册或者登陆。,创建者是Jesus Freke(勘误),这两个工具可以在厨房/tools/deodex_files目录下找到。

将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现

-9- 新桌面映像、管理用户数据,并监控其创建的虚拟桌面。客户端使用VMware View Client程序,通过PCoIP显示协议回传运行结果。该协议是一种高性能自适应显示协议,可应用在3D 图形设计、Flash领域,即使在低带宽下,也能保持稳定的显示。由于它的优异性能,被许多远程显示方案所采用,包括其他桌面虚拟化产品供应商。 我公司可以先采取试点方式应用桌面虚拟化技术,可以选择教育培训中心试点,学校的应用场景非常适合这一技术。根据试点效果,再逐步推广。 目前,桌面虚拟化技术大规模应用是所谓的“桌面云”,在华为上海研究所有1万名员工在使用华为自身研制的这种运用云计算平台的虚拟桌面。上海联通和浙江移动也在批量使用这种桌面云。 当前虚拟化应用中的另一个热点,是数据中心虚拟化,这是全新的数据中心部署和管理方式,有以下优势。 1.能够实现一定程度的自动化运行,降低人工干预频率,同时提供简单强大的管理界面,使管理员摆脱繁重的与物理服务器、操作系统、中间件等的配置和管理工作,专注于应 用管理。 2.实现动态调度资源。对于管理员而言,虚拟化的数据中心不再是一台台隔离的服务器,而是一个统一的资源池,而且具备伸缩性。管理程序能够根据应用的负载情况自动调整分配资源,提升资源利用率。 3.加速应用的部署,提高业务响应速度。 4.通过虚拟化整合,可以将应用集中,提高服务器的利用率,减少服务器,从而降低制冷、通风等耗电量,达到绿色减排目的。 这些优势非常有现实意义。2009年中化集团升级ERP系统,当时他们的ERP系统是SAP R/3 4.7版,计划升级到6.0版。由于中化的业务中,当时已有93%通过ERP来执行。如何不中断业务,实现平稳升级成为中化集团面对的难题。经过研究,他们最终采用IBM的私有云方案。他们对3个数据中心实施虚拟化改造,将所有资源池化,由IBM的数据中心管理软件统一管理,将动态的、分散的资源集中调度和灵活分配,跨越2个数据中心的云环境得以实现。私有云使得中化集团在ERP系统不停机,没有增加新服务器的限制下,实现平稳升级。中化实现私有云,还能实现未来包括ERP在内的各种IT应用的灵活运行。中化私有云对我们 公司的IT运维有很好的示范作用。 应用虚拟化技术,实现PC桌面、交换、数据中心的虚拟化乃至建设私有云能够让企业拥有统一的、可管理的、具备弹性伸缩的IT基础架构。这对企业IT应用有重要意义,这能大幅提升运维效率,提高资源利用率,降低系统运营成本,还能灵活应对新业务需求。在必要的时候可以对接公有云,直接租用公有云计算供应商的资源,弥补不足。未来,随着虚拟化和云计算技术的进一步发展和应用,采用虚拟化技术的面向云计算的企业IT基础设施在运维时会有更大优势。我们作为企业的IT部门应当及早研究和应用虚拟化和云计算技术,助力公司信息化建设。 参考文献 [1]《虚拟化与云计算》小组.虚拟化与云计算[M].电子工业出版社,2009. [2]樊勇兵,丁圣勇,陈天,等.解惑云计算[M].人民邮电出版社. [3]张为民,唐剑峰,罗治国,等.云计算深刻改变未来[M].科学出版社. [4]雷万云.云计算——企业信息化建设策略与实践[M].清华大学出版社. 将Android平台的RIL层 移植到基于LINUX的通用平台的研究与实现 重庆邮电大学 赵国强 彭大芹 【摘要】本文通过对Android RIL层代码分析,将android RIL层功能在纯LINUX平台上实现,完全脱离了Android系统。为基于LINUX的通用平台实现一套成熟的RIL层代码,并开发出相应的框架层,以便基于LINUX的平台能快速成熟的向3G网络发起相关业务。在OpenWrt系统上验证了移植后的RIL层代码正常工作。【关键词】Android RIL;LINUX;移植;Parcel;验证 1.课题研究的背景和意义1.1 Android RIL简介 Android RIL(Radio Interface Layer)提供了无线基带Modem与电话应用之间的抽象层。在Android RIL层中,完善的考虑了电话应用的各种情况,如:双SIM卡;电话,短信,彩信,PS DATA业务,PIN/PUK码等各种3G网络业务。 RIL层在Android系统中,处于硬件抽象层,运行在一个独立的守护进程中,主要为框架层和基带接口提供适配,具有良好的独立性。其中的通信机制,与框架层接口主要使用Socket通信,内部线程主要使用管道,与基带接口默认使用AT命令。且其代码均由C和C++来完成,依赖第三方库较少,所以,Android RIL 层具有良好的移植性。 1.2 移植Android RIL的意义 目前很多基于LINUX平台的系统,如:PC(LINUX操作系统),QT,路由器平台(如OpenWrt系统)等等,都对连接3G网络有需求,但在这些平台原生的功能中,没有独立的RIL接口层,所以开发一套基于LINUX的独立应用,用来支持与基带发起各种3G网络相关业务是很有意义的。Android RIL具有良好的稳定性,独立性,以及对3G网络业务的完整性,所以将其移植成一个独立的,供LINUX通用平台使用的RIL层,可方便所有的基于LINUX的平台完成各种电话应用的开发。 2.Android系统中RIL层分析 2.1 RIL层在Android系统中的位置 RIL在Android系统中,处于硬件抽象层位置。主要通过SOCKET通信连接框架层,将框架层下发的消息解析后,向基带下发相应的AT指令,并将从基带返回的AT指令的响应,封装成消息,返回给框架层。位置如图1所示。 2.2 Android RIL工作原理2.2.1 Android RIL代码说明 RIL主要由RILD(radio interface layer daemon)守护进程和两个动态库:librefrence_ril.so和libril.so组成。Android工程源代码目录中,RIL代码包含于hardware/ril目录中,主要文件说明如表1所示。 2.2.2 Android RIL工作原理 rild以一个main函数作为整个RIL层的入口点,负责完成初始化。libril.so库包含了主要的消息循环流程,主要负责与框架层进行交互,在接收框架层命令后,调用相应函数处理,然后将命令响应结果传回客户进程。librefrence_ril.so主要提供各个具体业务的AT指令的封装和解析接口,供libril调用,向下通过AT_COM和基带进行交互。具体工作线程如图2所示。 3.移植Android RIL层功能 通过对A n d r o i d R I L 层代码分析,在RIL层主要使用了基于linux的POSIX Thread (pthread)多线程编程和socket IPC通信,这些在移植过程中是无须考虑的。需要移植的是RIL层依赖于Android系统的功能。 3.1 移植Android系统属性 表1 RIL主要文件说明(./表示处于hardware/ril目录下) 文件路径 文件名文件说明./include/telephony ril.h 框架层和RIL层接口和数据结构定义./libril ril_commands.h 请求命令描述列表ril_unsol_commands.h 主动上报时间描述列表 ril.cpp 主要负责与框架层交互ril_event.h 数据结构和函数声明ril_event.cpp 处理event loop事件./reference-ril atchannel.h 数据结构和函数声明atchannel.c 主要负责与modem通信reference-ril.c 主要负责应用与基带间的数据通信 at_tok.h AT指令解析处理函数声明at_tok.c AT指令解析处理函数misc.h AT指令解析处理函数声明misc.c AT指令解析处理函数./rild rild.c rild守护进程

相关主题