Как распаковать (распаковать) U-Boot boot.scr.uimg в boot.scr?

Sí, eso es exactamente lo que sucede:

$ mkfifo p
$ while :; do cat p ; done > /dev/null  & 
$ strace -etrace=open,close bash -c 'echo -n foo > p; echo bar > p' |& grep '"p"' -A1
open("p", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
close(3)                                = 0
--
open("p", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
close(3)                                = 0

Las redirecciones solo surten efecto mientras dura el único comando en el que están configuradas. La solución en el lado de escritura es a )usar un bloque compuesto para agrupar los comandos, o b )usar execpara abrir un descriptor de archivo durante todo el script (o hasta que se cierre ).

un)

{ echo -n foo; echo bar; } > p

(También puede poner los comandos en una función y usar la redirección al llamar a la función.)

b)

exec 3>p
echo -n foo >&3
echo bar    >&3
exec 3>&-         # to explicitly close it

Si desea corregirlo en el lado de la lectura, deberá recorrer ready concatenar las cadenas que obtenga. Dado que desea explícitamente líneas parciales que no sean -, y para omitir el final -de las condiciones del archivo -, no puede usar el código de salida de readpara nada útil.

2
01.08.2019, 15:04
1 ответ

Установитьu-boot-tools:

$ sudo apt install u-boot-tools

Изучите заголовок изображения:

$ dumpimage -l boot.scr.uimg 
Image Name:   
Created:      Wed Dec 31 16:00:00 1969
Image Type:   ARM Linux Script (uncompressed)
Data Size:    1489 Bytes = 1.45 KiB = 0.00 MiB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 1481 Bytes = 1.45 KiB = 0.00 MiB

Извлеките файл boot.scrиз образа:

$ dumpimage -i boot.scr.uimg boot.scr

Извлеченный файл на 8 байт больше, чем указано в таблице Contentsв заголовке, 1489 байт против ожидаемых 1481. Если хотите, вы можете обрезать эти байты с помощью:

tail -c+8 boot.scr > $$; mv $$ boot.scr

Изменить:в отношении OP @Bumsik Kim и эксперта-рецензента @Kusalananda, было предложено изменить синтаксис dumpimageна:

dumpimage -o boot.scr boot.scr.uimg

Я включу это примечание сюда на случай, если оно будет кому-то полезно, но в системе Ubuntu 18.04 эта команда выполняется успешно, но ничего не делает:

# ls -l
total 4
-rw------- 1 root root 1553 Aug  7 11:30 boot.scr.uimg
# dumpimage -o boot.scr boot.scr.uimg && ls -l
total 4
-rw------- 1 root root 1553 Aug  7 11:30 boot.scr.uimg

Исходный синтаксис выше работает в Ubuntu 18:

$ dumpimage -i boot.scr.uimg boot.scr && ls -l
total 8
-rw------- 1 root root 1489 Aug  9 10:51 boot.scr
-rw------- 1 root root 1553 Aug  7 11:30 boot.scr.uimg

Тем не менее, я хочу включить предложенный ими синтаксис и подтвердить его.

1
27.01.2020, 22:16

Теги

Похожие вопросы