Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/66: Рейтинг темы: голосов - 66, средняя оценка - 4.98
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79

Запуск кода на железе

24.09.2019, 11:34. Показов 14278. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я понимаю, что немного не по теме, но как можно запустить код C++,C# или Python на железе? К примеру элементарный вывод текста через cout,Console.Write или print ... Или для этого обязательно писать код для работы с железом ? И можно ли будет формы к примеру WinForms или WPF так запустить ?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2019, 11:34
Ответы с готовыми решениями:

Запуск исходного кода ОС на FASM
Не могу понять в чем дело. Откомпилировал листинг ОС, которую нашел на вашем форуме, и немогу найти исходную .exe программу ! Что делать? ...

Запуск (перезапуск) Windows 10 - сколько времени стартует ваша система, и на каком железе?
Ребята всем привет меня интересует такой вопрос ...(как стартует ваша сборка сколько по времени у меня 1-2 минуты, имеется ли при запуске...

Запуск неуправляемого кода внутри кода c#
часто требуется при выполнении программы запускать исполняемые файлы (exe) с ключами. Для этого использую пространство имен using...

64
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 12:10
Студворк — интернет-сервис помощи студентам
Т.е. на компьютере, где Вы пытаетесь запустить свой hi, установлена какая-то Windows.
Я бы посоветовал главную страницу сведений msinfo32 вставить в эту тему.
Лучше не картинкой, а в текстовом виде в тегах "Спойлер" ([SPOILER] [/SPOILER])
В msinfo32 есть возможность скопировать текст всей страницы обычными Ctrl+A Ctrl+C
или командной в меню.
Это может в дальнейшем облегчить задачу знатокам, помогающим Вам.

Также не помешает знать версию Microsoft Visual Studio или тех средств разработки программ, которые Вы обычно используете.

Судя по сообщениям на скриншоте, встроеное ПО вашего компьютера действительно работает в режиме совместимости с протколом загрузки, разработанным почти 40 лет назад для загрузки PC с дискеты. С загрузкой бутсектора (крошеченого загрузчика) с флешки BIOS справился, но бутсектор не нашёл, какой код нужно загружать ему.

UEFI удобнее, если Вы собираетесь писать код на C++. Так как ПК новый, скорее всего устаревший режим загрузки можно отключить в настроках встроенного ПО. Что конкретно для этого нужно сделать, зависит от системы. Может быть, нужно нажать какую-нибудь клавишу во время загрузки, или особым образом перезагрузить Windows. Но после переключения режима на UEFI, установленная Windows может перестать стартовать (не обязательно), и перед загрузкой Windows, возможно, придётся менять режим обратно.
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 12:20  [ТС]
politoto, версия visual studio 2019, версию точную надо или какого года достаточно? Операционная система Windows 10 Pro одна из последних версий, читал, что в bios можно переключить на uefi(должен быть определенный пункт)...
Вот данные из msinfo32 -
Кликните здесь для просмотра всего текста
Имя ОС Майкрософт Windows 10 Pro
Версия 10.0.18362 Сборка 18362
Дополнительное описание ОС Недоступно
Изготовитель ОС Microsoft Corporation
Имя системы DESKTOP-EDO5NSK
Изготовитель System manufacturer
Модель System Product Name
Тип Компьютер на базе x64
SKU системы SKU
Процессор AMD Ryzen 3 2200G with Radeon Vega Graphics, 3500 МГц, ядер: 4, логических процессоров: 4
Версия BIOS American Megatrends Inc. 4406, 28.02.2019
Версия SMBIOS 2.8
Версия встроенного контроллера 255.255
Режим BIOS Устаревший
Изготовитель основной платы ASUSTeK COMPUTER INC.
Модель основной платы PRIME A320M-K
Версия основной платы Rev X.0x
Роль платформы Рабочий стол
Состояние безопасной загрузки Не поддерживается
Конфигурация PCR7 Привязка невозможна
Папка Windows C:\Windows
Системная папка C:\Windows\system32
Устройство загрузки \Device\HarddiskVolume2
Язык системы Россия
Аппаратно-зависимый уровень (HAL) Версия = "10.0.18362.387"
Имя пользователя DESKTOP-EDO5NSK\playc
Часовой пояс Омское стандартное время
Установленная оперативная память (RAM) 8,00 ГБ
Полный объем физической памяти 5,94 ГБ
Доступно физической памяти 1,60 ГБ
Всего виртуальной памяти 9,44 ГБ
Доступно виртуальной памяти 1,93 ГБ
Размер файла подкачки 3,50 ГБ
Файл подкачки C:\pagefile.sys
Защита DMA ядра Откл.
Безопасность на основе виртуализации Не включено
Поддержка шифрования устройства Причины сбоя автоматического шифрования устройства: Доверенный платформенный модуль не пригоден к использованию, Привязка PCR7 не поддерживается, Сбой интерфейса проверки безопасности оборудования, устройство не поддерживает текущий режим ожидания, Обнаружены запрещенные устройства или шина с поддержкой прямого доступа к памяти (DMA), Доверенный платформенный модуль не пригоден к использованию
Hyper-V — расширения режима мониторинга виртуальной машины Да
Hyper-V — расширения для преобразования адресов второго уровня Да
Hyper-V — виртуализация включена во встроенном ПО Нет
Hyper-V — предотвращение выполнения данных Да
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 12:20
Как уже писал уважаемый shmkv, для запуска своего hi.efi, скорее всего, придётся также отключить Secure Boot (проверку подписей кода на соответствие ключам, которым доверяет встроенное ПО)
https://www.cyberforum.ru/post13864041.html

Если обсуждаемый компьютер - единственный имеющийся в Вашем распоряжении, я бы
настоятельно рекомендовал освоить какой-нибудь эмулятор ПК (qemu, Virtual Box и т.п.) и для тестирования Вашего кода на этапе разработки использовать исключительно его. Даже если есть другой компьютер для тестирования, использование эмулятора значительно ускорит процесс.
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 12:46  [ТС]
politoto, про эмуляторы спасибо, я про Virtual box знаю, но как-то не подумал, запускаю, как уже и сказал, myos.exe, проще говоря исполняемый файл, а не efi файл

Добавлено через 3 минуты
politoto, что подразумевается под точками входа и куда это вставлять? В параметры компиляции? Или можно на vs 2019 это забабахать ? Ну по хорошему можно и exe сделать для запуска на железе, но у меня видимо автозапуск не сработал, либо что-то еще надо сделать, потому что теже установщики Windows содержат exe файл

Добавлено через 1 минуту
politoto, Secure Boot выключается в bios'е или где ? И можно ли вместо hi.efi запускать hi.exe ?

Добавлено через 9 минут
politoto, вообщем, скачиваю qemu и на нем попробую, так же нашел, где можно выключить Secure Boot, позже на своей мат.плате в bios'e посмотрю и так же про uefi

Добавлено через 11 минут
politoto, а qemu-x32-64, вроде пытается загрузить, но пишет no bootable device
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 13:17
Цитата Сообщение от ILUNCHIK Посмотреть сообщение
Ну по хорошему можно и exe сделать для запуска на железе, но у меня видимо автозапуск не сработал, либо что-то еще надо сделать, потому что теже установщики Windows содержат exe файл
EXE файлы, подобные C:\Windows\System32\ntoskrnl.exe запускает загрузчик ОС Windows. Теоретически, конечно, он может запускать и Ваш код.
Тот механизм автозапуска, который Вы, вероятно, использовали, предназначен для автоматического запуска программ со сменных носителей ( DVD, флешек и т.п. ) во время работы Windows.

Цитата Сообщение от ILUNCHIK Посмотреть сообщение
апускаю, как уже и сказал, myos.exe, проще говоря исполняемый файл, а не efi файл
Добавлено через 3 минуты
politoto, что подразумевается под точками входа и куда это вставлять? В параметры компиляции? Или можно на vs 2019 это забабахать ?
Верно. Набор инстрементов MSVS 2019 умеет изготавливать модули efi. По формату ЕFI представляет собой сильно упрощённый EXE (точнее, PE - portable executable ).
Для сборки программе link нужно передать подходяющий ключ /SUBSYSTEM
Code
1
2
3
      /SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
                  EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
                  NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
Для задания нестандартной точки входа у link есть
Code
1
     /ENTRY:символ
в нём Вы указываете функцию, с которой должно начаться выполнение программы.

Добавлено через 11 минут
Цитата Сообщение от ILUNCHIK Посмотреть сообщение
qemu-x32-64, вроде пытается загрузить, но пишет no bootable device
В эмуляторе тоже нужно включить поддержку UEFI, и подключить соответствуюещее "встроеннное ПО" эмулятора
https://github.com/tianocore/t... o-run-OVMF

Добавлено через 3 минуты
Пока в проекте только один файл, собирать EFI можно одной строкой
PowerShell
1
cl /Tp hi.c++ /link /subsystem:EFI_APPLICATION /entry:m
Добавлено через 2 минуты
Когда проект разовьётся, в идеале по F5 должен запускаться эмулятор, загружающий и выполняющий собранный EFI Application
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 13:30  [ТС]
politoto, спасибо, попробую поставить Virtualbox и скомпилировать С++ код с этими ключами которые ты скинул

Добавлено через 4 минуты
politoto, чет я не нашел, куда надо вставлять ключ /SUBSYSTEM ?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 13:30
qemu с OVMF тоже подойдёт.
Сейчас дорабатывается запускалка EFI прямо из linux или windows без эмулятора.
Эмулятор EFI для windows, который Intel с друзьями когда-то давно разработала уже несколько устарел.
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 13:41  [ТС]
politoto, с установкой OVMF я видимо так же понял не до конца запоролся на этом пункте - bash$ cp /path/to/ovmf/OVMF.fd bios.bin ... Пишет, что не может найти путь... P.S. bash$ естественно не пишу и пишу это в PowerShell

Добавлено через 5 минут
politoto, и опять же повторю свой вопрос, где вставлять в visual studio ключ /SUBSYSTEM
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 14:08
Допустим, запустили Вы Developer PowerShell for VS 2019.
Перешли в папку со своим кодом в файле Hi.c++

В командной строке пишете
Code
1
cl /Tp hi.c++ /link /subsystem:EFI_APPLICATION /entry:m
и получаете в ответ что-то вроде
Code
1
2
3
4
5
6
7
8
hi.c++
Microsoft (R) Incremental Linker Version 14.22.27905.0
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:hi.exe
/subsystem:EFI_APPLICATION
/entry:m
hi.obj
Можно сразу добавить в конец строки /out:hi.efi.

То же самое в x64 Native Tools Command Prompt for VS 2019
Code
1
cl /Tp hi.c++ /link /subsystem:EFI_APPLICATION /entry:m /out:hi.efi
Проверяем, что получилось:
Code
1
dumpbin /headers hi.efi
Получаем
Dump of file hi.efi

PE signature found

File Type: DLL

FILE HEADER VALUES
8664 machine (x64)
...
OPTIONAL HEADER VALUES
20B magic # (PE32+)
14.22 linker version
200 size of code
200 size of initialized data
0 size of uninitialized data
1000 entry point (0000000180001000)
1000 base of code
180000000 image base (0000000180000000 to 0000000180002FFF)
1000 section alignment
200 file alignment
0.00 operating system version
0.00 image version
1.00 subsystem version
0 Win32 version
3000 size of image
200 size of headers
AFDC checksum
A subsystem (EFI Application)
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 14:34  [ТС]
politoto, куча ошибок выводит - https://ideone.com/23Az1U

Добавлено через 15 минут
politoto, в результате нету myos.efi, а есть только myos.obj
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 15:10
Уберите для начала все стандартные #include из кода.
Если не использовать специальные версии стандартных библиотек, то пока Вам доступно
только то, что можно добыть из структуре EFI_SYSTEM_TABLE ,
указатель на которую UEFI передает в точку входа как один из параметров.

Пример, как выводить строчку без использования стандартных библиотек,
пользуясь исключительно средствами UEFI
Запуск кода на железе

Где брать описания этих структур?

Уважаемый shmkv предложил варианты ответов и на этот вопрос
https://www.cyberforum.ru/post13864041.html
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 15:32  [ТС]
politoto, товарищ shmkv предложил не совсем рабочий вариант... Выдает ошибки с синтаксисом
Кликните здесь для просмотра всего текста
myos.cpp
myos.cpp(1): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
myos.cpp(1): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "EFIAPI"
myos.cpp(2): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
myos.cpp(2): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)

Вот мой код
C++
1
2
3
4
5
EFI_STATUS EFIAPI EfiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE* SystemTable)
{
    SystemTable->ConOut->OutputString(SystemTable->ConOut, L"This is test\r\n");
    return EFI_SUCCESS;
}
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 15:36
Надо как-то объявить или задефайнить все эти EFIAPI, IN etc.
для начала как
C++
1
2
#define EFIAPI
#define IN
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 15:37  [ТС]
politoto, даже попробовал чуть переделать код, но все так же и ошибки теже
C++
1
2
3
4
5
6
7
8
9
10
EFI_STATUS EFIAPI EfiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE* SystemTable)
{
    SystemTable->ConOut->OutputString(SystemTable->ConOut, L"This is test\r\n");
    return EFI_SUCCESS;
}
 
int main() {
    EfiMain();
    return 0;
}
Добавлено через 30 секунд
politoto, понял, сейчас попробую
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 15:46
main() не нужен, конечно.

IN собственно так и определён в
https://github.com/tianocore/e... ase.h#L288


Читате, копипастаете, инклюдаете...
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 15:51  [ТС]
politoto, теперь появились другие ошибки ))) Ошибки -
Кликните здесь для просмотра всего текста

myos.cpp
myos.cpp(9): error C2059: синтаксическая ошибка: ,
myos.cpp(10): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
myos.cpp(10): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)

Код -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#define EFIAPI
#define EFI_STATUS
#define EFI_HANDLE
#define EFI_SYSTEM_TABLE
#define IN
#define ImageHandle
#define EfiMain
 
EFI_STATUS EFIAPI EfiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE* SystemTable) 
{
    SystemTable->ConOut->OutputString(SystemTable->ConOut, L"This is test\r\n");
    return EFI_SUCCESS;
}
Добавлено через 1 минуту
politoto, я так понял надо создать файл base.h, в него скопипастить код из ссылки скинутой вами и просто подключить к моему коду ?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 15:58
"Настоящие" определения типов
EFI_STATUS
EFI_HANDLE
EFI_SYSTEM_TABLE
а также типа члена SystemTable->ConOut, в котором есть OutputString,
нам нужны.

ищите здесь или поблизости
https://github.com/tianocore/e... UefiSpec.h

Можете найти и почитать документацию по UEFI. Оттуда копипастать может быть быстрее.

Добавлено через 2 минуты
Можно сразу всю edk2 получить с github и инклюдать оттуда.
Можно только необходимое копировать прямо себе в с++ и не инклюдать вообще ничего.
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
19.10.2019, 16:24  [ТС]
politoto, тоесть достаточно просто скачать edk2, запустить bat установщик edk2, заинклудить его в проект и все? И можно теже #define убирать и ошибок не будет ?

Добавлено через 12 минут
politoto, вроде установил батник модуль, перезапустил vs, но не
C++
1
#include <edk2>
не работает, не
C++
1
#include <edk>
не работает, так же не работает
C++
1
#include <edk.h>
и
C++
1
#include <edk2.h>
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2019, 22:36
ILUNCHIK, что для Вас интереснее: поразбираться или сделать что-нибудь до понедельника?
1
76 / 4 / 0
Регистрация: 26.10.2018
Сообщений: 79
20.10.2019, 07:32  [ТС]
politoto, убедиться, что оно работает, а потом поискать книжки или материал...
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2019, 07:32

Запуск кода
Добрый день,Хотел бы попросить помощи о запуске кода С# Как это сделать?Скоплировать. using System; using...

Запуск С# кода из powershell
Все добрый день. Помогите разобраться с ошибкой. запускаю код C# в повершеле $power = @&quot; using System; namespace...

Запуск кода асинхронно
Добрый день господа! Имею следующий класс: using HtmlAgilityPack; using System.Collections.Generic; using System.IO; ...

Запуск кода в Notepad++
Только начал осваивать HTML. Обучаюсь по видеокурсу. Смотрю, что там автор через браузер запускает прогу, ну у меня тоже вышло. А вот можно...

Запуск чужого кода
Пробую запустить вот эту программу https://github.com/dimMaryanto93/dalas18-cash-management на Intellij IDEA ultimate. Фреймворки стоят,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru