Я хочу создать программу, которую можно хранить на CD или флешке.
Эта программа должна иметь возможность читать содержимое файла в каталоге, если он существует. Например, найдите файл «test» в папке Linux Desktop, которая содержит «123».
Но как мне создавать такие программы, которые можно запускать напрямую из BIOS? Когда я создаю простой исполняемый файл hello-world на linux, он не сможет работать на не-linux-OS.
И будут ли использоваться такие библиотеки, как stdio.h и stdlib.h?
Используйте существующий дистрибутив Linux, многие из которых являются загрузочными с CD / флэш-накопителя, с инструкциями о том, как создать новый образ.
Просто добавьте вашу программу в последовательность загрузки.
Вы должны выяснить, какой диск монтировать / искать — вы говорите о «каталоге», не говоря уже о том, на каком устройстве …
Ну, я не лучший эксперт в этом, но я сделал кое-что похожее, и, насколько я знаю, ваш лучший шанс — поместить программу сборки в загрузочный сектор носителя данных (flash, CD-ROM) и затем выполнить работа — это, например, как работает программное обеспечение раздела. При загрузке с вашего среднего BIOS начнется выполнение кода в загрузочном секторе, и это тот момент, когда вы можете приступить к работе. Но так как кажется, что вам требуется поддержка различных файловых систем, это может быть очень трудно сделать при сборке. Я работал с FAT32 в сборке, но не уверен насчет файловых систем Linux. Возможно, кто-то выложил какой-нибудь ассемблерный код для этого онлайн.
Единственное практическое решение, которое не принимает все существующее ядро операционной системы, такое как Linux, — это повторное использование надрываться. Grub является 32-битным исполняемым файлом в защищенном режиме и поставляется с поддержкой некоторых файловых систем. Я думаю, что для реализации файловой системы достаточно, чтобы вы могли перебирать каталог и блоки файла. Я очень сомневаюсь, что это позволит вам сделать это через API библиотеки C, вам нужно будет использовать собственные внутренние API grub. И он будет очень загружаемым из BIOS.
Короткий ответ: это невозможно, если вы не хотите писать свою собственную мини-операционную систему. Функциональность, которую вы описываете, включает в себя массовое взаимодействие с оборудованием, которое обычно скрывается операционной системой, предлагающей приятные высокоуровневые API.
Практическим решением, вероятно, является получение одного из множества дистрибутивов mini linux и связывание их живых изображений вместе с вашим приложением.
И будут ли использоваться такие библиотеки, как stdio.h и stdlib.h?
Они не будут, так как их реализация обычно предоставляется операционной системой.