LINUX.ORG.RU

Запуск программы без операционной системы на Low-level с помощью GAS и GCC

 , , , ,


0

2

Вопрос скорее всего чисто технический, но всё же… До недавнего времени решил разобраться с выводом через GRUB программ на экран, как именно выводятся символы, решил поиграться с драйверами и тд.
Моим первичным руководством в этом стала вот эта статейка с Habr. Меня интересует конкретно этот кусочек кода:

losetup /dev/loop2 ./hdd.img \
    --offset    `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk '{print $$3}'\`*512 | bc` \
    --sizelimit `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk '{print $$4}'\`*512 | bc`
	losetup -d /dev/loop1

Вывод терминала в этом случае:

Mounting partition to /dev/loop4...  
(standard_in) 1: syntax error  
(standard_in) 1: syntax error  
losetup: failed to parse offset: '--sizelimit': Invalid argument

Я не очень много работал с Makefile в целом, но даже если задать определённые значения, которые я вытаскивал с помощью kpartx, выдаёт ошибку так как нужны КОНКРЕТНО ЭТИ расчёты(Хотя я не понимаю, что конкретно здесь умножается под ($$3), ведь никаких перменных не для Makefile ни для таргета нет)

Поэтому, знатоки ОС и в целом, те, кто довольно неплохо разбираются со структурой MakeFile, вот вопросы:
1.«@» в таргете image –авторское дополнение или технически уместный финт? Как он обосновывается в начале каждой команды?
2. Как работает bc в целом и что в куске кода выше происходит в целом?
3. Что конкретно принтуется под $$(-n), где (-n) - какое-то число. Откуда берётся это при отсутсвии передаваемых переменных?

Для знатоков ос:
Можете ли в целом описать процесс создания загрузочного образа ядра и сопутствующие инструменты в этом? Или соурсы?



Последнее исправление: hobbit (всего исправлений: 4)

  1. Синтаксис Makefile’ов. Команда с @ в начале не выводится на консоль, только ее вывод.

  2. В данном случае bc читает строку, содержащую арифметическое выражение, и вычисляет его.

  3. $$ тоже по части синтаксиса make. Чтобы make не пытался интерпретировать переменные, а передал их в awk, $ экранируется. В итоге в awk уйдет $3, $4. $3, $4 - встроенные переменные awk.

undef ★★
()

Возникли проблемы с отображение [code] из-за спец символов, просьба перейти по ссылке для ознакомления с фрагментом кода

Ты пытался использовать разметку LORCODE, но при этом в комбобоксе при создании темы был выбран Markdown, поэтому рендер не отработал. Поскольку видно, что ты старался, я поправил самостоятельно. Но в следующий раз обрати на это внимание.

Если нет личных предпочтений, я рекомендую Markdown, он проще в наборе. Но и LORCODE вполне рабочий (его имеет смысл выбрать, если ты на других форумах привык к BBCODE, например). Главное, чтобы разметка, выбранная в списке, соответствовала тому, что ты вводишь.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от hobbit

У меня по какой-то причине это багануло и даже с разметкой LORCODE и обозначениями не получилось это реализовать… Стоило так или иначе хотя бы сделать reboot страницы или проявить иную долю внимательности Впрочем, благодарю. Постраюсь исправляться в последующие разы, довольно глупо получилось, признаться

Doctor_Nazare
() автор топика
Ответ на: комментарий от Doctor_Nazare

Это лучше вручную покомандно выяснять. Что угодно может быть, начиная с того что предыдущая команда неудачно отработала и не создала нормальную таблицу разделов.

Проще посмотреть таблицу разделов на hdd.img и указать значения вручную. Выложите результат fdisk -lu ./hdd.img

undef ★★
()
Ответ на: комментарий от undef

В терминале следующий вывод:

Disk ./hdd.img: 7.84 MiB, 8225280 bytes, 16065 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xe60ce208

Device Boot Start End Sectors Size Id Type ./hdd.img1 * 63 16064 16002 7.8M c W95 FAT32 (LBA)

(Может быть, я чего-то не понимаю, но на предпросмотре, сейчас проверил разметка LORCODE, рендер не отрабатывает. Я поэкспериментирую с этим позже)

Doctor_Nazare
() автор топика
Ответ на: комментарий от Doctor_Nazare

Подставьте в offset 63x512, в sizelimit 16064x512. Собственно, по задумке автора должны подставляться эти значения.

undef ★★
()
Последнее исправление: undef (всего исправлений: 1)
Ответ на: комментарий от undef

Получилось. Создание загрузочного образа успешно, но... Вывод QEMU: (qemu-system-i386 -hda hdd.img)

"'Fylesystem is fat, partition typ3 0xc. kernel ./kernel.bin. Error 13: Invalid or unsupported executable format"'

Хм...Тем не менее она скомпилировалась. Думаю, стоит теперь глянуть нынешние исходники ядра?

Doctor_Nazare
() автор топика