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= ; //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!
← 返回文章列表