备注:
1,假设您已对方寸微电子的T690系列芯片的使用方式都有了一定的了解,然后需要构建基于GMSSL的文件系统,此文才对您有意义;
2,若您对方寸微电子的T690芯片不了解,但想进一步了解它,那您可以在gitee上获取相关资料,gitee的网址为:https://gitee.com/tihchip
1. 编译GMSSL
编译gmssl.bb时,不能直接直接执行命令bitbake gmssl,虽然执行该命令时能编译成功(没有任何的错误),当时将编译生成的文件复制到文件系统(rootfs)后,执行 可执行程序(testapp) 时,会提示OPENSSL_1_1_1及OPENSSL_1_1_0找不到,如下:
造成该问题的主要原因:猜测是GMSSL与OpenSSL版本差异,很多软件依赖OpenSSL,但是我采用了GMSSL直接替代OpenSSL的方式,导致依赖关系出现了混乱。
解决办法:
- 将gmssl.bb中的全部内容复制到openssl.bb中去,然后编译openssl(bitbake openssl),这样外壳是OpenSSL,但实际编译的内容为GMSSL(实现了挂羊头卖狗肉的效果);
- 将编译成功的文件复制到文件系统中;
- 再次执行 ldd /usr/bin/testapp 时,就可以正确的显示依赖关系了;
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake openssl -c cleanall --> 清空编译环境
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake openssl --> 重新编译openssl
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/openssl/1.1.1q-r0/image/* /share/samba/public/shared/jack/rootfs/ --> 将编译生成的文件复制到文件系统中
2. 编译CCAT
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat -c cleanall --> 清空编译环境
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat --> 重新编译ccat
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/t690mp_evb2_va-tih-linux/ccat/1.0-r0/image/* /share/samba/public/shared/jack/rootfs/ --> 将编译生成的文件复制到文件系统中
3. 编译Engine
采用GMSSL替代了OpenSSL的形式,那么ccat-engine.bb也必须做如下相应的修改才行:
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat-engine -c cleanall --> 清空编译环境
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat-engine --> 重新编译engine
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/image/* /share/samba/public/shared/jack/rootfs/ --> 将生成的文件复制到文件系统中
4. 编译文件系统(rootfs)
为什么需要重编文件系统?啥时候需要重编文件系统?
1)当采用网络挂载(NFS)的时候,不需要重编文件系统,只需将新编译的openssl、ccat、engine等文件复制到文件系统中即可(毕竟文件系统是在服务器上呢,没在开发板上,只需使用linux命令cp完成复制即可);
2)当文件系统是烧写到了SD卡或者eMMC中时,则需要重编文件系统,然后将新生成的文件系统重新烧写到SD卡或者eMMC。
为什么此种情况需要重编文件系统?
那是因为我们若想将新编译的gmssl的文件复制到文件系统中,那必须使用linux的scp命令,而该命令在使用的过程中会调用算法相关的,这导致了openssl的部分内容无法被替换。
编译文件系统前需要做的工作:
在gitee上拉取最新的gmssl_2.5.4.bb,然后将该文件内容完全复制到openssl_1.1.1q.bb中。
编译命令:
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake tih-full-cli-image -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake tih-full-cli-image
5. 测试
- 将文件系统烧写到eMMC或者SD卡中,并启动linux;
- 启动完成之后,打开文件 c1xxx_dev0.conf (命令:
vi /etc/c1xxx_dev0.conf
),做如下修改:
新发布的CCAT,默认已经是中断模式,即Cy0CorePolled的默认值已经是2,此种情况下,就不需要再执行该步骤了
4. 执行命令:/etc/init.d/qat_service start
6. 性能测试的命令:
硬算法:openssl speed -evp sms4-cbc -async_jobs 1 -elapsed -engine ccatengine
软算法:openssl speed -evp sms4-cbc -async_jobs 1 -elapsed
7. ccat-engine中的测试demo的运行方式
以 sm4_ecb 为例:
硬算法:testapp -engine ccatengine -v sm4_ecb
软算法:testapp -v sm4_ecb