展讯文档

SC9832A 7.0客户化配置V1.0


SC9832A 7.0客户化配置

2017-05-20

目录

软件架构简介

pinmap的配置

selinux的配置

客户化驱动配置

软件架构简介

平台简介

目录架构

SC9832A平台简介

CPU

–1.3 GHz Cortex A7

–512 KB L2 Cache

–Neon coprocessors

GPU

–ARM Mali-400 dual

–50Mtri/s; 921Mpix/s

TD-LTE

–3GPP Rel. 9 LTE

–DL 150Mbps/ UL 50Mbps

EDGE

–Class 12 EGPRS, type B

Camera

–13M raw senor

–Double 2-lane RX PHY

Multimedia

–H.264/H.263/MPEG4 1080P 30fps

–High Performance Audio Codec

DISPC

–Up to HD LCD

–MCU I/F/MIPI

WCN

–Integrated WIFI 802.11 b/g/n

–Integrated BT 4.0, FM

–Integrated GPS

Interface

–HS USB 2.0 OTG

–UART/SPI /I2C

–3 x SDIO 3.0 interfaces

目录结构

SC9832的配置文件是放在device/sprd/scx35l目录下的,包含平台公用的目录和

参考工程的目录,下面简要的列出常用到的一些文件和目录的作用,如下图:

目录结构

SC9832的Android HAL代码和库是放在vendor/sprd目录下的,下面简要的列出

常用到的一些文件和目录的作用,如下图:

pinmap的配置

什么是pinmap

pinmap的配置规则

pinmap的电压域配置

pinmap的配置实例

什么是pinmap

pinmap是系统在启动之后,uboot对芯片pin脚进行初始化的配置信息表,

和休眠后对pin脚状态的配置。pinmap可配置的选项有:

注:

.WPU-IO的上拉电阻,一般在20K,会随着电压的降低增大。
.WPD-IO的下拉电阻,一般在50K,会随着电压的降低增大。
.WPU和WPD用于普通IO的有上下拉需求的配置。
.WPUS-IO的强上拉电阻,1.8K/4.7K,会随着电压降低增大,用于SIM_IO,I2C,RF_SDA,SDIO,EMMC等协议需要的地方。
.SIM卡,SD卡和IIC3的PIN脚有16级驱动能力

 




Function 功能选择(Function0~3)

上下拉设置(WPD,WPU,NULL)

驱动能力设置(DS0~3)

sleep时的上下拉设置(WPD,WPU,NUL)

sleep时的输入输出设置(IE,OE,Z)

强上拉的设置(WPUS,NULL)

AP或CP的sleep控制—AP+CP架构(AP,CP0~CP2)

其他(PIN_ctrl0~3)

pinmap的配置规则

以u-boot64/board/spreadtrum/sp9832a_2h11_volte/pinmap-sp9630.c

为例,以下是pinmap配置规则:

需要配置的pin脚

AP或CP的sleep配置

强上拉设置

驱动能力设置

功能选择

弱上下拉设置

sleep时的上下拉设置

Sleep时的IO输入输出设置

pinmap的电压域配置

GPIO的输出电压由电压域为GPIO提供,在配置电压域时,请按照以下步骤进行配置:

1.查看该gpio属于哪个电压域控制,如下图中,VIO1为SCL2脚的电压域。

2.获得电压域后,查看电压域所供电压为多少,如下图中,供电为1.8V。

3.在sc9832a的datasheet中,在PIN_CTRL_REG4寄存器中,找出VIO1由BIT1控制。

4.对pinmap中{REG_PIN_CTRL4,0x0},进行配置,{REG_PIN_CTRL4,0x0|(1<<1)}。

pinmap的配置实例

.引脚的BITS_PIN_AF(x)需要通过查找datasheet中pin multiplexed functions来确定,通
常情况下BITS_PIN_AF(3)为GPIO。
.如果引脚作为RFCTL用,Function必须选择正确,有的引脚可能会是多个CP共用,应该特别
小心,sleep时应该由cp来控制,多个cp采用,cpx|cpx的格式配置,不确定的也可采用ALL。
.RFCTL引脚默认是输出0,RFCTL使用时是输出,无论使用与否,都设为NUL+OE。
.REG_PIN_RFCTL28/29 配置为AF(1)才是RFCTL功能
.Sleep控制部分SC9832的架构是AP,CP0,CP1,VCP0,VCP1. 常用的就是AP,VCP1和ALL. 这部
分除了CP的function功能和AP的GPIO功能的转换外,不建议客户进行修改

 

以RFCTL10为例:

Function选FUNC0,sleep时由CP1来控制,RFCTL10使用时设为:PIN_NULL和PIN_NUL,
Sleep时设为:SLP_NUL,且sleep i/o方向设为:SLP_OE

selinux的配置

什么是selinux

selinux的配置规则

selinux的配置实例

什么是selinux

SEAndroid简介

.SEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基
础于核心的系统安全机制。而SELinux则是由美国NSA(国安局)和
一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统。

 

 

SEAndroid安全机制保护的对象

.分布在各个子系统中
.如:文件、进程、socket和ipc等
.android特有的资源
.如:系统属性、binder等

 

 

selinux的配置规则

Selinux权限配置路径

.在device/sprd/scx35l/common/sepolicy目录中

 

 

两条策略应合并

.如:allow installd tmpfs:dir write; 和allow installd tmpfs:dir create;
.合并后为:allow installd tmpfs:dir { create write };

 

 

没有*.te文件需要新增

.在device/sprd/scx35l/common/sepolicy路径下没有对应的.te文件,则需要在新增加*.te

 

 

属于已有的类

.在sepolicy/file_contexts文件中直接增加设备:/dev/ltr_558als u:object_r:sensors_device:s0
.ltr_558als为你的设备名,sensors_device为你设备的安全上下文的类型。

 

 

新增类

.在sepolicy/file_contexts文件中增加设备:/dev/abc u:object_r:abc_device:s0
.在sepolicy/*.te文件中增加设备:allow xxx abc_device:chr_file operate;
.xxx为你设备运行的进程,如surfaceflinger、mediaserver。operate为赋予的权限。

 

 

客户化驱动配置

GPIO配置

Keypad配置

I2C配置

LCD配置

camera配置

sensor配置

TP配置

GPIO配置

1.查看原理图,确定要配置的管脚。

2.在u-boot64/board/spreadtrum/sp9832a_2h11_volte/pinmap-sp9630.c中配置对应管脚的所有功能。

3.在kernel/arch/arm/boot/dts/sprd-scx35l_sp9832a_2h11_volte.dts中配置使用模块解析dts时,所
对应的GPIO。

GPIO配置

4.在所属模块驱动中对GPIO配置。

申请GPIO资源

配置GPIO方向

设置GPIO输出值

keypad配置

在kernel/arch/arm/boot/dts/sprd-scx35l_sp9832a_2h11_volte.dts文件中配置Keypad

解析代码在sc_keypad.c中函数sci_keypad_parse_dt(…)

Keycodes参考linux/input.h

使用的GPIO

I2C配置

在kernel/arch/arm/boot/dts/sprd-scx35l_sp9832a_2h11_volte.dts文件中,配置模块
所属I2C模块,若要配置I2C4,可按照以下配置,例如:

添加i2c4到aliases中

模块驱动所要解
析到的信息

设备I2C地址

设备名和设备I2C地址

所属I2C总线和地址

厂商和设备名,需与驱动中
compatible保持一致

LCD配置

Uboot配置

增加驱动文件

增加编译规则

配置LCD编译选项LCD尺寸

关联到内核

在u-boot64/drivers/video/sprdfb/lcd/Makefile文件中增加

obj-$(CONFIG_FB_LCD_HX8394A_MIPI) += lcd_hx8394a_mipi.o

u-boot64/drivers/video/sprdfb/lcd/lcd_hx8394a_mipi.c

u-boot64/include/configs/sp9832a_2h11_volte.h

在u-boot64/drivers/video/sprdfb/sprdfb_panel.c文件中

extern structpanel_speclcd_hx8394a_mipi_spec;

添加LCD尺寸

添加LCD宏开关

LCD配置

kernel配置

增加menuconfig配置项

增加驱动文件

增加编译规则

配置kernel需要编译的LCD

kernel/drivers/video/sprdfb/lcd/lcd_hx8394a_mipi.c

kernel/drivers/video/sprdfb/Kconfig

kernel/drivers/video/sprdfb/lcd/Makefile文件中增加

obj-$(CONFIG_FB_LCD_HX8394A_MIPI) += lcd_hx8394a_mipi.o

kernel/arch/arm/configs/sp9832a_2h11_volte_defconfig

文件中增加CONFIG_FB_LCD_HX8394A_MIPI=y

camera配置

camera配置

增加驱动文件

修改配置文件

增加编译规则

配置宏开关

vendor/sprd/modules/libcamera/oem2v0/src/sensor_cfg.c中

constSENSOR_MATCH_T main_sensor_infor_tab[]或
sub_sensor_infor_tab[]中增加结构体变量
{“ov8858_mipi_raw”, &g_ov8858_mipi_raw_info},

并且声明:extern SENSOR_INFO_T g_ov8858_mipi_raw_info;

将驱动代码文件放入以下目录中:
vendor/sprd/modules/libcamera/sensor/ov8858

vendor/sprd/modules/libcamera/sensor/Android.mk文件中增加

Device/sprd/scx35l/sp9832a_2h11/BoardConfig.mk文件中配置

TARGET_BOARD_BACK_CAMERA_INTERFACE := mipi

TARGET_BOARD_FRONT_CAMERA_INTERFACE := mipi

sensor配置

手机中含有大量的sensor,如光感、近距离感应、Gsensor、指南针、地磁、

陀螺仪、温度计、气压计、心率计等等。这些sensor的软件架构大多相同,

掌握其中一两种,便可作类同开发。我们以下面的步骤来讲述sensor的软件

架构与开发流程。

LPsensor配置

Gsensor配置

注意事项

LPsensorkernel配置

LPsensorkernel配置

增加menuconfig配置项

增加驱动文件

增加编译规则

配置要编译的LPsensor

修改.compatible匹配

增加I2C注册信息

配置gpio的初始功能

驱动中增加dts解析

kernel/drivers/input/misc/ltr_558als.c

kernel/include/linux/i2c/ltr_558als.h

kernel/drivers/input/misc/Kconfig

kernel/arch/arm/configs/sp9832a_2h11_volte_defconfig

增加CONFIG_INPUT_LTR558_I2C=y

kernel/drivers/input/misc/ltr_558als.c

kernel/arch/arm/boot/dts/sprd-scx35l_sp9832a_2h11_volte.dts

kernel/drivers/input/misc/Makefile

增加obj-$(CONFIG_INPUT_LTR558_I2C) += ltr_558als.o

u-boot64/board/spreadtrum/sp9832a_2h11_volte/pinmap-sp9630.c

厂商和设备名,需与dts
中compatible保持一致

LPsensorkernel配置

在kernel/drivers/input/misc/ltr_558als.c驱动文件,ltr558_probe函数中增加下图解析内容,要确保和dts文件
中配置一致。

LPsensorHAL层配置

LPsensorHAL层配置

增加HAL层文件

增加HAL层编译规则

配置使用的组件

配置HAL层代码

vendor/sprd/modules/sensors/Android.mk

vendor/sprd/modules/sensors/pls/liteon/Pls_LTR558ALS.cpp

device/sprd/scx35l/sp9832a_2h11/BoardConfig.mk

vendor/sprd/modules/sensors/pls/PlsSensor.h

Gsensorkernel配置

Gsensorkernel配置

增加menuconfig配置项

增加驱动文件

增加编译规则

配置要编译的Gsensor

修改.compatible匹配

增加I2C注册信息

配置gpio的初始功能

驱动中增加dts解析

kernel/drivers/input/misc/lis3dh_interrupt.c

kernel/include/linux/i2c/lis3dh.h

kernel/drivers/input/misc/Kconfig

kernel/arch/arm/configs/sp9832a_2h11_volte_defconfig

增加CONFIG_INPUT_LIS3DH_I2C_INTERRUPT=y

kernel/drivers/input/misc/lis3dh_interrupt.c

kernel/arch/arm/boot/dts/sprd-scx35l_sp9832a_2h11_volte.dts

kernel/drivers/input/misc/Makefile增加

obj-$(CONFIG_INPUT_LIS3DH_I2C_INTERRUPT)+= lis3dh_interrupt.o

u-boot64/board/spreadtrum/sp9832a_2h11_volte/pinmap-sp9630.c

厂商和设备名,需与dts
中compatible保持一致

Gsensorkernel配置

在kernel/drivers/input/misc/lis3dh_interrupt.c驱动文件,lis3dh_acc_probe函数中增加下图解析内容,要确保
和dts文件中配置一致。

GsensorHAL层配置

GsensorHAL层配置

增加HAL层文件

增加HAL层编译规则

配置使用的组件

配置HAL层代码

vendor/sprd/modules/sensors/Android.mk

vendor/sprd/modules/sensors/acc/st/Acc_Lis3dh.cpp

device/sprd/scx35l/sp9832a_2h11/BoardConfig.mk

vendor/sprd/modules/sensors/acc/st/Acc_Lis3dh.cpp

sensor注意事项

sensor注意事项

HAL层增加规则

确认驱动是否正确

使能Gsensor

利用getevent命令,确保是否有设备注册成功。

在HAL层代码中,sensors.cpp可以说是作为sensor hal层代码的core层,
因此,如果要新添加一个sensor例如:mma_8x5x,则HAL层代码需要修改
Acc_Lis3dh.cpp和头文件AccSensor.h,从而具体实现sensors.cpp中的抽
象方法。

设备注册成功后,用命令查看是否有数据输出,且数据正确。

TP配置

TP配置

增加menuconfig配置项

增加驱动文件

增加编译规则

配置要编译的TP

修改.compatible匹配

增加I2C注册信息

配置gpio的初始功能

驱动中增加dts解析

kernel/drivers/input/touchscreen/focaltech

kernel/include/linux/i2c/focaltech.h

kernel/drivers/input/touchscreen/Kconfig

kernel/arch/arm/configs/sp9832a_2h11_volte_defconfig

增加CONFIG_TOUCHSCREEN_FOCALTECH=y

kernel/drivers/input/touchscreen/focaltech/focaltech.c

kernel/arch/arm/boot/dts/sprd-scx35l_sp9832a_2h11_volte.dts

kernel/drivers/input/touchscreen/Makefile增加

obj-$(CONFIG_TOUCHSCREEN_FOCALTECH) += focaltech/

u-boot64/board/spreadtrum/sp9832a_2h11_volte/pinmap-sp9630.c

厂商和设备名,需与dts
中compatible保持一致

TP配置

在kernel/drivers/input/touchscreen/focaltech/focaltech..c驱动文件,ft5x0x_ts_probe函数中增加下图解析内
容,要确保和dts文件中配置一致。

TP配置

TP相关配置

虚拟按键键值计算方法

IDC文件配置

静态库配置

device/sprd/scx35l/common/rootdir/system/usr/idc/focaltech_ts.idc

device/sprd/scx35l/sp9832a_2h11/sp9832a_2h11_volte.mk中增加

存放在手机的system/usr/idc目录,声明focaltech_ts是一个触摸屏设备,
idc文件的名字和触摸屏设备名应保持一致。不然会显示为小圈。

virtualkeys= <100 1020 80 65 //menu:中心坐标X、Y、区域宽、高

280 1020 80 65 //home:中心坐标X、Y、区域宽、高

470 1020 80 65>; //back:中心坐标X、Y、区域宽、高

假设驱动从触控IC读出来的三个虚拟键键值

virtualkeys= <menu_Xmenu_YdXdY//menu中心坐标X,Y区域宽、高

home_Xhome_YdXdY//home中心坐标X,Y区域宽、高

back_Xback_YdXdY>; //back中心坐标X,Y区域宽、高

LCD分辨率为:LCD_MAX_X、LCD_MAX_Y。

虚拟按键键值计算:

中心坐标:X=menu_X*LCD_MAX_X/TP_MAX_X;Y=menu_Y*LCD_MAX_Y/TP_MAX_Y;

区域:ΔX= dX*LCD_MAX_X/TP_MAX_X;ΔY= dY*LCD_MAX_Y/TP_MAX_Y;

例:TP_MAX_X=<720>;TP_MAX_Y=<1280>;LCD_MAX_X=540;LCD_MAX_Y=960;

虚拟按键实际键值为menu:133 1360 80 60,

那么DTS文件中虚拟按键的键值为menu:100 1020 60 45

focaltech提供的手势识别算法是一个静态库文件xxxx.a,静态库文件加载
方式:在kernel/drivers/input/touchscreen/focaltech/Makefile文件中
添加:

$(obj)/ft_gesture_lib.o:$(srctree)/$(obj)/ft_gesture_lib

cp$(srctree)/$(obj)/ft_gesture_lib$(obj)/ft_gesture_lib.o

带手势的TP驱动加载方式不能使用KO加载,需要把TP驱动直接编译进内核,
否则不能识别静态库。

THANK YOU!