linux激活烧录状态,开发板上Linux系统(烧录)启动过程

  • Post author:
  • Post category:linux


在半年之后重新回顾的开发版烧录过程,进行了更深一步的思考,加上查阅资料,对Linux系统的启动过程理解更深刻,于是有了如下的总结:

cc91ceced54415492007c7836d22712b.png

1.

SDRAM:Synchronous Dynamic Random-Access Memory,同步动态随机存储器,DRAM里面所储存的数据就需要周期性地更新;

SRAM  :Static Random-Access Memory,静态随机存取存储器,所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。

SDRAM和SRAM的区别:SDRAM的本质是电容,充电为1,断电为0,总共64MB*8(bit)个电容。电容在通电的状态下才能表示数据,断电丢失;SRAM相当于cache, 纯定制电路,有锁存功能,上电就能表示数据,数据不丢失。

2.CPU上电后,从0X0地址(是从RAM或者Flash开始由系统决定)上启动。CPU内部有一个4K的SRAM,不需要初始化就可以启动,而SDRAM需要初始化才能启动。

3.(

第一次烧录)为了使SDRAM在通电时能够运行,就需要有一个小的启动程序(被称为

bootstrap)

放在CPU内部的4K的SRAM中。通过Jlink把bootstrap下载到SRAM中,bootstrap程序初始化CPU、SDRAM、Nandflash,再通过Jlink把U-boot(U-boot属于一种BootLoader,BootLoader的作用是将系统的软硬件带到一种可调式的状态,其前几K的代码就是bootstrap的功能)移动到SDRAM的0X33F8 0000地址上,此时系统可以开始下一步工作。

4.U-boot在SDRAM中运行起来后,使用TFTP命令将U-boot、Linux内核(包括根文件系统)烧录到Nandflash中,这样下一次启动便会自动加载启动程序。此时最基本的烧录完成。

BootLoader(最常使用U-boot)(相当于Windows的BIOS+GRUB

)

5.BootLoader(最常使用U-boot)(相当于Windows的BIOS+GRUB

)完成的功能:

<1>内存、CPU、Nandflash的初始化

<2>烧录或者升级Linux系统

<3>引导操作系统启动

U-boot前4K代码完成两个任务:

<1> 初始化CPU和SDRAM,也就是bootstrap的功能;

<2> 将u-boot整个程序搬到SDRAM中去,并执行u-boot相应的代码;

6.下一次(通电)系统启动时,自动调取Nandflash的0X0地址上的U-boot的前几K代码(即完成bootstrap功能的代码)到SRAM完成各项硬件初始化,再加载全部的U-boot代码到SDRAM的0X33F8 0000上,U-boot运行之后,系统完成启动。

总结

CPU上电-> 硬件自动搬u-boot前4K到SRAM中运行 -> 前4K代码初始化SDRAM,并搬整个u-boot到SDRAM中运行  -> U-boot再搬Linux内核到内存0x30008000中去,然后CPU运行权交给Linux内核,u-boot不再运行 -> Linux内核初始化系统,然后查找根文件系统并挂载起来 ->如果没找到根文件系统就死掉,找到了就挂载根文件系统-> 内核创建init进程,init进程执行根文件系统树里的 /init 或 /initrc 程序, 该程序将读取 /etc/inittab ->  在inittab里启动所有其他的应用程序