EDN China > 技术文章 > 微处理器与DSP > DSP应用 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

U-Boot在基于BF561的嵌入式Linux系统上的移植

青岛科技大学 戚淑芬 郭彬?? 2011年07月05日 ?? 收藏0

  4 U-BOOT的移植

  4.1? U-Boot方法与要点

  移植U-Boot简便的方法是从U-Boot支持的开发板中选择一个与其目标板接近的开发板进行修改。需修改的是与硬件相关的部分,涉及到两个层面:针对CPU的移植,由于U-Boot_1.1.3支持BF561,故只需做第二层面的移植:针对目标板硬件的移植。在移植前,需仔细阅读U-Boot/readme文件,该文件对目录结构和如何移植作了简要介绍。从移植U-Boot的最小要求、U- Boot能够正常启动的角度出发,选择BF561的STAMP板为模板,相关源代码在/board/stamp目录下,结合U-Boot的启动流程,主要修改文件如下:

  (1)与目标板相关的代码部分:在board下创建mybf561目录,无需从头开始,参考与目标板相似的STAMP板在mybf561目录下创建mybf561.c、mybf561.h、flash.c、config.mk、Makefie等文件。需要修改/board/mybf561/config.mk:

  TEXT_BASE = 0x01FC0000

  PLATFORM_CPPFLAGS += - I$(TOPDIR)

  TFEXT_BASE用于设置程序编译链接的起始地址即将U-Boot的stage2拷贝到SDRAM的TEXT_BASE处,即SDRAM最顶层一段存储区。修改board/mybf561/Makefile:

  include $(TOPDIR)/config.mk

  LIB= lib$(BOARD).a???????????? # 选择库文件

  OBJS=$(BOARD).o mybf561.o???? # 目标文件

  (2)与CPU相关的代码部分:U-Boot_1.1.3/epu文件中含有BF561的目录,其中包含start.s、cpu.c、cpu.h、interrupt.c、init_sdram.s等。故不需要建立与cpu相关的文件目录。

  (3)与头文件相关的代码:在include/configs创建mybf561.h,参考include/configs/stamp.h,如下:

程序

  Flash的修改与具体型号和容量有关,修改过程中参考Flash擦除数据命令、特定寄存器的写入地址以及扇区的大小和位置。

  与SDRAM相关设置:

程序

  最后一行要用Tab键开头表示命令。其中blackfin表示CPU的种类。bf561是cpu bf561对应的代码目录,mybf561是目标板对应的目录。这样可使用make mybf561_config配置自身的开发板。

  其他修改视情况而定。如根据SDRAM大小修改cplb表,根据需要修改堆栈大小。如drivers/cfi_flash.c中flash_init()函数,cpu/bf561/ints.c中init_IRQ()函数等。

  修改完毕后就可以采用以下命令编译U-Boot:bash$>make clean,bash$>make mrproper,bash$>make mybf561_ config,bash$>make。

  编译完后U-Boot_1.1.3生成U-Boot的二进制文件U-Boot.bin(U- Boot.bin只能用于更新)。执行bash$>bfin-uclinux-objcopy-I binary-Oihex U-Boot.bin,生成可在Windows下首次烧写到Flash的十六进制文件U-Boot.hex。

  4.2? U-Boot的烧写

  下载U-Boot到目标板,或者当U-Boot不能正常启动时,必须通过JTAG或者ADI ICE将U-Boot下载到目标板。在此可将ADI公司的仿真器与Visual DSP++环境相连,通过Visual DSP++,在TOOLS-->Flash Programmer下执行Flash驱动程序M25P64.dxe,选择"Erase all"-->Load Flie烧写U-Boot.hex文件到Flash中。

  移植成功后,打开终端minicom复位开发板,若串口能输出正确的启动信息.则表明移植基本成功。启动后,如果在设定的时间内,串口没有接收到按键。U-Boot将自动加载操作系统内核和文件系统。若设定时间内串口接收到按键,则U-Boot停止自动加载,进入命令行,可看到U-Boot的提示符"mybf561>",查看Flash信息,调试或手动加载内核。

  生成新的U-Boot.bin文件后。可通过Ethernet或者串口更新U-Boot。因为网络的传输速度远比串口快,故一般选择网络传输。将新生成的U-Boot.bin拷贝到宿主机根目录下的tftpboot目录(前提是已经创建tftp sever),在目标板出现U-Boot提示符后。按任意键进入下载模式:

  mybf561>tftp 0x1000000 U-Boot.bin

  0x1000000为SDRAM默认的下载地址空间,用于U-Boot的升级、调试。当需要升级或者修改U-Boot,可将新的U-Boot从SDRAM烧写到Flash,覆盖原来的U-Boot,以减少烧写Flash的次数。在烧写以前最好测试一下所下载的U-Boot能否正常运行:

  Mybf561>go 0x1000000

  如果运行正常就可将U-Boot写到Flash中:

  mybf561>protect off all

  mybf561>erase all

  #可只擦除部分扇区

  检验写入Flash中的内容是否正确:

  mybf561>cp.b 0x1000000 0x20000000? $(filesize)

  mybf561>cmp.b 0x1000000 0x20000000? $(filesize)

  如果不正确,应重复执行Erase all 和Copy 命令,直到正确为止。至此,U-Boot移植的步骤基本完成。

  5 结束语

  U-Boot是一个功能强大的Boot loader。前期移植工作是嵌入式系统开发的首要环节。嵌入式开发人员应该在了解U-Boot的工作机理、移植条件后,根据目标板和具体情况灵活裁减U -Boot以提高操作系统移植的稳定性,缩短移植周期,降低产品成本,为后续开发奠定了良好的基础。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

BF561? 移植? Blackfin?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈