DJGPP

来自osdev
Zhang3讨论 | 贡献2022年3月30日 (三) 23:11的版本 (创建页面,内容为“DJGPP工具包是几个基本GNU实用程序到MS-DOS的端口,使用DJ Delorie创建的32位DPMI系统扩展器。 它包括GCC、binutils和Emacs的版本。 它还包括几个DOS和Windows特定的实用程序。 虽然DJGPP在过去被广泛用于操作系统开发,但它与MS-DOS的紧密联系以及与Windows XP的兼容性问题已导致大多数Windows用户转向CygwinMinGW。 DJGPP现在肯定被认为已经过时了。 == ELF文件 =…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

DJGPP工具包是几个基本GNU实用程序到MS-DOS的端口,使用DJ Delorie创建的32位DPMI系统扩展器。 它包括GCC、binutils和Emacs的版本。 它还包括几个DOS和Windows特定的实用程序。

虽然DJGPP在过去被广泛用于操作系统开发,但它与MS-DOS的紧密联系以及与Windows XP的兼容性问题已导致大多数Windows用户转向CygwinMinGW。 DJGPP现在肯定被认为已经过时了。

ELF文件

使用DJGPP生成ELF文件相当简单。 你需要的是一个安装好的DJGPP,你将需要sed,bison,flex,bash等。 您还需要从Windows95/98等中的dosbox执行此操作,以便您可以使用长文件名。

首先,下载最新的binutils。 (我用了 binutils-2.9.1.tar.gz)。 您需要原始(plain)binutils,而不是Linux的binutils,也不是dos的binutils等,而是来自任何GNU存档站点的原始binutils。

下载完binutils后,如果内存不足64mb,请编辑dos box的属性,并手动将65535输入为EMS内存、XMS内存和DPMI内存提供的box中(使用box中的选择器无法输入65535,因此必须手动输入)。

使用DJTARX将binutils解压到根目录(更容易)。

C:
CD \
DJTARX \download\binutils-2.9.1.tar.gz

解压后,您将不得不对DJGPP安装进行一些非常小的修改 (没什么大不了的!)

进入DJGPP\bin目录并复制flex.exe lex.exe, bash.exesh.exe并在根目录中创建一个名为\bin的新目录,然后将sh.exe复制到\bin\sh.exe

C:
CD \
COPY flex.exe lex.exe
COPY bash.exe sh.exe
MD \bin
COPY \djgpp\bin\bash.exe \bin\sh.exe

\bin目录必须与您解压的binutils位于同一驱动器上,该驱动器可以与安装DJGPP的驱动器不同。

现在进入binutils目录 (cd binutils-2.9.1) 并编辑 “configure” 脚本。

在脚本顶部附近有三行文字:

remove
hard_link
symbolic_link

更改这些行,使其显示为

remove=rm
hard_link=cp
symbolic_link=cp

保存修改后的配置脚本。

通过键入bash来执行bash shell,提示应该更改为“bash$”。

现在您必须设置bash以使用djgpp,输入以下命令。

export CC="c:/djgpp/bin/gcc.exe"
export LD="c:/djgpp/bin/ld.exe"
export BISON="c:/djgpp/bin/bison.exe"
export YACC="c:/djgpp/bin/bison.exe -y"

现在,您已经准备好构建新的 ELF 工具集了。 首先,您必须使用一些选项运行configure。

你可以选择你想要构建到你的新的binutil集合中的目标,我构建了所有的目标,以防我以后需要elf以外的其他东西(一些用于BSD的a.out格式,等等)。

./configure --enable-targets=all --with-gnu-as --with-gnu-ld --with-stabs

经过一个非常长的过程,如果一切顺利,您将不会发现任何错误,并将返回 “bash $ ” 提示,准备构建您的新实用程序。

现在再做些修补。。。配置进度还没有100%,您必须编辑每个目录中的“libtool”文件:bfd/libtool、as/libtool、gprof/libtool、ld/libtool和opcodes/libtool。 因此,退出bash(“Exit”)并使用编辑器打开这些文件,然后重新保存它们(不做任何修改,只需保存)。 这似乎修复了在libtool中有点破坏的crlf/lf/cr unix/dos机制。

重新输入bash并键入make,它将构建新的UTIL。 如果您已经启用了所有目标,则生成的.exe文件每个大约6到7MB,所以去掉调试信息(strie --strie-all *.exe),然后对它们使用DJP压缩器,每个文件应该大约600到900KB。

或者,如果您不想构建所有目标,则可以在没有 “--enable-targets=all” 选项的情况下运行配置,并替换为 “--targets=i386-unknown-elf”。

GCC本身不输出ELF/[COFF]/[a.out]]文件,GCC输出汇编器,该汇编器被传递给AS,后者将其组装为默认的任何输出格式。


另见

文章

外部链接