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