На С написано не ядро, а StdLoader, как я понял. То есть,
Код:
/*
* C-startup and loader for BlackBox
* Implemented as the StdLoader.
*/
Последний вариант позволяет сохранить внешне архитектуру программного комплекса, чтобы в виде и в linux/bsd и т.п. ББ выглядел одинаково. Но вывод ясен, спасибо Александру, по большому счету — использование того или иного метода, дело вкуса. Мой вкус однозначно на стороне, который использован в Омник версии. Мне кажется, что нельзя достоверно утверждать, что у OpenBUGS был такой выбор, и они выбрали второй вариант.
Но в ядра не лез и лезть не буду, так как понимаю там мало, но хорошо, что есть выбор.
Вот еще решил привести документацию из LinLinker, тоже немного разъясняющую, что к чему.
Цитата:
Implementation Docu
This is the linker tool for BlackBox on Linux. The code files on Windows and Linux are the same, but the linkers work differently. The linux linker is actually more of a packer. It simply packs object files together and prepends a boot loader written in C. When the application is started the boot loader reads the object files and gives the Kernel the control.
The linux linker does two important things. FIrst, it packs the object files together to one executable thus, only one file is needed. Second, it guarantees that the order in which the object files are packed is the "import order". That is, all imports of any given object file appear before the object file itself in the boot image. (Which implies that the very first object file cannot have any imports at all.)
The file format for the boot image is:
Executable = BootLoader BootImg
BootLoader = ELFExecutable
Bootimg = Header {ObjFile}
Header = FileTag version4 nofMods4 kernelname mainname newRecFP4 newArrFP4
FileTag = 3AX 4BX 5CX 6DX
ELFExecutable is a C program compiled in the ELF format and the ObjFile entries are exact copies of the object files passed to the linker.
The ELF executable is copied from the image saved in Lin/Rsrc/exe.img.
Цитата:
Документация инструмента
Это компоновщик для BlackBox на Linux. Код на Windows, Linux один и тот же, но линкеры работают по-разному.Компоновщик Linux на самом деле больше упаковщик. Он просто упаковывает объектные файлы вместе и добавляет загрузчик, написанный на языке C. При запуске приложения загрузчик считывает объектные файлы и передает управление Kernel.
Linux компоновщик выполняет две важные вещи. Во-первых, он упаковывает объектных файлы вместе, чтобы был один исполняемый файл, таким образом, только один файл необходим. Во-вторых, он гарантирует, что порядок, в котором объектные файлы упакованы является «порядком импорта". То есть, все импорты любого объектного файла возникают перед объектом самого файла в загрузочном образ. (Из чего следует, что самый первый объектный файл не может иметь никакого импорта)
Формат файла для загрузки образа:
Executable = BootLoader BootImg
BootLoader = ELFExecutable
Bootimg = Header {ObjFile}
Header = FileTag version4 nofMods4 kernelname mainname newRecFP4 newArrFP4
FileTag = 3AX 4BX 5CX 6DX
ELF-исполняемый файл — C программа компиллированная в ELF и ObjFile вхождения — точные копии объектных файлов передаваемых сборщику.
ELF -исполняемый файл копируется из образа сохраненного в Lin/Rsrc/exe.img.