Linux内核

一、 内核开发与逻辑开发对比

内核开发:

需要应用程序调用API去在操作系统里对硬件进行操作。操作系统不允许用户直接去通过置GPIO口1或者0去控制硬件,为了管理这一切。操作系统将整个开发中分成了两个空间,一个是用户空间(上两层),一个是内核空间。

裸机开发:

应用可以直接去控制硬件,32单片机只需要去将对应引脚置0或者1就可以点灯。

        经过对比,二者最大的区别在于内核是操作系统最核心的部分,而32单片机这种是不跑操作系统的。最直观的体现就是Linux可以跑多进程、线程的程序,同时运行多个程序。而32单片机如果不加Freertos是不能同时跑多个程序的。

二、什么是Linux内核(kernel)?----这里指uImage文件

        上面说到区别,那么Linux为什么可以跑多个进程、并且可以对文件、内存等进行管理?由此提到Linux内核,Linux内核对于操作系统而言属于发动机。内核(kernel)是操作系统最基本、最核心的部分。

        内核其本质上是一个复杂的程序,主要用于以下几点:

  1. 文件管理

  2. 进程管理

  3. 内存管理

  4. 网络管理

  5. 设备管理

内核对于用户是不可见的,所以在层面上分为了内核态和用户态。

内核态与用户态的几条公理:

  1. 用户态不能直接操作硬件

  2. 只有内核态才能对硬件进行操作管理

用户要想操纵硬件必须要通过用户态去调用内核态,由内核去完成对硬件的操作。而内核怎么去操纵不同的硬件呢?就需要驱动程序来操纵硬件,下面是对于用户态和内核态的图示说明

 三、Linux启动流程

1. 先启动bootloader (一个引导程序,为kernel启动准备环境)
2. 启动kernel (一个复杂的程序,操作系统)
3. 加载根文件系统 (一堆文件的集合)

 

3.1 bootloader---------》uboot

bootloader是(一个裸机程序)为内核准备运行 环境并引导内核启动

 3.1.1 bootloader的作用

初始化CPU(工作模式)
初始化异常向量表
初始化栈
初始化时钟
关闭看门狗
关闭Cache
关闭MMU
关闭中断
初始化内存
初始化相关外设(flash, 网卡, 串口, led, lcd)
集成相关的协议
搬移内核到内存
向内核传参(根文件系统类型、位置、ip、终
端控制台,指定init进程)
启动内核 --- 从此bootloader不再控制CPU,
CPU的控制权彻底移交给内核

3.1.2 uboot 

uboot是什么?

        是bootloader的一种,uboot的一切都是为了启动内核

        Linux系统要启动就必须需要一个bootloader程序(裸机程序),也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux镜像从flash(NAND,NOR FLASH,SD,EMMC等)拷贝到DDR中,最后启动Linux 内核。当然了,bootloader的实际工作要复杂的多,但是它最主要的工作就是启动Linux内核, bootloader和Linux内核的关系就跟PC上的BIOS和Windows的关系一样, bootloader就相当于BIOS。所以我们要先搞定bootloader,很庆幸,有很多现成的bootloader软件可以使用,比如U-Boot、 vivi、RedBoot等,其中以U-Boot使用最为广泛。

        因为Linux镜像是存在Flash里面,要想运行Linux系统需要一定的RAM,芯片内部RAM一般没有辣么大所以就需要DDR,bootloader就是需要准备Linux运行条件,譬如初始化DDR,然后再从Flash中读取到DDR中运行Linux系统。Uboot的主要目的就是为系统的启动做准备。

        Uboot不仅仅能启动 Linux,也可以启动其他系统,比如 vxworks。Linux不仅仅能通过uboot启动,还可以用其他bootloader启动。Uboot是个通用的bootloader,他支持多种架构。

四、总结

        启动流程还有两步:配置内核与加载跟文件系统没有说,因为在操作上是一起的。

        uboot做好一切准备后,启动内核程序,这时可以在uboot中配置板子的基础环境变量(用于配置网络IP连接为tftp下载程序做铺垫、挂载系统文件),在配置好环境变量后,使用tftp将内核kernel下载到板子上,我这里用的内核名叫uImage。最后启动内核。

         后面可以在内核中修改内容以及写驱动:内核是一堆程序,里面包含了各种配置的.c文件,然后使用makefile生成一个名叫uImage可执行文件,所谓的编译内核,就是修改里面的.c文件,然后生成的可执行文件烧录到板子里面。

        操作系统就是一个巨大的程序,内核是里面程序的一部分,不过内核这部分程序是最核心的,写在上面的属于应用层程序。

        可以将内核比作表演的舞台,应用层程序是在舞台上面表演的人,操作系统是整体。内核为应用层准备基础场地,应用层自由发挥。所以:操作系统就是一个“舞台班子”。。。

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

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

相关文章

HarmonyOS 开发-Navigation页面跳转对象传递案例

介绍 本示例主要介绍在使用Navigation实现页面跳转时,如何在跳转页面得到转入页面传的类对象的方法。实现过程中使用了第三方插件class-transformer,传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法, 效果图预览 使用说…

YOLOv9改进策略 :小目标 | 新颖的多尺度前馈网络(MSFN) | 2024年4月最新成果

💡💡💡本文独家改进:多尺度前馈网络(MSFN),通过提取不同尺度的特征来增强特征提取能力,2024年最新的改进思路 💡💡💡创新点:多尺度前馈网络创新十足,抢先使用 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect…

蝙蝠优化算法(bat optimization algorithm)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法背景 蝙蝠优化算法(Bat Algorithm)是一种基于群体智能的优化算法,它的灵感来源于蝙蝠捕食时的回声定位行…

Linux(Ubuntu)中创建【samba】服务,用于和Windows系统之间共享文件

目录 1.先介绍一下什么是Samba 2.安装,配置服务 安装 配置(smb.conf) 配置用户 3.出现的问题(Failed to add entry for user XXXX) 4.创建文件夹 5.windows访问 6.其他 Samba【服务状态】查看 Samba服务启动…

Training - Kubeflow 的 PyTorchJob 配置 DDP 分布式训练 (ncclInternalError)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137569332 Kubeflow 的 PyTorchJob 是 Kubernetes 自定义资源,用于在 Kubernetes 上运行 PyTorch 训练任务,是 K…

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数 引言 遇到一个问题,计算矢量网格的莫兰指数。 概念解释 莫兰指数 莫兰指数(Moran’s Index)是一种空间自相关指标,用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属…

这4大流氓软件,以后看见记得绕着走。

第一个,2345浏览器。时不时弹出广告,还会自动修改你的默认主页,并且很难修改回去。 第二个,搜狗输入法。别以为它打字很方便,实际上弹广告也很方便。 第三个,快压。解压不仅给你弹广告,还能让…

TCP-IP详解卷一:协议——阅读总结

该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network,中文名为广域网。 LAN全称是 Local Area Network,中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…

EVAL-21489-EZLITE原理图下载方法

1,进入官网,搜索“21489”: 2,下拉找到EVAL-21489-EZLITE,点击“文件”: 3,点击“电路板设计数据库”的“查看全部”: 4,点击下载即可: 5,下载完成…

Python 全栈体系【四阶】(二十五)

第五章 深度学习 二、计算机视觉基本理论 11. 图像梯度处理 11.1 什么是图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化…

【鸿蒙开发】ArkTS和组件

1. 初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展,继承了TS的所有特性。 当前,ArkTS在TS的基础上主要扩展了如下能力: 基本语法:ArkTS定义了声明式UI描述、自…

一招搞定vcruntime140_1.dll无法继续执行代码的解决方法

在我们日常频繁地与计算机互动、依赖其高效处理各类任务的过程中,偶尔会遭遇一些突发的技术问题,导致原本顺畅的操作流程被迫中断。其中一种常见的困扰便是系统弹出一则明确且令人颇感困惑的错误提示:“由于找不到vcruntime140_1.dll文件&…

C语言的显式类型转换和隐式类型转换详细讲解

目录 一、类型转换 1、显式类型转换 2、隐式类型转换 二、算术转换 三、总结 每个编译器都会对表达式做两件事情,一是判断表达式中操作符的优先级和结合性,二是判断表达式中的操作数类型是否一致,如果不一致则需要进行类型转换。第一点在…

机器学习(五) -- 监督学习(2) -- k近邻

系列文章目录及链接 目录 前言 一、K近邻通俗理解及定义 二、原理理解及公式 1、距离度量 四、接口实现 1、鸢尾花数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、knn模型训练 3.5、模型评估 3.6、结果预测 4、超参数搜索-网格搜…

相机模型浅析

相机模型 文章目录 相机模型四个坐标系针孔相机模型世界坐标系到相机坐标系相机坐标系到图像坐标系图像坐标到像素坐标 四个坐标系 ①世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。因为数码相机安放在三维空间中,我们需要世界坐标…

Python3 replace()函数使用详解:字符串的艺术转换

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

JavaScript(1)神秘的编程技巧

大家都感兴趣的箭头函数 箭头函数在许多场景中都可以发挥作用,尤其适用于简化函数声明和提高代码的可读性。以下是箭头函数可以使用的一些常见方面: (1)回调函数: 箭头函数特别适合作为回调函数,例如在事…

RuntimeError: Library cublas64_12.dll is not found or cannot be loaded

运行guillaumekln/faster-whisper-large-v2模型进行语音识别的时候报错了 RuntimeError: Library cublas64_12.dll is not found or cannot be loaded 代码: from faster_whisper import WhisperModelmodel WhisperModel("H:\\model\\guillaumekln\\faster…

Linux系统安装内网穿透实现固定公网地址访问本地MinIO服务

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&am…

MY-Java高级面试题

1. jdk1.7 到 jdk1.8 Map 发生了什么变化 ( 底层 )? 1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组 链表结构变成数组 链 表 红黑树。也就是说在 JVM 存储 hashMap 的 K-V 时仅仅通过 key 来决定每一个 entry 的存 储槽位&…