在Linux下交叉编译Cryptoauthlib到ARM平台下

本文介绍了如何在Linux环境下交叉编译Cryptoauthlib库到ARM平台,涉及硬件平台、安装交叉编译工具、下载编译Cryptoauthlib、运行与测试以及在应用层调用API的详细步骤。特别强调了使用Buildroot构建工具链和针对PKCS11的支持。
摘要由CSDN通过智能技术生成

Cryptoauthlib是Microchip针对安全芯片发布的C语言的代码库。具有优秀的分层结构,可以很方便地移植到任意平台中。并且提供了针对常用SSL库的适配层,支持OpenSSL, MbedTLS, WolfSSL等。

目前大部分的Linux系统中使用OpenSSL,OpenSSL调用硬件SE是通过PKCS11来实现的。本文将介绍OpenSSL通过PKCS11来调用Cryptoauthlib,实现操作硬件SE的步骤。

基本的依赖关系为:
OpenSSL -> p11-kit -> libpkcs -> Cryptoauthlib

1. 硬件平台

在Arm平台下可以使用I2C或HID接口。对于嵌入式平台通常使用I2C接口直接操作安全芯片。

本文主要介绍I2C接口。

注意:安全芯片在平时处于休眠模式,不会响应I2C的操作,所以每次操作前都需要先唤醒芯片。
唤醒时序是:在SDA上发一个超过60uS的低电平,拉高后再等待1.5ms,通过器件地址比如0xC0直接读4个字节,如果是0x04, 0x11, 0x33, 0x43则说明芯片确实正确唤醒了。接下来才可以发正常需要的命令。
由于原生Linux内核不支持动态调整I2C的时钟频率,所以建议I2C时钟频率固定在100K,这样只需要通过I2C发送0x00就可以满足唤醒时序了。

由于软件的依赖关系比较复杂,强烈推荐使用Buildroot构建工具,其中已经支持了大部分的依赖库,比如openssl, openssl-engine, libp11, p11-kit, gnutls, libffi, libtasn1等。

2. 安装交叉编译工具

有两种方式安装编译工具链。

1. 使用apt自动安装

$ sudo apt-get install gcc-arm-linux-gnueabi

2. 使用buildroot搭建编译工具链

两种方式:

  • 从buildroot源码自行构建工具链
  • 安装Buildroot的SDK

通常如果需要自行定义目标板的运行库和相关工具时,需要按照需求配置目标板的运行环境。建议自行搭建builroot工具链。具体参考buildroot相关文档。

或者直接复制SDK安装文件到需要的目录下,运行解压命令即可。
解压后进入目录,运行一个shell脚本重定向编译环境。

命令如下

$ tar xzvf arm-buildroot-linux-gnueabi_sdk-buildroot.tar.gz
$ cd arm-buildroot-linux-gnueabi_sdk-buildroot
$ ./relocate-sdk.sh

3. 下载编译支持pkcs11的Cryptoauthlib库

我们需要支持pkcs11的版本, 在v3.3.0和之后的版本中,已经集成了pkcs11的功能,所以不需要专门下载这个pkcs11分支。

1. 获取cryptoauthlib最新版本

$ git clone https://github.com/MicrochipTech/cryptoauthlib

由于国内网络访问github比较慢,可以用下面的备用库

$ git clone https://gitee.com/flyerink/cryptoauthlib

2. 在源码目录下建立cmake交叉编译工具链文件arm_toolchain.cmake,具体路径需要根据自己的编译环境修改。

  1. 使用gcc-arm-linux-gnueabi工具链时
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools /usr)

SET(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabi-g++)
SET(CMAKE_LINKER ${tools}/bin/arm-linux-gnueabi-ld)
SET(CMAKE_NM ${tools}/bin/arm-linux-gnueabi-nm)
SET(CMAKE_OBJCOPY ${tools}/bin/arm-linux-gnueabi-objcopy)
SET(CMAKE_OBJDUMP ${tools}/bin/arm-linux-gnueabi-objdump)
SET(CMAKE_RANLIB ${tools}/bin/arm-linux-gnueabi-ranlib)
  1. 使用buildroot工具链时
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值