首页 > 代码库 > S5PV210-kernel-linux内核
S5PV210-kernel-linux内核
1、1、内核和发行版的区别
1、什么是操作系统
(1)操作系统就是管理计算机硬件,给应用程序提供运行环境的,像内存,串口,键盘,鼠标,等等的硬件,是由操作系统进行管理的,应用程序是要在操作系统上运行的。操作系统本质上是一个程序,由很多源文件编译连接成的,如vilinz、uImage、zImage
(2)内核是操作系统的核心,内核是操作系统内核的一个简称,所以,内核本身不是操作系统,是操作系统的一部分,内核本身有的是操作系统的核心功能,比如:内存管理模块、进程调度模块(调度系统)、硬件设备管理(驱动模块)、文件系统模块。
而操作系统是有一些应用程序的,比如ping‘命令,ifconfg命令等,所以内核就是单纯的只有操作系统核心功能的,内核本身没有应用程序,如果在内核的基础上加上了一些常用的应用程序,完了进行出售,就是操作系统,就是发行版。
(3)内核只有一个,www.kernel.org ,但是发行版有很多,因为不同的人将内核加上了不同的应用程序,就成为了不同的发行版。
全世界只有这一个内核,操作系统是在内核的基础上加上了应用程序的。
(4)应用程序通过API接口联系上内核,内核通过驱动进行对硬件的操作。
1、2、内核和驱动的关联
1、驱动是内核的一部分,驱动就是内核的硬件设备管理模块,所以写驱动,就等于在写操作系统内核了。
2、当前的程序如果是运行在应用程序,那么就是处于用户太。
3.如果当前的程序是运行在内核的代码,那么就是属于内核态。
4、驱动工作在内核态,内核态和用户态的不同在与,权限不同,在用户态,只能访问规定的内存空间,在内核态,可以访问任意的内存。所以如果驱动程序有故障,那么可能直接导致整个内核崩溃,而且驱动程序的漏洞可以使内核不安全,就是别人可以利用驱动程序的漏洞侵入到你的内核中,所以驱动程序是被进行严格测试的,所以才会有驱动测试工程师。
5、近些年来,内核的版本更新的额非常快,几乎都是因为驱动的添加导致的,因为近些年来,很多鬼玩意的出现,很多硬件的增多,每增多一个硬件,就要增多一个硬件的驱动,所以驱动这部分是非常活跃的,并且驱动也是非常重要的,决定这内核运行的生死,程序的安全等。所以驱动并不是那么容易的去完成的工作。
1、3、内核、应用程序、根文件系统的关联
1、应用程序不属于内核的,是在内核之上的。
2、应用程序工作在用户态。
3、应用程序故障不会导致内核崩溃
4、应用程序通过内核定义的API接口来调用内核工作,内核定义了一套标准API,应用程序如果满足某一套API接口,就可以通过这个API接口来调用内核,如果不满足,内核将不理会,这是为了安全性的考虑,不然应用程序可以随便调用内核,那岂不是完蛋了,所以如果学习应用编程的话,其实就是学习这些API接口。
应用程序是最终的目标,内核是为应用程序服务的,内核就是讲他自己的那些API接口来提供给应用程序,让应用程序可以工作的。应用程序可以通过这些API接口访问到内核,内核在使用驱动控制相应的硬件的,相应的信息,又映射到了API接口啥个,应用程序获取到=相应的信息。
1、4、内核和根文件系统
1、根文件系统是Linux内核有的东西,根文件系统就是为操作系统提供根目录的。
2、进程1存放在根文件系统中。进程0是运行内核的,怎么从运行的内核态,运行到用户态的应用程序,这个进程1就很重要,就是根文件系统很重要。
3.内核启动最后会去装载根文件系统,
内核在运行的时,内核运行最后,会去挂载根文件系统,有了根目录,根目录就在进程1下面,执行了这个根目录下的应用程序,那么就从内核态进入到用户太了,那么整个操作系统就启动完成了。
总结:内核是被应用程序利用的,内核本身离不开根文件系统。
1、5、Linux内核的模块化设计
1、因为Linux内核太庞大了,如果不模块化进行设计的话,而是一个文件中的函数可以直接调用另一个文件的函数,或者使用另一个文件中的全局变量,那么复杂度,实在是太高了, 已经超出了人类所能承受的范围,所以有了模块化设计。
2.模块设计就是Linux内核中各个功能模块的代码是彼此独立的,就是这个模块文件中的函数是不会调用另一个模块文件中的全局变量等
1、6、模块化设计的体现
1、Linux内核是一个模块设计非常高的东西。
(1)配置时可裁剪,Linux内核的可裁剪性非常严重,最大,世界最牛X的计算机中跑的就是Linux,最小甚至可以在STM32上跑起来。
Linux内核在编译之前可以进行配置,配置时,可以在Linux内核的成千上万个模块中,将这些模块配置成要或者不要,要了之后还可以进行一些更细致的配置,比如你要上网的功能,那么就可以对上网的这一部分进行更细致的配置,网卡的型号等等,做到配置时的静态可裁剪
(2)模块化编译和安装
做到动态的可裁剪,就是可以动态的升级,不用重启系统,更不需要重新编译生成镜像烧录系统。就是操作系统在没有关机重启的动作,而是直接完成了某些东西的升级和卸载,就是动态的,这就是因为模块化设计带来的好处
(3)源码中使用条件编译
本文出自 “whylinux” 博客,请务必保留此出处http://whylinux.blog.51cto.com/10900429/1898801
S5PV210-kernel-linux内核