前景了解
操作系统的作用?
资源管理,程序控制和人机交互等
Linux操作系统移植的概念
嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。为了使嵌入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而必须把一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的OEM厂商来完成。
为什么要进行操作系统的移植?
不同架构的处理器指令集不兼容,即便是相同的处理器架构,板卡不同驱动代码也是不兼容的。
Linux是一个通用的内核并不是为某一个特定的处理器架构或者板卡设计的,所以从官方获取的Linux源码后我们要先经过相应的配置使其与我们当前的硬件平台相匹配后才能进行编译和安装。
将已有的软件,根据硬件平台的差异,进行少量的代码修改,使得该软件可以在新的硬件平台上运行起来的过程,就是将linux系统经过裁剪,移植到arm开发板上。
Linux系统?
linux系统 = linux内核 + 根文件系统;
根文件系统 = 库(/lib和/usr/lib) + 命令( /bin和/usr/bin) + 配置文件( /etc) + GUI(图形化界面,如:QT)
移植的三大部分?
1.移植uboot:
我们这个板子本身有uboot程序(每个开发板自带),不需要配置,如果需要请了解如下:
https://blog.csdn.net/mxh3600/article/details/129405250
bootloader是什么?
BootLoader是在一系列引导加载系统启动的程序的统称,是一个概念并不是具体的代码,只要满足在设备启动初期启动内核功能的代码都可以叫做BootLoader。
u-boot是什么?
是一个主要用于嵌入式系统的引导加载程序。
1.是一个开源的软件
2.支持多种架构的硬件平台
3.的主要作用是引导加载linux内核或者应用程序启动。一旦内核或应用程序启动,uboot的使命就结束了。
4.源码本质就是一个裸机程序,ARM架构的CPU基本都是使用uboot
5.启动时,主要完成部分硬件的初始化;比如:内存,EMMC, 时钟,串口等
6.主要用于引导linux内核启动,并给内核传递必要的启动参数。
2.移植Linux内核
内核是什么:
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
CPU与内核之间的关系:
“内核是CPU的核心,一个CPU可以有多个内核(也就是多核处理器),而一个内核只能属于一个CPU。
linux内核必须由BootLoader加载和启动,内核本质上也是一个大程序,从上而下执行,最后会进入到一个while(1)。内核一旦启动,BootLoader生命结束,内核永驻内存,直到系统复位重启才消亡。
内核会根据BootLoader传递的参数去某个地方去找根文件系统rootfs,一旦找到rootfs之后的话,内核会将控制权交给根文件系统rootfs。
3.移植根文件系统镜像
linux内核根据BootLoader提供的参数找到了根文件系统rootfs,内核就会运行根文件系统rootfs下/sbin目录下的init一号进程,并且将控制权交给init第一号进程,init进程创建子进程运行/bin/sh程序,就是shell程序,shell终端,shell运行->终端->等待用户输入命令(ls/pwd/……)。
移植内核和移植根文件系统一般是一起执行。
采用EMMC加载内核和根文件系统:
优势:不需要通过网络去服务器下载镜像,我们将镜像安装到开发版上的EMMC中,然后从EMMC启动内核(交互模式下)
步骤: 给开发板重新上电,在 uboot 交互模式下,去下载并安装这些镜像。
1. 将内核镜像写入到 EMMC 中指定的扇区。
2. 下载根文件系统镜像到内存中。
3. 将根文件系统镜像写入到 EMMC 中指定的扇区。
因为要从 EMMC 驱动,所以还要修改 uboot 的启动参数,并保存。
给开发板重新上电,上电之后观察内核是否能通过 EMMC 加载和启动内核,启动完成后是否能挂载根文件系统(ext4),在终端上输入 linux 下的 shell 命令测试是否正常。
EMMC是什么?
eMMC在封装中集成了一个控制器,提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。