嵌入式Linux系统BSP的设计与实现(2)

(3)从主机接收核心和文件系统,启动核心运行。

系统加电时,BSP从位于0地址的非易失存储器FLASH中执行,和运行在主机上的程序通信,从串口或网卡的数据寄存器中读取数据,把核心和文件系统下载到内存中指定的位置,最后将CPU中的程序计数器PC置为核心在内存中的起始地址,实现核心启动。但是,程序在FLASH中执行时不能对变量进行写操作,为了使程序能正确执行,BSP必须将自己重定位(即把自己搬运到)到内存中,并且在进入c语言函数执行前要设置好堆栈指针。

其主要实现过程的伪码如下:

硬件(cup、内存等)初始化;

通信设备(网卡、串口)初始化;

将自己重定位到内存中;

设置系统的堆栈指针;

跳转到从串口读取核心和文件系统的函数;

从串口读取核心和文件系统的函数(void)

{

while(核心没读取完){

while(串口的接收数据寄存器为空)(等待);

从串口的数据寄存器读取数据到内存中;

核心大小减去已读取的大小,确定核心是否读取完;

if(核心读取完){

-asm{mov pc,一核心在内存中的起始地址;}

}

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/27755.html