day01(Linux底层)基础知识
目录
导学
基础知识
1、Bootloader是什么
2、Bootloader的基本作用
3、入式中常见的Bootloader有哪些
4、Linux系统移植为什么要使用bootloader
5、uboot和Bootloader之间的关系
6.Uboot的获取
7、uboot版本命名
8、uboot版本选择
9、uboot的特点
10.Uboot使用
导学
移植内核层让产品上有系统
产品相关
基础知识
如何装系统
Linux产品启动流程
Linux产品启动流程
1. 开机自检(POST):
- 当开发板通电后,首先会进行硬件设备的自检,以确保各部件正常工作。
2. 引导加载程序(Boot Loader)执行:
- 在自检完成后,引导加载程序(如U-Boot)开始执行。
- U-Boot会进行硬件初始化,如内存、串口、网络等设备的初始化。
- U-Boot会检查环境变量(如启动参数、网络配置等)并进行相应设置。
3. 加载Linux内核:
- U-Boot会从指定的存储介质(如Flash存储器、SD卡等)中加载Linux内核镜像到内存中。
- 加载完成后,U-Boot会将控制权交给Linux内核。
4. Linux内核启动:
- Linux内核开始执行,进行更详细的硬件初始化和驱动加载。
- 内核会解析启动参数(如从U-Boot传递过来的参数),并据此进行配置。
- 内核会启动第一个用户空间程序(通常是init进程),这标志着Linux操作系统的正式启动。
5. 挂载根文件系统:
- init进程会读取/etc/inittab或/etc/systemd/system/default.target等配置文件,确定系统的运行级别或目标。
- 接着,init进程会挂载根文件系统(root filesystem),这是Linux系统中存放各种文件和目录的地方。
- 挂载完成后,系统就可以访问根文件系统中的各种资源了。
6. 启动系统服务和应用程序:
- 根据运行级别或目标,init进程会启动相应的系统服务和应用程序。
- 这些服务和应用程序会提供Linux系统的各种功能和特性。
1、Bootloader是什么
bootloader是一个引导加载程序,它的主要作用是初始化硬件设备、设置硬件参数,并加载操作系统内核。在嵌入式系统中,bootloader是硬件启动后第一个被执行的程序,它位于操作系统和硬件之间,起到桥梁的作用。
2、Bootloader的基本作用
硬件初始化:
在操作系统启动之前,Bootloader会执行一系列的硬件初始化操作,如设置CPU的时钟频率、内存控制器、总线控制器等,以确保硬件平台处于正常的工作状态。
操作系统加载:
Bootloader会负责从指定的存储介质(如硬盘、闪存、网络等)中加载操作系统内核,并将其加载到内存中,然后跳转到操作系统内核的入口点执行。
提供用户接口:
有些Bootloader会提供一个简单的用户接口,允许用户进行一些基本的操作,如选择启动的操作系统、设置启动参数等。
3、入式中常见的Bootloader有哪些
U-Boot:
U-Boot是一个开源的Bootloader,支持多种处理器架构和操作系统。它提供了丰富的硬件初始化功能,并且具有高度的可配置性和可扩展性。U-Boot广泛应用于各种嵌入式设备和系统中,如路由器、交换机、智能手机等。
RedBoot:
RedBoot也是一个开源的Bootloader,主要用于嵌入式系统和网络设备。它支持多种处理器架构和网络协议,并且具有强大的网络功能,可以实现远程启动和更新。RedBoot常用于需要网络功能的嵌入式设备中。
GRUB:
GRUB(Grand Unified Bootloader)是一个多操作系统引导加载程序,最初是为GNU/Linux开发的。但现在也支持其他操作系统,如BSD、Windows等。GRUB具有灵活的配置和强大的功能,可以引导位于不同存储介质上的操作系统。
Android Bootloader:
- Android系统也有其自己的Bootloader,通常被称为Android Bootloader或Android Boot Image。
- 它负责在Android设备启动时加载并验证系统分区,然后启动Android操作系统。
- Android Bootloader通常与设备的硬件紧密相关,并由设备制造商定制。
ARM Trusted Bootloader (ATF):
- ATF是ARM提供的一个开源Bootloader,用于支持ARM TrustZone技术的设备。
- TrustZone是ARM架构中的一个安全特性,它允许在硬件级别上隔离安全和非安全代码的执行。
- ATF的主要任务是在启动时加载和验证安全引导加载程序(Secure Bootloader),然后将其传递给操作系统。
OpenSBI (Open Source Secure Boot Image):
- OpenSBI是一个开源的Secure Boot Image,主要用于RISC-V架构的服务器和数据中心设备。
- 它提供了一个安全的启动环境,可以加载和验证操作系统内核和其他关键组件。
- OpenSBI支持多种RISC-V处理器和平台,并且具有高度的可配置性和可扩展性。
4、Linux系统移植为什么要使用bootloader
硬件初始化:
Bootloader能够完成系统硬件的初始化和配置。这包括CPU的初始设置、内存控制器的配置、设备驱动程序的加载等。由于不同的硬件平台有不同的特性和要求,因此使用Bootloader可以确保Linux系统能够正确地与底层硬件进行交互。
内核加载:
Bootloader负责将Linux内核从存储介质(如硬盘、闪存等)加载到内存中,并设置合适的启动参数。这些参数包括内存布局、设备驱动程序的路径等,它们对于Linux内核的正确运行至关重要。
系统稳定性:
Bootloader通常包含了一些错误检测和恢复机制,以确保系统的稳定性和可靠性。例如,它可以检查硬件的完整性,并在发现问题时启动备用设备或采取其他恢复措施。这有助于提高Linux系统的整体可用性和容错性。
灵活性:
通过使用Bootloader,用户可以灵活地选择加载哪个Linux内核版本、使用哪个文件系统类型等。这为用户提供了更多的选择和灵活性,以适应不同的应用场景和需求。
5、uboot和Bootloader之间的关系
U-Boot是Bootloader的一种实现,它专门用于嵌入式系统,特别是那些基于ARM、MIPS等处理器的系统。U-Boot提供了丰富的硬件支持和功能,使得开发者能够轻松地初始化硬件、加载操作系统内核,并进行一些基本的系统配置。
简单来说就是Uboot属于Bootloader中的一种,bootloader就相当于类,uboot就相当于对象。嵌入式领域常用的bootloader就是uboot
6.Uboot的获取
1. uboot官网获取
ftp://ftp.denx.de/pub/u-boot/
2. 芯片厂家获取
3. 开发板厂家 ---》目前市面上的6818的开发板,开发板厂家只提供u-boot.bin
4. 同事
本次移植课程使用:u-boot-2014.07-netok.tar.bz2
7、uboot版本命名
前期:u-boot-1.3.2
现在:u-boot-2024.01
08年以前uboot是1.1.几1.3.几这样命名08年开始以年份和月份命名。
8、uboot版本选择
支持对应的硬件平台
相对成熟的版本(资料多)
每当发布新的芯片后uboot就会增加对应芯片的版本。一般和处理器同一时期发布的uboot版本对处理器的支持较好。
9、uboot的特点
1. u-boot是一个开源的软件
2. u-boot支持多种架构的平台(ARM powerPC MIPS x86)
3. u-boot的源码短小精悍
4. u-boot就是一个裸机代码
5. u-boot引导加载内核,启动内核,并给内核传递参数
6. u-boot可以完成部分硬件的初始化:uart,内存,emmc,网卡
7.u-boot生命周期短,启动完内核,给内核传递完参数(告诉内核从什么地方去挂载根文件系统),u-boot的生命周期结束。
10.Uboot使用
- 将板子上电,串口插到电脑上,打开串口工具
- 选择串口功能
- 配置自己的串口信息
- 配置名字
- 双击打开
- 连接串口
- 如果连接不上,使用以下步骤与解决(波特率调低->连接->改回波特率115200)
使用SD卡启动
- 重新上电,打印出文字内容就对了
- Uboot 的模式
倒计时结束之前,按键盘任意键(按关机键的是棒槌),进入交互模式
倒计时结束之后进入自启动模式
- 使用Uboot命令
1. printenv
- 功能:打印当前设置的环境变量列表。
- 样例:直接在U-Boot命令行输入`printenv`,然后按回车键,即可看到所有环境变量的列表及其值。
2. setenv
- 功能:设置或修改环境变量的值。
- 样例:假设我们要设置一个名为`my_variable`的环境变量,其值为`hello_world`,可以输入`setenv my_variable hello_world`,然后按回车键。
3. saveenv
- 功能:将当前的环境变量设置保存到非易失性存储器中,以便在下次启动U-Boot时使用。
- 样例:在修改完环境变量后,为了确保这些更改在下次启动时仍然有效,可以输入`saveenv`,然后按回车键。
4. boot
- 功能:根据环境变量中的配置来启动操作系统。这通常涉及到加载内核镜像和根文件系统。
- 样例:直接输入`boot`,然后按回车键,U-Boot会根据`bootcmd`环境变量中指定的命令来启动操作系统。
5. bootm
- 功能:从指定的内存地址直接启动内核镜像。这通常用于手动指定内核镜像的位置。
- 样例:`bootm [addr [initrd[:size]] [fdt]]`。假设内核镜像位于内存地址`0x80000000`,可以输入`bootm 0x80000000`(注意,这里可能还需要指定其他参数,如initrd和fdt的地址,具体取决于你的系统配置)。
6. help
- 功能:显示U-Boot的帮助信息,列出所有可用的命令及其简短描述。
- 样例:在U-Boot命令行输入`help`,然后按回车键,即可看到所有可用命令的列表。
7、IP地址相关命令
- `ipaddr`:显示或设置U-Boot的IP地址。
- `serverip`:显示或设置服务器的IP地址(例如Ubuntu的IP)。
8. 启动延时
- `bootdelay`:设置进入自启动模式之前的倒计时的秒数。例如,如果设置为5,则U-Boot会在5秒后自动启动操作系统,除非用户在此期间按下某个键来中断启动过程。
9、网络传输命令
- `loadb`:通过Kermit协议从远程主机下载文件到U-Boot指定的内存地址。 样例:`loadb <内存地址>`,之后根据Kermit协议的提示进行文件传输。
- `tftp`:通过TFTP协议从TFTP服务器下载文件到U-Boot指定的内存地址。 样例:`tftp <内存地址> <文件名>`,该命令将尝试从TFTP服务器上下载指定文件,并将其存储在指定的内存地址中。
10. 存储器访问命令
-`mmc read`:从EMMC存储器中读取数据到内存。 样例:`mmc read <内存地址> <扇区编号> <扇区数>`,这将从EMMC中的指定扇区开始,读取指定数量的扇区,并将数据存储在指定的内存地址中。
- `mmc write`:将内存中的数据写入到EMMC存储器中。 样例:`mmc write <内存地址> <扇区编号> <扇区数>`,这将从指定的内存地址开始,读取指定数量的数据,并将其写入到EMMC中的指定扇区。
相关文章:

day01(Linux底层)基础知识
目录 导学 基础知识 1、Bootloader是什么 2、Bootloader的基本作用 3、入式中常见的Bootloader有哪些 4、Linux系统移植为什么要使用bootloader 5、uboot和Bootloader之间的关系 6.Uboot的获取 7、uboot版本命名 8、uboot版本选择 9、uboot的特点 10.Uboot使用 导学…...
flink学习(13)—— 重试机制和维表join
重试机制 当任务出现异常的时候,会直接停止任务——解决方式,重试机制 1、设置checkpoint后,会给任务一个重启策略——无限重启 2、可以手动设置任务的重启策略 代码设置 //开启checkpoint后,默认是无限重启,可以…...
第三方Cookie的消亡与Google服务器端标记的崛起
随着互联网用户对隐私保护的关注日益增强,各大浏览器正在逐步淘汰第三方Cookie。这一变革深刻影响了广告商和数字营销人员的用户跟踪和数据分析方式。然而,Google推出的服务器端标记技术为这一挑战提供了新的解决方案。 什么是第三方Cookie? …...

微信小程序——文档下载功能分享(含代码)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Burp Suite 全面解析:开启你的 Web 安全测试之旅
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
Oracle DataGuard 主备正常切换 (Switchover)
前言 众所周知,DataGuard 的切换分为两种情况: 系统正常情况下的切换:这种方式称为 switchover,是无损切换,不会丢失数据。灾难情况下的切换:这种情况下一般主库已经启动不起来了,称为 failov…...
为什么编程语言会设计不可变的对象?字符串不可变?NSString *s = @“hello“变量s是不可变的吗?Rust内部可变性的意义?
为什么编程语言会设计不可变的对象? Java和C#中String是不可变的,StringBuilder是可变的。Obj-C中NSArray是不可变数组,NSMutableArray是可变数组。编程语言设计不可变的对象其实是为了优化(更高性能和节省存储空间)、安全(包括线程安全)。 字符串不可变…...

安装 RabbitMQ 服务
安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …...
爬虫—Scrapy 整合 ChromeDriver 实现动态网页拉取
在进行爬虫开发时,使用 Scrapy 配合 ChromeDriver 来模拟真实浏览器加载 JavaScript 渲染内容是一种常见且高效的方法。Scrapy 本身是一个非常强大的爬虫框架,然而它默认使用的是 requests 库来抓取静态网页内容。对于需要通过 JavaScript 渲染的动态网页…...
Linux 进程管理详解
Linux 进程管理详解 引言 在现代操作系统中,进程是执行程序的基本单位。Linux作为一个强大的多任务操作系统,提供了丰富且灵活的机制来管理和控制进程。本文将详细介绍Linux进程管理的基本概念、核心机制以及常用的管理工具,帮助读者深入了…...
MySQL更新JSON字段key:value形式
MySQL更新JSON字段key:value形式 1. 介绍 MySQL的JSON数据类型是MySQL 5.7及以上版本中引入的一种数据类型,用于存储JSON格式的数据。使用JSON数据类型可以自动校验文档是否满足JSON格式的要求,优化存储格式,并允许快速访问文档中的特定…...

vue.js学习(day 18)
实例:面经基础版...
WINDOWS 单链表SLIST_ENTRY使用
1.初始化链表头 //初始化链表头qq1490900437 void InitialGloubleVar() {while (1){G_Handle.SaveProcessThreadHandle (PSLIST_HEADER)_aligned_malloc(sizeof(SLIST_HEADER), MEMORY_ALLOCATION_ALIGNMENT);if (G_Handle.SaveProcessThreadHandle ! NULL){break;}}Initiali…...

【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程
文章目录 【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程前言一 、docker上部署mysql1. 拉取mysql镜像2. 创建容器3. 远程登录mysql 二 、docker上部署nginx1. 拉取nginx镜像2. 在dockerTar目录下 上传nginx.tar rz命令3. 创建nginx容器4…...

不同云计算网络安全等级
导读云计算的本质是服务,如果不能将计算资源规模化/大范围的进行共享,如果不能真正以服务的形式提供,就根本算不上云计算。 等级保护定级流程 定级是开展网络安全等级保护工作的 “基本出发点”,虚拟化技术使得传统的网络边界变…...

手机实时提取SIM卡打电话的信令声音-蓝牙电话如何适配eSIM卡的手机
手机实时提取SIM卡打电话的信令声音 --蓝牙电话如何适配eSIM卡的手机 一、前言 蓝牙电话的海外战略中,由于海外智能手机市场中政策的差异性,对内置eSIM卡的手机进行支持是非常合理的需求。Android系列手机中,无论是更换通信运营商…...

视频流媒体服务解决方案之Liveweb视频汇聚平台
一,Liveweb视频汇聚平台简介: LiveWeb是深圳市好游科技有限公司开发的一套综合视频汇聚管理平台,可提供多协议(RTSP/RTMP/GB28181/海康Ehome/大华,海康SDK等)的视频设备接入,支持GB/T28181上下级联…...

【在Linux世界中追寻伟大的One Piece】多线程(三)
目录 1 -> Linux线程同步 1.1 -> 条件变量 1.2 -> 同步概念与竞态条件 1.3 -> 条件变量函数 1.4 -> 为什么pthread_cond_wait需要互斥量 1.5 -> 条件变量使用规范 2 -> 生产者消费者模型 2.1 -> 为什么要使用生产者消费者模型 2.2 -> 生产…...
mvc命令
命令 mvc MVC(Model-View-Controller)是一种软件架构模式,用于组织和管理应用程序的代码mvc重要的三部分 (1)模型(Model):负责存储系统的中心数据,提供访问数据的函数,封装了应用程序的功能内核。 (2)视图&…...
17 go语言(golang) - 错误处理
错误处理 错误处理是编程中用于识别、响应和恢复程序运行时出现的错误和异常情况的过程。其目的是确保程序的鲁棒性(一个系统、模型或函数在面对错误输入、工作压力、意外情况或故意攻击时仍能保持稳定性和可靠性的能力),即使在出现错误的情…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...