Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可引导和跨平台应用程序,并使用delphi或Pascal_Delphi_Pascal - Fatal编程技术网

可引导和跨平台应用程序,并使用delphi或Pascal

可引导和跨平台应用程序,并使用delphi或Pascal,delphi,pascal,Delphi,Pascal,是否可以使用Delphi或Pascal创建可引导(MBR应用程序)应用程序(我知道我们不能使用vcl、RTL和其他东西,因为它们依赖于操作系统),但我至少可以使用Readln和writeln 如果这是真的!!!我们可以在其他操作系统下运行这个程序吗。 但我知道PE(windows)和ELF(Linux)格式是不同的。但至少通过一些小的修改,我可以做到这一点。您并没有真正将“应用程序”放在MBR中 MBR的整个大小是512字节,其中代码只能使用446 如果你还没有一个操作系统可以将功能委托给你,那

是否可以使用Delphi或Pascal创建可引导(MBR应用程序)应用程序(我知道我们不能使用vcl、RTL和其他东西,因为它们依赖于操作系统),但我至少可以使用Readln和writeln

如果这是真的!!!我们可以在其他操作系统下运行这个程序吗。 但我知道PE(windows)和ELF(Linux)格式是不同的。但至少通过一些小的修改,我可以做到这一点。

您并没有真正将“应用程序”放在MBR中

MBR的整个大小是512字节,其中代码只能使用446

如果你还没有一个操作系统可以将功能委托给你,那么祝你好运,在这方面你会创造出一些有用的东西。基本上,您在MBR中所能做的就是放置代码来启动引导加载程序

这是一个关于MBR拆卸的页面:


值得一提的是,PE比ELF是一种非常多样化的格式。 不仅要修改几个字节。。。整个布局和图书馆访问是多样的,装订是完全多样的

为了在控制台模式下启动Delphi应用程序,您可以放置一个小型的DOS系统(例如,看看FreeDOS),然后使用实例运行Delphi应用程序。DWPL允许在Delphi 5-7中使用WDOSX DOS extender作为核心运行本机32位保护模式DOS程序。我在一些带有网络适配器的旧硬件中使用了它,它工作起来很有魅力。如果您对它感兴趣,我可以发布一些更新的DWPL代码

对于这样的目标,您应该看看。从本质上讲,您可以根据需要对其进行自定义。使用FPC编写的操作系统草案甚至多种多样。例如,请参阅或-最新版本使用Delphi可执行文件作为源

您可以看到Toro的启动代码,以及使用它创建的“”源代码

但是对于直接引导应用程序,引导并不是那么困难。真正的问题是硬件层。 BIOS很少提供对它的访问。 就网络层而言,您必须查看站点等以获得一些低级网络访问。。。但是手工重写所有这些驱动程序可能非常耗时

简而言之:所有这些“纯pascal”操作系统都只是理论上的,运行的是控制台和一些低性能的网络(模拟像NE2000之类的糟糕的网络适配器)。所以那些“pascal”操作系统只是概念的证明。远离有效的解决方案!但是非常好的技术挑战,在所有情况下,非常鼓舞人心

为什么要重新发明轮子?如果您想要一个轻快的系统,请使用定制的Linux内核


然后使用将您的Delphi应用程序(没有用户界面)编译成Linux,或者更好的免费Pascal。

为什么必须编写引导加载程序

您可以使用像GRUB这样的现成引导加载程序,并从中链接加载PE可执行文件

当然,这是一个非常古老和毛茸茸的东西,但在过去的好日子里,人们用它赢得了PE格式的可执行文件和DOS扩展器

本世纪还有一些东西,为什么不制作自己的可引导REACTOS磁盘,并添加自己用Delphi编写的PE可执行文件来处理“用户shell”

您也可以(但这需要许可)使用Windows PXE。我认为像BartPE这样的项目可能属于法律的灰色地带,或者至少是未经许可的。因此,一个完全不含MS的解决方案(reactos),用于一台完全独立的带有reactos的kiosk PC,可能更符合您的要求


你能编写自己的操作系统吗?您自己的UI层?你自己的视频设备驱动程序?我不这么认为。因此,请使用DOS和TurboPascal,或ReactOS和PE win可执行文件。或者你可以使用FreePascal,在一个非常轻量级的可移植Linux内核和根文件系统上构建你的应用程序。

Readln和Writeln恐怕也可以调用操作系统。此外,引导加载程序不是PE格式,BIOS基本上只是跳转到第一条指令并开始执行。@Blorgbeard您可以覆盖System.pas单元,并根据需要替换Readln和Writeln内部操作系统调用。对于引导,完全可以启动“基本”操作系统(如DOS或您自己的东西),然后通过一些模拟调用调用PE可执行文件(例如,在DOS引导后,DWPL就是这样做的)。但是链接器呢?我认为您无法链接delphi链接器的平面非PE“rom图像”样式输出。@Warren链接PE并不困难。看看WDOSX源代码,您将了解它是如何工作的。某种模拟:外部调用被路由到模拟Windows API的外部库。我刚才说的“MBR应用程序”是为了指出可启动的应用程序,仅此而已,很抱歉,ClassIOS是用Delphi编译器而不是FPC构建的。@Code优雅确实-但它可以用FPC生成,没有问题(同样的system.pas单元黑客和PE仿真技巧也适用于FPC)