企业网站建设意义,那个网站做拍手比较好,wordpress读书插件,wordpress首页轮播背景常识
一、程序分类
程序按其运行环境分为#xff1a; 1. 裸机程序#xff1a;直接运行在对应硬件上的程序 2. 应用程序#xff1a;只能运行在对应操作系统上的程序 二、计算机系统的层次结构
所有智能设备其实都是计算机#xff0c;机顶盒、路由器、冰箱、洗衣机、汽…
背景常识
一、程序分类
程序按其运行环境分为 1. 裸机程序直接运行在对应硬件上的程序 2. 应用程序只能运行在对应操作系统上的程序 二、计算机系统的层次结构
所有智能设备其实都是计算机机顶盒、路由器、冰箱、洗衣机、汽车的中控……
计算机系统两种层次结构
2.1 无操作系统的简单的两层结构 2.2 有操作系统的复杂的四层结构 安卓就是中间层、ios也是但是说那么细致非专业人士也不懂就统称了。
鸿蒙其实更多的也是在中间层做文章。系统层修改不大。
三、 什么是操作系统
狭义的操作系统给应用程序提供运行环境的裸机程序也被称为操作系统内核
广义的操作系统一组软件集合它包含
1. 最核心的一个裸机程序 ----------内核 (kernel)
3. app开发常用的一些功能库如C语言标准函数库、线程库、C标准类库、QT类库等等
4. 一些管理用的特殊app如桌面、命令行、app包管理器、资源管理器、系统设置、一些常用后台服务程序 由于现在开源的操作系统很多所以做一个操作系统已经没什么太大难度了就是太大了需要很多的人。操作系统存在的价值就是方便我们操作机器。一个新的操作系统问世没人用那就没有存在的意义了。我们国家做过很多国产操作系统但是都失败了。因为很多行业应用只能在windows上跑他们也不愿意在别的操作系统上在开发一遍APP。不过随着Linux的普及微软的地位可能会收到冲击。鸿蒙开发出来也面临推广问题怎么让程序员愿意接纳鸿蒙在鸿蒙上开发好的APP。intel和三星合作开发过一个操作系统但是也卡在了推广两家这么强的公司也没把他推起来。安卓会火就是因为他代替了一个操作系统叫做塞班。程序员们为塞班提了很多改进意见。但是他没改。这时候正好安卓出了程序安装卸载功能并且用java能开发。市场上的Java程序员还多就火起来了。 四、操作系统内核的实现模式 内核操作系统最核心的那个裸机程序主要负责硬件资源的驱动和管理。
一个操作系统内核主要包括如下几个子模块
1. 任务管理多任务支持、任务调度、任务间通讯
2. 内存管理物理内存管理虚拟内存实现出现段错误不影响系统运行
3. 设备驱动各种外部设备的I/O支持
4. 网络协议支持
5. 文件系统支持
6. 启动管理
两种典型的内核实现模式
1. 单内核宏内核所有子模块代码编译到一个比较大的可执行文件镜像文件中各子模块代码共用同一套运行资源各模块间的交互直接通过函数调用来进行
3、4、5在微内核中被做成了服务进程APP和内核之间使用进程间通信来调用这些服务。
在宏内核中函数是通用的直接用函数就行。新增加功能时微内核直接加个模块就行。但是宏内核需要重新编译内核。这样太麻烦了所以宏内核加了一个机制提高扩展性。
2. 微内核只将任务管理、内存管理、启动管理最基本的三个子模块编译到一个微型的可执行文件中其它子模块则各自编译成独立的后台服务程序这些服务程序与微型内核以及app间主要通过各种IPC进行通讯
单内核特点效率高稳定性低扩展性差安全性高典型操作系统UNIX系列、Linux
微内核特点效率低稳定性高扩展性高安全性低典型操作系统WindowsQNX 五、什么是设备驱动程序
英文Device Driver
简称驱动Driver
一种添加到操作系统中的特殊程序主要作用是协助操作系统完成应用程序与对应硬件设备之间数据传送的功能
简言之设备驱动程序就是操作系统中“驱动”对应硬件设备使之能正常工作的代码。
一个驱动程序主要完成如下工作
1. 初始化设备让设备做好开始工作的准备
2. 读数据将设备产生的数据传递给上层应用程序
3. 写数据将上层应用程序交付过来的数据传递给设备
4. 获取设备信息协助上层应用程序获取设备的属性、状态信息
5. 设置设备信息让上层应用程序可以决定设备的一些工作属性、模式
6. 其它相关操作如休眠、唤醒、关闭设备等
其中最核心的工作就是设备数据的输入和输出因此计算机外部设备外设也被称为IO设备
向下驱动外设向上提供接口
学习方法 一、为什么要学驱动开发
1. 理想原因兴趣、成就感
2. 现实原因高薪
看看华为、大疆、还有汽车企业的薪资十分诱人。
二、学习Linux驱动开发的前提条件
1. 精通C语言
2. 能看懂硬件原理图
3. 阅读芯片手册不怵头
很多芯片手册都是英文的。暂时没遇到过中文的。
4. 有Linux操作系统的一些背景知识比如说 a. Linux常用命令的使用 b. Linux常用系统调用函数的编程尤其是IO相关函数
三、怎么学
1. 学习任何方面编程的共同准则--------用代码来检验所学
2. 从简易入手逐步深入切忌太强的好奇心
3. 重点花在掌握原则、总结套路知识点、相关函数不要死记硬背
4. 会搜善套网络、笔记、芯片手册
需要大量时间来时间光看视频查资料没用。
开发环境和前面系统移植需要的一样详情可参考我前面的博客