% Copyright (C) 2018 TANSORIER.
% Permission is granted to copy, distribute and/or modify this document
% under the terms of the GNU Free Documentation License, Version 1.3
% or any later version published by the Free Software Foundation;
% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
% A copy of the license is included in the section entitled "GNU
% Free Documentation License".
% https://www.gnu.org/licenses/fdl-1.3.html
\documentclass [aspectratio=169] { beamer}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Thèmes suppélmentaires
\usetheme { Darmstadt}
\usecolortheme { beetle}
\setbeamertemplate { footline} [text line]{
%\textcolor{gray}{%
\parbox { \linewidth } { \vspace * { -8pt} Smile\hfill \insertshortauthor \hfill \insertpagenumber /\inserttotalframenumber } }
%}
% Cache les symbole de navigation pdf
\beamertemplatenavigationsymbolsempty
% Language
\usepackage [french] { babel}
\usepackage [utf8] { inputenc}
\usepackage [T1] { fontenc}
% Display Table Of Content spécific for smilebeamer
% Force to get empty
\AtBeginSection [] { }
\AtBeginSubsection [] { }
%{
% \begin{frame}<beamer>
% \frametitle{Plan}
% \tableofcontents[currentsection]
% \end{frame}
%}
% Change color of definiton block
%%\AtBeginEnvironment{definition}{%
% \setbeamercolor{block title}{use=example text,fg=example text.fg,bg=example text.fg!20!bg}
% \setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!50!bg}
%}
% footnote: relève le footnote pour ne pas se supperposer au pied de page
\addtobeamertemplate { footnote} { } { \vspace { 2ex} }
% code coloration
\usepackage { listings}
% L'option "[fragile]" doit être rajouté au frame pour pouvoir utiliser correctement
% la police verbatim
\usepackage { color}
\lstset {
breaklines=true,
tabsize=4,
backgroundcolor=\color [RGB] { 49,54,59} ,
basicstyle=\footnotesize \ttfamily \color { white} ,
commentstyle=\itshape \color [RGB] { 0,136,136} ,
morecomment=[l]{ \# } ,
morekeywords={ *,\$ ,\{ ,\} } ,
stringstyle=\itshape \color [RGB] { 218,116,0} ,
showstringspaces=false,
frame=single, % ligne de concours du block de code
rulecolor=\color { black} , % couleur des lignes de concours du block de code
}
\lstdefinestyle { shell} {
language=bash,
keywords={ \$ } ,
keywordstyle=\bfseries \color [RGB] { 66,198,66}
}
\lstdefinelanguage { diff} {
morecomment=[f][\color { blue} ]{ @@} , % group identifier
morecomment=[f][\color { red} ]-, % deleted lines
morecomment=[f][\color { green} ]+, % added lines
morecomment=[f][\color { magenta} ]{ ---} , % Diff header lines (must appear after +,-)
morecomment=[f][\color { magenta} ]{ +++} ,
}
% Pour utiliser des colonnes
\usepackage { multicol}
% Pour les hyperliens
\usepackage { hyperref}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title [fitImage] { Présentation \texttt { fitImage} \\ \textbf { Introduction} }
\author [Mickaël Tansorier] { Mickaël Tansorier}
\date [Août 2019] { Retour d'expérience sur le fonctionnement des \texttt { fitImage} et \newline de la signatures des images incluses}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin { document}
% *******************************
% **** PAGE DE GARDE ****
% *******************************
\begin { frame}
\titlepage
\end { frame}
% *******************************
% **** INTRODUCTION ****
% *******************************
\begin { frame} { Plan}
\tableofcontents [hideallsubsections]
\end { frame}
\section { Introduction}
\subsection { Les formats d'images Linux}
\begin { frame}
\begin { center}
\huge { Les formats d'images Linux}
\end { center}
\end { frame}
\begin { frame}
\begin { description}
\item [\texttt{Image}] Image générique binaire
\item [\texttt{zImage}] Image générique binaire compressé
\item [\texttt{uImage}] Image avec une entête d'information utilisé par U-Boot
\item [\texttt{fitImage}] Enveloppe d'image pouvant contenir plusieurs noyaux, devicetree, firmware. Chaque image peut être signé, et d'autres choses
\end { description}
\end { frame}
\begin { frame} { En détails}
\begin { itemize}
\item [\texttt { zImage} ]
\begin { itemize}
\item Sujet à la corruption de donnée, ce qui peut passer inaperçu
\item Contient seulement une image
\item Utilisation répandue
\end { itemize}
\item [\texttt { uImage} ]
\begin { itemize}
\item Somme de contrôle CRC32 faible
\item Contient seulement une image
\item Utilisation répandue
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame} { En détails}
\begin { itemize}
\item [\texttt{fitImage}]
\begin { itemize}
\item Somme de contrôle configurable
\item Peut être signé
\item Peut contenir de multibles images (kernel, DTB, firmware. . . )
\item N'est pas beaucoup utilisé
\item Est le successeur de uImage
\item Le descritpteur de contenue est basé sur un DTS
\item Peut contenir de multiples configurations
\item De nouvelles fonctionnalités d'image peuvent être ajoutées au besoin
\item Supporte de fort checksums (SHA1, SHA256. . . ), Ce qui protège des corruptions silecieuse
\item U-Boot peut vérifier le fitImage avec une clé public, ce qui protège contre la falsification
\item Le système de construction de Linux ne permet pas de générer une fitImage
\item Yocto peut maintenant générer une fitImage
\end { itemize}
\end { itemize}
\end { frame}
\begin { frame}
\begin { center}
\includegraphics [height=0.9\textheight] { images/fitImage.png}
\end { center}
\end { frame}
%
%\begin{multicols}{2}
%[
%\section{First Section}
%All human things are subject to decay. And when fate summons, Monarchs must obey.
%]
%\columnbreak
%\end{multicols}
% *******************************
% **** Construction fitImage ****
% *******************************
\section { Construire fitImage}
\begin { frame}
\begin { center}
\huge { Construire une fitImage}
\end { center}
\end { frame}
\begin { frame}
Étapes:
\begin { center}
\begin { itemize}
\item Générer une paire de clé (ex: avec openssl)
\item Choisir son algo de signature
\item Créer un descripteur \texttt { fitImage.its}
\item Signer avec \texttt { mkimage}
\end { itemize}
\end { center}
\end { frame}
% **** Type de signature ****
\subsection { Type de signature}
\begin { frame}
\begin { center}
\large { Comment choisir son algo de signature ?}
\end { center}
\end { frame}
\begin { frame} [fragile]
Avant novembre 2016:
Plusieurs types de signature sont disponible dans U-Boot.\newline
\texttt { common/image-sig.c}
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
struct image_ sig_ algo image_ sig_ algos[] = {
{
"sha1,rsa2048",
rsa_ sign,
rsa_ add_ verify_ data,
rsa_ verify,
& checksum_ algos[0],
} ,
{
"sha256,rsa2048",
rsa_ sign,
rsa_ add_ verify_ data,
rsa_ verify,
& checksum_ algos[1],
} ,
{
"sha256,rsa4096",
rsa_ sign,
rsa_ add_ verify_ data,
rsa_ verify,
& checksum_ algos[2],
}
} ;
\end { lstlisting}
\end { frame}
\begin { frame} [fragile]
Après novembre 2016:
\begin { lstlisting} [language=C,basicstyle=\tiny \ttfamily \color { white} ]
struct crypto_ algo *image_ get_ crypto_ algo(const char *full_ name);
\end { lstlisting}
{ \setlength \multicolsep { 0pt}
\begin { multicols} { 2}
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
struct checksum_ algo checksum_ algos[] = {
{
.name = "sha1",
.checksum_ len = SHA1_ SUM_ LEN,
.der_ len = SHA1_ DER_ LEN,
.der_ prefix = sha1_ der_ prefix,
#if IMAGE_ ENABLE_ SIGN
.calculate_ sign = EVP_ sha1,
#endif
.calculate = hash_ calculate,
} ,
{
.name = "sha256",
.checksum_ len = SHA256_ SUM_ LEN,
.der_ len = SHA256_ DER_ LEN,
.der_ prefix = sha256_ der_ prefix,
#if IMAGE_ ENABLE_ SIGN
.calculate_ sign = EVP_ sha256,
#endif
.calculate = hash_ calculate,
}
} ;
\end { lstlisting}
\columnbreak
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
struct crypto_ algo crypto_ algos[] = {
{
.name = "rsa2048",
.key_ len = RSA2048_ BYTES,
.sign = rsa_ sign,
.add_ verify_ data = rsa_ add_ verify_ data,
.verify = rsa_ verify,
} ,
{
.name = "rsa4096",
.key_ len = RSA4096_ BYTES,
.sign = rsa_ sign,
.add_ verify_ data = rsa_ add_ verify_ data,
.verify = rsa_ verify,
}
} ;
\end { lstlisting}
\end { multicols}
}
\end { frame}
%**** Descripteur de fitImage *****
\subsection { Descripteur \texttt { fitImage} }
\begin { frame}
\begin { center}
\large { Créer un descripteur de contenue de \texttt { fitImage} }
\end { center}
\end { frame}
\begin { frame} [fragile]
% Prevent first column disapear
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
KERNEL=/path/to/zImage
KEYNAME=my_ key
DTB=/path/to/.dtb
\end { lstlisting}
\begin { columns}
\begin { column} { 0.5\textwidth }
\texttt { fitImage.its}
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
/dts-v1/;
/ {
description = "fitImage for sign Kernel image and DTB";
#address-cells = <1>;
images {
kernel@1 {
description = "Linux Kenel";
data = /incbin/("%KERNEL%");
type = "kernel";
arch = "arm";
os = "linux";
compression = "none";
load = <0x12000000>;
entry = <0x12000000>;
signature@1 {
algo = "sha256,rsa4096";
key-name-hint = "%KEYNAME%";
} ;
} ;
\end { lstlisting}
\end { column}
\begin { column} { 0.5\textwidth }
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
fdt@1 {
description = "Devicetree";
data = /incbin/("%DTB%");
type = "flat_ dt";
arch = "arm";
compression = "none";
load = <0x18000000>;
entry = <0x18000000>;
signature@1 {
algo = "sha256,rsa4096";
key-name-hint = "%KEYNAME%";
} ;
} ;
} ;
configurations {
default = "conf@1";
conf@1 {
kernel = "kernel@1";
fdt = "fdt@1";
} ;
} ;
} ;
\end { lstlisting}
\end { column}
\end { columns}
\end { frame}
% **** Signer les images ****
\subsection { Signer les images}
\begin { frame}
\begin { center}
\large { Signer les images avec \texttt { mkimage} }
\end { center}
\end { frame}
\begin { frame} [fragile]
Il faut l'ajouter avec \texttt { mkimage} :
\begin { description}
\item [-D <dtc options>] Fournie les options du compilateur de device tree utilisé pour créer l'image.
\item [-k <key\_directory>] Spécifie le répertoire contenant les clés pour signer. Il doit contenir la clé privé <name>.key et le certificat <name>.cert (contenant la clé public) utilisé pour la vérification.
\item [-K <key\_destination>] Spécifie le binaire compilier du device tree (.dtb) où écrire la clé public.
\item [-r] Spécifie la \texttt { fitImage} .
\end { description}
\end { frame}
\begin { frame} [fragile]
Pour signer:
\begin { lstlisting} [style=shell]
$ mkimage - D " - I dts - O dtb - p 4096 " - f / path / to / fitImage.its - K / path / to / u - boot _ pubkey.dtb - k / path / to / - r fitImage
\end { lstlisting}
Cette opération doit être effectué avant la compilation d'\texttt { U-Boot} , car cette même commande permet d'inclure la clé public dans le dtb.
\vfill
l'option \texttt { -D "-I dts -O dtb -p 4096"} sera explique après.
\end { frame}
% **************************************
% **** Ajouter la clé dans U-Boot ****
% **************************************
\section { Ajouter la clé dans U-Boot}
\begin { frame}
\begin { center}
\huge { Ajouter la clé dans U-Boot}
\end { center}
\end { frame}
\begin { frame}
Étapes:
\begin { center}
\begin { itemize}
\item Créer un \texttt { external dtb}
\item Ajouter la clé à un \texttt { external dtb}
\item Ajouter l'\texttt { external dtb} à la compilation d'Uboot
\end { itemize}
\end { center}
\end { frame}
%**** Créer un external dtb ****
\subsection { Créer un \texttt { external dtb} }
\begin { frame}
\begin { center}
\large { Créer un \texttt { external dtb} }
\end { center}
\end { frame}
\begin { frame} [fragile]
Créer un \texttt { devicetree} \footnote { arborescence de périphériques} spécifique.
\texttt { u-boot\_ pubkey.dts}
\begin { lstlisting}
/dts-v1/;
/ {
model = "Keys";
compatible ="vendor,board";
signature {
key-%KEYNAME% {
required = "image";
algo = "sha256,rsa4096";
key-name-hint = "%KEYNAME%";
} ;
} ;
} ;
\end { lstlisting}
\end { frame}
\begin { frame} [fragile]
Pour le générer le dtb:
\begin { lstlisting} [style=shell]
$ dtc - p 4096 $ (@D)/u-boot_ pubkey.dts -O dtb -o $ ( @D ) / u - boot _ pubkey.dtb
\end { lstlisting}
l'option \texttt { -p 4096} pernet de réserver un espace pour accueillir la clé.\newline
\newline
La clé n'est pas présente:
\begin { lstlisting} [style=shell]
$ cat u - boot _ pubkey.dtb
vendor,board signature key-my_ key image sha256,rsa4096 my_ key modelcompatiblerequiredalgokey-name-hint
\end { lstlisting}
\end { frame}
%**** Ajouter la clé à l'external dtb ****
\subsection { Ajouter la clé à l'\texttt { external dtb} }
\begin { frame}
\begin { center}
\large { Ajouter la clé à l'\texttt { external dtb} }
\end { center}
\end { frame}
\begin { frame} [fragile]
Pour y ajouter la clé public il faut utiliser la commande de création de \texttt { fitImage} :
\begin { lstlisting} [style=shell]
$ mkimage - D " - I dts - O dtb - p 4096 " - f / path / to / fitImage.its - K / path / to / u - boot _ pubkey.dtb - k / path / to / - r fitImage
\end { lstlisting}
Ce qui donne:
\begin { lstlisting} [style=shell]
$ cat u - boot _ pubkey.dtb
vendor,board signature key-my_ key
[...]
image sha256,rsa4096 my_ key modelcompatiblerequiredalgokey-name-hintrsa,num-bitrsa,n0-inversersa,exponentrsa,modulusra,r-squaredsquared
\end { lstlisting}
\end { frame}
%**** Ajouter l'external dtb à la compilation d'U-Boot ****
\subsection { Ajouter l'\texttt { external dtb} à la compilation d'U-Boot}
\begin { frame}
\begin { center}
\large { Ajouter l'\texttt { external dtb} à la compilation d'U-Boot}
\end { center}
\end { frame}
\begin { frame} [fragile]
Pour ajouter ce DTB spécifique dans U-Boot (même s'il n'y a pas de dtb) il faut utiliser l'option \texttt { EXT\_ DTB} de make:
\begin { lstlisting} [style=shell]
$ make CROSS _ COMPILE = arm - linux - gnueabihf - EXT _ DTB = u - boot _ pubkey.dtb
\end { lstlisting}
\end { frame}
%**** Vérifier la signature dans à la construction ****
\subsection { Vérifier la signature dans à la construction}
\begin { frame}
\begin { center}
\large { Vérifier la signature à la construction}
\end { center}
\end { frame}
\begin { frame} [fragile]
il est possible de vérifier la signature d'une image avec :
\begin { lstlisting} [style=shell]
$ fit _ check _ sign - f fitImage - k u - boot _ pubkey.dtb
\end { lstlisting}
L'outils est disponible dans le paquet uboot-tools dans buildroot:\newline
\texttt { ./output/build/host-uboot-tools-2017.07/tools/fit\_ check\_ sign}
\end { frame}
%**** Exemple: logs U-Boot ****
\subsection { Exemple: logs U-Boot}
\begin { frame}
\begin { center}
\large { Exemple: logs U-boot}
\end { center}
\end { frame}
\begin { frame} [fragile]
\begin { lstlisting} [style=shell,basicstyle=\tiny \ttfamily \color { white} ]
=> bootm 0x15000000 #or bootm 0x15000000#conf@1 since conf@1 is the default
## Loading kernel from FIT Image at 15000000 ...
Using'conf@1'configuration
Verifying Hash Integrity ... OK
Trying'kernel@1'kernel subimage
Description: Linux kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x150000e4
Data Size: 7010496 Bytes=6.7 MiB
Architecture: ARM
OS: Linux
Load Address: 0x12000000
Entry Point: 0x12000000
Hash algo: sha256
Hash value: 7d1fb52f2b8d1a98d555e01bc34d11550304fc26
Sign algo: sha256,rsa4096:my_ key
Sign value: [redacted]
Verifying Hash Integrity ... sha256,rsa4096:my_ key+ sha256+ OK
## Loading fdt from FIT Image at 15000000 ...
Using 'conf@1' configuration
Trying 'fdt@1' fdt subimage
[...]
Verifying Hash Integrity ... sha256,rsa4096:my_ key+ sha256+ OK
Booting using the fdt blob at 0x156afd40
Loading Kernel Image ... OK
Loading Device Tree to 1fff2000, end 1ffff1ed ... OK
Starting kernel...
\end { lstlisting}
\end { frame}
% *******************************
% **** PRÉSENTATION ****
% *******************************
%\subsection{uboot}
%\begin{frame}[fragile]
%J'ai rajouté quelques config dans buildroot.
%\begin{lstlisting}[style=shell]
%BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y
%BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
%BR2_PACKAGE_HOST_UBOOT_TOOLS=y
%BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
%BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
%
%BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
%
%BR2_TARGET_UBOOT_SIGN_FITIMAGE=y
%BR2_TARGET_UBOOT_ITS="$(CONFIG_DIR)/board/eolane/modx6/fitImage.its"
%BR2_TARGET_UBOOT_SIGN_DTS="$(CONFIG_DIR)/board/eolane/modx6/u-boot_pubkey.dts"
%BR2_TARGET_UBOOT_KEY_NAME="my_key"
%BR2_TARGET_UBOOT_KEY_SERVER="bep@hgweb:/home/apache/distribution/keys/"
%\end{lstlisting}
%\end{frame}
%
%\begin{frame}[fragile]{Vérification de la signature}
%il est possible de tester la signature d'une image avec:
%\begin{lstlisting}[style=shell]
%fit_check_sign -f output/images/fitImage -k u-boot_pubkey.dtb
%\end{lstlisting}
%dans \texttt{./output/build/host-uboot-tools-2017.07/tools/fit\_check\_sign}
%\end{frame}
%
% *******************************
% **** PRÉSENTATION ****
% *******************************
\section { Gestion dans Buildroot}
\begin { frame}
\begin { center}
\huge { Gestion dans Buildroot}
\end { center}
\end { frame}
\begin { frame}
Étapes:
\begin { itemize}
\item Rendre automatique la récupération des clés et la completion des descripteurs (\texttt { .its} , \texttt { .dtb} ).
\item Ajouter la clé à l'\texttt { external dtb} pour compiler U-Boot.
\item Signer les images contenues dans la \texttt { fitImage} .
\end { itemize}
\end { frame}
\begin { frame} [fragile]
\begin { lstlisting} [language=diff,basicstyle=\fontsize { 5} { 5} \selectfont \ttfamily \color { white} ]
--- a/boot/uboot/Config.in
+++ b/boot/uboot/Config.in
@@ -167,6 +167,38 @@ config BR2_ TARGET_ UBOOT_ NEEDS_ OPENSSL
typically the case when the board configuration has
CONFIG_ FIT_ SIGNATURE enabled.
+if BR2_ TARGET_ UBOOT_ NEEDS_ OPENSSL
+
+config BR2_ TARGET_ UBOOT_ SIGN_ FITIMAGE
+ bool "Sign fitImage"
+ depends on BR2_ PACKAGE_ HOST_ UBOOT_ TOOLS_ FIT_ SIGNATURE_ SUPPORT
+ help
+ Sign fitImage. This need external dtb for uboot, its file and openssl key.
+
+if BR2_ TARGET_ UBOOT_ SIGN_ FITIMAGE
+
+config BR2_ TARGET_ UBOOT_ ITS
+ string "its file"
+ help
+ its file need to have absolute path.
+
+config BR2_ TARGET_ UBOOT_ SIGN_ DTS
+ string "dts key file"
+ help
+ dts file need to have absolute path. This will use as external dtb.
+
+config BR2_ TARGET_ UBOOT_ KEY_ NAME
+ string "Keys name"
+ help
+ Name of public and private key
+
+config BR2_ TARGET_ UBOOT_ KEY_ SERVER
+ string "Keys server"
+ help
+ Server adress to get keys
+endif
+endif
+
config BR2_ TARGET_ UBOOT_ NEEDS_ LZOP
bool "U-Boot needs lzop"
help
\end { lstlisting}
\end { frame}
\begin { frame} [fragile]
\begin { lstlisting} [language=diff,basicstyle=\fontsize { 5} { 5} \selectfont \ttfamily \color { white} ]
--- a/boot/uboot/uboot.mk
+++ b/boot/uboot/uboot.mk
@@ -246,6 +246,30 @@ define UBOOT_ HELP_ CMDS
+# Sign fitImage
+ifneq ($ ( call qstrip, $ (BR2_ TARGET_ UBOOT_ SIGN_ FITIMAGE)),)
+UBOOT_ MAKE_ OPTS += EXT_ DTB="$ ( @D ) / u - boot _ pubkey.dtb"
+endif
+
+ifneq ($ ( BR 2 _ TARGET _ UBOOT _ SIGN _ FITIMAGE ) , )
+UBOOT_ ITS_ PATH = $ ( call qstrip, $ (BR2_ TARGET_ UBOOT_ ITS))
+UBOOT_ EXT_ DTS = $ ( call qstrip, $ (BR2_ TARGET_ UBOOT_ SIGN_ DTS))
+UBOOT_ KEY_ NAME = $ ( call qstrip, $ (BR2_ TARGET_ UBOOT_ KEY_ NAME))
+UBOOT_ KEY_ SERVER = $ ( call qstrip, $ (BR2_ TARGET_ UBOOT_ KEY_ SERVER))
+DTS_ NAME = $ ( call qstrip, $ (BR2_ LINUX_ KERNEL_ INTREE_ DTS_ NAME))
+define UBOOT_ SIGN_ FITIMAGE
+ wget $ ( UBOOT _ KEY _ SERVER ) / $ (UBOOT_ KEY_ NAME).key -O $ ( @D ) / $ (UBOOT_ KEY_ NAME).key
+ wget $ ( UBOOT _ KEY _ SERVER ) / $ (UBOOT_ KEY_ NAME).crt -O $ ( @D ) / $ (UBOOT_ KEY_ NAME).crt
+ sed -e "s|%KERNEL%|$(BINARIES_DIR)/zImage|" $(UBOOT_ITS_PATH) > $(@D)/fitImage.its
+ sed -e "s|%DTB%|$(BINARIES_DIR)/$(DTS_NAME).dtb|" -i $(@D)/fitImage.its
+ sed -e "s|%KEYNAME%|$(UBOOT_KEY_NAME)|" -i $(@D)/fitImage.its
+ sed -e "s|%KEYNAME%|$(UBOOT_KEY_NAME)|" $(UBOOT_EXT_DTS) > $(@D)/u-boot_pubkey.dts
+ $ ( HOST _ DIR ) / bin / dtc - p 4096 $ (@D)/u-boot_ pubkey.dts -O dtb -o $ ( @D ) / u - boot _ pubkey.dtb
+ PATH=$ ( PATH ) : $ (HOST_ DIR)/bin $ ( HOST _ DIR ) / bin / mkimage - D " - I dts - O dtb - p 4096 " - f $ (@D)/fitImage.its -K $ ( @D ) / u - boot _ pubkey.dtb - k $ (@D) -r $ ( BINARIES _ DIR ) / fitImage
+endef
+UBOOT_ PRE_ BUILD_ HOOKS += UBOOT_ SIGN_ FITIMAGE
+endif
+
UBOOT_ CUSTOM_ DTS_ PATH = $ ( call qstrip, $ (BR2_ TARGET_ UBOOT_ CUSTOM_ DTS_ PATH))
define UBOOT_ BUILD_ CMDS
@@ -329,6 +353,11 @@ endif
+define UBOOT_ REMOVE_ KEY
+ rm -f $ ( @D ) / $ (UBOOT_ KEY_ NAME).key $ ( @D ) / $ (UBOOT_ KEY_ NAME).crt $ ( @D ) / $ (UBOOT_ KEY_ NAME).pub
+endef
+UBOOT_ POST_ INSTALL_ IMAGES_ HOOKS += UBOOT_ REMOVE_ KEY
+
define UBOOT_ INSTALL_ OMAP_ IFT_ IMAGE
cp -dpf $ ( @D ) / $ (UBOOT_ BIN_ IFT) $ ( BINARIES _ DIR ) /
endf
\end { lstlisting}
\end { frame}
% *******************************
% **** PRÉSENTATION ****
% *******************************
\section * { Conclusion}
\subsection { Documentation}
\begin { frame} [fragile]
Documentation:
\begin { itemize}
\item \url { https://elinux.org/images/e/e0/Josserand-schulz-secure-boot.pdf}
\item \url { https://www.denx.de/wiki/pub/U-Boot/Documentation/multi_ image_ booting_ scenarios.pdf}
\item \url { https://elinux.org/images/8/8a/Vasut--secure_ and_ flexible_ boot_ with_ u-boot_ bootloader.pdf}
\end { itemize}
\end { frame}
\subsection { Questions}
\begin { frame}
\begin { center}
\begin { huge}
Des questions ?
\end { huge}
\end { center}
\begin { center}
\textcolor { gray} { \tiny { Enfin je vais essayer de répondre...} }
\end { center}
\center { \url { mickael.tansorier@smile.fr} }
\center { \url { mickael@tansorier.fr} }
\vfill
\center { \textcolor { gray} { \tiny { GNU Free Documentation License, Version 1.3} } }
\end { frame}
\end { document}