编译Linux内核的意义是哪些
Linux为何使用内核模块?
我们经常说到的操作系统有Linux、Windows、macOS等等linux内核4.4源码下载,手机的安卓系统就是基于Linux操作系统,这种操作系统从内核的角度分为宏内核和微内核,Linux是典型的宏内核的操作系统,Windows是典型的微内核操作系统。
从字面上可以推测:
虽然上........
宏内核是把所有的内核功能整体编译在一起,产生一个单独的内核镜像文件。用户服务和内核服务在同一空间中实现,也就是说,内核须要运行内核进程的代码,当用户进程通过系统调用或则中断步入内核态时,内核也须要运行用户进程的代码,所以宏内核须要管理的资源相对较多,所以宏内核都会比较大。
很显著,它优点是效率会比较高,各个功能模块的交互是通过直接的函数调用进行的。
微内核只实现内核中相当关键和核心的一部份,例如进程的通讯(IPC)、内存管理、任务调度等功能,其它的操作系统组件(例如文件系统、驱动程序等)都在各自独立的地址空间执行,她们被单独编译。
很显著,它的优点是维护性好,功能模块之间的交互须要通过微内核提供的某种通讯机制来构建。华为开发者会议宣布的鸿蒙操作系统就是微内核。
但是,对于Linux这些宏内核,缺点也是比较显著,假如想要增减、删除、修改内核某个功能,就得重新编译整个Linux内核,内核假如越来越大,这么编译都会显得越慢。
在驱动开发早期,须要时常更改驱动代码,这对驱动开发者来说引起很大的困惑,其实是不可接受的,所以可维护性差。
为了填补这一缺陷,Linux内核提供了模块机制,称为内核模块。
致使编译出的内核并不须要包含所有功能,它是被单独编译的一段内核代码,而在这种功能须要被使用的时侯,其对应的代码被动态地加载到内核中,在不须要的时侯linux内核4.4源码下载,可以动态的卸载(卸载须要内核配置模块可卸载的选项),进而降低内核的功能,并节省一部份显存。
而不管的加载还是卸载,都不须要重新启动整个系统。
而上面提及的对于驱动开发者来说引起的困惑就被解决了,驱动开发者可以随时更改驱动的代码,之后不须要编译整个内核,只须要编译驱动代码linux操作系统下载,并将新编译的驱动加载到内核进行测试,只要更改的驱动不会使内核崩溃,就可以不用重启系统。
注意,内核模块不一定是驱动程序,驱动程序也不一定都是模块的方式。
后面说到宏内核把所有内核功能整体编译在一起,产生一个单独的内核镜像文件,镜像文件才会比较大linux 版本,但是整个内核镜像将会被加载到显存中运行,但是,内核模块的这一特征就有助于减少内核镜像文件的大小,自然也就降低了内核所占的显存空间。
内核模块的原理是基于不是所有驱动都会同时工作,由于不是所有硬件都同时接入系统。
原创不易,认为文章不错,收藏的同时,麻烦点个赞~~~~~