- 系统移植基础知识
- 嵌入式系统分层
硬件(ARM)、操作系统(Linux)、应用软件
- 硬件层:是基础的硬件模块、比如我们用到的ARM、IIC、LED灯等都属于硬件层的东西。具体被软件控制的单元。
- 操作系统:我们使用的Linux系统、Windous等。在硬件层的基础上实现进程管理、内存管理、设备管理等,并且可以给应用软件层提供API接口。
- 应用软件:操作系统之上的应用程序。IO编程、网络编程、QT设计的软件,需要调用操作系统提供的API进行程序设计、设计完成之后在操作系统上运行。
- 课程内容
系统移植课程可以简单的理解为,在ARM处理器的开发板上(硬件平台),安装Linux系统。就像我们平时在电脑主板上安装Windous系统一样。
- 移植的目的
学ARM课程时,讲过我们使用的不同处理器,他的指令集是不兼容的,即便我们使用相同的处理器,不同产品的板卡所使用的驱动代码也不兼容,比如你使用A型号声卡、我使用B型号的声卡,那我们的驱动程序也会有区别。这就导致我们不能够像Windous一样直接安装通用系统就行了,嵌入式开发中,我们需要对Linux系统进行定制化处理,换句话说就是匹配我们使用的硬件层设备。
Linux是一个通用的内核但不是某个特定处理器或者说板卡专用系统,所以我们从官网获取到的Linux源码需要我们结合自己实际硬件设备(板卡)进行配置,才能够编译和安装。
- 课程特点及如何学习
特点:应用广泛(像医疗、军事、航空航天等,生活中随处可见嵌入式系统)
学习:
思维方式:配置、编译、安装(结合我们自己实际的硬件设备进行配置、配置好之后进行编译、编译完成进行安装)
学习方法:重方法、轻细节。把握整体思路、建立通用思维。(重点学会移植的方法、建立通用思维之后在以后的工作中再扣细节的东西)
原则:最短的时间学习最有用的东西。
- 系统移植过程
1.准备Linux内核镜像、SD卡启动盘
2.通过拨码开关选择启动方式(SD启动)
3.通过SD卡中的引导程序安装系统
4.安装Linux驱动程序
5.安装Linux应用程序
- 开发板启动过程
开发板上电(复位)之后,首先运行SOC内部的IROM中固化好的代码(BL0),这段代码对基本的软硬件环境(时钟、堆栈等)进行初始化,之后检测拨码开关的位置(不同的硬件设备表现形式不一样,但是目的都是对不同的引脚进行配置)获取启动方式,之后将对应存储器中的Uboot搬移到内存中,然后跳转到Uboot运行。
Uboot开始运行后首先对开发板上的软硬件环境进一步初始化、然后将Linux内核、设备树(dtb)、根文件系统(rootfs)从外部存储器(或者网络)搬移到内存,然后跳转Linux运行。
Linux开始运行后先对系统环境做初始化,当系统启动完成后、Linux再从内存中(或网络)挂载根文件系统。
- 总结-(系统移植步骤)
uboot移植
linux内核移植(包含设备树)
根文件系统移植
- Uboot概述
Bootloader简介
在操作系统运行之前运行的一小段代码,用于将软硬件环境进行初始化到一个合适的状态,为操作系统的加载运行做准备(其本身不是操作系统)
基本功能:
初始化软硬件环境
引导加载Linux内核
给Linux内核传参
执行用户命令
为什么使用Uboot
Uboot需要解决的问题
- 自己能开机启动
- 能引导操作系统内核启动并给内核传参
- 供系统部署功能
- 能进行SOC级和板级硬件
- Uboot生命周期