欢迎访问 https://gscsnm.github.io/

0. 序

最近搞可信计算方面,需要使用tpm模拟器,查阅不少资料,也看到了网上各位的教程。现将自己的安装步骤写个备注,方便自己查看。也希望对看官有所帮助。开干。

原创水印:http://blog.csdn.net/gscsnm

1. 环境

vmware 12
Ubuntu 16.10 桌面版 (服务器版也行)

2. 安装cmake

sudo apt-get install cmake

3. 安装GNU MP library

两种方式安装:apt-get 、源码

3.1 apt-get 安装 (推荐)

3.1.1 切换用户到root(原谅我……):

su

3.1.2 搜索libgmp:

apt-cache search libgmp

3.1.3 上图中很多gmp的库,我安装的是libgmp3-dev:

apt-get -y install libgmp3-dev

3.2 源码安装

官网:https://gmplib.org/
下载 gmp-5.0.5.tar.bz2

tar -jxf gmp-5.0.5.tar.bz2
./configure
make
make check
make install

具体可以看INSTALL和README。

4. 安装TPM_emulator

官网应该是: https://developer.berlios.de ,现在已经打不开了。
我GitHub上有源码,tpm_emulator-0.7.4:
https://github.com/gscsnm/tpm-emulator
这个是我从PeterHuewe那儿fork的,用这个就行,这个是修改后的,如果用官方的话,会报错。
原因:tpm_emulator还是2011年那会儿开发的,那会linux内核还是3.xxx,现在linux内核更新后,net.h里面的一些函数也进行了更新,所以报错。
原创水印:http://blog.csdn.net/gscsnm

4.1 下载

https://github.com/gscsnm/tpm-emulator/archive/master.zip

wget https://github.com/gscsnm/tpm-emulator/archive/master.zip

4.2 解压

unzip master.zip

如果没有unzip,请安装。apt-get install unzip

4.3 安装

cd tpm-emulator-master/
mkdir build;cd build
cmake ../
make
sudo make install

----
make install的时候需要root权限复制文件。
参考README文件
** 如果遇到错误,看文章结尾的错误记录。 **

4.4 初始化、启动TPM_emulator

初始化tpm:

tpmd deactivated
killall tpmd
tpmd clear

启动tpm:

depmod -a
modprobe tpmd_dev
tpmd -f -d

tpmd -h:可以查看启动参数
如果启动出错,可以用 tpmd –f –d clear

错误:Failed: address already in use
解决:运行命令rm /var/run/tpm/tpmd_socket:0

如果成功,会不断打印:

Debug: waiting for connections…

tpm_emulator 安装成功。

5. 安装TSS协议栈

这里指的是Trousers。Trousers是一个开源可信计算软件栈,它从下到上依次为TDDL(驱动库)、TCS(核心服务)、TSP(服务提供者),tcsd是编译完毕之后的一个用户态可执行文件,作为守护进程运行。tcsd需在系统启动初始化阶段运行,这样以后所有要操作tpm的程序都必须经过TSS栈,这也是TCG规范所规定的。TDDL负责唯一打开TPM设备,实现打开、关闭、收发指令数据、获取版本信息等,TCS提供核心服务,调用TDDL。TSP是给上层程序的接口,用户可以编写应用程序利用这些接口,实现操作TPM。
原创水印:http://blog.csdn.net/gscsnm

5.1 安装trousers

下载地址:
https://sourceforge.net/projects/trousers/files/

下载3.14版本:
https://sourceforge.net/projects/trousers/files/trousers/0.3.14/trousers-0.3.14.tar.gz/download

5.1.1 解压:

mkdir  trousers
cd trousers
tar -xzvf trousers-0.3.14.tar.gz

5.1.2 安装依赖:

看README:

  Packages needed to build:
  automake > 1.4
  autoconf > 1.4
  pkgconfig
  libtool
  gtk2-devel
  openssl-devel >= 0.9.7
  pthreads library (glibc-devel)

挨个儿安装:  
用apt-get install 安装,可以先用apt-cahce search 搜索定位一下。  
能装多少就装多少吧,不装感觉也没事,没出错。
我安装了:
apt-get install -y automake1.9 autoconf2.64 pkgconf pkg-config libtool gtk2-engines openssl libssl-dev glibc-doc

5.1.3 编译安装前,需要把它的tddl库改成tpm_emulator提供的库,修改几个文件:

5.1.3.1 修改./src/tcsd/Makefile.am

第4行:

tcsd_LDADD=${top_builddir}/src/tcs/libtcs.a ${top_builddir}/src/tcs/libtddl.so -lpthread @CRYPTOLIB@

修改为:

tcsd_LDADD=${top_builddir}/src/tcs/libtcs.a /usr/local/lib/libtddl.so -lpthread @CRYPTOLIB@

5.1.3.2 修改./src/tcsd/Makefile.in:
第55,56行:

tcsd_DEPENDENCIES = ${top_builddir}/src/tcs/libtcs.a \
    ${top_builddir}/src/tddl/libtddl.a

修改为:

tcsd_DEPENDENCIES = ${top_builddir}/src/tcs/libtcs.a \
    /usr/local/lib/libtddl.so

注:上面修改中的/usr/local/lib/路径,需要根据libtddl.so文件位置决定。

另:该版本文件夹中没有bootstrap,因此省略sh bootstrap.sh步骤

5.1.4 编译安装

./configure
make
make install

问题:
1) ./configure后报错:

configure: error: openssl is currently the only supported crypto library for trousers.   
Please install openssl from http://www.openssl.org or the -devel package from your distro

解决:
安装openssl-devel:

sudo apt-get install openssl
sudo apt-get install libssl-dev

2)本来还有的,结果没记录。。(⊙﹏⊙)b 不过大家应该不会遇到。。

5.1.5 启动tcsd

先开一个终端,启动TPM_emulator。参考上文。
再开一个终端,启动tcsd。

#tcsd -e -f

在启动TCSD之前,必须先启动tpm-emulator,否则会提示找不到设备.
如果提示如下,运行tpm的时候加上clear:tpmd -f -d clear

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

5.2 安装tpm-tools

apt-get install tpm-tools

5.3 检测安装是否成功

先开一个终端,启动TPM_emulator。参考上文。
再开一个终端,启动tcsd。参考上文。
再开一个终端,运行下面命令。

在/usr/sbin目录下有3个关于tpm的命令运行如下
cd /usr/sbin
./tpm_version      #查看版本号
./tpm_getpubek   #查看ek公钥
./tpm_takeownership   #获取owner

注:如果都成功表明TPM模拟环境已经完全构建成功了。

6 与TPM_emulator交互

下载read.c 和 read_change.c文件,linux下编译运行。
下载地址:http://download.csdn.net/download/gscsnm/9898726

步骤:
1.一个终端运行TPM_emulator
2.一个终端运行trousers
3.在新开一个终端:

编译 read.c
gcc read.c -o read -ltspi
运行read
./read
如果报错:
./read: error while loading shared libraries: libtspi.so.1: cannot open shared object file: No such file or directory
则需要添加 /usr/local/lib 到 /etc/ld.so.conf file :
echo "/usr/local/lib" >>/etc/ld.so.conf
重新运行ok!
read_change.c 一样~~

7 安装过程中,错误记录(后补)

7.1 安装TPM_emulator

(树莓派3 Linux raspBerrypi 4.9.35-v7+ 安装的使用遇到的问题 )

1)make,到98%出错。
原创水印:http://blog.csdn.net/gscsnm
提示:

make[4]: *** /lib/modules/4.9.35-v7+/build: No such file or directory.  Stop.
不一定是 4.9.35-v7+ ,中间这个是你自己内核的版本号。可以用`uname -r `查看。
原因及解决办法:
查看该目录下是否有build:
    cd /lib/modules/4.9.35-v7+/
如果没有的话,再查看/usr/src下是否有linux-headers-*:
    cd /usr/src
如果没有linux-headers,那么安装linux-headers:
安装这个请不要用国内的各大镜像,
因为可能没有最新的linux-headers。
我后来用树莓派安装tpm,
版本是Linux raspBerrypi 4.9.35-v7+,
如果用国内的apt-get源安装的话,
就没有对应的linux-headers。
用`#deb-src http://archive.raspBerrypi.org/debian/ jessie main ui` 
这个源进行安装linux-headers.
    sudo apt-get install raspBerrypi-kernel-headers

重新 cmake ,make install。
OK!

2) make,到98%出错。
原创水印:http://blog.csdn.net/gscsnm
提示:

Makefile:628: arch/armv7l/Makefile: No such file or directory
make[4]: *** No rule to make target 'arch/armv7l/Makefile'.  Stop.

原因及解决办法:

因为我是用树莓派安装的,可能tpm没有针对 树莓派做特殊
的makefile内容,至少是没有armv7l的,
所以在makemake install 的时候指定一
下架构就行了。如下:

   make ARCH=arm
   make install ARCH=arm

OK!

3) make,到98%出错。
原创水印:http://blog.csdn.net/gscsnm
提示:

/home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c: In functiontpmd_handle_command’:
/home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c:143:9: error: too many arguments to functionsock_recvmsgres = sock_recvmsg(tpmd_sock,&msg,tpm_response.size,0);
         ^
In file included from /home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c:25:0:
./include/linux/net.h:228:5: note: declared here
 int sock_recvmsg(struct socket *sock,struct msghdr *msg,int flags);

原因及解决办法:

提示说 
error: too many arguments to function ‘sock_recvmsg’,
说明源码里sock_recvmsg函数不适配这个linux 内核版本。
也就是说这个linux内核提供的sock_recvmsg函数与
源码里用的不一致~~
 都是树莓派的锅哈哈哈。。
 我下了个原版的tmp_emulator源码,然后make就过了。
 地址: [http://download.csdn.net/download/gscsnm/9898586](csdn下载)~~

【tpm_emulator】Ubuntu 16.10 / 树莓派3 安装TPM_emulator已成功2017-7-14更新的更多相关文章

  1. Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项目(三)

    前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。我们先来看看构建基于Perfect的网站服务的编译方式如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.swift即可。根据上面的方式我们开始在Linux下创建我们的Perfect项目。这里我在Perfect文件夹创建了一个Demo文

  2. 树莓派2 GPIO 和 SwiftyGPIO

    自从苹果去年开源Swift编程语言以来,热心人们已经创建了Ubuntu安装包,移植到ARM设备上如RaspberryPi2,创建了网页开发框架,而现在UmbertoRaimondi发布了SwiftyGPIO,一个Swift库,能够和ARM设备上的GPIO接口进行交互。SwiftyGPIOREADME详细解释了如何使用模块。这次我们在RaspBerryPi2上用Swift语言再实现一次。SwiftGPIO为比较流行的板子提供了封装好的GPIO。setLedColor方法通过一个元组和一个数组[GPIO]把一

  3. 使用 Swift 语言编写 Android 应用入门

    Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。做梦,虽然Swift编译器可以胜任在安卓设备上编译Swift代码并运行。这需要的不仅仅是用Swift标准库编写一个APP,更多的是你需要一些框架来搭建你的应用用户界面,以上这些Swift标准库不能提供。简单来说,构建在安卓设备上使用的Swiftstdlib需要libiconv和libicu。通过命令行执行以下命令:gitclonegit@github.com:SwiftAndroid/libiconv-libi

  4. Project Perfect让Swift在服务器端跑起来-Hi Linux(二)

    开篇写了一个简单的入门,今天想说说怎么让Perfect项目在Linux上运行。Swift开源后,苹果让Swift不仅在OSX/iOS上跑,更让Swift在Linux/Windows上跑。作为服务端的Perfect框架+RemObjectSilver,让Swift成为了一个全栈语言。Perfect由于是服务端的,让Perfect在Linux上跑是必然的事情。从第一篇文章中我们可以了解到Perfect由PerfectLib和PerfectServer组成。

  5. Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项

    前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。我们先来看看构建基于Perfect的网站服务的编译方式如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.Swift即可。根据上面的方式我们开始在Linux下创建我们的Perfect项目。

  6. Swift for OS X编译Linux?

    我对其他平台上Swift的构建过程感到困惑.Swift是否允许我在OSX上构建Linux项目,或者我是否需要在Linux上专门使用Swift来构建我计划在那里使用的任何东西?我查看了documentation,但这个主题并不是很清楚……

  7. Swift 2和Linux / OS X的区别

    我正在尝试将一些基本的应用程序从OSX移植到Linux,但似乎Linux平台上缺少基本的东西.有些文件缺少什么?

  8. 将Trickle移植到android

    >如何告诉编译器链接我之前为android交叉编译的共享库,以便为android生成最终的可执行命令行应用程序.而且这甚至可以在Android上移植涓流?

  9. phonegap运行android – create命令失败,退出代码8 – linux

    我做了一些googleing但没有发现任何相关内容.任何帮助赞赏.请务必使用裸体vm进行尝试没有nodejs安装或依赖问题.基督教解决方法我刚刚面临同样的问题,问题是没有正确设置sdk工具的路径:请尝试以下方法:

  10. 在Android和Raspberry Pi 3 Linux之间建立Wifi-Direct连接

    我在这里遗漏了什么?谢谢.解决方法你在哪里:使用:

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部