Как я могу написать программное обеспечение, которое работает очень близко к запуску системы? - PullRequest
2 голосов
/ 19 июня 2010

Я заинтересован в написании программного обеспечения, которое работает с минимальной загрузкой, насколько это возможно.Что я делаю?Это вопрос сборки?Нужно ли делать что-то особенное с диском, с которого запускается программное обеспечение?

Чтобы уточнить, я ищу точку, в которой доступны stdin и stdout, но не намного.

Ответы [ 5 ]

3 голосов
/ 19 июня 2010

Если вы хотите запустить код после POST, но до запуска ОС, вам нужно либо перехватить или заменить загрузчик. Нет простых ответов на следующие несколько вопросов, которые вы собираетесь задать.

В Интернете довольно много ресурсов для написания собственного загрузчика - вы можете начать с них:

Если вы ищете хорошую книгу по сборке x86, попробуйте:

1 голос

Просто запустить Linux без всякого мусора, который предоставляют дистрибутивы?Мое ядро ​​загружается за 1,8 секунды.Это самый простой способ сделать это.См. Linux From Scratch .

stdin и stdout - это специфичные для ОС концепции, они не существуют до загрузки (хотя, возможно, в некоторых пользовательских BIOS или загрузчиках они делают ...)

Следующим самым низким местом будет загрузчик, некоторые вещи инициализируются в этот момент, но у вас все еще будет много работы.

Вы можете пойти еще ниже, загрузитесвой BIOS, но тогда вам придется позаботиться обо всех нестандартизированных вещах, о которых заботится BIOS.

1 голос
/ 19 июня 2010

Одним из способов достижения этого эффекта может быть повторное использование некоторых очень ограниченных ОС, таких как урезанный Linux или даже старая DOS, и последующее автоматическое выполнение кода при запуске.Но это зависит от того, почему именно вы хотите сделать это, если это решение подойдет вам.

Редактировать: Или, если этого недостаточно, я бы посоветовал взглянуть на Lilo или grub4dos или что-то подобное, чтобы увидеть, еслиВы можете вставить свой код туда каким-то образом.Форумы на сайте Boot Land также могут быть полезны, так как они, похоже, не могут понять, как настроить процесс загрузки.

0 голосов
/ 30 июня 2010

Вот простой загрузчик, с которого можно начать.Вам понадобятся nasm, dd и дискета.

http://www.cs.umbc.edu/courses/undergraduate/313/spring05/burt_katz/lectures/Lect11/newBootSector.html

; boot1.asm   stand alone program for floppy boot sector
; Compiled using            nasm -f bin boot1.asm
; Written to floppy with    dd if=boot1 of=/dev/fd0

; Boot record is loaded at 0000:7C00,
        ORG     7C00h

; load message address into SI register:
        LEA     SI,[msg]

; screen function:
        MOV     AH,0Eh

print:  MOV     AL,[SI]         
        CMP     AL,0         
        JZ      done               ; zero byte at end of string
        INT     10h                ; write character to screen.    
        INC     SI         
        JMP     print

; wait for 'any key':
done:   MOV     AH,0       
        INT     16h                ; waits for key press
                                   ; AL is ASCII code or zero
                                   ; AH is keyboard code

; store magic value at 0040h:0072h to reboot:
;       0000h - cold boot.
;       1234h - warm boot.
        MOV     AX,0040h
        MOV     DS,AX
        MOV     word[0072h],0000h  ; cold boot.
        JMP     0FFFFh:0000h       ; reboot!

msg     DB      'Welcome, I have control of the computer.',13,10
        DB      'Press any key to reboot.',13,10
        DB      '(after removing the floppy)',13,10,0
; end boot1
0 голосов
/ 19 июня 2010

Это зависит от операционной системы.Вы должны добавить свою программу в раздел реестра RunOnce в Windows и инициализировать скрипт в Linux (в Linux есть разные методы init, поэтому есть разные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...