Ошибка при установке grub (Решено)

nafanja
Chips, а можно поинтересоваться, зачем? Арч же бинарный дистр… может тебе лучше подойдет Генту?
Боюсь сейчас в меня полетят сапоги. Я пробую собрать свой дистр основываясь на Arch только с openrc в место systemd и другим пакетным менеджером
git clone git://git.savannah.gnu.org/grub.git
если хочешь собрать свой grub ..... (в принципе потом можно раскидать все по нужным директориям ....) ... или можно использовать и готовый, но свой лучше
Ошибки не исчезают с опытом - они просто умнеют
Chips
Боюсь сейчас в меня полетят сапоги
почему? если тебе это интересно...
была бы задача по заточке, ну тогда да... полетели бы сапоги, кроссовки и разные тапки...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Вчера пересобрал binutils внадежде что это решт проблему единственное пришлось убрать опцию --enable-cet ругалось на то что нужен ассемблер с какой-то поддержкой но это не помогло grub собирается но выдаёт всё туже ошибку с неправильно собранным ядром.

P.S. бред конечно но я тут подумал может попробовать обновить именно ядро linux может это на него жалуется?
Chips
я тут подумал может попробовать обновить именно ядро linux может это на него жалуется?
Это не причем - ошибка в компиляции, что то делаешь не то ...
Chips
некорректная компиляция «/usr/lib/grub/i386-pc/kernel.img»: начальный адрес равен 0x9074 вместо 0x9000: ошибка в ld.gold?
система не понимает elf файл kernel.img, точнее, стартовый адресс прораммы (адрес функции main()) должен быть 0x9000, а фактически 0x9074
Смотрим
objdump -f /usr/lib/grub/i386-pc/kernel.img
/usr/lib/grub/i386-pc/kernel.img:     формат файла elf32-i386
архитектура: i386, флаги 0x00000002:
EXEC_P
начальный адрес 0x00009000
и видим, что стартовый адресс 0x00009000 .... это и есть адрес функции main()
Уточним, дизассемблируем прогу
objdump -d /usr/lib/grub/i386-pc/kernel.img | head -15
/usr/lib/grub/i386-pc/kernel.img:     формат файла elf32-i386
Дизассемблирование раздела .text:
00009000 <.text>:
    9000:	89 8e 41 00 00 00    	mov    %ecx,0x41(%esi)
    9006:	89 be 45 00 00 00    	mov    %edi,0x45(%esi)
    900c:	89 86 64 01 00 00    	mov    %eax,0x164(%esi)
    9012:	b9 04 70 00 00       	mov    $0x7004,%ecx
    9017:	bf 00 90 00 00       	mov    $0x9000,%edi
    901c:	f3 a4                	rep movsb %ds:(%esi),%es:(%edi)
    901e:	be 25 90 00 00       	mov    $0x9025,%esi
    9023:	ff e6                 	jmp    *%esi
Так оно и есть ...проверь свою прогу - и ищи где ошибка .... но, если честно, лучше все сделать заново, чем искать ошибку.
Может берешь не те файлы, может разная битность (есть и 32 и есть 64) ... хотя железяка дает намек, чем может быть обусловлена ошибка
Chips
ошибка в ld.gold?
Ошибки не исчезают с опытом - они просто умнеют
Chips
Вчера пересобрал binutils
А действительно выходим на binutils
locate ld.gold
/usr/bin/ld.gold

pacman -Qo /usr/bin/ld.gold
/usr/bin/ld.gold принадлежит binutils 2.35-2

Что может быть с binutils не то, хрен его знает. Но вот что в этих случаях помогает, так это отладчик gdb - сложная, но очень полезная фича при отладке.
Рекомендую освоить, документации по ней много.

EDIT 1 - попробуй скачать git clone git://git.savannah.gnu.org/grub.git и собрать grub, получишь файл kernel.img - вот и проверишь его стартовый адрес
Сборка примерно такая
- качаем последнюю версию - git clone git://git.savannah.gnu.org/grub.git
- cd grub
- ./autogen.sh ... если заругается, то подскажет какой файл нужно запусить, точно не помню. но что то типа ./bootstrap - увидишь
- ./configure
- make -jN ... N поставь свое
Могут выскочить ошибки gcc - придется исключать проверки ...
Ошибки не исчезают с опытом - они просто умнеют
Chips, забыл спросить, а как компилируются другие программы, например, nano - у них меняется стартовый адрес? - или это только у grub? - или и у grub стартовый адрес тоже нормальный? .... а не верный адрес возникает только при запуске grub-install?
Ошибки не исчезают с опытом - они просто умнеют
Vasek Около 200 пакетов самостоятельно собранны и работают nano, mc, openssh, dhcp, vim, wget, gcc... все они работабю проблема вылезла только на grub и то только когда выполняют непосредственно установку sudo grub-install даже если указать нулевое устройство

P.S. ещё syslinux на этапе компоновки валится но думаю с этим оно не связанно
Chips
проблема вылезла только на grub
А вот интересно, стартовые адреса (точки входа) совпадают на собранных тобой и дефолтных программ ... и в частности у kernel.img ???
Проверь на выбор штук у 5 (не сложно - objdump -f <proga> )
Никогда с таким не встречался, даже и мыслей никаких нет на эту проблему ...
Ошибки не исчезают с опытом - они просто умнеют
vasek

Вот оно чё выдало

это проблемная сборка grub
BUILD/grub/usr/bin/grub-install:     формат файла elf64-x86-64
архитектура: i386:x86-64, флаги 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
начальный адрес 0x0000000000403110

BUILD/grub/usr/lib/grub/i386-pc/kernel.img:     формат файла elf32-i386
архитектура: i386, флаги 0x00000102:
EXEC_P, D_PAGED
начальный адрес 0x00009074

это таже версия которую я когда-то собирал и она работала причём собирал просто ./configure && make

BUILD/grub-old/sbin/grub-install:     формат файла elf64-x86-64
архитектура: i386:x86-64, флаги 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
начальный адрес 0x00000000004038c0

BUILD/grub-old/usr/lib/grub/i386-pc/kernel.img:     формат файла elf32-i386
архитектура: i386, флаги 0x00000002:
EXEC_P
начальный адрес 0x00009000

edit
вот mc

BUILD/mc1/usr/bin/mc:     формат файла elf64-x86-64
архитектура: i386:x86-64, флаги 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
начальный адрес 0x000000000040bf50

/usr/bin/mc:     формат файла elf64-x86-64
архитектура: i386:x86-64, флаги 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
начальный адрес 0x000000000040aa4d
 
Зарегистрироваться или войдите чтобы оставить сообщение.