首先是在ubuntu16.04,低时延内核上构建的,下载编译tpm-emulator源码时出现错误。经过查找资料,发现tpm-emulator版本与操作系统内核版本不兼容,报错。通过删除其他内核,将内核换成了ubuntu16.04的默认内核,再次尝试编译tpm-emulator,结果依然报错。后来发现是tpm-emulator的版本问题,通过在github上下载tpm-emluator的master的zip格式压缩包,能够正常编译安装通过。下面仅记录能够成功安装的过程。
安装依赖包
apt install g++ m4 openssl* openssl
apt install libssl-dev tpm-tools trousers
#注意上面自动安装的trouser版本过低,如果进pcr的扩展实验,需要先先卸载trousers,安装最新14或15版本的trousers
apt install git cmake
安装gmp
官网下载gmp地址
tar xvJf gmp-6.2.1.tar.lz
cd gmp-6.2.1/
./configure
make
make check
make install
下载安装tpm-emulator
下载链接, 注意点击zip下载tpm-emulator-master.zip,然后解压。
cd tpm-emulator-master/
mkdir build
cd build
#下面这个命令有错误,cmake后面是两个点,不是三个
cmake …/
make install
初始化tpm-emulator
tpmd deactivated
killall tpmd
tpmd clear
#启动tpm-emulator
modprobe tpmd_dev
tpmd -f -d clear
#若成功,则显示:
tpm_startup.c:43: Info: TPM_Startup(1)
tpmd.c:416: Debug: waiting for connections…
#若出现Module tpmd_dev not found,则先运行命令:
depmod -a
#若出现failed: address already in use,则运行以下命令:
rm /var/run/tpm/tpmd_socket:0
启动与检验#
#启动顺序:tpm-emulator -> tcsd
#2个终端,一个终端启动tpm-emulator:
tpmd -f -d
#另一个终端启动tcsd:
tcsd -e -f
#成功:tpm-emulator终端循环显示
tpmd.c:456: Debug: waiting for commands…
#tcsd终端显示
TCSD TDDL ioctl: (25) Inappropriate ioctl for device
TCSD TDDL Falling back to Read/Write device support.
TCSD trousers 0.3.14: TCSD up and running.
#失败:
#tcsd终端显示
TCSD TDDL ioctl: (25) Inappropriate ioctl for device
TCSD TDDL Falling back to Read/Write device support.
TCSD TCS ERROR: TCS GetCapability failed with result = 0x1c
#在tpm-emulator终端输入
tpmd -f -d clear
- 检验#
在tpm与tcsd启动前提下输入:
cd /usr/sbin
./tpm_version #查看版本号
./tpm_getpubek #查看ek公钥
./tpm_takeownership #获取owner
如果成功显示相关信息,证明TPM模拟环境搭建成功。