Tentando entender a cópia de imagem do uboot

0

O seguinte é um snippet de u-boot-xarm/include/configs/zynq_zc702.h

"qspiboot=echo Copying Linux from QSPI flash to RAM...; \
                cp 0xFC100000 0x8000 ${kernel_size}; \
                cp 0xFC600000 0x1000000 0x8000; \
                echo Copying ramdisk...; \
                cp 0xFC800000 0x800000 ${ramdisk_size};\
                ping 10.10.70.101;\
                go 0x8000
                    cp 0xFC100000 0x8000 ${kernel_size}; \
                    cp 0xFC600000 0x1000000 0x8000; \
" \

Alguém pode explicar o que está acontecendo nessas duas linhas:

"qspiboot=echo Copying Linux from QSPI flash to RAM...; \
                cp 0xFC100000 0x8000 ${kernel_size}; \
                cp 0xFC600000 0x1000000 0x8000; \
                echo Copying ramdisk...; \
                cp 0xFC800000 0x800000 ${ramdisk_size};\
                ping 10.10.70.101;\
                go 0x8000
                    cp 0xFC100000 0x8000 ${kernel_size}; \
                    cp 0xFC600000 0x1000000 0x8000; \
" \

Como esses endereços são escolhidos? E por que tantos endereços?

    
por gpuguy 31.03.2014 / 16:06

2 respostas

1

Ele está copiando um kernel e initrd armazenados em memória flash para a RAM antes de iniciar o Linux. O comando cp está documentado em cp - cópia da memória

Os endereços de origem são áreas em flash que não contêm o código de inicialização do flash. Endereços de destino são áreas na RAM que o u-boot não está usando para seu próprio código / dados em execução.

    
por 31.03.2014 / 18:05
1

Eu não encontrei uma definição para a sintaxe do comando QSPI flash to RAM copy, mas o padrão parece ser

cp src_addr dst_addr copy_size

A segunda cópia é para o devicetree ( devicetree.dtb ) que apenas por coincidência tem um tamanho (0x8000) que é o mesmo que o endereço inicial para o kernel do Linux (0x8000) na RAM.

    
por 27.09.2014 / 16:58

Tags