и виртуальный 0x3DF0 с выравниваем, что прописано в program header'е для этого сегмента, в 0x1000, то мне всё равно нужно мапать сегмент по адресу 0x3DF0 относительного базового адреса?
байтики из адреса 0x2DF0 должны мапиться в 0x3DF0, если страницами то получается так: 0x2000 -> 0x3000
Если вы работаете с системой с виртуальными адресами, то вы смотрите на p_vaddr и p_align. Если адреса физические, то смотрите на p_addr.
p_align в обоих случаях надо учитывать
ммм. а зачем? там, вроде, без разницы.
физическое начало должно продолжать соответствовать виртуальному адресу
так если нет виртуальной памяти, зачем? там же есть p_paddr для физической памяти.
предполагается, что она есть, когда нет, можно забить просто переложить байтики ровно по адресам указанным в сегментах, но мне такой алгоритм не пригодился ибо грузил сразу с заточкой на страничную память, хоть она ещё не была включена
если предполагается, что потом включиться страничная трансляция, то, конечно, разумно так делать. но, например, в какой-нибудь встройке жаба давит оставлять дыры.
тогда пихай всё в один сегмент, но совсем от дыр это не избавит, ибо заголовки тоже занимают место
кстати, если во встройке нет страничной адресации, то и тащить elf туда глупо
ну, как бы, весь тулчейн на elf. выбора нет.
можно настроить выхлоп в bin
сразу под формат rom'а устройства
там не всегда только rom. иногда нужно загружать код
Обсуждают сегодня