不同的平台(即不同的操作系统)下用的编译器肯定是不一样的,而且做出来的系统,哪怕只有引导扇区的一小段代码,如果要在虚拟机上运行起来,该使用的编译器和一般我们平时练汇编或者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的语言扩展比较多。
linux选用了gcc最主要还是因为用了gcc的语言扩展比较多。
#7
OS启动最重要的还是如何从MBR跳至内核二进制文件的入口点,这需要直接把汇编指令用二进制写进MBR。。
而Linux中引入了GRUB,其中就还有stage1 stage2等阶段,也只不过是stage1跳至stage2的入口而已。
看linux不要妄想把每个函数都看懂,抓住主要的,别迷失于过多的细节
而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 编译成纯的二进制文件, 也就是只包含指令, 没有什么文件头之类的在系统里面运行的程序所需要的东西.
也就是说, 你可以在 A 系统下编译出在 B 系统运行的程序. 即使这个两个系统的 CPU 体系不一样也可以.
像磁盘上的 loader 程序这种, 可以用 nasm 编译成纯的二进制文件, 也就是只包含指令, 没有什么文件头之类的在系统里面运行的程序所需要的东西.
#13
gcc编译出来的可执行文件是纯粹的二进制文件?x86架构的都能用?
#14
LZ可有交叉编译的概念?
#15
显然不是撒, gcc 默认编译出来的肯定是当前系统的可执行文件格式.
要做交叉编译, 需要专门配置.
#16
暂时还没有交叉编译的概念哦,linux内核也刚开始看而已,麻烦大神解释下交叉编译!
#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的语言扩展比较多。
linux选用了gcc最主要还是因为用了gcc的语言扩展比较多。
#7
OS启动最重要的还是如何从MBR跳至内核二进制文件的入口点,这需要直接把汇编指令用二进制写进MBR。。
而Linux中引入了GRUB,其中就还有stage1 stage2等阶段,也只不过是stage1跳至stage2的入口而已。
看linux不要妄想把每个函数都看懂,抓住主要的,别迷失于过多的细节
而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 编译成纯的二进制文件, 也就是只包含指令, 没有什么文件头之类的在系统里面运行的程序所需要的东西.
也就是说, 你可以在 A 系统下编译出在 B 系统运行的程序. 即使这个两个系统的 CPU 体系不一样也可以.
像磁盘上的 loader 程序这种, 可以用 nasm 编译成纯的二进制文件, 也就是只包含指令, 没有什么文件头之类的在系统里面运行的程序所需要的东西.
#13
gcc编译出来的可执行文件是纯粹的二进制文件?x86架构的都能用?
#14
LZ可有交叉编译的概念?
#15
显然不是撒, gcc 默认编译出来的肯定是当前系统的可执行文件格式.
要做交叉编译, 需要专门配置.
#16
暂时还没有交叉编译的概念哦,linux内核也刚开始看而已,麻烦大神解释下交叉编译!