21

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

Якщо ви пишете ОС, то скажіть в якому режимі працює процесор, бо функціїї біоса працюють лише в реальному режимі х86, а з захищеного режиму треба або напряму в порти писати, які різняться у виробників материнок, або знов-таки перемикатися на реальний режим. Якщо ви пишете на G++, то який код ви компілюєте -- я не повірю що 16-бітний, бо (здається) таке може робити лише пакунок DJGPP. Отож розберіться спочатку з режимами роботи процесора, а потім вже компілюйте/шукайте/питайте.

Поняття не маю в якому режимi вiн працює.
По замовчанню безпечний ?

22

Re: Як змусити ПК вимкнутися ?

Не маєте поняття -- не працюйте з мовою асемблера. Так просто зробити включення в сішний код інлайн асемблера це писати вилами по воді. Викладайте тут ваш проєкт, або принаймні путньо опишіть з якими ключами ви компілюєте ваш код і що саме його запускає -- якийсь заванажувач, чи він прямо в бут секторі виконується.

Подякували: cheappi3861

23

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

Не маєте поняття -- не працюйте з мовою асемблера. Так просто зробити включення в сішний код інлайн асемблера це писати вилами по воді. Викладайте тут ваш проєкт, або принаймні путньо опишіть з якими ключами ви компілюєте ваш код і що саме його запускає -- якийсь заванажувач, чи він прямо в бут секторі виконується.

Завантаження через GRUB.
Виходить Iso який я запихаю на флешку.
Все грузить даже клавиатуру считувати може.
И перезагрузка паше.
А вот вимкнути не можу.

PS: Хiба вiд завантажувача залежить спосiб вимкнення ?

24 Востаннє редагувалося Fox (20.03.2017 23:56:04)

Re: Як змусити ПК вимкнутися ?

"з якими ключами ви компілюєте ваш код"
Я так розумiю ви про це:
PS: Взяв колись в гуглi.

GCCPARAMS = -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings
ASPARAMS = --32
LDPARAMS = -melf_i386

objects = loader.o kernel.o string.o time.o

%.o: %.cpp
    g++ $(GCCPARAMS) -o $@ -c $<
    
%.o: %.s
    as $(ASPARAMS) -o $@ $<
    
mykernel.bin: linker.ld $(objects)
    ld $(LDPARAMS) -T $< -o $@ $(objects)
    
install: mykernel.bin
    sudo cp $< /boot/mykernel.bin
    
compile-iso: mykernel.bin
    clear
    rm $(objects)
    echo 'OS file delet'
    sleep 1
    rm -rf iso/boot/mykernel.bin
    cp mykernel.bin iso/boot/mykernel.bin
    rm -rf mykernel.iso
    grub-mkrescue --output=mykernel.iso iso
    
install-compiler:
    rm -rf iso
    mkdir iso
    mkdir iso/boot
    mkdir iso/boot/grub
    cp mykernel.bin iso/boot/mykernel.bin
    echo 'set timeout=0'                      > iso/boot/grub/grub.cfg
    echo 'set default=0'                     >> iso/boot/grub/grub.cfg
    echo ''                                  >> iso/boot/grub/grub.cfg
    echo 'menuentry "My Operating System" {' >> iso/boot/grub/grub.cfg
    echo '  multiboot /boot/mykernel.bin'    >> iso/boot/grub/grub.cfg
    echo '  boot'                            >> iso/boot/grub/grub.cfg
    echo '}'                                 >> iso/boot/grub/grub.cfg
Прихований текст

На osdev знайшов
Але що всерединi функцiй там не сказали...

AcpiEnterSleepStatePrep(5);
cli(); // disable interrupts
AcpiEnterSleepState(5);
panic("power off"); // in case it didn't work!
Подякували: 0xDADA11C71

25

Re: Як змусити ПК вимкнутися ?

PS: Хiба вiд завантажувача залежить спосiб вимкнення ?

Саме так, ви компілюєте 32-бітний код, тому GRUB сам починає виконання з реального режиму, зчитує ваше ядро та виконує його вже в захищеному! Саме тому переривання біоса INT 0x15 не працює. Як перемкнутися на реальний режим. Звичайно, це милиці х86 архітектури, але багато типових драйверів навіть відомих ОС'ів користються цим способом для, наприклад, встановлення відеорежиму. Якщо хочете написати власну ОС для х86, то це єдиний шлях підтримки різноманітного обладнання, з материнськими платами включно.

Подякували: 0x9111A, Fox, raxp, ostap34PHP4

26

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

PS: Хiба вiд завантажувача залежить спосiб вимкнення ?

Саме так, ви компілюєте 32-бітний код, тому GRUB сам починає виконання з реального режиму, зчитує ваше ядро та виконує його вже в захищеному! Саме тому переривання біоса INT 0x15 не працює. Як перемкнутися на реальний режим. Звичайно, це милиці х86 архітектури, але багато типових драйверів навіть відомих ОС'ів користються цим способом для, наприклад, встановлення відеорежиму. Якщо хочете написати власну ОС для х86, то це єдиний шлях підтримки різноманітного обладнання, з материнськими платами включно.

Дакую за сайт

Прихований текст

Як би я хоч трохи знав англiйський

А для чого безпечний режим я не можу поняти ?
Його же що в безпечному не спалиш программою що в x86 не спалиш....
Так для чого безпечний режим ?

27

Re: Як змусити ПК вимкнутися ?

Для захисту адресних просторів програм і тим більше ядра від програм. Наприклад, механізм віртуальної пам'яті зі свопом тримається на захищеному режимі. Якщо ви так мало знаєте про архітектуру х86, то мабуть не варто писати ядро і лізти в осдев, або почніь з реального режиму і написання програм для ДОС'у.

28

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

Для захисту адресних просторів програм і тим більше ядра від програм. Наприклад, механізм віртуальної пам'яті зі свопом тримається на захищеному режимі. Якщо ви так мало знаєте про архітектуру х86, то мабуть не варто писати ядро і лізти в осдев, або почніь з реального режиму і написання програм для ДОС'у.

На досi asm ?
Я asm не знаю взагалi :C

29

Re: Як змусити ПК вимкнутися ?

осдев без асму безглуздий, таке життя. Дос працює в реальному режимі, тому від нього легко працювати з перериваннями bios та різним залізяччям. В захищеному режимі ОС часто закривають порти і програми не можуть напяму взаємодіяти з залізом, тому так.

Подякували: Fox1

30

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

осдев без асму безглуздий, таке життя. Дос працює в реальному режимі, тому від нього легко працювати з перериваннями bios та різним залізяччям. В захищеному режимі ОС часто закривають порти і програми не можуть напяму взаємодіяти з залізом, тому так.

Я ту мову не можу розумiю...
Вона дуже важка.

Подякували: ostap34PHP1

31

Re: Як змусити ПК вимкнутися ?

Вона якраз найлегша, але це як шахи, як ходить хвігура легко вивчити а майстром спорту важко стати. Беріть пітера абеля і штудіюйте ДОС, потім буде леше.

32

Re: Як змусити ПК вимкнутися ?

А чому ніхто не каже, що на компі уже може й не бути ніякого БІОСу, а лише УЕФІ?

Подякували: 0xDADA11C7, koala2

33

Re: Як змусити ПК вимкнутися ?

Бо пан пиляє ядро саме для х86. Чи 32-розрядне UEFI теж існує?

34

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

Чи 32-розрядне UEFI теж існує?

Існує, але поширене мало.

Подякували: 0xDADA11C71

35

Re: Як змусити ПК вимкнутися ?

Перший раз чую про UEFI.

36

Re: Як змусити ПК вимкнутися ?

А ще беріть до рук Таненбаума і штудіюйте.

Подякували: ostap34PHP, HetmanNet2

37

Re: Як змусити ПК вимкнутися ?

0xDADA11C7 написав:

А ще беріть до рук Таненбаума і штудіюйте.

Щось в гуглi нема взагалi нiчого толкового про те як вимкнути ПК

38

Re: Як змусити ПК вимкнутися ?

VTrim написав:
reverse2500 написав:

НАПИШІТЬ "ДЛЯ ВИМКНЕННЯ пк НАЖМІТЬ КЛАВІШУ off НА СИСТЕМУНОМУ БЛОКОВІ"

Прихований текст

А можна просто розбити системний блок, теж варіант.

:D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  :D  *YAHOO*

39

Re: Як змусити ПК вимкнутися ?

Я бачу, а ви ні, то може мій гугл кращій ніж ваш? Таненбаум розповідає як писати ос з нуля, його обчитався лінус торвальдс і написав власну ос.

40

Re: Як змусити ПК вимкнутися ?

vtorgashov написав:
0xDADA11C7 написав:

А ще беріть до рук Таненбаума і штудіюйте.

Щось в гуглi нема взагалi нiчого толкового про те як вимкнути ПК

А це?

Подякували: 0xDADA11C71