ALPU的使用

遇到一个需求,使用ALPU的加密芯片,未通过验证系统禁止启动。
ALPU的使用方法参考链接: ALPU使用流程

ALPU 是iic接口,需要自己编写自己的驱动,然后把驱动编译进内核。

开发环境:msm8953、安卓7.1、linux3.18

一、代码

1.1 设备树

iic设备,直接在设备树中添加节点。设备地址0x3d(7bit)。

	ALPU@3d {
		compatible = "qcom,ALPU_FA";
		reg = <0x3d>;
	};

1.2 驱动

代码较为简单。

unsigned char _i2c_write(unsigned char device_addr, unsigned char sub_addr, unsigned char *buff, int Byte)
{
	int err;
	err = i2c_smbus_write_i2c_block_data(g_client, sub_addr, Byte, buff);
	if(err < 0){
		pr_err("i2c write data fault! %d\n", err);
		return err;
	}
	_alpu_delay_ms(2);
	return 0;
}

unsigned char _i2c_read(unsigned char device_addr, unsigned char sub_addr, unsigned char *buff, int Byte)
{
	int err;
	err = i2c_smbus_read_i2c_block_data(g_client, sub_addr, Byte, buff);
	if(err < 0){
		pr_err("i2c read data fault! %d\n", err);
		return err;
	}

	return 0;
}

static int alpu_probe(struct i2c_client *client,const struct i2c_device_id *id)
{
	......
	_alpucv_process(tx_data, dx_data);
	......
}

static struct i2c_driver i2c_test_driver = {  //driver info to be register
	.driver = {
	.name = "ALPU_FA",
	.owner = THIS_MODULE,
	.of_match_table = ALPU_FA_table,
	},
	.probe = alpu_probe,  //i2c_attach_adapter
	.id_table = qcom_id,
};

static int __init i2c_test_init(void)
{
	return i2c_add_driver(&i2c_test_driver);
}
static void __exit i2c_test_exit(void)
{
	i2c_del_driver(&i2c_test_driver);
}
module_init(i2c_test_init);
module_exit(i2c_test_exit);
MODULE_LICENSE("GPL");

在probe中进行验证,验证失败阻止系统启动。

二、编译

我这里的代码不止一个文件,所以把驱动放到一个单独文件夹里,添加kconfig和makefile。

#kconfig
config ALPU_IIC
	bool "ALPU for systeam start"
	depends on I2C
	default y
	---help---
	  The ALPU-FA will be read and written when the kernel starts.
	  If the read/write fails, the system will not start.
#makefile
obj-$(CONFIG_ALPU_IIC)		+= ALPU_i2c_m.o
ALPU_i2c_m-y := ALPU_i2c.o alpucv_enc.o

在文件夹上层目录修改kconfig和makefile:

source "drivers/char/alpu/Kconfig"
obj-$(CONFIG_ALPU_IIC)		+= alpu/

编译静态库

上面的代码编译验证完成后,填写表格发给芯片厂家。等待提供静态库。
然后将库文件编译进驱动,进行验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值