当前位置: 首页 > news >正文

【系统移植】(一)概念流程

【系统移植】(一)概念流程

文章目录

  • 【系统移植】(一)概念流程
    • 1.基础概念
    • 2.整体系统移植流程
    • 3.开发板启动流程

1.基础概念

操作系统:向下管理硬件,向上提供接口。对于复杂的东西已经实现好了,只需调用它提供的接口即可。对于Linux操作系统大致可以分为五类,1.进程;2.内存管理(malloc、free);3.网络协议(tcp、udp…);4.文件系统;5.设备管理(这些是底层硬件,由Linux操作系统来进行直接的管理,在ARM编程中,我们都是直接对寄存器进行操作硬件,而对于有操作系统的,是在操作系统内部进行管理的)

什么叫顶层开发或者说应用层开发:就是通过调用操作系统的一些API接口,来实现应用软件(进程、线程、网络编程这些知识,直接知道这些函数怎么样来用,就足够了)

设备文件:就是让应用程序来控制底层硬件的文件

系统移植:说白了就是给ARM开发板安装一个Linux操作系统,让其能够调用Linux下的一些API接口。(装系统很快,但大部分我们做的是移植的工作,让系统与对应的硬件相匹配)

移植:不同架构的处理器指令集不兼容,即便相同的处理架构,板卡不同驱动代码也不兼容。(你可以理解为都是用的stm32f103芯片,但是外设电路不一样)

Linux 是一个通用的内核并不是为了某一个特定的处理器架构或板卡设计的,所以从官方获取Linux源码后我们要先经过相应的配置使其与我们当前的硬件平台相匹配后才能进行编译和安装。(Linux本质也是代码写出来的,是由汇编和C语言写成的,那么汇编有x86的也有ARM的,这也就代表用x86的汇编写的Linux在ARM上面跑不了,我们大部分时间就花在了配置Linux源码上,让软件与我们的硬件相匹配)

对于上层的应用开发,假设我写了一个创建进程的程序,放到你的电脑上,只要你的电脑上面有Linux系统,这个代码就可以跑。但是对于底层代码,操控硬件的这些,我在这个板子上面能跑,换到另外一个板子上面就跑不了了。

image-20241215154831986

移植流程:

从网上下载到源码;进行相应的配置;编译(因为是源码所以要编译);安装

注意这个编译是要在我们自己的主机Linux下进行编译,但是安装是在要安装Linux系统的那个板子上面进行安装。

整个学习过程我们要重过程,轻细节。熟悉把Linux系统安装到板卡上面的流程,而不是研究源码

2.整体系统移植流程

对比Windows装机:

  1. 准备Windows系统镜像,U盘启动盘(里面会装老毛桃\大白菜这些软件,他会引导镜像进行安装)
  2. 开机按F10进入BIOS选择启动方式(U盘启动)

BIOS:基本输入输出系统,他本质也是一个软件,是电脑生产厂家固化到主板上的

启动方式:光驱启动(就是光盘)、硬盘启动、U盘启动。设置为那个就会首先执行那个介质下的程序

  1. 通过U盘中的引导程序安装系统
  2. 安装Windows驱动程序

重启电脑之后发现,网卡驱动,显示器驱动,鼠标驱动这些都不能用,这个时候就要安装驱动。

驱动:就是一个程序软件,来驱动底层硬件工作

  1. 安装Windows应用程序(QQ、腾讯视频这些)

Linux系统移植:

  1. 准备Linux内核镜像(就是系统安装包),SD卡启动盘(也要刷引导程序,这个引导程序就是uboot,来引导和安装系统)
  2. 开机上电配置引导加载程序(Bootloader,BL0),启动方式为SD卡启动(它是固化在系统只读存储器(ROM)中的一段代码)
  3. 通过SD卡中的引导程序安装系统(比如把系统安装到emmc硬盘里面)
  4. 安装Linux驱动程序(刚装完的系统很多硬件用不了,比如我要驱动一个mpu6050)
  5. 安装Linux应用程序(进程线程,这些上层软件,APP软件)

U-Boot(Universal Boot Loader)和Bootloader这两个术语之间的关系可能会有些混淆,但它们实际上是这样的:

  1. Bootloader:这是一个通用术语,指的是任何用于启动操作系统的程序。Bootloader是计算机启动过程中加载的第一个软件,它的任务是初始化硬件,然后加载操作系统内核到内存中。Bootloader可以是任何特定于硬件平台或操作系统的程序。

  2. U-Boot:这是一个特定的Bootloader实现,它是开源的,并且被设计为通用的,可以用于多种不同的硬件平台和架构。U-Boot提供了Bootloader的基本功能,如硬件初始化、加载内核、命令行界面等。

所以,区别在于:

  • Bootloader 是一个泛指,指的是启动操作系统的任何程序。
  • U-Boot 是Bootloader的一个特定实例,是一个具体的软件产品,具有广泛的适用性和功能。

简而言之,U-Boot是Bootloader的一种,但Bootloader这个术语可以指任何类型的启动加载程序,包括U-Boot以及其他如GRUB(GRand Unified Bootloader)、LILO(Linux Loader)等。

**EMMC:**就是电脑里面的硬盘,掉电不丢失数据。我们需要把系统装到这个里面。

3.开发板启动流程

  1. BL0会上电首先读取介质启动方式,把SD卡中的uboot复制到内存ROM里面,之后BL0就停了。

  2. 搬运Linux:然后就轮到了uboot进行一些引导程序,他会把emmc里面的Linux系统复制到内存ROM。(前提是外存已经安装好Linux系统安装包)

  3. 搬运dtb(设备树):uboot把外存的dtb(Device Tree Blob)设备树,也复制到内存ROM,(Linux内核将驱动代码和设备信息进行了分离,由设备树来进行管理,好处就是硬件改动或者平台升级的时候,驱动程序不用改,只修改硬件信息就可以了。可以理解为DTB+Linux=Linux内核)

  4. 搬运rootfs(根文件系统):它本身就是一个文件,不是程序也不是代码也不属Linux范畴。后续详细讲解

  5. Linux系统真正开始运行:Linux把根文件系统挂载(也可以通过网络也挂载)过来用,可以理解为把根文件系统读过来用并使用

专业一点的说法:

  1. 开发板上电后首先运行SOC内部的IROM中固化的代码(BL0),这段代码先对基本的软硬件环境(时钟等…)进行初始化,然后再检测启动方式,然后再将对应的存储器中的uboot搬移到内存,然后跳转到uboot运行
  2. uboot开始运行后首先对开发板上电软硬件环境做进一步的初始化,然后将Linux内核、设备树(dtb)、根文件系统(rootfs)从外部存储器(或网络)搬移到内存,然后跳转到Linux运行
  3. Linux开始运行后先对系统环境做初始化,当系统启动完成后,Linux再从内存中(或网络)挂载根文件系统

image-20241215180819546

总结:我们需要移植的一共有4个。

  1. uboot移植
  2. Linux内核(包含设备树)
  3. 根文件系统移植

寻址空间(地址空间):CPU可以进行读和写寄存器或内存,但是读写范围是有限的,这个范围由地址总线的宽度决定,假如你是32位的,那么就是2的32次方,4GB。

地址映射表:一般芯片手册都会给出,那些内存分配给了那些寄存器用(诸如网卡、iic、spi)

相关文章:

  • 零基础玩转深度神经网络大模型:从Hello World到AI炼金术(详解版)
  • 如何在中科方德llinux系统上离线安装salt-minion
  • AIP-210 Unicode
  • 【初阶数据结构】队列
  • 浅谈多个虚拟机(WSL和VMWare)的网络配置
  • HarmonyOS 5.0.4(16) 版本正式发布,支持wearable类型的设备!
  • 【C++】vector常用方法总结
  • 深度学习入门:小白的奇妙之旅
  • 2025.4.1总结
  • 前端学习记录之HTML
  • GalTransl开源程序支持GPT-4/Claude/Deepseek/Sakura等大语言模型的Galgame自动化翻译解决方案
  • MCP over MQTT:EMQX 开启物联网 Agentic 时代
  • mongodb数据库的优缺点
  • 洛谷题单2-P5712 【深基3.例4】Apples-python-流程图重构
  • Java常用工具算法-2--加密算法1--对称加密算法(推荐AES算法)
  • spring druid项目中监控sql执行情况
  • 第30周Java分布式入门 消息队列 RabbitMQ
  • 【力扣hot100题】(033)合并K个升序链表
  • python --计算直线和矩形(矩形和矩形是否相交 嵌套 重叠)
  • GitPython库快速应用入门
  • 手机网站制作行业排行/天堂网长尾关键词挖掘网站
  • 大型网站开发软件/短视频精准获客系统
  • 中小企业网站建设 网络营销/网络seo推广培训
  • 重庆特种作业操作证官网/网络推广优化服务
  • 杭州网站建设网络公司/指数平滑法
  • 兼职做网站系统/百度app在哪里找