linux-内核-BootLoader/Uboot/Flash/文件系统
BootLoader
一.什么是BootLoader
一个嵌入式系统从软件角度来看可以分为三个层次:
1.引导加载程序
包括固化在固件(firmware)中的boot程序(可选),和BootLoader两大部分
2.linux内核
特定于嵌入式平台的定制内核
3.文件系统
包括子系统命令和应用程序
bootloader是在操作系统运行之前运行的一小段程序,通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做准备。
二.为什么要做bootloader移植
每种不同的cpu体系结构都有不同的BootLoader,即使是基于同一cpu而构建的,但如果他们的硬件资源或配置不一致的话,要想在一块开发板上运行的bootloader程序也在另一块上运行,必须要修改。
三.BootLoader启动
BootLoader启动过程可以分为单阶段(single-stage)和多阶段(multi-stage)两种,大多采用2阶段
硬件设备初始化
为加载bootloader的stage2准备ram空间
拷贝bootloader的stage2到ram空间
设置好堆栈
跳转到stage2的c入口
stage2
初始化本阶段需要使用的硬件设备
将内核映像和根文件系统映像从flash上读到ram中
调用内核
ram——-随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。
Uboot
一.概述
Uboot可以用于多种嵌入式cpu(MIPS,X86,ARM,XSCAL…)的BootLoader程序
uboot不仅支持嵌入式linux系统的引导,还支持vxworks,qnx等多种嵌入式系统
二.uboot目录结构
board 和开发板相关的文件
common uboot支持的命令
cpu 与特定cpu架构相关的代码
disk 磁盘相关
doc 文档目录
dribers 驱动程序
fs 文件系统的支持
include uboot使用的头文件
net 与网络相关的协议
tools uboot的工具
三.Uboot编译
1.以下是某开发板的烧写步骤
2.查看开发板上的环境变量
这里补充一下,在linux上查看环境变量命令是env。
查看当前单板所支持的命令help
Flash
一.flash分类
flash主要有norflash和nandflash
主要的区别是:
1.nor读速度比nand快
2.nand写速度比nor快
3.nand擦除速度更快
4.nand成本更低
5.nand擦除寿命更长(百万次)nor(10万次)
6.nand采用独立编址,nor统一编址
7.nor适合用于存储代码,nand更适合存储大量的数据
nandflash命令:
1.nand info了解flash信息
2.nand erase擦除
在写操作时候,nandflash芯片每一位(bit)只能从1变成0,所以在写入操作前必须将相应块(512字节)擦除,擦除即将将相应块全部变为1
3.向nandflash写入数据命令,nandwrite
nand write [内存地址][flash地址] length
文件系统
一.什么是根文件系统
1.按照固定格式组织的目录和文件–看得见
2.在特定的存储介质上管理这些目录和文件需要的数据–看不见
二.嵌入式文件系统
1.linux支持多种文件系统,类型包括ext2,ext3,vfat,jffs,romfs,nfs等,为了对各类文件系统进行统一管理,linux引入了虚拟文件系统vfs(virtual file system)
2.如何选择文件系统
根据存储设备的硬件特性,系统需求
3.基于flash的文件系统
flash(闪存)是嵌入式系统放入主要存储媒介
1)jffs2:日志闪存文件系统版本2–主要用于nor型flash,特点:可读写,支持数据压缩的日志型文件系统,并提供了崩溃/掉电等安全保护,缺点:文件已满或者快满,速度变慢
2)yaffs/yaff2可读写,不支持压缩
3)crmfs是只读的压缩文件系统
4.基于ram文件系统
ramdisk将一部分固定大小的内存当做块设备来用
initramfs基于内存的文件系统
5.nfs在开发调试阶段—基于网络