OSDev http://osdev.su/ |
|
Windows, FASM и MinGW для создания ОС http://osdev.su/viewtopic.php?f=6&t=362 |
Страница 1 из 2 |
Автор: | s3dworld [ 22 дек 2010, 20:51 ] |
Заголовок сообщения: | Windows, FASM и MinGW для создания ОС |
Всем доброго вечера! У меня стоит Windows 7. Опишу Вам мою ситуацию. Создал в папке файл boot.asm: Код: format ELF use16 org 0x7C00 hlt rb 510-($-$$) db 0x55,0xAA Компилирую, линкую и превращаю в бинарник: Код: fasm boot.asm boot.o ld -o Test.bin boot.o objcopy Test.bin -O binary На выходе получаю файл Test.bin с размером в 8212 байт. Странно, я думал что будет 512 байт, ну да ладно. Открываю его в hex-редакторе. С самого начала идёт: Цитата: FF FF FF FF 00 00 00 00 FF FF FF FF А вот начиная со смещения 0x1000 (то есть 4096) идёт: Цитата: F4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA И далее снова 0x00. Почему так? Я думал я получу 512 байт. |
Автор: | Himik [ 23 дек 2010, 01:16 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
А "format ELF" указывать обязательно? Без него наверно сразу получится бинарник из fasm, и не нужен будет ld и objcopy. Можешь на сайте http://flatassembler.net/examples.php посмотреть пример "FAT12 boot loader". Видать, данная конфигурация ld и objcopy не поддерживает binary. Напиши в какой системе компилируешь, тогда станет ясней. Я лично для решения этой проблемы в Cygwin и MinGW пересобирал пакет binutils из исходников, по инструкции с сайта http://wiki.osdev.org/GCC_Cross-Compiler Если не получится, то можешь скачать готовые версии ld и objcopy (распаковать архив в bin.). Они предназначены для получения ELF и binary: http://code.google.com/p/express-os/dow ... list?can=4 Возможно, objcopy использовать не обязательно, если для ld добавить параметры --oformat=binary --omagic И честно говоря, я собирал бинарник не для реального i8086, а защищённого режима i386, поэтому результата не гарантирую. |
Автор: | s3dworld [ 23 дек 2010, 13:03 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
chizh Я работаю в Windows, поэтому --oformat=binary вызывает ошибку. |
Автор: | Himik [ 23 дек 2010, 16:19 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
s3dworld писал(а): chizh Я работаю в Windows, поэтому --oformat=binary вызывает ошибку. И я в Windows. И параметр --oformat=binary в моей сборке работает. |
Автор: | s3dworld [ 23 дек 2010, 16:37 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
Тогда почему у меня не работает? Если я уберу ELF, тогда у меня не будет рассчитан адрес для вызова функции. Вот мой код. boot.asm: Код: use16 org 0x7C00 boot__code16: mov AX,CS mov DS,AX mov ES,AX mov FS,AX mov GS,AX mov SS,AX mov AX,boot_stack16_start mov SP,AX mov AH,0x02 mov AL,10 ; Количество читаемых секторов mov CL,2 ; Сектор mov CH,0 ; Цилиндр mov DH,0 ; Головка mov DL,0 ; Диск mov BX,boot__continuation int 0x13 jmp boot__continuation boot__stack16: db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 boot_stack16_start: db 0,0,0,0,0,0,0,0 rb 510-($-$$) db 0x55,0xAA boot__continuation: preparation.asm: Код: format ELF use32 extrn '_kernel' as kernel call kernel main.c: Код: void kernel(void) { int a=0; int b=0; int c=0; a=2; b=3; c=a+b; } И собираю: Код: @echo on fasm boot.asm boot.bin fasm preparation.asm preparation.o gcc -ffreestanding -c -o main.o main.c ld --oformat=binary -o Test.img preparation.o main.o pause В ответ: Код: D:\01>fasm boot.asm boot.bin flat assembler version 1.69.29 (985305 kilobytes memory) 3 passes, 512 bytes. D:\01>fasm preparation.asm preparation.o flat assembler version 1.69.29 (985271 kilobytes memory) 1 passes, 348 bytes. D:\01>gcc -ffreestanding -c -o main.o main.c D:\01>ld --oformat=binary -o Test.img preparation.o main.o ld: cannot perform PE operations on non PE output file 'Test.img'. D:\01>pause Для продолжения нажмите любую клавишу . . . Вот я и озадачен. Я сначала хотел переход в защищённый режим писать на C-коде, а тут оказывается что я даже просто на 32-битный C-код перейти не могу. |
Автор: | Himik [ 23 дек 2010, 18:52 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
ld из моего архива называется i686-elf-ld. Посмотри содержимое архива. |
Автор: | s3dworld [ 23 дек 2010, 19:32 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
Какого архива? |
Автор: | Himik [ 24 дек 2010, 01:18 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
s3dworld писал(а): Какого архива? http://code.google.com/p/express-os/dow ... list?can=4 Я о нём писал в сообщении 22 дек 2010 22:16 Но я его уже стёр, оказалось что он тоже неправильно работает. |
Автор: | qeos [ 25 дек 2010, 18:42 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
я делал так: Цитата: boot16.asm 1. копирую бутсег в какую-то часть памяти 2. дочитываю бутсектор (то что за 512 байтами) 3. включаю расширеный режим (сегменты простые типа всю память под один сегмент кода и данных) 4. прыгаю в место с уже 32-ым кодом 5. перенастраиваю сегменты на 32-й режим 6. прыгаю на код ядра Цитата: bootstrap.c void _main(); void ___start(){ _main(); } тут вся хитрость.. этот код компилируется просто в call на реальное место начала программы. объектные файлы можно компилировать в любом порядке. компилирование нужно делать так чтоб бутстрап был первым. ld -Ttext 0x40000 -nostdlib bootstrap.o %objects% дальше преобразовываем в бинарник objcopy -O binary a.exe %binary% в итоге манипуляций должно быть два файла. первый это буткод для стартапа и второй это собственно ядро написаное на С. |
Автор: | s3dworld [ 25 дек 2010, 19:33 ] |
Заголовок сообщения: | Re: Windows, FASM и MinGW для создания ОС |
Спасибо! Сейчас всё работает. Практически уже свою файловую систему написал. Только вот не знаю как читать сектора с дискеты в защищённом режим. Не подскажите? И ещё у меня вопрос по поводу языка C++. Как мне можно настроить операторы new, new[], delete и delete[], чтобы я их мог использовать в программе. Я просто даже представить не могу что они делают на низком уровне и как мне их переопределить. Для меня это очень важно. Так как файловую систему придумал, осталось только реализовать. Даже написал программу форматирования образа в мою файловую систему. Друг написал программу, позволяющую в Windows открывать образ дискете моей файловой системы, просматривать, извлекать и импортировать файлы. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |