这个问题中「内核」这个词过于笼统。对于当前的通用计算机系统的来说内核一般只做资源管理调度、进程间通信、驱动服务等工作,不做具体的工作内容。或者说内核在初始化后就将使用者的权利逐渐交给了用户进程,自己则进入一种服务提供的状态,这时候用户系统通过计算机做任何具体操作都要通过用户层程序和内核进行沟通(以系统调用为主),来在内核的特权帮助下完成操作。

但是你说内核自己能不能干你通过用户层做的那些事?理论上当然是完全没有问题的。通用计算机的内核只是在完成自己的初始化后就把交互权给了用户了,它完全也可以在设计时不提供交互,而是在初始化自己后自己直接用内核级别的线程/进程继续执行具体的操作。很多不需要交互的专用设备上的系统就是这样设计的,可以让设备上就跑一个内核,内核中提供必要的内存管理和进程调度等,以及定向的驱动,然后就在内核中用一到多个任务来做定向的工作。有的提供必要的输入介面,让系统内核做定向的事情的同时接受输入,改变参数和指令后继续工作。

其实这对于电子类专业毕业的学生或从业者来说非常常见(鄙人也是电子专业毕业的)。因为他们就是经常面对著裸板,上面没有任何操作系统。而他们面对的需求也往往是定向性的,比如驱动各感测器做数据采集,数据的处理,节点间必要的通信,控制点的控制,等等。这些任务往往在一到多个节点上完成,每一个节点是一个独立的电路,上面可能跑一个单循环任务的内核程序。也可能跑著多任务的内核程序。举个简单的例子,比如将一个特定设备的系统分成三个主要工作:多个感测器的数据采集,数据的计算,以及不同控制信号的发出。这就形成一个简单的带输入输出的控制系统,这个系统的内核并不需要庞大的通用计算机内核,因为硬体资源不足以跑复杂的内核程序,内存大小连应付复杂内核的调用栈都不够。所以这就需要定制化的内核程序,提供简单的进程(甚至进程都提供不了只能有线程,因为做不到进程隔离)调度等,需不需要文件系统也看情况,然后内核只创建几个必要的进程/线程,并执行已经设计好的程序。如负责数据采集的进程/线程就负责通过感测器进程做数据采集,将采集来的数据以预定的形式(如缓冲队列)存储,在等待感测器IO期间可以调度其它程序,如数据处理程序,对数据进行计算,并将结果分给负责控制的进程,控制进程等到信号后就根据计算结果发出控制。这一系列任务都是在一个非常小的内核内完成,非常适合定制化的特定系统。

所以内核能不能让计算机工作,答案当然是能的。这就好比问没有了马龙他们,只有那个不会打球的「胖子」教练,中国乒乓球会被怎样对待?不好意思,用赵本山老师的话讲就是「虽然你大妈已经不是你原来的大妈了,但是你大爷还是你大爷。」同理,内核不做的事情不代表它不能做。内核能做什么,完全看你设计让它做什么。


如果明确限定了不能安装新的软体的话(比如这台设备性能不行、储存空间不够等),那一般会选择直接改内核,把自己想要的功能写成内核启动后的一段代码,然后直接把改过的内核刷进设备里。毕竟,正常尺寸的内核里面一般已经实现了

  1. 基本的任务调度能力
  2. 基本的内存管理能力
  3. 文件系统相关驱动与API介面
  4. 网路IO相关驱动与API介面

有了这几大项之后这台设备已经能胜任很多简单的任务了,比如在自己家地下室用单片机做温控酿葡萄酒、在家里搭一个内网防火墙/DHCP伺服器之类的。

如果嫌弃这个设备呆头呆脑没有人机交互的话,也可以自己用C语言撸一个简单的shell。在有内核的情况下键盘USB驱动应该已经可用了,移植一个glibc或者静态编译一套glibc进去的话getc函数也可以用,基础知识够硬的话应该能在一两个小时内做到「按A键亮绿灯、按B键亮红灯」之类的简单交互,再想要更复杂的能力就要自己潜心敲代码了。


Linux 的话,只有内核,会甩出一个特殊的内核崩溃错误。

Linux 必须有一个 init 进程,当然这个进程干啥无所谓,哪怕只有一个 for 循环。那是程序的事情不是内核的事情。

反正必须是 pid = 1 ,而且不能退出。


如果没有安装壳子座位轮子方向盘。。。只安装了发动机的汽车

会被怎样使用?

——供起来摆那让人赞美呗:动力好强啊,外形好酷啊,一点都不胖真的好骨感啊!


连上终端,一切好说,

没有终端,那就只能观赏了.


可以用来放干电池电量吧


用啥呀,没法用。

滑鼠无法使用,硬碟无法读取,网卡没有驱动无法联网。

那感觉就像你去饭馆吃饭问老板有没有酱油,老板给你一把黄豆让你自己发酵。运气好半年之后就有酱油了


推荐阅读:
相关文章