电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电子发烧友网>嵌入式技术>嵌入式操作系统>U-Boot在基于BF561的嵌入式Linux系统上的移植 - 全文

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

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,如下:
#define CONFIG_MYBF561 1
#define CONFIG_CLKIN_HZ 1000000   // 输入时钟
#define CONFIG_PLL_BYPASS 0       // 使用锁相环
    与Flash 相关设置:
#define CFG_FLASH_BASE 0x20000000    // Flash起始地址
#define CFG_MAX_FLASH_BANKS 1     // max number of memory banks
#define CFG_MAX_FLASH_SECT 67      // max number of sector on one chip
#define CFG_ENV_ADDR 0x20004000     // 环境变量保存地址
#define CFG_ENV_OFFSET   (CFG_ENV_ADDR-CFG_FLASH_BASE)
#define CFG_ENV_SIZE          0x2000
#define CFG_ENV_SECT_SIZE    0x2000
    Flash的修改与具体型号和容量有关,修改过程中参考Flash擦除数据命令、特定寄存器的写入地址以及扇区的大小和位置。
与SDRAM相关设置:
# define CONFIG_MEM_SIZE 32    // 128,64,32,16
# define CONFIG_MEM_ADD_WDTH   // 8,9,10,11
# define CONFIG_MEM_MT48LC64M4A2FB_7E 1
# define CFG_MEMTEST_START 0x00000000   
// memtest works on
# if (CONFIG_MEM_SIZE == 32)
# define CFG_MAX_RAM_SIZE 0x02000000
# define CFG_MEMTEST_END 0x01F7FFFF    
// 1…31.5MB in DRAM
# define CFG_LOAD_ADDR 0x01000000
//default load
    最后一行要用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全文
收藏

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

相关推荐

嵌入式Linux引导以及U-Boot移植深度分析

引言:本文简明扼要的介绍了嵌入式Linux的引导过程,X86体系的引导过程以及几种常见嵌入式处理器的引导过程,U-Boot移植的基本步骤、常用命令如何使用。通过本文可以对嵌入式Linux的引导
2020-05-11 06:54:001749

U-boot的基本介绍

从本文开始,将陆续推送“手把手教你移植U-boot”系列文章,目标是由浅入深地讲解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot移植工作,默认硬件开发平台为ARM,操作系统Linux
2023-07-14 16:52:011239

U-Boot NAND FLASH移植

FLASH设备的底层驱动3.根据出现的问题、错误进行细微调整三、移植步骤1.修改配置文件 参考韦老师的书《嵌入式Linux应用开发完全手册》,开始我们的移植工作。首先在配置文件smdk2410.h
2019-07-03 05:45:43

U-BootAT91RM9200移植及启动分析

嵌入式操作系统内核,具有较高的可靠性和稳定性,已经成为功能最多、灵活性最强并且开发最积极的开放源码BootLoader。作为通用的BootLoader,U-Boot可以方便地移植到其他硬件平台上。本文
2010-03-16 11:00:22

U-BootPXA255目标板移植过程

较高的可靠性和稳定性;高度灵活的功能设置;丰富的设备驱动程序和丰富的开发和调试文档,因此选择U-Boot作为目标板的Bootloader。对于嵌入式系统,Bootloader是基于特定的硬件来实现
2019-06-20 06:38:20

U-Boot移植DM9000网卡分享!

U-Boot移植DM9000网卡——西伯利亚的风 根据书《嵌入式Linux应用开发完全手册》移植网卡驱动,对于Jz2440开发板好像并不适用,Jz2440开发板使用的是DM9000网卡,已经不是书上
2019-07-29 00:06:31

U-BootLinux内核系统是怎样去移植

前言这是哈工大嵌入式软硬件设计上机实验教程第二期U-BootLinux 内核的系统移植实验。U-BootLinux 内核的系统移植实验1.编译uboot设置环境变量export ARCH
2021-12-22 06:01:56

U-Boot移植操作

U-Boot移植U-Boot移植主要分为两个层面,一个是对CPU的移植,一个是针对Board的移植U-Boot中已经有大量可直接下载到某些开发板的程序,为了减小工作量,可选一个最接近自己设计的开发板来进行修改。本设计中采用了stamp目标板。
2019-07-15 07:48:00

U-boot移植步骤详解!

习的过程中,想不使用补丁文件,自己通过修改将u-boot移植到Jz2440开发板,按照《嵌入式Linux应用开发完全手册》操作后,发现还是存在问题,所以研究了一下,最终实现将U-Boot移植到Jz2440
2019-08-23 02:13:10

U BootS3C2410移植

cpu构建,要想让运行在一块板子的botloader程序也能运行在另一块板子,通常也都需要修改botloader的源程序。本文就是将运行在目标板smdk2410的bootloader(u-boot)移植到自己的开发板
2009-03-28 13:35:31

u-boot

最近在移植u-boot移植到dm9000网卡的时候出问题了。u-boot能识别dm9000,并且板子通过u-boot能ping通服务器,但是tftp下载时候一直处于等待状态。。。,搞了两天了,还没解决。有没有遇到这个问题的大神们,指教指教啊。。。。
2014-04-14 16:48:01

u-boot

最近在移植u-boot移植到dm9000网卡的时候出问题了。u-boot能识别dm9000,并且板子通过u-boot能ping通服务器,但是tftp下载时候一直处于等待状态。。。,搞了两天了,还没解决。有没有遇到这个问题的大神们,指教指教啊。。。。
2014-04-14 16:53:04

正在加载...