diff --git "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-HCT.md" "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-HCT.md" index 50beb4516cf7c10581a7a6a4157afffdc0420cf9..696568b067ccd6dfb8734379fa61cb3a1e8357db 100644 --- "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-HCT.md" +++ "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/1-HCT.md" @@ -8,39 +8,70 @@ A: HCT驱动基于内核vfio-mdev模块开发,其设计,一是为了考虑HC A: CCP可绑定到HCT驱动或者vfio-pci驱动上使用HCT密码库,但需要注意的是vfio-pci驱动不支持多进程,因此用户需要根据使用场景选择:1)如果主机上多进程会同时使用HCT密码库,必须使用HCT驱动。2)如果主机上明确只有单进程-多线程应用,可以将CCP直接绑定到vfio-pci驱动进行使用,从而省去安装HCT驱动的步骤。注意:如果主机内核为4.10以下,无mdev模块,需绑定vfio-pci驱动使用。 -#### Q: 如何获取HCT驱动? - -A: 安装《HCT用户手册》中推荐的内核,将自带的HCT驱动在当前使用的内核基础上自行编译安装,可使用HCT版本发布包中所带的Makefile脚本进行安装。使用方法: sudo make && make install。 - #### Q: 如何使用vfio-pci驱动? -A: HCT1.0.1及之前的版本,hctconfig工具只支持绑定ccp到HCT驱动。可使用`hct_ccp_bind.py`脚本手动绑定的方式使用vfio-pci驱动,该脚本位于hctconfig同级目录。绑定方法如下:`sudo modprobe vfio-pci // 加载vfio-pci驱动 sudo ./hct_ccp_bind.py -s // 查看ccp的pci sudo ./hct_ccp_bind.py -b vfio-pci 0000:31:00.0 // 请将最后一个参数替换为本机ccp对应的pci` +A: 执行如下命令,其中,`-m`指定驱动类型,默认为hct +``` +hctconfig start -m vfio-pci +``` #### Q: 如何使用PSP-CCP? A: 使用PSP-CCP,需要BIOS中进行设置,将PSP-CCP配置给x86使用,配置方法如下: 开机进入BIOS, `HYGON CBS -> Moksha common option -> Available PSP CCP VQ count` 把该选项设置为`4`。若BIOS中无此选项,请联系供应商进行BIOS升级。 +若CPU为海光4G,并且满足BIOS PI版本`4.2.0.7`,固件版本`2155`或更新,即使BIOS中无VQ配置选项,我们可以通过hag工具配置,使用方法详见[PSPCCP配置VQ指导文档](../6-PSPCCP%E9%85%8D%E7%BD%AEVQ%E6%8C%87%E5%AF%BC%E6%96%87%E6%A1%A3.md) + +#### Q: PSPCCP配置VQ,所设置的4是什么含义? + +每个CCP总共有5个队列通道,用于主控向CCP发送加解密操作的command。默认状态下,对于PSPCCP,5个队列通道均只有PSP安全处理器可以使用。配置4,表示将其中4个队列通道授权给C86使用,预留1个给PSP处理器使用。 + +理论上用户可以配置1~4,但实际上,我们不建议用户尝试别的参数,其它参数可能影响C86下使用CCP的性能。 + #### Q: 为何3000系列机器中,只能使用一个CCP? -A: 默认情况下,hctconfig会尽可能多的绑定CCP,但总是会预留一个PSP-CCP给内核驱动,这是因为考虑到TKM等其他安全产品需要。而3000系机器上只有两个CCP(NTB-CCP,PSP-CCP),除去预留的,故而默认只绑定了一个CCP使用。同样道理,5000系,7000系设备上,默认绑定的CCP总是少1个。若您明确表示没有其他业务的需求,只使用HCT,可以将所有CCP都绑定到HCT驱动/vfio-pci驱动中使用。HCT1.1.0版本开始,hctconfig将提供参数支持绑定所有CCP,之前的版本请联系厂商协助绑定。 +A: 默认情况下,hctconfig会尽可能多的绑定CCP,但总是会预留一个PSP-CCP给内核驱动,这是因为考虑到TKM等其他安全产品需要。而3000系机器上只有两个CCP(NTB-CCP,PSP-CCP),除去预留的,故而默认只绑定了一个CCP使用。同样道理,5000系,7000系设备上,默认绑定的CCP总是少1个。若您明确表示没有其他业务的需求,只使用HCT,可以将所有CCP都绑定到HCT驱动/vfio-pci驱动中使用。可使用参数`-n all`强制绑定所有CCP,完整命令如下 +``` +hctconfig start -n all +``` -#### Q: hct_test 执行提示 Undefined Symbol EVP_sm4_xxx? +#### Q: hct_test 执行提示 Undefined Symbol EVP_sm4_xxx A: 该问题是由于系统自带的openssl不支持国密导致。部分OS厂商发布的系统中,尽管通过命令`openssl version`所查出的版本是符合的,但其自带的openssl并没有将国密接口编译进去。可通过如下命令查看库中是否有国密符号。`objdump -t ${OPENSSL_INSTALL_PATH}/libcrypto.so |grep sm4 `若符号缺失,请重新下载openssl编译安装。 -#### Q: [Errno 19] No Such device? +#### Q: 绑定驱动错误:cannot open /sys/bus/pci/drivers/hct/bind + +A: 该问题一般是由于设备iommu未打开导致,可通过内核日志:`dmesg | grep hct` 查看是否有`iommu disable`相关信息,若确认,请开启iommu后重试。iommu需确保BIOS以及内核启动项均开启: +- BIOS设置路径:HYGON CBS → NBIO Common Options → NB Configuration → IOMMU +- 内核启动项:GRUB_CMDLINE_LINUX 添加 `amd_iommu=on`设置完成后,请更新grub并重启机器。 + +#### Q: 证书检查失败 Validation Failed -A: 该问题一般是由于设备iommu未打开导致,可通过内核日志:`dmesg | grep hct` 查看是否有`iommu disable`相关信息,若确认,请开启iommu后重试。iommu需确保BIOS以及内核启动项均开启:(1)BIOS设置路径:HYGON CBS → NBIO Common Options → NB Configuration → IOMMU(2)内核启动项:GRUB_CMDLINE_LINUX 添加 `amd_iommu=on iommu=pt`设置完成后,请更新grub并重启机器。 +A: 该信息随后会跟随 `Please download and install the Hygon General Security Certificate.`提示该错误信息是由于主机未安装通用安全证书所致,请参考 [导入通用安全证书](../../1-%E5%AE%89%E5%85%A8%E5%8A%9F%E8%83%BD%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/2-%E5%AF%BC%E5%85%A5%E9%80%9A%E7%94%A8%E5%AE%89%E5%85%A8%E8%AF%81%E4%B9%A6.md) 进行安装 -#### Q: 检查失败“Validation Failed”? +若完成上述步骤,通过hag工具查询的证书安装成功,但是错误依然存在,则表明当前的测试环境,缺少海光ccp内核patch(日志会提示/dev/sev找不到),此时我们可以进一步通过升级固件解决,升级方式可参考文档[安全固件动态升级](../../5-%E6%B5%B7%E5%85%89%E5%AE%89%E5%85%A8%E5%B7%A5%E5%85%B7%E6%89%8B%E5%86%8C/1-%E5%AE%89%E5%85%A8%E5%9B%BA%E4%BB%B6%E5%8A%A8%E6%80%81%E5%8D%87%E7%BA%A7.md) -A: 该信息随后会跟随 `Please download and install the Hygon General Security Certificate.`提示该错误信息是由于主机未安装通用安全证书所致,请参考 https://openanolis.cn/sig/Hygon-Arch/doc/865622274698254162 进行安装Tips: 使用安全产品均需要安装通用安全证书。 +Tips: 使用安全产品均需要安装通用安全证书。 -#### Q: insmod hct或者vfio-pci内核模块失败? +#### Q: insmod hct或者vfio-pci内核模块失败 A: 在已编译完成HCT或已存在了vfio-pci驱动的情况下,insmod失败或者绑定CCP设备失败最常见的情况是BIOS或者grub未打开IOMMU,可以按照下述方法使能IOMMU:dmesg | grep IOMMU检查IOMMU是否开启cat /proc/cmdline检查是否在grub启动参数添加了iommu=off在BIOS界面检查IOMMU是否为enable状态,设置路径如下:HYGON CBS→NBIO Common Options →NB Configuration→IOMMU -#### Q: HCT驱动编译失败? +#### Q: IOMMU开启后,绑定驱动失败 + +用户已确认开启IOMMU,但执行`hctconfig start` 依然失败,并提示`Error: bind failed for 0000:ef:00.1 - Cannot bind to driver hct` + +A: 请执行`dmesg|grep hct`查看内核日志,若出现类似如下日志,该问题很可能是由于BIOS中关闭了PCIe ACS选项导致的。 +``` +hct: iommu attach device return +hct: probe of 0000:ef:00.1 failed with error -22 +``` +ACS选项的关闭,将导致系统启动后,不同的pci设备被添加到同一个group,如下所示(通过`dmesg|grep iommu`查看),进一步导致hct驱动无法绑定。 +``` +pci 0000:f7:00.0: Adding to group 66 +pci 0000:f7:00.1: Adding to group 66 +``` +解决办法:BIOS中将ACS选项enable。(ACS选项往往和IOMMU选项在同一级路径下,即NBIO Common Options中) +#### Q: HCT驱动编译失败 使用HCT发布包中的Makefile安装HCT驱动失败,可排查以下几点: - 确保内核版本4.10以上;