AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 510528
Accepted
JWoeber
JWoeber
Asked: 2019-04-05 07:18:12 +0800 CST2019-04-05 07:18:12 +0800 CST 2019-04-05 07:18:12 +0800 CST

Descompilação de árvore de imagem achatada do uboot

  • 772

Eu tive um problema ao tentar configurar os bootargs para o meu sistema linux incorporado. A árvore de dispositivos é compilada na mesma imagem que o kernel. Inclui bootargs ( /chosen/bootargs ). Além disso, preciso configurar algumas vezes no tempo de execução (uboot). Isso significa que eu preciso ser capaz de usar ambos. Eu sei que existe uma definição de configuração para o Kernel ( https://stackoverflow.com/a/48814885/11312396 ) mas isso só existe para arm ( estou usando aarch64 ).

Atualmente, estou tentando usar os comandos fdt do uboot para carregar os bootargs da árvore de dispositivos no uboot e anexá-los lá. O kernel então usa os passados ​​pelo uboot.

O problema é obter o endereço da árvore do dispositivo. Como ele é compilado em uma árvore de imagens achatada da qual eu só sei o endereço base, não tenho o endereço do próprio blob da árvore do dispositivo. Eu posso descobrir isso manualmente usando o iminfocomando uboot, mas o uboot não possui ferramentas para analisar a saída desse comando.

## Checking Image at 03000000 ...
FIT image found
FIT description: U-Boot fitImage for Ultra96 kernel
Image 0 (kernel@0)
 Description:  Linux Kernel
 Type:         Kernel Image
 Compression:  gzip compressed
 Data Start:   0x030000d4
 Data Size:    7399390 Bytes = 7.1 MiB
 Architecture: AArch64
 OS:           Linux
 Load Address: 0x00080000
 Entry Point:  0x00080000
 Hash algo:    sha1
 Hash value:   47edccde80d64c636a01dbf4916662e2cdbfda96
Image 1 (fdt@0)
 Description:  Flattened Device Tree blob
 Type:         Flat Device Tree
 Compression:  uncompressed
 Data Start:   0x0370e9ac
 Data Size:    41889 Bytes = 40.9 KiB
 Architecture: AArch64
 Hash algo:    sha1
 Hash value:   d977763b2ec8079aca8908b28c732c3a79e1f7ab
Default Configuration: 'conf@1'
Configuration 0 (conf@1)
 Description:  Boot Linux kernel with FDT blob
 Kernel:       kernel@0
 FDT:          fdt@0
## Checking hash(es) for FIT Image at 03000000 ...
Hash(es) for Image 0 (kernel@0): sha1+ 
Hash(es) for Image 1 (fdt@0): sha1+ 

Então eu tentei descompilar o cabeçalho, mas isso está além das minhas capacidades:

03000000: edfe0dd0 98907100 38000000 988e7100    .....q.....8.q..
03000010: 28000000 11000000 10000000 00000000    ...(............
03000020: 6c000000 608e7100 00000000 00000000    ...l.q.`........
03000030: 00000000 00000000 01000000 00000000    ................
03000040: 03000000 04000000 5c000000 e1e8455c    ...........\\E..
03000050: 03000000 23000000 00000000 6f422d55    .......#....U-Bo
03000060: 6620746f 6d497469 20656761 20726f66    ot fitImage for 
03000070: 72746c55 20363961 6e72656b 00006c65    Ultra96 kernel..
03000080: 03000000 04000000 0c000000 01000000    ................
03000090: 01000000 67616d69 00007365 01000000    ....images......
030000a0: 6e72656b 30406c65 00000000 03000000    kernel@0........
030000b0: 0d000000 00000000 756e694c 654b2078    ........Linux Ke
030000c0: 6c656e72 00000000 03000000 dee77000    rnel.........p..
030000d0: 1b000000 00088b1f 00000000 5bec0302    ...............[
030000e0: d754540d f7bfff9d 23010f86 c087c332    .TT........#2...
030000f0: 8c0199d9 59ac493a e4688106 d1a260cd    ....:I.Y..h..`..

TLDR: Existe a possibilidade de obter do despejo de cabeçalho do arquivo FIT listado acima para o endereço inicial da árvore de dispositivos (0x0370e9ac)

linux-kernel u-boot
  • 1 1 respostas
  • 1705 Views

1 respostas

  • Voted
  1. Best Answer
    user358134
    2019-06-17T10:28:59+08:002019-06-17T10:28:59+08:00

    Não, porque está no meio do seu dump binário.

    Dê uma olhada neste exemplo de análise (os deslocamentos do arquivo estão à esquerda):

    00000000                 Magic: D00DFEED    FDT File OK
    00000004             File Size: 002C076C
    00000008      DT Struct Offset: 00000038
    0000000C     DT Strings Offset: 002C0564
    00000010     Mem RsvMap Offset: 00000028
    00000014               Version: 00000011
    00000018  Last Compatible Vers: 00000010
    0000001C           Boot CPU_ID: 00000000
    00000020       DT Strings Size: 0000006C
    00000024        DT Struct Size: 002C052C
    00000038
    00000040     timestamp = 18/01/2019 12:25:33
    00000050     description = Jackal Kernel Image generated with Linux kernel and FDT blob
    0000009C     #address-cells = 0x00000001
    000000AC     images
    000000B8        kernel@1
    000000C8           description = Linux kernel
    000000E4           data = 2872840 Bytes [000000F0-002BD6F7]
    002BD6F8           type = kernel
    002BD70C           arch = arm
    002BD71C           os = linux
    002BD730           compression = none
    002BD744           load = 0x03000000
    002BD754           entry = 0x03000000
    002BD764           hash@1
    002BD770              value = 29684CCAA0B89E0C9B9E2AB47B120CB0
    002BD78C              algo = md5
    002BD7A4        fdt@1
    002BD7B0           description = Device Tree
    002BD7C8           data = 11376 Bytes [002BD7D4-002C0443]
    002C0444           type = flat_dt
    002C0458           arch = arm
    002C0468           compression = none
    002C047C           hash@1
    002C0488              value = 062502B2C222FE1547BDA6118C6FC1EE
    002C04A4              algo = md5
    002C04C0     configurations
    002C04D4        default = config@1
    002C04EC        config@1
    002C04FC           description = Boot Linux kernel with FDT blob
    002C0528           kernel = kernel@1
    002C0540           fdt = fdt@1
    
    • 1

relate perguntas

  • Como posso fazer meu console framebuffer funcionar?

  • Bloqueando montagem syscall

  • Por que a versão 30 das ferramentas sem fio se tornou uma versão beta permanente?

  • tamanho da pilha do programa

  • Quais dongles WiFi 802.11ac (ou posteriores) funcionam com o kernel Linux 4.13

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve