uboot的基础知识与linux启动相关知识


   uboot本质是一个裸机程序
   
***uboot在启动时的作用:
    主要是用来启动操作系统的内核。
    部署整个系统。
    操作Flash等板子上硬件的驱动,初始化一部分硬件。
    提供一个命令行界面供人进行交互操作。
    PC机的启动:上电后先执行BIOS程序(实际上就是Norflish),BIOS程序负责初始化DDR内存,初始化硬盘,再从硬盘之中将OS镜像文件读取到DDR之中,然后跳转至DDR中去执行OS直到启动。
    
    嵌入式linux的启动过程:部署和启动效仿PC机的启动。
    uboot程序部署在Flash,操作系统(OS)部署在Flash之中,用Flash代替了硬盘。
    内存掉电无作用,cpu掉电不工作。
    上电之后先执行uboot,uboot负责初始化DDR,初始化Flash,然后将OS镜像文件读取到DDR之中,然后跳转至DDR中去执行OS直到启动。
    
    对比:uboot————>BIOS  Flash————>硬盘
    
     
***uboot解决的问题:
    由于硬件的不同,所以uboot必须进相应的改变从而实现成功移植的目的。
    uboot的终极目标是:引导操作系统内核启动并且给内核进行传参。
    uboot的会在指定的位置为linux内核准备一些启动参数,内核启动时在这个特定的位置去取uboot传给他的参数,然后再内核之中解析这些参数,指导linux内核的启动过程。
    
    uboot的生命周期:uboot运行时别的程序不能同时运行,对CPU独占。
    uboot一旦结执行束,不能再次回到uboot。

    
***uboot的工作方式:
    本身是一个裸机程序,由若干个.c和.h文件组成,最后编译后生成一个uoboot.bin镜像文件。
    有些程序需要交互,这就使得uboot有着和linux相似的shell,只是命令集不同而已。
    
    
***uboot的关键:命令和环境变量
    命令:uboot的shell下可以被识别的各种命令。
    uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同。
    uboot的驱动管理几乎完全和linux的驱动架构相同。
    环境变量被认为是系统的全局变量。
    环境变量在程序运行时诞生,结束时死亡,被储存在Flash中的一块特殊的区域,可以通过程序更改其变量值。
    
***uboot的常见命令:
    1.print/printenv:打印出系统所有的环境变量。
    2.set name value :设置环境变量name为value  (仅仅只是更改了内存之中的环境变量)
    3.保存环境变量的改变:  saveenv/save        (利用save映射至flash)
    4.movi指令是一个命令集,
    movi read用来读取iNand的到DDR中,movie write 将DDR内容写入iNand中。
    

***bootm:启动内核时同时给内核传参,而GO命令启动内核时不用传参。
    GO命令本来不是为了启动内核设计的,其内部就是一个函数指针指向一个内存地址然后直接调用这个函数,本质就是PC直接跳转至那个内存地址进行运行。GO命令可以被用在uboot中执行任何裸机程序。

    
***uboot的环境变量:
    环境变量有两份,一份在FLASH中,一份在内存之中。uboot启动之后一次性从FLASH读取所有的环境变量到DDR之中作为环境变量的初始值,每次使用时都是使用DDR之中的环境变量。
    
    两个重要的环境变量:
    1.bootcmd:自动运行命令设置。    uboot的在启动时会倒数bootdelay秒,uboot开机启动时实际上就是执行了bootcmd这个环境变量的值对应的命令集。
    可以通过set bootcmd改变bootcmd的值,saveenv进行保存。
    
    2.bootarge:uboot给kernel传参。  
    
    
***DDR和FLASH:
    uboot的FLASH分区:对于FALSH进行分块管理。
    在uboot之中没有操作系统,所以对于FLASH的管理必须事先使用分区界定。
    分区的方法在移植之前必须事先设定好
    
    FLASH的分区:(掉电存在)
    uboot:从FLASH的起始地址开始存放,分区的大小一般设计为512kb,或者1MB。
    环境变量:紧贴着uboot进行存放,一般是32kb,1MB。
    kernel:紧跟着环境变量存放,大小为3~5MB。
    rootfs(根文件系统):kernel启动之后将自由分区内挂载到rootfs下使用。
    注:uboot必须放在FLASH的开头,其他分区可变。
    
    DDR的分区:(掉电消失)
    DDR内存的分区是在linux内核启动之前进行部署管理整个内存空间。
    
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值