linux内核与应用程序, )

内核和应用程序都是用c语言写的(内核里的少数汇编除外,我想在应用层也是可以用内嵌汇编的吧),编译器也都是用gcc,到底是什么东西是内核成为了内核,现应用程序成为应用程序了... 内核和应用程序都是用c语言写的(内核里的少数汇编除外,我想在应用层也是可以用内嵌汇编的吧),编译器也都是用gcc,到底是什么东西是内核成为了内核,现应用程序 成为应用程序了呢,与elf文件格式 有关吗,请大侠们详解下。有兴趣的可以多多交流。 展开
 我来答
handsoul
推荐于2016-03-02 · TA获得超过955个赞
知道小有建树答主
回答量:500
采纳率:0%
帮助的人:755万
展开全部
你的问题可以这样问:为什么同样都是“程序”(C代码),同样都是GCC编译,有的成了应用程序,有的成了内核?

内核从文件的角度来看,就是一个编译好的映像,它的格式和ELF是不同的。因为前者是在没有文件的概念下,先运行起来,支撑操作系统的其他部分的。bootloader将内核解压到RAM中,并且放置了一些参数,然后控制权交给内核(RAM中的可执行代码)了。可执行程序,并不是直接放到RAM中就可以执行的,中间还得经历一些过程,系统服务将进程的环境设置好之后(可以查一下fork做了什么)才开始运行的。
GCC的参数很多,可以参数要求来“定制”你的可执行文件,也就是说gcc可以编译出各种不同的目标文件。
上面是从文件组织上说的。下面的才是主要的原因。内核中的代码是用来支撑操作系统的,和硬件相关的所有事件、进程的数据结构、内存的管理、文件系统的管理都是由内核直接完成的,由于这部分涉及到操作系统最核心的功能,最重要的数据,因此,必须有某种机制保护(软件、硬件的),使得应用程序不能随意的访问内核空间的数据,否则会影响其他的应用程序(需要内核的各种支持),导致系统不稳定。
追问
谢谢了,你说的映像是什么,就是一堆二进制的数的集合吗,elf程序的执行经历的一些过程是什么呢,还有就是在内核和应用程序间,文件系统充当着一个什么样的角色呢,还有像ext4和v(虚拟)fs之间的区别呢。
你说了这么多,我还是没太明白啊,,有没有资料介绍下的,,谢谢大侠了>_>
追答
映像应该是压缩过的一种格式,其实我也不清楚具体格式。可执行文件的执行过程,你去google或者baidu就一大把分析的。
介个不能直接说有什么联系之类的吧。。内核启动之后,硬件驱动有了了,然后才能看到文件(内核的驱动部分会从硬盘中将数据组织成文件,并可以访问)。而你说的这个ELF程序就是可执行“文件”,既然是文件就是基于文件系统这个前提下的。

ext4是一种文件系统,类似于windows下的fat32,ntfs都是一种文件系统,代表的是某种介质(磁盘或者flash)上数据的组织形式。
而VFS,一般叫做vitual file sysytem或者virtual filesystem switch,就是虚拟文件系统(文件系统转换)。VFS接到了用户的读写文件等请求,会根据文件所在的文件系统类型去确定具体的文件系统操作(针对fat32或者针对ntfs等),然后再把这些请求映射成实际的数据操作,最后是硬件操作。(中间过程很繁,想知道具体点就去翻书吧) 因此有了VFS,linux就可以很容易的支持多种类型的文件系统。
资料什么的,自行google/baidu/图书馆。。。。
力控科技
2024-08-19 广告
ForceSCADA是力控科技信创产品的重要组成部分,具备完全自主知识产权,支持部署在Linux桌面版、服务器版、嵌入式等系统架构下。使用ForceSCADA可以搭建创新性高、扩展性佳、融合度强的SCADA平台,进而构建高效、智能化的监控中... 点击进入详情页
本回答由力控科技提供
742ucib874
2011-08-24 · TA获得超过177个赞
知道答主
回答量:527
采纳率:0%
帮助的人:291万
展开全部
通常来说不需要。如果必须编译器一致的话,那就大家都只能用gcc了。但事实上有不少应用是用Intel的编译器编译的,可以获得更好的性能。

那个跟编译内核的编译器没有关系,目标板上没有gcc lib的问题而已……

你要用gcc的库,目标板上没有gcc,你又不想静态编译,典型的既要马儿跑又要马儿不吃草……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式