bootloader的设计与实现(编辑修改稿)内容摘要:

GO ● BootLoaderMain函数的代码 BootLoader 的主控函数,完成的下工作通过图 6所示的流程可以看出。 ● OEMWriteDebugLED函数的代码 开发者根据自己的平台特点编写该代码,不是必须的。 2440BSP包下的示例代码如下: void OEMWriteDebugLED(UINT16 Index, DWORD Pattern) { volatile S3C2440A_IOPORT_REG *s2440IOP = (S3C2440A_IOPORT_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE)。 // The S24x0X01 Eval platform supports //4 LEDs.. // s2440IOPGPFDAT=(s2440IOPGPFDAT amp。 0xf) | ((Pattern amp。 0xf)4)。 } 开 始全 局 变 量 的 重定 位初 始 化 调 试 端 口平 台 初 始 化镜 像 下 载启 动 镜 像结 束图 6 LOGO ◆ 控制流函数的设计与实现 BootLoader的控制流函数有以下几个: ◆ OEMDebugInit () ◆ OEMPlatformInit () ◆ OEMPreDownload () ◆ OEMLaunch () 这几个函数是 BootLoader主控函数 BootLoaderMain的重要组成部分,它们共同完成了内核代码的引导和加载 LOGO ◆ OEMDebugInit ()函数 该函数的主要作用: ● 初始化调试端口,通常识异步串行通信口( UART) 实例代码: BOOL OEMDebugInit(void) { // Set up function callbacks used by blmon. // g_pOEMVerifyMemory = OEMVerifyMemory。 // Verify RAM. g_pOEMMultiBINNotify = OEMMultiBINNotify。 // Call serial initialization routine (shared with the OAL). // OEMInitDebugSerial()。 return(TRUE)。 } LOGO ◆ OEMPlatformInit ()函数 该函数和硬件高度相关,主要作用: ● 初始化 RTC( Real Time Clock) 或任何被 OEMEthGetSecs函数使用的和时间保存相关的设备 ● 初始化显示屏,此为可选项。 如开机显示 LOGO ● 初始化 Flash或 Flash控制器。 ● 如果网络设备挂载在 PCI总线上,初始化主 PCI桥,对总线进行枚举来确定网络控制器以便进行镜像下载,配置 PCI的硬件需求来使能网络控制器 ● 如果网络设备挂载在 PCMCIA总线上,则初始化 PCMCIA桥或是控制器 ● 初始化网络控制器,以便进行镜像下载 2440BSP中 OEMPlatformInit函数的流程图如下: LOGO 开 始初 始 化 显 示 屏初 始 化 B S P 参 数的 结 构 体初 始 化 U S B初 始 化 中 断初 始 化 引 导 驱 动 器 和B I N 文 件 分 区获 取 F L A S H 信 息读 取 T O C显 示 引 导 信 息配 置 以 太 网 控制 器结 束OEMPlatformInit 函数流程 图 7 LOGO ◆ OEMPreDownload () 函数 该函数的主要作用: ● 为 PB下载镜像产生一个唯一的目标硬件平台名,该平台名一般是与网络接口卡的 MAC地址相关联的静态文本字符串 ● 从 DHCP( Dynamic Host Configuration Protocol)服务获得一个动态 IP地址,或是直接分配一个静态 IP 地址 ● 初始化 TFTP传输协议或是 PB下载协议。 LOGO ◆ OEMLaunch () 函数 该函数的主要任务: ● OEMLaunch可以用在 EbootWaitForHostConnect函数,等待 PB发送关于启动什么服务和从哪个端口启动服务 ● 检查 EbootWaitForHostConnect的返回值,然后将端口信息和 IP保存到 DriverGlobals参数里,后面 OAL将会用到这些 ● 跳转到 dwLaunchAddr参数指定的第一条指定点地址,该指令就是 BootLoader镜像的 Startup函数 2440BSP中 OEMLaunch函数的流程图如下: LOGO OEMLaunch函数流程 图 8 开 始将 已 下 载 的 镜像 写 入 F L A S H等 待 P B 发 送 用 于 服 务连 接 的 I P 和 端 口 设置 , 以 及 K I T L 标 志保 存 内 存 加 载 地 址 或 在 下载 时 没 有 提 供 这 个 地 址 时回 调 已 存 储 的 地 址结 束跳 转 到 下 载 镜 像 LOGO ◆ 调试函数的设计与实现 BootLoader和 OAL共享,包含以下几个函数: ◆ OEMInitDebugSerial () ◆ OEMReadDebugByte () ◆ OEMWriteDebugByte () ◆ OEMWriteDebugString() 实现这些函数的文件路径: MyPlatfor\Src\Kernel\Oal\ LOGO ◆ OEMInitDebugSerial ()函数 初始化调试端口,一般是异步串口( UART) ◆ OEMReadDebugByte () 函数 从调试端口读取一个字节 ◆ OEMWriteDebugByte ()函数 向调试端口输出一个字节 ◆ OEMWriteDebugString() 函数 向调试端口输出一个字符串 LOGO ◆。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。