Setup autoboot from NAND
This commit is contained in:
160
Tp3.md
160
Tp3.md
@@ -338,21 +338,173 @@ Grâce à cette commande j'ai ajouté un nouveau menu qui quand on le selectionn
|
||||
|
||||
### [Q15] : Quelle sont les tailles, en bytes et KBytes, réservées dans la flash NAND au noyau et au Device Tree ?
|
||||
|
||||
[TODO]
|
||||
On peut voir dans le resultat de la commande TFTP que le kernel fait 4076944 bytes ou à peu près 4mb.
|
||||
|
||||
Cela veut dire qu'il est stocké entre les addresses 0x21000000 et 0x213e3590
|
||||
|
||||
Pour ce qui est du DTB, 40674 bytes ou 40kb sont utilisés et il est donc stocké entre les addresses 0x22000000 et 0x22009ee2
|
||||
|
||||
### [Q16] : Comment pouvez-vous vous assurer que la NAND a bien été effacée ?
|
||||
|
||||
[TODO]
|
||||
Pour effacer de la nand on peut utiliser la commande `nand erase [start] [size]`
|
||||
|
||||
Dans notre cas si on suit le diagramme on peut voir que on va écrire le kernel entre les addresses 0x160000 et 0x700000 et le DTB entre les addresses 0x700000 et 0x720000
|
||||
|
||||
Donc on va `nand erase 0x160000 0x720000`
|
||||
|
||||
```
|
||||
=> nand erase 0x160000 0x720000
|
||||
|
||||
NAND erase: device 0 offset 0x160000, size 0x720000
|
||||
Erasing at 0x860000 -- 100% complete.
|
||||
OK
|
||||
```
|
||||
|
||||
pour verifier que la NAND a bien été clean à ces addresses on peut faire un `nand dump 0x160000 0x100` pour avoir un apercu de l'état de la NAND à cette addresse
|
||||
|
||||
|
||||
```
|
||||
=> nand dump 0x160000 0x100
|
||||
Page 00160000 dump:
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|
||||
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff...
|
||||
```
|
||||
|
||||
On peut voir que cette zone de la NAND a bien été remplie avec des 0xFF
|
||||
|
||||
### [Q17] : Donnez le contenu des scripts update_kernel et update_dtb.
|
||||
|
||||
[TODO]
|
||||
Pour flasher le contenu de ce qui se trouve dans notre flash dans notre nand on peut utiliser `nand write x y z`
|
||||
|
||||
x indique l'addresse dans la flash ou commencent les infos que on veut flasher
|
||||
y indique l'addresse dans la NAND ou on doit flasher le contenu de notre flash
|
||||
z indique la taille de l'information que on va écrire
|
||||
|
||||
Pour notre kernel on a donc
|
||||
|
||||
`nand write 0x21000000 0x160000 0x3e3590`
|
||||
|
||||
```
|
||||
=> nand write 0x21000000 0x160000 0x3e3590
|
||||
|
||||
NAND write: device 0 offset 0x160000, size 0x3e3590
|
||||
4076944 bytes written: OK
|
||||
=>
|
||||
```
|
||||
|
||||
Pour le DTB
|
||||
|
||||
`nand write 0x22000000 0x700000 0x9ee2`
|
||||
|
||||
```
|
||||
=> nand write 0x22000000 0x700000 0x9ee2
|
||||
|
||||
NAND write: device 0 offset 0x700000, size 0x9ee2
|
||||
40674 bytes written: OK
|
||||
```
|
||||
|
||||
Pour créér des scripts on peut utiliser cette commande
|
||||
|
||||
`setenv monscript 'command;command...'`
|
||||
|
||||
Le script `update_kernel` doit faire deux choses que l'on sait deja faire :
|
||||
|
||||
1. Load le kernel depuis notre machine de développement dans la RAM en utilisant tftp
|
||||
2. Erase la NAND aux bonnes addresses et flasher notre nouveau kernel et DTB dedans
|
||||
|
||||
`setenv update_kernel 'tftp 0x21000000 192.168.100.240:zImage && nand erase 0x160000 0x700000 && nand write 0x21000000 0x160000 0x3e3590'`
|
||||
|
||||
`setenv update_dtb 'tftp 0x22000000 192.168.100.240:device_tree.dtb && nand erase 0x700000 0x720000 && nand write 0x22000000 0x700000 0x9ee2'`
|
||||
|
||||
Ci dessus est le script qui devrait faire tout ce qui a été mentionné
|
||||
|
||||
on peut les run en faisant
|
||||
|
||||
`run update_kernel`
|
||||
|
||||
`run update_dtb`
|
||||
|
||||
## Booter le noyau depuis la NAND
|
||||
|
||||
### [Q18] : Donner les commandes U-Boot que vous avez écrites par accomplir ceci.
|
||||
|
||||
[TODO]
|
||||
Pour booter depuis la NAND il faut charger le contenu de la NAND dans la memoire flash.
|
||||
|
||||
Donc pour commencer on peut faire un reset de la carte pour être sûr que la flash est bien vide.
|
||||
|
||||
Pour verifier :
|
||||
|
||||
```
|
||||
=> bootz 0x21000000 - 0x22000000
|
||||
=>
|
||||
```
|
||||
|
||||
Ensuite la syntaxe pour lire dans la NAND est la même que pour l'écrire
|
||||
|
||||
`nand read x y z`
|
||||
|
||||
x est l'addresse en ram dans laquelle on va mettre ce que on lit
|
||||
|
||||
y est l'addresse en NAND ou se trouve notre data
|
||||
|
||||
z est la taille du kernel ou DTB à lire
|
||||
|
||||
`nand read 0x21000000 0x160000 0x3e3590`
|
||||
|
||||
`nand read 0x22000000 0x700000 0x9ee2`
|
||||
|
||||
et ensuite on peut faire `bootz 0x21000000 - 0x22000000`
|
||||
|
||||
on peut mettre tout ca dans un petit script
|
||||
|
||||
`setenv boot_kernel 'nand read 0x21000000 0x160000 0x3e3590 && nand read 0x22000000 0x700000 0x9ee2 && bootz 0x21000000 - 0x22000000'`
|
||||
|
||||
Et quand on le lance :
|
||||
|
||||
```
|
||||
=> run boot_kernel
|
||||
|
||||
NAND read: device 0 offset 0x160000, size 0x3e3590
|
||||
4076944 bytes read: OK
|
||||
|
||||
NAND read: device 0 offset 0x700000, size 0x9ee2
|
||||
40674 bytes read: OK
|
||||
## Flattened Device Tree blob at 22000000
|
||||
Booting using the fdt blob at 0x22000000
|
||||
Loading Device Tree to 2fb29000, end 2fb35ee1 ... OK
|
||||
|
||||
Starting kernel ...
|
||||
```
|
||||
|
||||
Maintenant on créée un bootmenu
|
||||
|
||||
`setenv bootmenu_4 'Boot from NAND=run boot_kernel'`
|
||||
|
||||
Pour faire en sorte que ce soit cette dernière qui soit appelée après le timeout (ici 4 car c'est le quatrième bootmenu)
|
||||
|
||||
`setenv bootmenu_default 4`
|
||||
|
||||
Et on peut configurer le timeout de la sorte (ici cinq secondes)
|
||||
|
||||
`setenv bootdelay 5`
|
||||
|
||||
et pour rappel, toujours utiliser `saveenv` avant de reboot
|
||||
|
||||
Et maintenant on peut simplement reboot la carte et voir que on va boot automatiquement après cinq secondes sur le kernel stocké en NAND
|
||||
|
||||
### [Q19] : Donnez le contenu de vos scripts permettant de ne flasher que l’espace nécessaire dans la NAND de votre carte.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user