本实验对 Bootloader的功能进行了扩充,加入自动升级的功能。即:用户需要对目标板的内核或文件系统进行升级,只需要将新的映像文件拷贝到CF存储卡或移动硬盘中,然后将CF卡或移动硬盘插入目标板相应的插槽,每次重启目标板时,先启动Bootloader,初始化硬件环境后,在应用程序运行前,判断是否存在要升级的文件,如果存在则先把Flash指定的位置的内容擦除掉,然插件电感器后再把要升级的内核或文件系统的映像文件写进相应的位置,写完后立即删除CF存储卡或移动硬盘上的升级文件,即完成升级。如图2
项目开发板上有一块8M Byte的Flash和二块32M Bit的DDR SDRAM。Flash的起始地址映射到0x00000000,其布局如下[7]:
如图所示,在虚拟地址位置0x00030000(实际物理地址为0x46030000)擦除和重写内核与文件系统映像文件。要对CF卡或移动硬盘进行文件存取,必须将CF卡或移动硬盘格式化成某种文件系统。本实验所编写的Bootloader主要支持3种文件系统:FAT16,FAT32,EXT2。系统启动时,Bootloader首先检测CF卡或移动硬盘的文件系统类型,然后按照相应的文件系统格式查询CF 卡或移动硬盘的所有文件。若发现有更新的映像文件,则读CF卡的操作,CF卡的驱动见文献[3],将映像文件读到SDRAM中,再从SDRAM烧写到嵌入式开发版的Flash中,实现升级。
生成内核一体电感器和文件系统步骤如下:
1)进入linux的armutils_2.5.127.0目录下执行make linux-config,裁剪uClinux的配置;
2)make linux 生成kernel-2.4.22-dtv-EM8624L-romfs.bin ,这是uClinux的内核;
3)make rootfs 生成rootfs-dtv-EM86240603贴片电感L-romfs.ext2,这是root文件系统;
4)make romfs 生成romfs-dtv-EM8624L-romfs.bin.gz,这是rom文件系统。
Bootloader在系统初次安装或传统升级时烧写内核和文件系统时用Sigma Designs 公司提供的tera term软件烧写,步骤为:
1) cd ../armutils_2.5.80.0/bin
2) uuencode romfs-config-envision8624L-romfs-rom.bin.gz x > romfs-config-envision8624L-romfs-rom.bin.gz.uuencode //生成uuencode编码的文件(为ascii码,用于在windows环境下烧入flash);
3) 运行tera term出现boot >
4)运行config serial fast,然后选菜单setupàserial port,设置功率电感器baud rate为115200(串口波特率);
5)在Boot>download serial romfs gz ,准备接受文件;
6)选菜单file-->send file,选中romfs-config-envision8620L-romfs-rom.bin.gz.uuencode,确定后,你会看到tera term下载文件;
7). Boot> flash romfs,把文件烧到flash中;
在本实验中,升级时将生成的内核和文件系统映像文件直接以二进制形式烧进去,不需要用uuencode转,即:把romfs-dtv-EM8624L-romfs.bin放在CF卡或移动硬盘相应的文件中进行升级即可。实现的伪代码为:
#define FLASH_SIZE 0X8000000
#define LOADER_FLASHBASE 0X46030000 //romfs存放的起始物理地址
if (fp = fopen(UPDATEFILE , ”rb”)) == NULL)return;www.51kaifa.com
else
{
Flash_erase_region(LOADER_FLASHBASE , romfs_len); //删除0x46030000开始的romfs_len长度的flash区域;
Flash_write_data(LOADER_FLASHBASE ,UPDATEFILE, romfs_len); //把要升级的romfs烧写0x46030000开始的romfs_len长度的flash区域中;
}
remove(UPDATEFILE); //升级完后删除CF卡或移动硬盘的升级文件,以免下次启动又要开始升级;
system("reboot"); //重启新系统
上述函数调用放在Bootloader的stage1中执行。
4 结论
本文分析了嵌入式系统的Bootloader的实现过程,并提电感器生产厂家出了通过CF卡或移动硬盘实现嵌入式系统的自动升级,一方面简化了升级过程,不需要通过串口将目标板与主机相连来实现系统升级,而只需插入CF卡或移动硬盘就可以完成自动升级,尤其对支持网络功能的嵌入式设备来说,只需远程地把要升级的文件通过网络拷贝到CF卡或硬盘中指定的目录下即可,不需要带着主机到现场去升级;另一方面,升级速度也大大提高,因为系统对CF卡或移动硬盘的存取速度远远高于串口。
本文作者创新点是:通过CF存储卡或移动硬盘在嵌入式系统的Bootloader中实现自动升级。经过调试,系统运行正常,达到自动升级的目的,具有一定的商业价值和社会价值,同时,对同类的嵌入式系统的产品开发具有一定的借鉴意义。
汽车LED照明系统的挑战和解决方案 一直以来,汽车的刹车灯、转向信号灯、倒车灯以及车尾雾灯都采用21W到27W、亮度为280至570流明的钨丝灯泡作为光源。车尾灯、泊车灯、车侧显示灯以及转向信号闪灯采用4W至10W、亮度为40至130
基于双口RAM的LonWorks智能通信节点设计摘要:介绍一种基于双口RAM的LonWorks现场总线智能通信节点的设计方法,并给出详细的设计步骤、硬件及软件实现。通过此LonWorks智能通信节点,能够完成RS-232-C/RS-485标准与Lo
一种基于FPGA的雷达数字信号处理机设计与实现摘要:结合具体的雷达导引头型号项目.从数字信号处理机的原理出发,根据项目的要求提出了一种基于DBF技术的某型导引头信号处理机设计方案,方案以Xilinx公司Virtex4 SX55 FPGA作为数字信