内核基础知识

什么是操作系统

(1)常见:linux、windows、android、ucos等操作系统; 

(2)本质:程序,由很多源文件构成,需要编译连接成操作系统二进制程序(vmlinz、zImage);

(3)作用:管理计算机硬件,给应用程序提供运行环境。

(4)核心功能:

1)内存管理。

如uboot中使用内存没有注册也没有限制, 如果不小心同块内存重复使用会出现逻辑错误, 用的内存多了, 管理非常麻烦;

有了操作系统负责内存,所有应用程序需要申请和注册,内存管理模块分配, 好处是不会冲突。

2)进程调度。

多个应用程序同时运行时(单核CPU宏观并行),进程调度模块负责各个进程之间切换。

3)硬件设备管理。(驱动模块)

操作系统控制各个硬件,应用程序不考虑硬件细节, 不用自己写代码。

4)文件系统。

管理存储设备的一种方式, 有文件系统后, 只关注目录和文件名,不用管文件在物理磁盘的哪个扇区(每个扇区有512/1024/2048/4096字节)。

(5)可扩展功能:

1)协议栈: 可嵌入其他通信协议来支持特殊的通信接口;

2)应用程序包: 不属于操作系统内核,是给人用的,面向某种功能的。如ping程序测试网络是否联通,ifconfig/ipconfig程序配置网卡, 蜘蛛纸牌、时钟显示、微软输入法.....。

 

什么是内核

内核是操作系统的最基本部分, 为众多应用程序提供对硬件的安全访问;

内核属于操作系统下层, 普遍意义上的操作系统指发行版, os = 内核 + 常用应用程序;

 

内核和发行版的区别

1)发行版是基于内核的:

1)内核只有一个(如linux, 在www.kernel.org), 负责实现操作系统的核心功能(资源管理模块,譬如内存管理、调度系统······),但不包括应用程序, 所以只有内核人是没法用的,因为没有面向人的应用程序。

2)发行版有多个。如ubuntu、redhat、suse、centos·····, 卖操作系统的厂商会把把内核和不同应用程序打包提供,这就是操作系统发行版。

 

内核和驱动的关系

(1)关系: 驱动属于内核的一部分;

1)说硬件设备管理模块, 属于内核的中下层;

2)驱动工作在内核态;//随机寻址, 而用户态的地址访问有限制, 否则段错误

//驱动程序故障会导致整个内核崩溃

//驱动程序漏洞会使内核不安全

(2)总结: 写驱动比写应用程序要更严谨, 免得把系统搞崩;

(3)题外: 近几年由于设备快速发展, 内核版本比以前跟频繁地更新, 原因就是不断增加新驱动支持新设备;

 

内核和应用的关系

(1)关系: 应用程序在内核之上, 不属于内核;

1)应用程序工作在用户态,受限制的; (为了限制恶意应用程序, 病毒等, 但还是有找到系统漏洞的程序)

2)应用程序故障不会导致内核崩溃;

3)应用程序调用API接口来让内核工作;(有条件的, 需要合法调用)

(2)总结: 应用是最终目标(面向业务的功能);  内核是应用提供底层资源管理(实现的工具, linux内核就300多个API);

 

内核和根文件系统的关系

(1)根目录是根文件系统的源点;

(2)进程1存放在根文件系统中;(用户态和内核态的互换的交接点, 最开始是只有内核态的, 直到有了第一个进程)

(3)内核启动最后, 会装载根文件系统;

(4)总结:根文件系统为操作系统的启动提供了很多必备的资源, 包括:根目录、进程1;

 

什么是模块化设计

(1)历史趋势: linux内核庞大,代码量大、东西多,如果完全设计成一体(各文件、函数紧耦合),复杂度超出了人所能理解, 现在模块化设计已成普遍的系统设计原则。

(2)作用: 各功能模块彼此独立,减少了调用联系; 如调度系统和内存管理系统, 没有全局变量互相引用,函数互相调用也很少, 实现功能模块的松耦合。

(3)接口规范: 只要接口不变, 各模块遵循该接口, 还是能对接;

(4)优势:

1)可裁剪性: linux模块化程度非常高, 配置时可裁剪, 甚至可以剪到可以装入单片机;

静态裁剪: 编译前可配置,使用条件编译选择组成内核的成千上万个模块, 还有更多的细节需求的配置。

动态裁剪: 新趋势, 模块化编译或安装。不需要重启系统/重新烧录系统, 这种动态升级也由模块化来支持(如插了驱动立即编译链接进内存使用, 不用时从内核中剔除, 减少操作系统的占用内存)。

2)可扩展性(动态裁剪: 安装卸载、支持新硬件);

3)利于分工协作, 用接口对接, 减少开会讨论配合的时间;

 

 

2.选择合适版本的内核

linux内核版本变迁

(1)linux0.01。初版, 源码都找不到了;

(2)linux0.11。很多经典书以该版本为原本来讲。如《图解linux内核设计的艺术》;

(3)linux2.4。比较接近现代的版本,很多教材以2.4版本为参照,如《Linux Device Driver3》(很多例程因为驱动版本不匹配, 编译打印报错)。2.4晚期内核十年前经常碰到。

(4)linux2.6早期。2.6早期和2.4晚期相似。

(5)linux2.6晚期。2.6晚期改变较大,尤其驱动部分和头文件位置, 2016年还比较主流。

(6)linux3.x 4.x;

 

选择合适的内核版本

(1)不是越新的内核越好

(2)选择适合SoC的移植版本会减少工作量

 

S5PV210适用的内核版本

(0)参考三星选择的版本来学习, 难度没那么大, 熟悉后再自己基于基础版移植;

(1)linux 2.6.35.7+android2.3/QT4.8.3 [2012年]

(2)linux 3.0.8+android4.0 [随着4.0的退出, 三星又移植了一个]

(3)课程使用2.6.35.7版本讲解, 九鼎又基于这个内核做了完整的适配, 方便分析;

总结:

(1)对庞大整体要有认识, 先建立框架和整体,然后逐渐学各个细节部分,逐步细化。(先画树干, 后树叶)

(2)对各分层的作用要清楚。

(3)对层次间的关联和互相调用要理解。

 

 

注: 文章内容主要参考朱有鹏linux嵌入式课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值