Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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
C 驱动程序如何成为操作系统的一部分?_C_Operating System_Drivers - Fatal编程技术网

C 驱动程序如何成为操作系统的一部分?

C 驱动程序如何成为操作系统的一部分?,c,operating-system,drivers,C,Operating System,Drivers,我知道操作系统内核是由驱动程序组成的,但是驱动程序是如何成为操作系统的一部分的呢?内核是自己反编译,然后添加驱动程序并重新编译自己吗?还是内核的驱动程序插件?有人告诉我,对于大多数操作系统,驱动程序实际上是内核的一部分,但是,每当我编译一个c程序时,它就会变成一个普通的可执行文件。驱动程序的体系结构完全取决于您的操作系统。对于运行在计算机上的大多数操作系统(与嵌入式设备相反),将驱动程序视为内核的“插件”是非常准确的。这就是说,有很多旧的、更小的、不太复杂的操作系统需要您将驱动程序作为内核的一部

我知道操作系统内核是由驱动程序组成的,但是驱动程序是如何成为操作系统的一部分的呢?内核是自己反编译,然后添加驱动程序并重新编译自己吗?还是内核的驱动程序插件?有人告诉我,对于大多数操作系统,驱动程序实际上是内核的一部分,但是,每当我编译一个c程序时,它就会变成一个普通的可执行文件。驱动程序的体系结构完全取决于您的操作系统。对于运行在计算机上的大多数操作系统(与嵌入式设备相反),将驱动程序视为内核的“插件”是非常准确的。这就是说,有很多旧的、更小的、不太复杂的操作系统需要您将驱动程序作为内核的一部分来构建—不可能动态加载。现在,一些操作系统支持“用户模式”驱动程序,这些驱动程序是根本不在内核内存空间中运行的设备驱动程序。

在像Linux这样的操作系统中,驱动程序实际上可以编译到内核映像中。尽管它们是静态链接的,但它们很可能表现出一种插件式的体系结构,允许只包含所需的驱动程序

或者,它们可以在引导时动态链接并加载,也可以在某些系统级软件需要时按需加载。

这取决于操作系统

典型地,内核是一个包含所有驱动程序的单片可执行文件,并且在需要添加新驱动程序时重新构建,包括新驱动程序和所有旧驱动程序的代码


在现代Linux中,可能还有其他o/s,驱动程序在需要时由内核动态加载。驱动程序以允许内核进行加载的形式创建;通常,这意味着采用共享对象或动态链接库格式。

如果构建操作系统内核,编译器设置与构建可执行文件时使用的设置不同。基本原理是一样的,但是如果你正在创建一个原始到足以启动机器的“映像”,编译器会做一些特殊的事情。当然,在微核操作系统中,驱动程序和其他任何程序(比如,web浏览器或文本编辑器)一样只是普通的用户空间程序。