1
1
use std:: { borrow:: Cow , io:: Write , iter:: once} ;
2
2
3
- use bytemuck:: { bytes_of, Pod , Zeroable } ;
3
+ use bytemuck:: { bytes_of, Pod , Zeroable , from_bytes } ;
4
4
use sha2:: { Digest , Sha256 } ;
5
5
6
6
use crate :: {
@@ -33,7 +33,7 @@ impl<'a> Esp32BootloaderFormat<'a> {
33
33
bootloader : Option < Vec < u8 > > ,
34
34
) -> Result < Self , Error > {
35
35
let partition_table = partition_table. unwrap_or_else ( || params. default_partition_table ( ) ) ;
36
- let bootloader = if let Some ( bytes) = bootloader {
36
+ let mut bootloader = if let Some ( bytes) = bootloader {
37
37
Cow :: Owned ( bytes)
38
38
} else {
39
39
Cow :: Borrowed ( params. default_bootloader )
@@ -48,6 +48,15 @@ impl<'a> Esp32BootloaderFormat<'a> {
48
48
flash_config : encode_flash_size ( image. flash_size ) ? + image. flash_frequency as u8 ,
49
49
entry : image. entry ,
50
50
} ;
51
+
52
+ // Update the bootloader header
53
+ let current: EspCommonHeader = * from_bytes ( & bootloader[ 0 ..8 ] ) ;
54
+ if current. magic != ESP_MAGIC {
55
+ return Err ( Error :: InvalidBootloader ) ;
56
+ }
57
+ bootloader. to_mut ( ) [ 2 ..4 ] . copy_from_slice ( & bytes_of ( & header) [ 2 ..4 ] ) ;
58
+
59
+ // write the header of the app
51
60
data. write_all ( bytes_of ( & header) ) ?;
52
61
53
62
let extended_header = ExtendedHeader {
0 commit comments