ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
698434 Топик полностью
VVB (08.09.2016 14:52, просмотров: 187) ответил Mebius на Объясни, что они имели в виду в п. 4.6.8.4. Output Section Phdr?
Это немного другое. Есть скрипт линкера
MEMORY
{
  RAM (rwx) : ORIGIN = 0x20020000, LENGTH = 0x00018000
}

PHDRS
{
    _RAM1 PT_LOAD;
    _RAM2 PT_LOAD;
}

SECTIONS
{
  PrgCode : { KEEP(*(.text))             } > RAM : _RAM1
  PrgData : { KEEP(*(.bss))  *(COMMON)   } > RAM : _RAM1
  DevDscr : { KEEP(*(DevDscr DevDscr.*)) } > RAM : _RAM2
}
Он приводит к появлению двух сегментов:
arm-none-eabi-readelf.exe -l xxx.elf

Elf file type is EXEC (Executable file)
Entry point 0x0
There are 2 program headers, starting at offset 52
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x010000 0x20020000 0x20020000 0x00030 0x00038 RWE 0x10000
  LOAD           0x010038 0x20020038 0x20020038 0x010a0 0x010a0 R   0x10000
 Section to Segment mapping:
  Segment Sections...
   00     PrgCode PrgData 
   01     DevDscr 
Если изменить скрипт линкера без PHDRS, то будет всего один сегмент:
arm-none-eabi-readelf.exe -l xxx.elf

Elf file type is EXEC (Executable file)
Entry point 0x0
There are 1 program headers, starting at offset 52
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x010000 0x20020000 0x20020000 0x010d8 0x010d8 RWE 0x10000
 Section to Segment mapping:
  Segment Sections...
   00     PrgCode PrgData DevDscr