用汇编和c语言开发操作系统需要什么样的编译器?

时间:2021-04-11 01:14:50
用汇编和c语言开发操作系统需要什么样的编译器?

不同的平台(即不同的操作系统)下用的编译器肯定是不一样的,而且做出来的系统,哪怕只有引导扇区的一小段代码,如果要在虚拟机上运行起来,该使用的编译器和一般我们平时练汇编或者c语言的编译器有什么区别。

我不是讲大话,做白日梦,只是最近开始研究linux内核,想到这方面的问题,脑子里没有一个清晰的概念哦,想弄明白这是怎么一回事。

打个比如:我有一个操作系统的源代码,用汇编和c语言写的,是完完全全跟现在已有的操作系统都不一样的,我想在windows环境下编译,然后在虚拟机上运行出来,我该怎么处理这些代码,需要哪些工具,当然主要指的是编译器!

希望大神帮帮解释下!!!!
感谢!!!!!!!!!!!

17 个解决方案

#1


linux内核是用C和汇编开发的,用了什么编译器呢?

#2


难道说想做任何新的操作系统都用它的编译器?编译器全是通用的,再说编译linux内核基本都是在linux环境下进行编译的。

大神,我的水平还没到举一反三的程度,麻烦说的详细点!!!
谢谢

#3


开发操作系统需要的编译器取决于硬件指令集。比如开发x86机器上的操作系统和开发arm上的操作系统就需要各自平台的编译器。

#4


汇编语言不需要编译器,需要汇编器,各个不同架构的硬件平台所用的汇编语言指令集是不一样的,平台相关性非常大;C语言的话只要是支持C语法的编译器都可以,Intel有C编译器,微软有C编译器,GNU也有自己的C编译器,无所谓用哪种都可以

#5


与不同操作系统下的编译器没有关系,比如linux的gcc和windows下的vs就没有区别。

#6


我想说的是,编译器并不是关键。
linux选用了gcc最主要还是因为用了gcc的语言扩展比较多。

#7


OS启动最重要的还是如何从MBR跳至内核二进制文件的入口点,这需要直接把汇编指令用二进制写进MBR。。
而Linux中引入了GRUB,其中就还有stage1 stage2等阶段,也只不过是stage1跳至stage2的入口而已。

看linux不要妄想把每个函数都看懂,抓住主要的,别迷失于过多的细节

#8


我最多就手写一个简单的boot,写os需要的东西太多了,编译器只是针对特定的cpu决定你选哪个,因为跑在计算机上的是一条条的指令,不同cpu指令不一样,编译器只负责把你的代码转化为一条条的指令。

#9


C/C++用编译器gcc(linux)或cl.exe(windows)
汇编用汇编器。

#10


综合大家的回答,那就是说只要编译出对应的二进制可执行文件就可以了?

#11


vc的编译器是用vc开发的。

#12


gcc 编译器支持交叉编译.
也就是说, 你可以在 A 系统下编译出在 B 系统运行的程序. 即使这个两个系统的 CPU 体系不一样也可以.
像磁盘上的 loader 程序这种, 可以用 nasm 编译成纯的二进制文件, 也就是只包含指令, 没有什么文件头之类的在系统里面运行的程序所需要的东西.

#13


gcc编译出来的可执行文件是纯粹的二进制文件?x86架构的都能用?

#14


LZ可有交叉编译的概念?

#15


引用 13 楼 gs272 的回复:
gcc编译出来的可执行文件是纯粹的二进制文件?x86架构的都能用?

显然不是撒, gcc 默认编译出来的肯定是当前系统的可执行文件格式.
要做交叉编译, 需要专门配置.

#16


暂时还没有交叉编译的概念哦,linux内核也刚开始看而已,麻烦大神解释下交叉编译!

#17


该回复于2015-04-07 13:19:42被管理员删除

#1


linux内核是用C和汇编开发的,用了什么编译器呢?

#2


难道说想做任何新的操作系统都用它的编译器?编译器全是通用的,再说编译linux内核基本都是在linux环境下进行编译的。

大神,我的水平还没到举一反三的程度,麻烦说的详细点!!!
谢谢

#3


开发操作系统需要的编译器取决于硬件指令集。比如开发x86机器上的操作系统和开发arm上的操作系统就需要各自平台的编译器。

#4


汇编语言不需要编译器,需要汇编器,各个不同架构的硬件平台所用的汇编语言指令集是不一样的,平台相关性非常大;C语言的话只要是支持C语法的编译器都可以,Intel有C编译器,微软有C编译器,GNU也有自己的C编译器,无所谓用哪种都可以

#5


与不同操作系统下的编译器没有关系,比如linux的gcc和windows下的vs就没有区别。

#6


我想说的是,编译器并不是关键。
linux选用了gcc最主要还是因为用了gcc的语言扩展比较多。

#7


OS启动最重要的还是如何从MBR跳至内核二进制文件的入口点,这需要直接把汇编指令用二进制写进MBR。。
而Linux中引入了GRUB,其中就还有stage1 stage2等阶段,也只不过是stage1跳至stage2的入口而已。

看linux不要妄想把每个函数都看懂,抓住主要的,别迷失于过多的细节

#8


我最多就手写一个简单的boot,写os需要的东西太多了,编译器只是针对特定的cpu决定你选哪个,因为跑在计算机上的是一条条的指令,不同cpu指令不一样,编译器只负责把你的代码转化为一条条的指令。

#9


C/C++用编译器gcc(linux)或cl.exe(windows)
汇编用汇编器。

#10


综合大家的回答,那就是说只要编译出对应的二进制可执行文件就可以了?

#11


vc的编译器是用vc开发的。

#12


gcc 编译器支持交叉编译.
也就是说, 你可以在 A 系统下编译出在 B 系统运行的程序. 即使这个两个系统的 CPU 体系不一样也可以.
像磁盘上的 loader 程序这种, 可以用 nasm 编译成纯的二进制文件, 也就是只包含指令, 没有什么文件头之类的在系统里面运行的程序所需要的东西.

#13


gcc编译出来的可执行文件是纯粹的二进制文件?x86架构的都能用?

#14


LZ可有交叉编译的概念?

#15


引用 13 楼 gs272 的回复:
gcc编译出来的可执行文件是纯粹的二进制文件?x86架构的都能用?

显然不是撒, gcc 默认编译出来的肯定是当前系统的可执行文件格式.
要做交叉编译, 需要专门配置.

#16


暂时还没有交叉编译的概念哦,linux内核也刚开始看而已,麻烦大神解释下交叉编译!

#17


该回复于2015-04-07 13:19:42被管理员删除