内核通识——linux内核的简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

内核下载

下载地址:www.kernel.org

下载地址:Index of /sites/ftp.kernel.org/pub/linux/kernel/

本栏目文章2.6.35.7版本为例进行说明。

一、内核功能

1、操作系统的含义

操作系统本质上是一个程序,由很多个源文件构成,需要编译链接成操作系统程序。

操作系统的主要作用就是管理计算机硬件,给应用程序提供一个运行环境。

典型的操作系统有linux、windows、android、ucos等。

2、操作系统的核心功能

(1)内存管理

  • 如果没有操作系统,内存需要程序自己来管理。譬如在uboot中要使用哪块内存,由程序自己决定的,没有注册也没有限制。此时如果程序不小心把同一块内存重复使用,就会出现程序逻辑错误。
  • 有了操作系统之后,操作系统负责管控所有的内存。应用程序需要使用内存时,都要向操作系统去申请和注册,由操作系统的内存管理模块来分配内存。这样好处是可以保证内存使用不会冲突。

(2)进程调度

  • 操作系统下支持多个应用程序同时运行,这是宏观上的并行。实际上在单核心CPU上微观上是不能并行的,宏观上的并行就是操作系统提供的分时复用机制。操作系统的进程调度模块负责在各个进程之间进行切换。

(3)硬件设备管理

  • 没有操作系统时,控制任何硬件都要自己写代码,有了操作系统后操作系统本身会去控制各个硬件,应用程序就不用考虑硬件的具体细节了。
  • 操作系统的硬件设备管理模块就是驱动模块。

(4)文件系统

  • 文件系统是管理存储设备的一种方式。存储设备由很多扇区组成,每个扇区有512/1024/2048/4096字节,存储设备以扇区为单位进行读写。
  • 如果没有文件系统,当程序读写扇区时,就得记得哪个文件在哪个扇区。使用文件系统之后,我们不再关注某个文件在物理磁盘的哪个扇区,只用关注目录和文件名。

3、操作系统的扩展功能

(1)协议栈
(2)有用的应用程序包

  • 应用程序本身不属于操作系统内核的一部分。
  • 应用程序是给人用的,面向某种功能的,譬如ping程序用来测试网络是否联通,ifconfig程序用来配置网卡。

4、内核和发行版的区别

(1)内核是操作系统内核的简称。内核负责实现操作系统的核心功能,内核不包括应用程序,因此只有内核是无法使用的,因为做任何事情都是通过相应的应用程序来完成的。卖操作系统的人把内核和一些常用的应用程序打包在一起提供给普通用户,这就是操作系统的发行版(也就是普通意义上的操作系统)。

(2)内核只有一个,发行版有很多,比如ubuntu、redhat、suse、centos等等。

二、内核和驱动的关联

1、学习linux的思路

(1)对庞大的整体要有一个认识。学习路线就是先建立框架和整体,然后逐渐去学习各个细节部分,逐步细化。
(2)对各分层的作用要清楚。
(3)对层次间的关联和互相调用要理解。

2、驱动属于内核的一部分

(1)驱动就是内核中的硬件设备管理模块,属于发展非常活跃的部分。
(2)驱动工作在内核态(cpu在跑操作系统)与用户态(cpu在跑应用程序)的区别:权限不同)。
(3)驱动程序故障可能导致整个内核崩溃。
(4)驱动程序漏洞会使内核不安全。

三、内核和应用程序、根文件系统的关联

1、应用和内核的关系

(1)应用程序不属于内核,而是在内核之上的。
(2)应用程序工作在用户态,是受限制的。
(3)应用程序故障不会导致内核崩溃。
(4)应用程序通过内核定义的API接口来调用内核工作。
总结:应用程序是最终目标,内核就是为应用程序提供底层资源管理的服务员。

2、根文件系统和内核的关系

(1)根文件系统提供根目录。
(2)进程1存放在根文件系统中,进程1会使得内核态变为用户态。
(3)内核启动最后会去装载根文件系统。
总结:根文件系统为操作系统启动提供了很多必备的资源,如根目录、进程1。

四、linux内核的模块化设计

1、什么是模块化设计

(1)因为linux内核很庞大,如果设计时完全设计成一体,复杂度超出人所能理解的范围。所以模块化设计是一种必要。

(2)模块化设计就是内核中各个功能模块在代码上是彼此独立的,譬如说调度系统和内存管理系统之间并没有全局变量的互相引用,甚至函数互相调用也很少,就算有也是遵循一个接口规范的。模块化设计的目的就是实现功能模块的松耦合。

2、模块化设计的体现

(1)配置时可裁剪。linux内核在编译之前可以进行配置,配置时可以选择是否需要某个模块。

(2)模块化编译和安装。为了操作方便,从静态的升级逐渐变成了动态的升级(不需要重启系统,更不需要重新烧录系统)。这种动态的升级也是由模块化来支持的。

(3)源码中使用条件编译。这种在uboot中已经见过了。

3、模块化设计的好处

(1)功能可裁剪、灵活性。
(2)可扩展性(动态安装卸载、新硬件支持)。
(3)利于协作。

(4)模块化设计是一种普遍性的系统设计原则。

五、选择合适版本的内核

1、linux内核版本变迁简史

(1)linux0.01。初版
(2)linux0.11。很多讲linux内核源代码解析的书都是以这个版本为原本来讲。比如《图解linux内核设计的艺术》。
(3)linux2.4。比较接近现代的版本,很多经典的书都是以2.4版本内核为参照的,譬如《LDD3》。linux2.4的晚期内核在前几年还会经常碰到有用的。
(4)linux2.6早期。2.6的早期和2.4晚期内核挺像的。
(5)linux2.6晚期。2.6的晚期内核较早期内核有一些改变,尤其是驱动相关的部分和一些头文件的位置。2.6的晚期内核目前还算是比较主流。
(6)linux3.x,linux 4.x版本。3.x以上的版本采用了设备树的技术。

2、如何选择合适的内核版本

(1)并不是越新版本的内核越好。
(2)选择SoC厂家移植版本会减少工作量。

3、S5PV210适用的内核版本

(1)linux 2.6.35.7 + android2.3/QT4.8.3
(2)linux 3.0.8 + android4.0

4、内核版本号的含义

(1)“uname -a”获取内核版本号

从下面可知内核版本为3.13.0-170-generic。

root@ubuntu:/home/xjh/iot/embedded_basic/kernel# uname -a
Linux ubuntu 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:41:17 UTC 2019 i686 i686 i686 GNU/Linux

(2)例子说明

例子1:2.6.35-32-generic(有的为2.6.35-32-generic-pae  )

  • 2.6.35,表示当前内核版本,是2.6版内核系列的第35次释出版
  • 32,表示当前内核版本(2.6.35)的第32次微调patch
  • generic,表示当前内核版本为通用版本,另有表示不同含义的server(针对服务器)、i386(针对老式英特尔处理器)
  • pae,表示物理地址扩展,表示此32位系统可以支持超过4G的内存

例子2:3.10.0-862.el7.x86_64

  • 主版本号:3
  • 次版本号:10(奇数为开发版本,偶数为稳定版本)
  • 修订版本号:0(修改的次数)
  • 此次版本的第N次修改:862
  • el7:redhat enterprise linux 7
  • x86_64:编译框架
  • 3.10 这个即为版本号,后面的为小版本号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

端口列表详解

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51); text-align:left"> TCP 2Death TCP 11Skun TCP 12Bomber TCP 16Skun TCP 17Skun TCP 18消息传输协议,skun TCP 19Skun TCP 20FTP Data,Amanda TCP 21文件传…

C++之内存管理

1.申请内存:int *p new int;释放内存:delete p; 2.申请块内存:int *arrnew int[10];释放:delete []arr; 3.申请内存需要判断是否成功,释放内存需要设空指针 4.new与delete配套使用 转载于:https://www.cnblogs.com/xjyxp/p/11236…

Android 调用分享框

平时打开某些应用的分享选项时,经常可以看到同时分享到google play, 豌豆荚,91助手等弹出框,具体怎样实现的呢? 可以参考下面的代码 Uri uri Uri.parse("market://details?id"Constant.PACKAGE_NAME);Intent intent …

内核通识——linux内核源码(2.6.35.7版本)的目录结构

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、文件 (1)Kbuild文件 Kbuild是kernel build的缩写,就是内核编译的意思。这个文件就是linux内核特有的内核编译体系需要用到的文件。 (2&#xff09…

【原创】自制PCB经验教训之一:版图打印篇

看了篇帖子《用感光电路板自制PCB攻略(网友电子白菜撰写)》,于是前几天在淘宝上买了一批PCB DIY工具和材料回来,想自己弄个试试,岂料障碍重重,甚至于酿成大祸... 首先是PCB打印的软件设置问题,我…

magento cms page、登錄頁面修改(增加)breadcrumbs

由於magento的cms功能有限,在cms page的角度來看,差不存在cms的category,所以cms page的breadcrumbs只會出現單層的結構(HOME->About Us), 要想模仿出分層次的結構,就需要修改cbreadcrumbs了。 修改方法如下&#x…

分享一套非常不错的bootstarp3.0.2响应式模板

2019独角兽企业重金招聘Python工程师标准>>> 这是销量第一的bootstrap 响应式后台管理模板,每套模板都是我用20美金买回来的话不多说,下面是五个模板的演示地址,你看到的,就是你可以下载到的。都是收费模板。 官方演示…

内核配置与编译——编译初体验

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、获取内核源码 第一种是kernel.org的官方版本,第二种是三星移植过的,第三种是X210的移植版本。讲课时使用第三种内核,移植实验使用第二种内核。九鼎配置好的k…

10 个理由让你继续干 IT

1.钱,钱,钱对,我们努力工作就是为了赚钱,而IT专业人士的努力工作的确得到了很好的补偿。报酬不仅仅是好而已,而是非常棒。根据美国劳工部《2010年美国 就业与报酬情况概览》(表6,PDF&#xff09…

脱机下载至校验成功的脚本

今天又差点在 root 权限下破坏了系统 (归功于破坏力极强的 build-sysroot.sh), 心想逐步把写过的一些小工具备份。 sureget #!/bin/sh if [ -z $2 ]; thenfnamebasename "$1" elsefname$2 fiwhile true; do[ -f $fname ] && rm -f $fnamewget -c $1 -O $fnam…

MySQL同步状态双Yes的假象及seconds_behind_master的含义

近期由于特殊原因有一台主库宕机了一个小时没有处理,说起来这是个挺不好啥意思的事情,但是由于这个事情反而发现个比较诡异的情况,那就是在主库宕机一个小时候后,监控才发出从库IO thread中断的报警,也就是说在那一个小…

内核配置与编译——内核的配置原理

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 概述 编译内核前需要进行两步配置,即先make x210ii_qt_defconfig,然后再make menuconfig。第一步如果成功,则会提示“configuration written to .config”。注意…

gluPickMatrix和glReadPixels

gluPickMatrix的使用2008年12月03日 星期三 23:40void gluPickMatrix(GLdouble x,GLdouble y,GLdouble width,GLdouble height,GLint viewport[4]); 它是用来根据当前鼠标选择区域生成一个相应的投影矩阵的。这里面头两个参数不是这个选择区域的左上角位置,而是整个…

STM32的串口通信

在基础实验成功的基础上,对串口的调试方法进行实践。硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中。 b) 初始化函数定义: void USART_Configuration(void); //定义串口初始化函…

感谢大家对我微软TECHED2013课程的支持

http://technet.microsoft.com/zh-cn/teched2013_hols 转载于:https://blog.51cto.com/136840/1339733

C语言简介

摘自 老九学堂 徐嵩老师转载于:https://www.cnblogs.com/CheeseIce/p/11238694.html

内核源码——汇编阶段的head.S文件

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 前言 1、内容总结 汇编阶段,或者说内核引导阶段,主要是arch/arm/kernel/head.S文件,主要完成以下内容: (1)校验启动合法…

phpcms V9利用num++实现多样形式列表标签调用

在首页或者频道页调用文章列表的时候,经常会使用到左右对称或者每五行出现一条横线的调用形式。 其实代码很简单,利用num的循环方式,以及{if}{/if}进行样式判断即可。代码如下: {pc:content action"lists" catid"6…

Python第十七课(面向对象基础)

Python第17课(面向对象基础) >>>思维导图>>>中二青年 面向对象编程思想OOP 什么是面向对象 面向对象是一种编程思想,是前辈们总结出的经验,指导程序员如何编写出更好的程序,核心是对象,程序就是一系列对象的…

USACO 6.1.3 Cow XOR

题目大意: 给出一个数列,求最大区间异或和。异或和相同时取终点最靠前的,仍相同取最短的。简单题解:先求出前缀和。对每个数,将其前一项的前缀和插入0-1树中。然后在该树中,从高位到低位(贪心思…