Я пытаюсь использовать команду ld
в linux для файла сборки для ядра. Для его загрузки с grub он должен быть после адреса 1Mb. Поэтому мой сценарий ссылок имеет текст, идущий по адресу 0x00100000.Непредвиденное расположение вывода компоновщика
Вот скрипт линкера Я использую:
SECTIONS {
.text 0x00100000 :{
*(.text)
}
textEnd = .;
.data :{
*(.data)
*(.rodata)
}
dataEnd = .;
.bss :{
*(.common)
*(.bss)
}
bssEnd = .;
}
Мой вопрос о выходном файле. Когда я смотрю на двоичный файл файла, текстовый раздел начинается с 0x1000. Когда я изменяю текстовое местоположение в скрипте и использую адреса ниже 0x1000, например 0x500, текст начнется там. Но всякий раз, когда я иду выше 0x1000, он округляет его (0x2500 будет помещать текст в 0x500).
Когда я укажу, что текст должен быть в 0x100000, не должен ли он быть в выходном файле? Или есть еще одна часть двоичного файла, которая указывает, что есть еще больше возможностей сделать это. Я спрашиваю, потому что есть проблема с загрузкой моего ядра, но пока я просто пытаюсь понять выход компоновщика.