ARM——驱动——Linux启动流程和Linux启动

一、flash存储器

lash存储器,全称为Flash EEPROM Memory,又名闪存,是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息,因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单位,而是以固定的区块为单位,区块大小一般为256KB到20MB。

在ARM系统中,Flash存储器主要分为两种类型:NOR Flash和NAND Flash。

  1. NOR Flash(可线性访问与内存访问方式相同)
    • 特点:地址线和数据线分开,可以像内存一样进行随机访问。支持XIP(Execute In Place,片内执行),即代码可以直接在NOR Flash上执行,无需复制到内存中。
    • 应用:由于其快速读取速度和数据不易失的特点,NOR Flash常被用作启动存储介质,存储操作系统的引导程序、内核映像等关键文件。
  2. NAND Flash(不可线性访问必须配个专门的程序访问)
    • 特点:地址线和数据线共用,需要通过特定的命令和地址控制来读取数据。写入和擦除速度比NOR Flash快,但读取速度相对较慢。不支持XIP,需要通过软件控制读取时序。
    • 应用:由于其高容量和低成本的特点,NAND Flash常被用作大容量数据存储介质,如存储设备中的文件系统和数据分区。

二、Linux操作系统启动

Linux启动是一个复杂但有序的过程,它涉及从系统加电到用户登录界面的多个步骤。以下是Linux启动过程的详细解析:

 一、启动准备阶段

1. **固件初始化**:
   - 在x86系统中,通常是通过BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)进行初始化。BIOS/UEFI负责硬件初始化、自检以及加载固件驱动程序等。
   - 在ARM架构中,情况可能有所不同。ARM处理器通常不直接包含BIOS的概念,而是可能使用如OpenSBI(开源的RISC-V虚拟化二进制接口)或其他类似机制进行启动前的准备工作。

2. **启动设备选择**:
   - BIOS/UEFI会检测并识别可启动的设备,如硬盘、光盘、USB设备等,并根据预设的启动顺序或用户设置的启动选项,选择一个可启动的设备作为启动介质。

二、加载引导程序(Boot Loader)

1. **Boot Loader的作用**:
   - Boot Loader是引导加载程序,负责加载内核文件到内存中,并传递一些参数给内核。常见的       Boot Loader有GRUB(GRand Unified Bootloader)、LILO等。
   - 在ARM架构中,u-boot是另一种常见的Boot Loader,它主要用于嵌入式系统。2. **加载过程**:
   - 当BIOS/UEFI找到启动设备后,它会读取该设备上的主引导记录(MBR)或UEFI应用程序(如GRUB的.efi文件)。
   - Boot Loader被加载到内存中并执行,它会进一步加载操作系统内核。

 三、加载内核(kernel)

1. **内核的作用**:
   - 内核是Linux系统的核心,负责管理系统资源、提供系统服务、驱动硬件设备等。

2. **加载过程**:
   - Boot Loader将内核映像文件加载到内存中,并设置必要的参数。
   - 内核被加载后,会进行解压缩、初始化各种模块和组件等操作。

1、引导程序bootloader----为内核启动准备环境

初始化CPU(工作模式)

初始化异常线性表

初始化栈

关看门狗

初始化内存

关闭Cache

关闭MMU

初始化相关的硬件(串口调试,网口)

集成相关的协议

搬移内核内核到内存

向内核传参(根文件系统类型/位置,控制台,init进程,IP(如果需要))

启动内核(PC向内核所在的内存地址)

————boot loader不再控制CPU,CPU的控制权彻底交给内核

2、内核(一个大的程序并未用户提供操作接口)

进程管理 内存管理 网络管理 文件管理 设备管理

内核最后的阶段时:加载根文件系统(以挂载的形式)

启动init进程-》shell-》userapp
3、加载根文件系统

可执行程序(系统的命令,普通程序)

配置文件

库 (静态/动态)

普通文本(文本/MP3/jpg)                                                                                                                         

四、运行init进程

1. **init进程的作用**:
   - init是Linux系统的第一个用户空间进程(通常称为1号进程),负责启动和管理其他进程。

2. **运行过程**:
   - init进程会读取配置文件(如/etc/inittab、/etc/systemd/system等),确定运行级别(runlevel)并执行相应的初始化脚本。
   - 不同的Linux发行版可能使用不同的init系统(如SysVinit、Upstart、Systemd等),但基本流程和目的相似。

五、启动服务

1. **服务的作用**:
   - 服务是Linux系统提供的各种功能和应用,如网络、图形界面、数据库等。

2. **启动过程**:
   - 根据运行级别的设置,init系统会启动相应的服务。这些服务通常由/etc/rc.d目录下的脚本来管理。

 六、建立终端和用户登录

1. **建立终端**:
   - 终端是Linux系统与用户交互的界面,可以是文本模式或图形模式。
   - 终端由init系统或桌面环境根据配置来创建和管理。

2. **用户登录**:
   - 用户登录是Linux系统验证用户身份和权限的过程。用户可以通过用户名和密码、公钥和私钥等方式进行登录。
   - 登录后,用户可以执行各种命令和操作。

七、Linux运行级别

Linux系统有七个运行级别(从0到6),每个级别代表不同的系统状态和功能:

- **0**:系统停机状态,不能正常启动,只能关闭电源。
- **1**:单用户工作状态,只有root权限,用于系统维护和修复,禁止远程登录。
- **2**:多用户状态,没有网络文件系统(NFS)支持。
- **3**:完全的多用户状态,有NFS支持,适合服务器和命令行模式的用户。
- **4**:系统未使用,保留给用户自定义。
- **5**:图形用户界面(GUI)状态,有NFS支持,适合桌面和图形界面的用户。
- **6**:系统重启状态,不能正常启动,只能重新启动系统。

三、启动。

1、下载一个bootloader到norflash的0地址处()

查看和设置环境变量

删除后记得保存才能达到修改环境变量的效果。

U-Boot(Universal Boot Loader)是一种广泛使用的开源引导加载程序,它允许用户从各种设备(如硬盘、USB设备、网络等)加载操作系统。U-Boot提供了丰富的命令行接口(CLI),允许用户执行各种硬件级别的操作,比如配置硬件、加载和启动操作系统等。

下面是一些常用的U-Boot命令及其基本用途:

  1. printenv / setenv
    • printenv:打印当前环境变量。
    • setenv VAR value:设置环境变量VAR的值为value。
  2. bootm
    • 用于从内存地址处直接启动内核,通常需要知道内核映像的内存地址。
  3. bootz
    • 从内存地址处启动压缩的内核映像,需要指定内核映像、DTB(设备树)和内核解压后的存放地址。
  4. boot
    • 根据环境变量中配置的启动命令来启动系统。
  5. tftpboot
    • 通过TFTP协议从服务器下载文件到内存中。常用于从TFTP服务器加载内核映像或设备树。
  6. loadb / loads / loady / loadx
    • 从串行端口、USB、以太网等不同接口加载数据到内存中。
  7. nfs
    • 从NFS服务器加载文件。
  8. fatload / ext2load / ext4load
    • 从FAT、ext2或ext4文件系统中加载文件到内存中。
  9. mm / nm / md
    • mm:内存修改命令,允许修改内存中的值。
    • nm:内存显示命令,显示内存中的值(但不允许修改)。
    • md:内存显示命令,以十六进制格式显示内存内容。
  10. cp
    • 复制内存中的数据。
  11. ping
    • 测试网络连接。
  12. reset
    • 重启系统。
  13. saveenv
    • 将当前的环境变量保存到非易失性存储器中(如EEPROM、闪存等)。
  14. version
    • 显示U-Boot的版本信息。
  15. help
    • 显示帮助信息,或指定命令后加?来获取该命令的详细帮助。                        

综上所示:          

Uboot命令:

reset 重启uboot
setenv  abc 123 设置环境变量
savenv   保存环境变量到nand
setenv abc 删除环境变量 

ping 目标 iP

tftp 030008000 ulmage

bootm 0x30008000(启动内核)

(go 0x30008000 运行程序)

          

下载tftpd到内核中

挂载

遇到这这种情况:
1、内核已经启动完毕,2、根目录有错误

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

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

相关文章

单细胞组学大模型(1)--- iSEEEK

–https://doi.org/10.1093/bib/bbab573 A universal approach for integrating super large-scale single-cell transcriptomes by exploring gene rankings 打算深挖单细胞大模型的一系列文章、算法和代码,按时间线来去学习也许会好一些,所以第一篇带…

Spring Cloud Consul面试题

​ ​ 您好,我是程序员小羊! 前言 Spring Cloud Consul 是微服务架构中的一个重要组件,用于服务发现、配置管理以及健康检查。了解 Spring Cloud Consul 的工作原理和应用场景,对于微服务开发者和架构师来说至关重要。以下是一些常…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持,带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础,打造的全新沉浸文化项目“国宝数字体验展“,借由文物的视角、站在历史的星河中,探寻时间长河中不变的智慧…

CART决策树-基尼指数(全网最详解)

文章目录 一、基尼指数的定义二、基尼指数在CART决策树中的应用三、基尼指数与CART决策树的构建1.计算每个子集的基尼系数:2.计算基尼指数3.选择最优特征4.其余基尼指数5.构建决策树 四、总结 CART决策树基尼指数是CART(Classification And Regression T…

8-9月强化速成|30天带刷《严选题》《660》

如果你的目标是90-100分,肯定是够了,但是像下面这样微调一下更好 你的基础阶段做的是辅导讲义上的题目,那么你的基础阶段的题量肯定是够了。 但是强化阶段如果只做660题和严选题,这个题量还有有一些薄弱的,建议可以把…

四、4 逻辑操作符

按位与、按位或关注二进制位 逻辑与、逻辑或只关注真假 1、&&逻辑与(并且) 左边和右边都为真,结果为真(为1) 有一个为假,结果为假(为0) 2、|| 逻辑或(或者&a…

NumExpr加速计算(numpy表达式)

文章目录 一、简介二、安装三、函数详解四、性能评估 Python 性能优化:NumExpr Numba CuPy 一、简介 numexpr(全称:numpy expression):用于在 NumPy 表达式上快速执行元素级运算的 Python 加速库。 优势&#xff1…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

Element-ui table进阶使用

最近项目有多个报表开发的需求,我采用的是凤翎前端组件框架(基于element-ui开发),大伙可以直接参考element-ui组件库文档,把标签中的fks替换为el即可。下面我会按顺序一一展开细说这些需求: 1、有多级表头…

AI大模型开发——7.百度千帆大模型调用

本节旨在为读者提供一个实用指南,探讨如何有效地利用百度千帆大模型平台的强大功能。从基础的账号注册和密钥申请入手,逐步引领用户通过案例, 理解并掌握如何调用文本和图像处理的大模型 API, 包括但不限于 NLP、对话生成、文本续…

CV每日论文--2024.7.25

1、Diffusion Models for Monocular Depth Estimation: Overcoming Challenging Conditions 中文标题:单目深度估计的扩散模型:克服具有挑战性的条件 简介:本文提出了一种新颖的方法,旨在解决单张图像深度估计任务中具有挑战性的、超出分布范…

linux 磁盘满了,程序运行失败,如何处理?df -h

场景:紧急呼救,上传图片失败了。我一脸懵,服务器这是又咋地了,别邪乎姐姐,姐姐胆子小啊。 一、寻找问题原因 1、OSS出问题了? 然后我尝试了 IOS 的APP是没问题的,Android提示上传失败&#xf…

在Kubernetes中通过 pod 打开 pod所在宿主机上的shell

昨日一伙计突然问我 在么把自己打好的 docker镜像 上传到 kubernetes 的 节点的 local 镜像池。 现状大约如下: 1)只有master节点的登录权限; 2)不知道存在哪些worker节点也无法通过 master 借助SSH 登录到 worker节点 &#x…

MyBatis入门(上)---初识

在应⽤分层学习时, 我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao . 之前的案例中,请求流程如下: 浏览器发起请求, 先请求Controller, Controller接收到请求之后, 调⽤ Service进⾏业务逻辑处理, Service再调⽤Dao, 但是Da…

消化学科的领军人物陈烨教授在会议上作了《幽门螺杆菌的规范检测与质控》的专题报告

由广东省药学会主办的“第十九届消化疾病诊疗会暨胃肠疾病药物临床研究交流会”于2024年8月8日-9日在广东省深圳市召开。陈烨教授,作为消化学科的领军人物、中华医学会消化病学分会的常务委员,以及全国幽门螺杆菌学组的组长,在会议上作了《幽…

【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)

基于51单片机设计的打地鼠游戏机 演示视频: 基于51单片机设计的打地鼠游戏机 功能描述:使用 51单片机为核心制作一个打地鼠游戏机。按下启动开关,8盏LED流水点亮并闪烁2次,随即开始播放游戏音乐,直到开始选择模式。选…

CTF密码学小结

感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套(密码学上过课都会),其他的就是数论的一些技巧 似乎格密码也很流行,以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质&#xff1a…

ORM底层的原理

2.3.面试题3:请介绍什么是ORM思想: a.什么是ORM: 1.所谓的ORM是Dao层的一种思想,意思就是对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping…

Excel技巧(一)

快捷键技巧 原文链接 选取某一行的数据直到最后一行:【CTRL SHIFT ↓ 】或者选取一行后按住SHIFT键,双击下边线就可以快速选取区域。 如果表格中有多行空行,可以先按CTRL SHIFT END,再按CTRL SHIFT 上下键调整,…

读懂 GraphRAG:提升LLM企业落地能力,智能问答革命

在企业中单纯的使用LLM并不会产生太好的效果,因为它们不会对有关组织活动的特定领域专有知识进行编码,而这些知识实际上会给信息对话界面带来价值萃取。很多企业尝试通过RAG来优化这个过程,并且越来越多的人在RAG的方向上不断的研究&#xff…