本文更新于2018-08-11

首发于简书, 文章链接 http://www.jianshu.com/p/174844b99716
同步至GitHub:https://github.com/liuqun/linux/wiki

定制树莓派内核源码, 通过树莓派SPI接口加载并访问TPM2.0设备

所需硬件: X86主机一台, 树莓派3-B型号开发板一块, 大容量Micro-SD卡+USB读卡器一个, 英飞凌TPM2.0评估板一套

所需软件: 任意版本树莓派固件(推荐使用最新版本), Ubuntu Linux 虚拟机, gcc-arm-linux-gnueabihf 交叉编译器, ncurses.h

  • Ubuntu Linux x86 虚拟机软件包准备
sudo apt-get update
sudo apt-get install -y libncurses5-dev
sudo apt-get install -y gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
sudo apt-get install -y git-core
  • 下载阿群已经配置好的树莓派内核源码(上游开发者也可以到源头 https://kernel.org 或树莓派内核分支 https://github.com/raspberrypi/linux 自行下载官方 4.9 内核源码包, 然后自己打补丁)
git clone --depth=1 https://github.com/liuqun/linux.git --branch rpi-4.9.y-devel2
cd linux
  • 应用默认的内核配置文件bcm2709_defconfig
make ARCH=arm bcm2709_defconfig
  • 进入交互式菜单
make ARCH=arm menuconfig
  • 到menuconfig菜单选中
    Device Drivers----Character devices---<M>TPM Hardware support
    选中TPM Interface Specification 1.3 Interface / TPM 2.0 FIFO Interface - (SPI) (NEW)模块
    返回并保存内核配置文件

  • 编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules -j$(nproc)

如何将编译好的 Linux 新内核安装到树莓派 SD 卡

取出树莓派的SD卡, 通过读卡器插入 Ubuntu 主机或将读卡器 USB 设备接入 VMware 虚拟机。Ubuntu 默认自动将 U 盘挂载到 /media/$USER/boot/media/$USER/【根文件系统分区】

ls /media/$USER

(以下为覆盖式安装, 如果不放心请自行备份SD卡上的原有内核及模块文件)

scripts/mkknlimg arch/arm/boot/zImage   /media/$USER/boot/kernel7.img
cp arch/arm/boot/dts/*.dtb              /media/$USER/boot/
cp arch/arm/boot/dts/overlays/*.dtb*    /media/$USER/boot/overlays/sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/media/$USER/【根文件系统分区】

树莓派配置

sudo raspi-config

选中5. Interfacing Options---P4 SPI(启用/禁用SPI串口)
重启树莓派,开机后检查/dev/tpm0设备文件是否已经加载就绪

ls -l /dev/tpm0
sudo dmesg | grep tpm
ls /lib/modules/`uname -r`/kernel/drivers/char/tpm
tpm.ko  tpm_tis_core.ko  tpm_tis_spi.ko

树莓派本地编译 TPM2.0 软件栈

git clone -b 1.x https://github.com/tpm2-software/tpm2-tss.git TPM2.0-TSS
pushd TPM2.0-TSS
wget http://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2017.09.28.tar.xz
tar xJf autoconf-archive-2017.09.28.tar.xz
cp autoconf-archive-2017.09.28/m4/ax_code_coverage.m4 m4/nproc=4
./bootstrap && ./configure && make -j$(nproc)
make install DESTDIR=$HOME/my-tpm2-tss-installation-dir
popd

参考文档:

  • Infineon TPM 2.0 Application Note 这篇文档介绍了如何打补丁以及编译4.4内核。注意当前最新的树莓派固件是Linux-4.9内核, 其中已经内置TPM2.0设备驱动, 不需要之前那个4.4内核补丁了, 另外4.4和4.9驱动模块ko文件的名称不一样, 一个是tpm_spi_tis.ko另一个是tpm_tis_spi.ko

树莓派Linux内核编译选项如何开启TPM 2.0相关推荐

  1. 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

    目录 一.树莓派Linux源码配置(适合树莓派) 总体概述 配置的三种方式 1.照搬厂家的配置(使用这种方式) 2.参考厂家的配置(感受一下) 3.完全自主配置(需要一定工作经验) 二.树莓派Linu ...

  2. Liunx树莓派(ARM)开发篇—第十四章、树莓派Linux内核编译步骤(超详细、图文结合)

    对树莓派内核源码进行配置后,下一步要进行树莓派Linux内核编译 以下步骤均在PC端虚拟机上完成 准备材料:PC端虚拟机.树莓派交叉编译工具.树莓派内核(交叉编译工具.内核下载步骤见树莓派内核源码) ...

  3. 树莓派学习笔记(九)树莓派Linux内核开发

    一.树莓派Linux源码配置 1.概念: 驱动代码的编译需要一个提前编译好的内核,想要编译内核就必须先配置 配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核 ...

  4. 树莓派-linux内核编译

    树莓派-linux内核编译 装虚拟机[^1] 配置共享文件夹 配置交叉编译工具 下载树莓派linux系统内核[^3] 树莓派等芯片带操作系统的启动过程 树莓派linux源码目录树 树莓派linux源码 ...

  5. Linux树莓派开发——配置树莓派内核源码,内核编译,更换树莓派Linux内核

    目录 一.树莓派Linux源码配置 1.配置的三种方法 2.内核源码的下载 二.树莓派内核编译 1.树莓派的编译 ​2.生成vmlinux 三.更换树莓派内核的详细步骤 一.树莓派Linux源码配置 ...

  6. 树莓派Linux内核编译、文件系统、Linux内核驱动基础框架、驱动测试步骤、总线地址

    树莓派高阶开发课程 1. ubuntu18.04版本安装          让程序猿搭建环境太搞笑了,轻松easy! ========================================= ...

  7. 自己定制树莓派Linux内核的步骤

    (文/阿群) 此篇文章是自己编译树莓派内核的备忘录. #!/bin/sh# 取回自己为树莓派定制的Linux内核源码树 git clone --branch rpi-4.9.y-devel3 --de ...

  8. LINUX内核编译选项-5

    Device Drivers  ---> 驱动程序 Generic Driver Options  --->驱动程序通用选项 (/sbin/hotplug) path to uevent ...

  9. 树莓派Linux内核配置、编译以及烧录详细步骤

    目录 一.内核配置 第一种方式:(cp 厂家.config .config) 第二种方式(make menuconfig 一项项配置,通常是基于厂家的config来配置) 二.内核编译 三.烧录 1. ...

最新文章

  1. [Matlab] 获取给定两点间直线上点集的方法
  2. jeecms系统_自定义对象流程
  3. Django之URL路由系统
  4. 务实云计算培训:帮您顺利走好云之旅
  5. 营销 | 10个助燃商业增长的市场营销战略!
  6. Linux终端打开一只小马,Linux 终端上的漂亮小马
  7. 前端学习(1923)vue之电商管理系统电商系统之说明角色要完成的功能
  8. 查询长期未登录AD的用户
  9. Ubuntu下安装tensorBroad的全过程
  10. 如何下载国家自然科学基金申请书的模板
  11. 扩展ExoPlayer实现多音轨同时播放
  12. Myeclipse 项目中报“无法解析类型 java.io.ObjectInputStream,从必需的 .class 文件间接引用了它”解决办法
  13. t600显卡和p620哪个好
  14. 程序员用实力把公司干倒闭了
  15. CEC2018:动态多目标测试函数DF10~DF14的PS及PF(提供Matlab代码)
  16. python3使用蓝本Blueprint
  17. 编程中遇到的优秀网站收藏
  18. C语言文件操作函数总结——超详细
  19. 4、编写程序,根据用户输入的数字转换成相应的中文的大写数字。例如,1.23转换为“壹点贰叁”。
  20. iOS 解决scoryboard上tableview、collection view顶部有空白问题

热门文章

  1. constrain用法java_Java中的@UniqueConstraint注释
  2. IoT:电子密本ECB和DES模式详解
  3. STM32:堆和栈(Heap Stack)及SRAM存储使用
  4. 好的测试用例应能证明软件是正确的.,好的测试用例应能证明软件是正确的。...
  5. 1929. 数组串联
  6. 洛谷——P1421 小玉买文具
  7. 洛谷——P1089 [NOIP2004 提高组] 津津的储蓄计划
  8. 为什么你的数据库经常会被破防呢?原因原来是这——Sql注入问题(源码+文字深度解析)
  9. java map 泛型 反射_java - 反射操作泛型
  10. 移动应用测试基于JAVA_Appium用于测试Android混合移动应用程序