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

news2025/1/11 8:18:17

一、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.coloradmin.cn/o/2065120.html

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

相关文章

Cetos7安装详细流程

CentOS 7是一个流行的Linux发行版,广泛用于服务器和桌面环境。以下是在物理机或虚拟机上安装CentOS 7的详细步骤: 准备工作 下载CentOS 7 ISO:访问CentOS官方网站下载CentOS 7的ISO镜像文件。 创建启动介质:使用ISO镜像文件创建…

how to connect the VRTE to Internet

Are all gen_swp_fb python dependecies installed? In the build log it is present a fail of gen_swp_fb tool? Steps: Configure the VM according to proxy/no-proxy$ cd ../vrte/project/AraUCM_SwUpdate/gen_swp_fb/$ python3 -m pip install -r requirements.txtR…

普元EOS-利用热更新(热启动)提高开发效率

1 简介 在程序开发的时候,需要频繁的重启项目,随着项目复杂度增加,项目启动时间会越来越长。那么每次修改一点内容就重启项目,会极大影响开发效率。 EOS提供了热更新的手段,代码修改后无须重启,自动生效的…

扩展语言,扩展思维:LLM 词汇量缩放

“我的语言的极限意味着我的世界的极限。”——维特根斯坦 大型语言模型 (LLM)已实现可靠的性能。这一切都归功于 Transformer 及其以自监督方式从大量文本中学习的能力。显然,这种简单的方法允许模型学习越来越复杂的文本表示,而无需人工解释。这使得收…

考研资讯平台

TOC springboot0767考研资讯平台 绪论 1.1课题研究背景与意义 随着现代网络技术的快速发展,互联网的应用对学生的生活和工作有着很大的影响,特别是在当今计算机的应用下的人更加需要这样的环境,所以我们根据这个要求来开发了本课题。该课…

集团数字化转型方案(十)

集团数字化转型方案将通过全面部署云计算、大数据分析、人工智能和物联网技术,构建一个全方位的数据驱动平台,实现从战略规划到运营管理的数字化升级,以优化业务流程、提高决策效率、增强客户体验和提升运营灵活性。该方案包括智能化的供应链…

Docker!!!

⼀、Docker 1、Docker介绍.pdf 1、Docker 是什么? Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙盒”机制,容器之间不会存在任何接⼝。Docker 通过 Linux Container(容器)技术将任意类型…

5步掌握Python Django+Vue二手房项目,实现房价预测与知识图谱系统

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

破晓科技与神话:三防平板与《黑神话:悟空》的创新交响

当全球游戏圈因《黑神话:悟空》的震撼预告而沸腾,一款代表中国游戏顶尖制作水平的作品,正以它独特的文化魅力与技术创新,向世界宣告着中国游戏产业的崛起。 点击添加图片描述(最多60个字)编辑 震撼视觉体验…

解题—求两数的最大公约数与最小公倍数 #辗转相除法

文章目录 前言 一、最大公约数 方法一:硬解 方法二:辗转相除法 1、图形理解: 2、公式理解: 二、最小公倍数 方法一:硬解 方法二:巧解 总结 前言 路漫漫其修远兮,吾将上下而求索。 一、…

spring security 入门基础,表单认证web页面跳转

一、导入所需依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.2</version></parent><!-- web 支持 --><dependency><groupId>…

机械学习—零基础学习日志(如何理解概率论5)

这里我们学习随机变量的独立性 我们这里也来一个习题。 《概率论与数理统计期末不挂科|考研零基础入门4小时完整版&#xff08;王志超&#xff09;》学习笔记 王志超老师 &#xff08;UP主&#xff09;

旧物上门回收系统架构分析

随着环保意识的增强和资源循环利用的重视&#xff0c;旧物上门回收系统逐渐成为现代城市生活的一部分。这些系统通过先进的技术架构&#xff0c;实现了废品的高效回收与再利用&#xff0c;为环境保护和可持续发展做出了积极贡献。本文将从系统架构的角度&#xff0c;对旧物上门…

Linux--网络层 IP协议

目录 0.往期文章 1.IP基本概念 2. IP协议报头格式 3.网段划分 两种网段划分的方式 为什么要进行网段划分 4.特殊的IP 地址 5.IP 地址的数量限制 6.私有 IP 地址和公网 IP 地址*** NAT技术 认识公网 运营商扮演的角色 7.路由 8.16位标识&#xff0c;3为标志和13位…

leetcode:2733. 既不是最小值也不是最大值(python3解法)

难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;数组由 不同正整数 组成&#xff0c;请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字&#xff0c;如果不存在这样的数字&#xff0c;返回 -1 。 返回所选整数。 示例 1&#xff1a; 输入&#xff1a;nu…

vue3【组件封装】日历 (默认标注今日,可选择日期,可标注日期,可切换月份,样式仿 Win11)

效果预览 技术要点 获取每个月最后一天 下个月的第0天,自动会被解析为本月的最后一天 let lastDay = computed(() => new Date(year.value, month.value, 0).getDate());flex 布局末行左对齐 最靠谱的方式是想办法将末行缺失元素填满 本范例中,因星期固定7列,按每月最…

Centos7.6-DNS服务安装与配置

1、安装bind 软件包 首先&#xff0c;需要安装 bind 软件包&#xff0c;这可以通过运行以下命令来完成&#xff1a; [rootlocalhost ~]# yum install bind 已加载插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile* base: mirrors.aliyun…

string转nlohmann::json问题

如果用字符串赋值构造函数&#xff0c;出现如下问题&#xff1a; std::string message; ​​nlohmann::json info(message); 如果按照如下代码则是正常的&#xff1a; std::string message; ​​nlohmann::json info nlohmann::json::parse(message);

Vue项目创建和使用

快速上手 | Vue.js (vuejs.org) nodejs.org/ vue项目实质上是index.html页面和多个js文件的集合&#xff0c;最终解析后的html和js代码可以由浏览器解析运行&#xff1a; vue项目的创建&#xff0c;需要脚手架工具来搭建&#xff1b; 在编译的源码阶段&#xff0c;文件格式为.…

FPGA开发——verilog的运算符以及相关优先级的介绍

一、简介 在我们学习任何一门编程语言时&#xff0c;不可避免的都会遇见运算符和相关的运算优先级的问题&#xff0c;只有掌握了各个运算符的优先级关系我们才能进行更好的代码编写。在前面的时候因为我没有遇到因为优先级而导致的工程结果错误&#xff0c;所以没有过多注意&am…