ENTRY(__entry)
запишет расположение VMA символа __entry
в конечном объектном файле.Например, в заголовке ELF.После того, как загрузчик загрузит каждую секцию объектного файла в память, загрузчик или среда выполнения просто перейдут к точке входа.
Но в моем сценарии ENTRY(__entry)
на самом деле не обязательно .Потому что EwokOS работает на голой машине и нет загрузчика.Как я и пытался, если я закомментировал ENTRY(__entry)
, EwokOS все еще может загружаться на голом металле.
Причина, по которой первая инструкция __entry
является первой инструкцией финальной EwokOS.bin
file, представляет собой комбинацию двух факторов:
В файл ld
подается 3 файла в порядке boot.o system.o context.o
.Таким образом, мы видим, что boot.o
- это первый объектный файл для связи.
А файл boot.S
, который собирается в boot.o
, содержит __entry
в качестве первая строка кода.
Эти 2 фактора приводят к тому, что __entry
находится в начале финальной EwokOS.bin
, которая извлекается из секции .text
в EwokOS.elf
.
И в моем сценарии мне нужно, чтобы __entry
отображался в начале файла EwokOS.bin
, потому что файл bin загружается по адресу 0x10000, который является начальным адресом QEMU.ARM versatilepb виртуальная машина.