PDC系统的Bootloader设计与实现
2015-05-30黎爱琼
黎爱琼
【摘要】 数据保护容器(Protective Data Capsule)简称PDC,是船载航行数据记录仪最终记录存放的介质,本设计主要介绍的是PDC系统引导程序的启动过程,以及实现引导程序移植的环境配置及烧写过程,以便实现PDC系统的正常启动。
【关键词】 数据保护容器 PDC 嵌入式系统 Bootloader
一、嵌入式系统中Bootloder的基本工作原理
Bootloader是嵌入式软件开发的第一个环节,它把嵌入式系统的软件和硬件紧密衔接在一起。是系统加电啟动运行的第一段软件代码,类似于PC机的BIOS系统。
二、Bootloader启动过程分析
在嵌入式系统中,Bootloader是严重地依赖于硬件而实现的。而在嵌入式系统中很难建立一个通用的Bootloader。但是,Bootloader的实现还是可以总结出一般规律。通过分析比较,引导程序则选用了韩国Mizi公司开发的Bootloader,即vivi。
vivi是利用串口通信为用户提供接口的,只需要将PC宿主机通过一根串口电缆线与目标板相连即可。
vivi的运行分为 stage1 和 stage2两个阶段。
第一阶段:
1.关闭WATCH DOG:上电后,WATCH DOG默认是开着的。
2.禁止所有中断:vivi中没用到中断。
3.初始化系统时钟:启动MPLL,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz,“CPU bus mode”改为“Asynchronous bus mode”。
4.初始化内存控制寄存器。
5.检查是否从掉电模式唤醒,若是,则调用WakeupStart函数进行处理——这是一段没用上的代码,vivi不可能进入掉电模式。
6.点亮所有LED 。
7.初始化UART0。
8.将vivi所有代码从NAND Flash复制到SDRAM中。
第2阶段:
1.执行reset_handler(),用于将内存清零。
2.执行board_init(),调用init_time()和set_gpios()来初始化定时器和设置GPIO引脚功能。
3.执行mem_map_init()和mmu_init(),建立页表,并启动MMU。
4.执行heap_init(),该函数在SDRAM中指定了一块1M大小的内存作为堆heap。
5.执行mtd_dev_init(),初始化MTD设备,执行本函数后,得到一个mtd_info结构的全局变量,以后直接通过mymtd提供的接口对NAND Flash进行操作。
6.执行init_priv_data(),此函数将启动内核的命令参数取出,并存放在特定的位置中。
7.执行misc()和init_builtin_cmds(),这两个函数都是通过调用add_command函数,给一些命令增加相应的处理函数。
8.执行boot_or_vivi(),该函数根据实际情况判断,是启动vivi_shell进入与用户交互的界面中,还是直接启动Linux内核。
三、vivi移植
vivi直接提供了对S3C2410X处理器的板级支持。其相关配置文件存放入s3c2410目录中。在宿主机的终端中,进入vivi的根目录下,输入如下命令进入vivi的配置界面:
当配置完vivi后,保存配置并退出配置菜单界面,回到终端中输入命令编译vivi:
[root@kision vivi]#make
如果编译成功,将在当前目录下生成vivi二进制镜像文件,编译生成vivi二进制镜像文件后,有两种途径将vivi烧写到目标板中:JTAG下载方式和串口下载方式。首先要配置好串口。
在PC宿主机的Linux操作系统开发环境下,在终端中输入命令minicom:
[root@kision root]#minicom -s
此时界面会进入串口终端配置界面中,选择正确的PC串口通道号,并配置串口参数为115200,8N1,且无软、硬流控制。最后,应该将该项设置保存为缺省值,以免每次打开minicom都需要重新配置。然后输入minicom,按住键盘的空格键的同时启动目标板,这时会进入vivi的加载启动模式,输入如下命令下载vivi:vivi>load flash vivi x 选择xmodem协议传输vivi镜像文件。输入命令:vivi>load flash vivi x即完成了移植任务。
四、结论
经过测试,在各指定的工作环境下,PDC系统基本都能正常工作。
参 考 文 献
[1] 李少春.基于嵌入式Linux的视频监控系统设计与实现. 西南交通大学硕士论文 .2007/05
[2] 陈艳.引导加载程序vivi的分析和移植研究.电子设计应用.2006.11.15