vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
ChipsЧто я и предполагал. Немного теории, как я ее вижу (в чем то, конечно, могу и ошибаться) И похоже у тебя компилятор стал присваивать другие стартовые номера - для запуска обычных программ это не критично и на работу не влияет (все вертится в памяти), а вот для grub оказывается. что это имеет значение - почему, не знаю.Опишу в ручную … но hex-редактором проще. Имеем копию файла kernel.img - ~/TTT/TEST/kernel.img sudo hexdump -s 0x18 -n 4 ~/TTT/TEST/kernel.img 0000018 9074 0000 objdump -f ~/TTT/TEST/kernel.img | grep адр начальный адрес 0x00009074 меняем на 9000 printf '\x00\x90' | dd conv=notrunc of=~/TTT/TEST/kernel.img bs=1 seek=$((0x18)) проверяем hexdump -s 0x18 -n 4 ~/TTT/TEST/kernel.img 0000018 9000 0000 objdump -f ~/TTT/TEST/kernel.img | grep адр начальный адрес 0x00009000 И попробуй запустить grub-instal …… даже стало интересно. что получится …
Ошибки не исчезают с опытом - они просто умнеют
|
Chips |
|
Темы:
45
Сообщения:
297
Участник с: 14 января 2014
|
У меня была мысль что проблема с gcc (я его корявенько собрал отсутствуют 32х разрядные либы) и всё равно думал пере собирать но и этот вариант попробую |
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
ChipsНе получиться изменить, как описал - не достаточно изменить только адрес в Header .... забыл, что этот адрес идет и дальше Проверил (изменил 9000 на 9074) и вот что имеем objdump -df ~/TTT/TEST/kernel.img .... а далее идет смещение уже от 9000 Так что виноват, поспешил с советом ... но, повторюсь, способ по смене адреса при компиляции имеется
Ошибки не исчезают с опытом - они просто умнеют
|
Chips |
|
Темы:
45
Сообщения:
297
Участник с: 14 января 2014
|
vasek Я наверное завтра пере соберу gcc и попробую ещё раз мне всё больше кажется что виноват именно он |
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
ChipsСтартовый адрес присваивает компилятор, так что скорее всего причина в gcc
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
Заело, как так, не могу изменить бинарник - вообщем, используя hex-редактор внес измения в elf файл, заменил 9000 на 9074 (около 5 изменений) ... и все получилось readelf -a ~/TTT/TEST/kernel.img Лишний вывод выкинулobjdump -d ~/TTT/TEST/kernel.img Можешь пробовать .... рекомендую установить hex-редактор bless, открываешь файл kernel.img (копию): сохраняем ... тебе придется запускть от rootПроверяем readelf -a ~/TTT/TEST/kernel.img
objdump -d ~/TTT/TEST/kernel.img Все вернули на местоEDIT 1 - один минус, НЕ ПРОВЕРИЛ, сделано где то 4 или 5 изменений, но вот все ли эти найденные строки 74 90 00 00 имеют отношение к стартовому адресу - посеръезному необходимо обращаться к структуре формата elf файла и смотреть, что это мы меняли ... но это уже для меня тяжело (не те годы) EDIT 2 - это все игрушки, а если по серъезному, то нужно приводить в норму компилятор. Изменишь один файл, но останутся не измененными другие файлы, которые могут быть в зависимостях у исправленного файла - это же не проверялось и не известно, как это исправление скажется на установку grub.
Ошибки не исчезают с опытом - они просто умнеют
|
Chips |
|
Темы:
45
Сообщения:
297
Участник с: 14 января 2014
|
vasek Gcc пере собрал правда тут вылезла такая бяка
Что радостно гласит о том что не может найти automake-1.15 хотя у меня установлен automake-1.16. У меня была такая проблема я вот только не помню как её тогда решил пересборка automake не помогла P.S. Вот яж баран забыл что в скриптие для сборки закоментировал ./autogen.sh |
Chips |
|
Темы:
45
Сообщения:
297
Участник с: 14 января 2014
|
(((((((((((((
У кого какие ещё есть мысли? |
anode |
|
Темы:
8
Сообщения:
1019
Участник с: 30 августа 2011
|
Такое сообщение об ошибке во всем дереве исходников grub есть только в файле ./util/grub-mkimagexx.c и выдается только в случае если . Покопаться в исходниках - хорошее поле для деятельности, кто хочет ChipsИ когда вы поймете, что это за функции и переменные, причина ошибки станет для вас очевидной :) Удачи. ЗЫ. Может проще заглянуть сюда, чем изобретать велосипед? |
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
Впервые вижу, чтобы програ при запуске считывала, сверяла точки входа и при не совпадении выдавла error. Провел анализ на наличие таких прог в нашей системе и выяснил, что у меня таких прог 5 штук и все имеют отношение к grub (grub-mkstandalone, grub-mkimage, grub-mkrescue, grub-install, grub-mknetdir), в которых прописаны сообщения Но интересно то, что в самих исходниках этих прог это не прописано.Далее выяснил, что в исходниках grub имеется всего один файл grub-mkimagexx.c, в котором идет проверка этих точек входа (привожу кусок кода) и похоже при компиляции это и попадает в указанные 5 файлов.Но так и не соображу, для чего это нужно grub? - только одни предположения. Далее провел эксперимент - подправил свой бинарник /usr/lib/grub/i386-pc/kernel.img в части изменения точки входа - особо не вникал в правилность выполнения правки (важен был результат) и запустил grub-install … в итоге получил это проблемное сообщение sudo grub-install /dev/sdb
grub-install операция разовая, выполняемая довольно редко, и, в принципе решить проблему попробовать Но, самое главное, конечно же, это понять - почему меняется адрес точки входа всех программ. Повторюсь, этим занимается компилятор … но понятие компилятора это не просто одна программа, например, gcc - это целый комплекс и скриптов и линковщиков и др. Я тонкости этой кухни не знаю, просто меня интересовало в бинарниках всегда совсем другое (их редактирование) … Но могу только предположить - ты взялся построить свою систему Linux - но в этом построении тоже есть свои правила и нюансы, любое перемешивание кирпичиков может привести к неожиданным результатам. Спецов, знающих все эти тонкости не много и, думаю, когда ты построишь свою систему, то и сам будешь таким спецом. Это я к тому, что вероятность получения помощи не высока, придется до всего доходить самому и много читать. Интересно посмотреть несколько выводов (пути поставь свои - у тебя скорее всего эти файлы дублируются)
Ошибки не исчезают с опытом - они просто умнеют
|