我的系统是fc8,内核升级2.6.30(它集成了tpm驱动),安装的软件是trousers,tpm-tools.
装好以后,
# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
#tcsd
#tpm_version
可以查看tpm版本号。
也可以通过安装tpmmanger来查看24个PCR值.
为了测试一下接口,写了以下程序test.c来验证:
TPM 测试程序:
#include <stdio.h>
#include <fcntl.h>
#include "../include/trousers/tss.h"
#define TPMMAX 4096
int TPM_Transmit(unsigned char * blob){
unsigned int tpmfp, len;
int i, size;
tpmfp = open("/dev/tpm0", O_RDWR);
if(tpmfp < 0){
printf("could not open /dev/tpm0/n");
exit(-1);
};
size = ntohl (*(int *)&blob[2]);
len = write(tpmfp, blob, size);
len = read(tpmfp, blob,TPMMAX);
for(i = 0; i< len; i++) {
printf("%02x ", blob[i]);
}
printf("/n");
close(tpmfp);
return len;
}
int TPM_Reset() {
unsigned char blob[TPMMAX] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 10, 0, /* length */
0, 0, 90 /* TPM_ORD_Reset */
};
return (TPM_Transmit(blob));
}
int TPM_PcrRead(int pcrindex){
unsigned char blob[TPMMAX] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 14, /* length */
0, 0, 0, 21, /* TPM_ORD_PcrRead */
0, 0, 0, pcrindex /* PCR index */
};
return (TPM_Transmit(blob));
}
int TPM_Extend(int pcrindex){
unsigned char blob[TPMMAX] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 34, /* length */
0, 0, 0, 20, /* TPM_ORD_Extend */
0, 0, 0, pcrindex ,/* PCR index */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 /* data*/
};
return (TPM_Transmit(blob));
}
int TPM_SHA1Start(){
unsigned char blob[TPMMAX] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 10, /* length */
0, 0, 0, 160, /* TPM_ORD_SHA1Start */
};
return (TPM_Transmit(blob));
}
int TPM_SHA1Complete(){
unsigned char blob[TPMMAX] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 15, /* length */
0, 0, 0, 162, /* TPM_ORD_SHA1Start */
0, 0, 0, 1, /* Hashdatasize */
1 /* Hashdata */
};
return (TPM_Transmit(blob));
}
int main(){
TPM_PcrRead(0);
TPM_Extend(0);
TPM_Reset();
TPM_SHA1Start();
TPM_SHA1Complete();
}
#gcc -o test test.c
#./test
出现错误: Device or Resource busy
#fuser /dev/tpm0
发现有个进程在用它,
#kill ~
OK