1. 全志平台Android 10编译环境搭建
1.1 硬件准备要点
全志芯片平台(如T7、A64、H6等)的Android 10编译对硬件有特定要求。建议配置至少16GB内存的x86_64主机,硬盘空间需预留150GB以上。遇到过编译中途失败的情况,后来发现是交换空间不足导致,建议额外配置8GB以上的swap分区。
开发板选择上,全志官方EVB开发板是最稳妥的选择。我们团队测试过Orange Pi、Pine64等第三方板子,发现部分GPIO定义与官方BSP存在差异,需要手动修改dts文件适配。如果只是验证系统镜像,建议先用全志原厂开发板。
1.2 软件依赖安装
Ubuntu 18.04是目前最稳定的编译环境,需要安装以下基础包:
bash复制sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
特别注意:全志平台需要额外的misc工具链:
bash复制sudo apt-get install u-boot-tools android-tools-fsutils
1.3 源码获取与验证
全志的Android 10源码需要通过特定渠道获取:
- 联系全志FAE获取BSP包(通常为tar.gz压缩包)
- 解压后执行:
bash复制tar -xzvf t7_android10_v2.0.tar.gz
cd t7_android10
repo sync
源码完整性校验很重要,我们遇到过因网络中断导致的文件缺失,建议用以下命令检查:
bash复制repo forall -c 'git fsck --no-dangling'
2. 编译配置详解
2.1 设备树配置选择
全志平台的设备树文件位于device/softwinner/目录下,不同开发板对应不同子目录。以T7芯片为例:
code复制device/softwinner/t7-common/
├── BoardConfig.mk
├── device.mk
└── kernel
└── arch
└── arm64
└── boot
└── dts
└── sun8i
└── t7-evb.dts
关键配置项包括:
TARGET_BOARD_PLATFORM: 指定芯片型号TARGET_PREBUILT_KERNEL: 预编译内核路径BOARD_KERNEL_CMDLINE: 内核启动参数
2.2 内核配置技巧
全志内核配置有特殊要求:
bash复制cd kernel
make ARCH=arm64 sun8i_defconfig
make ARCH=arm64 menuconfig
必须开启的选项:
code复制CONFIG_SUNXI_SMC=y
CONFIG_ION_SUNXI=y
CONFIG_VIDEO_SUNXI_CEDAR=y
遇到过视频解码异常的问题,后来发现是CEDAR VPU驱动未正确配置。建议在.config中手动检查以上选项。
2.3 编译参数优化
在build/core/main.mk中可调整编译参数:
makefile复制# 启用ccache加速
export USE_CCACHE=1
ccache -M 50G
# 并行编译设置(根据CPU核心数)
export JOB_NUM=$(nproc)
实测数据:在Ryzen 7 3700X(8核16线程)上,完整编译时间从6小时优化到2.5小时。
3. 完整编译流程
3.1 环境变量初始化
全志平台需要特殊的环境变量:
bash复制source build/envsetup.sh
lunch t7_evb-eng # 根据实际板子选择
常见lunch选项:
t7_evb-eng: 工程师版本(带调试工具)t7_evb-user: 用户版本(优化性能)t7_evb-userdebug: 平衡版本
3.2 全量编译命令
执行完整编译:
bash复制make -j$JOB_NUM 2>&1 | tee build.log
关键阶段说明:
bootimage: 生成boot.imgsystemimage: 生成system.imgvendorimage: 生成vendor.imgsuperimage: Android 10新增的动态分区镜像
3.3 镜像打包处理
编译完成后,镜像文件位于out/target/product/t7_evb/目录。全志平台需要额外打包:
bash复制pack
这个命令会生成最终的sun8i_android10.img文件,可直接用PhoenixSuit工具烧录。
4. 常见问题排查
4.1 编译错误处理
-
Java版本冲突:
log复制Unsupported major.minor version 52.0解决方案:安装OpenJDK 8
bash复制sudo apt-get install openjdk-8-jdk update-alternatives --config java -
Python依赖问题:
log复制ImportError: No module named 'functools32'解决方案:
bash复制
pip install functools32 six
4.2 烧录失败处理
常见烧录错误及解决方法:
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| USB设备未识别 | 驱动未安装 | 安装全志USB驱动 |
| 烧录到7%卡住 | 镜像校验失败 | 重新执行pack命令 |
| 设备反复重启 | bootloader损坏 | 进入FEL模式重刷 |
4.3 系统启动问题
-
卡在开机LOGO:
- 检查内核日志:
adb shell dmesg - 常见原因是显示驱动未初始化,需要检查
sys_config.fex中的LCD参数
- 检查内核日志:
-
触摸屏失灵:
- 修改
/system/usr/idc/下的输入设备配置 - 调整
input_read_event的采样率
- 修改
-
WIFI无法启用:
bash复制adb shell cat /proc/net/dev检查驱动是否加载,确认
/vendor/etc/wifi/下的固件文件存在
5. 高级调试技巧
5.1 内核日志实时捕获
全志平台特有的调试方法:
bash复制adb shell cat /proc/kmsg > kernel.log
可以通过修改kernel/printk.c调整日志级别:
c复制#define DEFAULT_CONSOLE_LOGLEVEL 7 // 改为8可显示所有调试信息
5.2 性能优化配置
在BoardConfig.mk中添加:
makefile复制# GPU调优
PRODUCT_PROPERTY_OVERRIDES += \
ro.hardware.egl=mali \
ro.hardware.gralloc=allocator.sunxi
# 内存管理
PRODUCT_PROPERTY_OVERRIDES += \
dalvik.vm.heapgrowthlimit=256m \
dalvik.vm.heapsize=512m
5.3 自定义OTA包生成
制作增量更新包:
bash复制./build/tools/releasetools/ota_from_target_files \
-i previous.zip new.zip update.zip
全志平台需要额外处理recovery.fstab:
text复制/boot emmc /dev/block/by-name/boot
/system ext4 /dev/block/by-name/system
/vendor ext4 /dev/block/by-name/vendor
6. 外设驱动开发要点
6.1 GPIO控制实现
全志平台的GPIO操作示例:
c复制#include <sunxi-gpio.h>
// 初始化GPIO
struct gpio_config gpio = {
.gpio = GPIO_PIN(3, 1), // PH1
.mul_sel = 1,
.pull = GPIO_PULL_UP,
.drv_level = 3
};
sunxi_gpio_set_cfgpin(gpio.gpio, gpio.mul_sel);
sunxi_gpio_set_pull(gpio.gpio, gpio.pull);
// 设置输出
sunxi_gpio_output(gpio.gpio, 1);
6.2 I2C设备添加
设备树配置示例:
dts复制&i2c2 {
status = "okay";
clock-frequency = <100000>;
sensor@1a {
compatible = "vendor,sensor-model";
reg = <0x1a>;
interrupt-parent = <&pio>;
interrupts = <PH 3 IRQ_TYPE_EDGE_FALLING>; // PH3
};
};
驱动加载后需要验证:
bash复制adb shell ls /sys/bus/i2c/devices/
6.3 摄像头调试
全志CSI接口配置要点:
- 检查
sys_config.fex中的CSI参数 - 确认内核配置开启
CONFIG_VIDEO_SUN6I_CSI - 测试命令:
bash复制v4l2-ctl --list-devices
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=NV12
7. 系统裁剪与定制
7.1 移除预装应用
在device/softwinner/t7-common/device.mk中:
makefile复制PRODUCT_PACKAGES := \
Launcher3 \
Settings \
$(filter-out PrebuiltApp1 PrebuiltApp2, $(PRODUCT_PACKAGES))
7.2 修改开机动画
替换以下文件:
code复制/system/media/bootanimation.zip
/vendor/media/shutdownanimation.zip
制作规范:
- 图片序列命名为part0/00001.png
- desc.txt格式:
code复制1920 1080 30
p 1 0 part0
7.3 调整系统分区
修改BoardConfig.mk:
makefile复制BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648 # 2GB
BOARD_VENDORIMAGE_PARTITION_SIZE := 536870912 # 512MB
需要同步更新fstab.sun8i和recovery.fstab文件。
8. 性能测试与调优
8.1 基准测试工具
推荐测试组合:
bash复制adb shell am start -n com.antutu.ABenchMark/.ABenchMarkStart
adb shell am start -n com.futuremark.pcmark.android.benchmark/.activity.HomeActivity
全志平台特有的性能监控:
bash复制cat /sys/class/thermal/thermal_zone*/temp
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
8.2 GPU调优参数
在init.sun8i.rc中添加:
text复制# Mali GPU配置
write /sys/module/mali/parameters/mali_gpu_clk 600
write /sys/module/mali/parameters/mali_gpu_vol 1100
验证效果:
bash复制dumpsys SurfaceFlinger | grep -i mali
8.3 内存优化实践
调整lowmemorykiller参数:
bash复制echo "1536,2048,4096,5120,15360,17920" > /sys/module/lowmemorykiller/parameters/minfree
建议在init.rc中永久设置:
text复制on early-init
write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,4096,5120,15360,17920
9. 固件烧录与生产
9.1 量产工具配置
全志PhoenixSuit的批量烧录设置:
- 准备
config.ini:
ini复制[OPTION]
Auto=1
Verify=1
Reset=1
[FILE]
Firmware=sun8i_android10.img
- 执行命令:
bash复制PhoenixSuit -cmd batch -config config.ini
9.2 烧录效率优化
实测数据对比:
| 模式 | 单板耗时 | 同时烧录数量 |
|---|---|---|
| 普通模式 | 2分30秒 | 1 |
| 高速模式 | 1分45秒 | 4 |
| FEL模式 | 1分10秒 | 8 |
启用高速模式:
bash复制fastboot oem sunxi-fastboot
9.3 生产测试脚本
示例测试脚本:
python复制import serial
import adb
def test_sequence():
# 检查基础功能
assert adb.shell('getprop ro.serialno')
assert adb.shell('dmesg | grep -i eth0')
# 硬件测试
ser = serial.Serial('/dev/ttyUSB0', 115200)
ser.write(b'AT+LED=ON\r\n')
response = ser.readline()
assert b'OK' in response
10. 版本维护与升级
10.1 代码版本管理
推荐的工作流程:
bash复制repo init -u git://git.allwinner.com/android/manifest.git -b android10-t7-release
repo sync
repo start t7_android10 --all
提交更改:
bash复制repo forall -c 'git add -A && git commit -m "修改说明"'
repo upload
10.2 增量更新制作
生成差分包:
bash复制./build/tools/releasetools/img_from_target_files \
--prev_target_files previous.zip \
--target_files current.zip \
update.zip
全志特有的校验步骤:
bash复制imgrepack -v update.zip
10.3 安全补丁集成
合并AOSP安全更新:
bash复制git fetch https://android.googlesource.com/platform/manifest android-10.0.0_rXX
git merge FETCH_HEAD
全志平台需要额外处理:
- 检查
hardware/aw目录的兼容性 - 更新内核安全补丁:
bash复制cd kernel
git apply security_patch.patch
11. 外设接口开发
11.1 USB Gadget配置
全志平台USB模式切换:
bash复制echo peripheral > /sys/devices/platform/soc/usbc0/otg_role
配置为MTP设备:
dts复制&usbc0 {
dr_mode = "peripheral";
g_android: android {
compatible = "android,gadget";
ffs = <1>;
};
};
11.2 音频调试技巧
查看音频路由:
bash复制tinymix
常见问题处理:
- 无声音:检查
/system/etc/audio_policy.conf - 杂音:调整
/vendor/etc/audio_effects.conf - 录音异常:验证
/system/etc/media_profiles.xml
11.3 显示输出调整
修改显示参数:
bash复制cat /sys/class/disp/disp/attr/sys
动态调整分辨率:
bash复制wm size 1280x720
wm density 160
12. 功耗优化实践
12.1 电源管理配置
CPU调频策略:
bash复制echo interactive > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
全志特有的省电模式:
dts复制&cpu0 {
cpu-supply = <®_dcdc2>;
operating-points = <
1008000 1100000
816000 1000000
>;
};
12.2 唤醒源分析
查看唤醒锁:
bash复制cat /sys/kernel/debug/wakeup_sources
优化建议:
- 禁用不必要的
wakelock - 调整
/system/etc/powerhint.xml - 优化传感器采样率
12.3 实际功耗测试
典型场景数据:
| 场景 | 电流(mA) | 优化手段 |
|---|---|---|
| 待机 | 12 | 关闭蓝牙/WIFI |
| 视频播放 | 450 | 降低背光亮度 |
| 游戏 | 680 | 限制GPU频率 |
测量方法:
bash复制cat /sys/class/power_supply/battery/current_now
13. 系统安全加固
13.1 SELinux策略修改
全志平台默认策略位于:
code复制device/softwinner/sepolicy/
添加新规则:
te复制# 示例:允许demo_app访问GPIO
allow demo_app sysfs:file { read write };
验证策略:
bash复制adb shell dmesg | grep avc
13.2 安全启动实现
配置secure boot步骤:
- 生成密钥:
bash复制openssl genrsa -out key.pem 2048
- 修改
BoardConfig.mk:
makefile复制BOARD_AVB_ENABLE := true
BOARD_AVB_ALGORITHM := SHA256_RSA2048
BOARD_AVB_KEY_PATH := device/softwinner/t7-common/key.pem
13.3 漏洞扫描方法
使用开源工具扫描:
bash复制python3 android_triage.py --image system.img
重点关注:
/system/bin/下的su文件- 全局可写的目录
- 过时的SSL库版本
14. 多媒体开发
14.1 视频编解码优化
全志CedarX库配置:
makefile复制PRODUCT_PACKAGES += \
libCedarX \
libcedarxosal \
libcedarv
测试编解码性能:
bash复制am start -a android.intent.action.VIEW -t video/* -d file:///sdcard/test.mp4
14.2 相机HAL层开发
相机参数配置:
xml复制<!-- vendor/etc/camera.cfg -->
<CameraSettings>
<PreviewSize width="1920" height="1080"/>
<JpegQuality value="95"/>
</CameraSettings>
调试命令:
bash复制logcat -s CameraHal
14.3 音频效果处理
添加DSP效果:
xml复制<!-- audio_effects.conf -->
<effect name="bass_boost" library="libbundlewrapper.so">
<uuid>8631f300-72e2-11df-b57e-0002a5d5c51b</uuid>
</effect>
测试效果:
bash复制tinymix "Bass Boost" 1
15. 网络功能开发
15.1 以太网配置
全志平台特有设置:
xml复制<!-- network_config.xml -->
<Network>
<Ethernet>
<Dhcp enable="true"/>
<MacAddress>00:11:22:33:44:55</MacAddress>
</Ethernet>
</Network>
查看连接状态:
bash复制netcfg eth0
15.2 WiFi调试技巧
查看驱动信息:
bash复制adb shell dmesg | grep -i wifi
信号强度优化:
bash复制iwconfig wlan0 txpower 15
15.3 蓝牙协议分析
HCI日志捕获:
bash复制hcidump -Xt > hci.log
常见问题处理:
- 配对失败:检查
/etc/bluetooth/bt_stack.conf - 音频断续:调整
/etc/bluetooth/audio.conf中的比特率
16. 传感器集成
16.1 加速度计调试
设备树配置示例:
dts复制&i2c1 {
accelerometer@19 {
compatible = "st,lis3dh";
reg = <0x19>;
interrupt-parent = <&pio>;
interrupts = <PH 5 IRQ_TYPE_EDGE_RISING>;
};
};
测试数据读取:
bash复制cat /sys/bus/iio/devices/iio:device0/in_accel_*
16.2 光线传感器校准
校准流程:
- 在完全黑暗环境下:
bash复制echo 0 > /sys/class/sensors/light/lux_calib
- 在标准光源下(500lux):
bash复制echo 500 > /sys/class/sensors/light/lux_calib
16.3 陀螺仪数据处理
获取原始数据:
python复制import android
droid = android.Android()
sensor_data = droid.sensorsGetValues().result
滤波处理建议:
- 使用低通滤波消除高频噪声
- 采用卡尔曼滤波融合多传感器数据
17. 用户界面定制
17.1 状态栏修改
修改SystemUI资源:
code复制frameworks/base/packages/SystemUI/res/layout/status_bar.xml
全志平台特有参数:
xml复制<com.android.systemui.statusbar.phone.PhoneStatusBarView
android:id="@+id/status_bar"
android:background="@drawable/allwinner_status_bar_bg">
</com.android.systemui.statusbar.phone.PhoneStatusBarView>
17.2 启动器定制
替换默认Launcher:
makefile复制PRODUCT_PACKAGES := \
CustomLauncher \
$(filter-out Launcher3, $(PRODUCT_PACKAGES))
建议保留的组件:
- 应用抽屉
- 搜索框
- 快捷设置
17.3 主题引擎开发
创建自定义主题:
xml复制<!-- res/values/styles.xml -->
<style name="AllWinnerTheme" parent="android:Theme.Material">
<item name="android:colorPrimary">#FF5722</item>
<item name="android:navigationBarColor">#212121</item>
</style>
应用主题:
java复制setTheme(R.style.AllWinnerTheme);
18. 测试自动化
18.1 CTS测试准备
全志平台特殊配置:
bash复制make cts -j$JOB_NUM
跳过不适用项:
xml复制<!-- cts/android-cts/test_result.xml -->
<ExcludeTest name="android.hardware.camera2.cts" reason="No camera2 API support"/>
18.2 Monkey测试优化
针对性测试命令:
bash复制adb shell monkey -p com.android.settings -p com.android.launcher3 \
--throttle 100 --ignore-crashes --ignore-timeouts 10000
结果分析:
bash复制adb shell dumpsys window windows | grep -E 'mCurrentFocus'
18.3 自动化脚本示例
Python测试框架:
python复制import uiautomator2 as u2
d = u2.connect()
d.app_start("com.android.settings")
d(text="Display").click()
assert d(text="Brightness level").exists
19. 生产问题处理
19.1 批量烧录失败
常见原因排查表:
| 现象 | 检查点 | 解决方案 |
|---|---|---|
| 设备未识别 | USB线材 | 更换高质量线缆 |
| 烧录卡在5% | 镜像校验 | 重新生成镜像 |
| 设备反复重启 | bootloader | 进入FEL模式修复 |
19.2 产线测试方案
推荐测试流程:
- 基础功能测试(按键、触摸)
- 外设测试(USB、音频)
- 性能测试(安兔兔)
- 老化测试(72小时连续运行)
自动化脚本:
bash复制run_test_suite.sh --mode production
19.3 质量追溯系统
构建日志记录:
java复制public class QualityLogger {
private static final String TAG = "QualityTrace";
public static void logEvent(String event) {
Log.d(TAG, "SN:" + getSerialNumber() + " " + event);
writeToPersistentStorage(event);
}
}
20. 进阶开发资源
20.1 全志开发文档
关键文档路径:
docs/Allwinner_Android_BSP_Development_Guide.pdfkernel/Documentation/arm64/sunxi/README
常用调试接口:
bash复制sunxi_dump # 寄存器查看工具
sunxi_gpio # GPIO调试工具
20.2 性能分析工具
推荐工具链:
systrace:分析系统瓶颈perfetto:综合性能分析simpleperf:CPU性能分析
全志特有命令:
bash复制cat /sys/kernel/debug/sunxi_dump/dram_freq
20.3 社区资源
活跃开发者论坛:
- 全志官方开发者社区
- Linux-sunxi Wiki
- GitHub上的开源项目:
android_device_allwinnerlinux-sunxi内核树
遇到棘手问题时,建议先搜索这些社区的历史讨论,很多全志特有的问题都有现成解决方案。