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.以下是某开发板的烧写步骤
linux-内核-BootLoader/Uboot/Flash/文件系统_第1张图片
2.查看开发板上的环境变量
linux-内核-BootLoader/Uboot/Flash/文件系统_第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在开发调试阶段—基于网络

你可能感兴趣的:(嵌入式软件基础,Linux)