本来安排的任务是看一下linux移植这部分的知识,但我感觉有点难看懂,星火的那个要跟着他用他的开发板学的,我觉得还是先补一下基础的知识,看一下速成先吧
bootloader:负责加载启动linux内核
rootfs根文件系统提供了一些系统级的应用软件,一些应用服务对应的可执行程序
data fs,存一些用户相关的数据
移植就是将bootloader的源代码,linux内核源代码,文件系统中用户态程序代码根据硬件做少量修改,使其能够在目标硬件平台运行起来的过程
嵌入式linux系统中为什么要有bootloader?
使得Linux内核可以在系统主存中跑起来,系统必须符合Linux内核启动的必要条件。
在嵌入式系统中,BootLoader是在操作系统内核运行之前运行。初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLgader来完成。
Bootloader不属于操作系统内核,采用汇编语言编写,因此针对不同的CPU体系结构,这一部分代码不具有可移植性;
在移植操作系统时,这这部分代码必须加以改写,
Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置
Bootloader的基本功能:
初始化硬件;
将操作系统内核从Flash拷贝到SDRAM中;
改写系统的内存映射,原先Flash起始地址映射为0地址,这时需要将RAM的起始地址映射为0;
设置堆栈指针并将bss段清零,执行C语言程序和调用子函数时要用到
提供Linux内核的启动参数
启动Linux内核;
改变pc值,使得CPU开始执行真正的操作系统内核
我们在裸板阶段编程,用到的硬件地址是物理地址,然后板子上跑起linux内核之后,再用地址去做编程的时候用的就不是物理地址而是虚拟地址了。
操作系统提供了让多任务并发,宏观上并行,微观上串行,这是linux内核的一个核心功能,也提供了进程之间通信的方式
在裸板上如果要想保证保存的数据掉电不丢失的话,要存到emmc里,现在往emmc里存东西,就要记下来存在了emmc哪个偏移位置上,文件是多大。而在虚拟机linux上,你只需要知道你把数据存在了哪个磁盘的具体目录就行了,不需要知道他存在哪个扇区哪个位置,这个就归功于linux内核和它的文件系统
Linux内核的本质从C语言的角度来看,其实linux内核里就是一堆C函数,他们组成的linux内核源码,从硬件角度来看,Linux内核是整个硬件的管理者,管理者板子上所有的硬件;从应用的角度来看,它为应用程序的运行提供了一系列的服务。
嵌入式文件系统:是一种对存储设备上的数据进行组织和控制的机制,
是操作系统的一部分,负责管理和存储文件信息