网站公告列表

  没有公告

加入收藏
设为首页
联系本站
您现在的位置: AnalogCN安诺电子 >> 文章 >> 技术交流 >> 文章正文
  [图文]Blackfin上移植u-boot(2)         ★★★ 【字体:
Blackfin上移植u-boot(2)
作者:佚名    文章来源:Internet    点击数:    更新时间:2008-9-22    
二, 移植u-boot:
uclinux启动离不开引导程序,这个引导程序叫作bootloader。Bootloader是在操作系统运
行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的
映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
U-Boot是一种通用的Bootloader,可以方便地移植到各种硬件平台上。
华恒提供的u-boot在HHBF531-R1/u-boot目录下,支持blackfin系列DSP和常用开发板。

我们这里把U-Boot的移植分成两个部分。第一部分是为我们的新开发板在目录/board/下建
立一个新目录,并拷贝最类似的开发板源码到该目录,做一些配置修改,对我们的新开发
板进行配置并编译通过;第二部分是针对我们的新开发板的特点修改相关源码文件的内容
,使其能在我们的新开发板上运行。
1, 第一部分:
我们的新开发板基于BF533,与U-Boot中的hhbf开发板最类似,我们以hhbf开发板为模板修
改得到我们新开发板的移植代码。
进入u-boot目录:
#cd HHBF531-R1/u-boot
注意要让uclinux用户用于读写操作的权限,否则下面操作时报“Permition denied.”错
误。简单点,我们直接用root用户登陆。
进入开发板目录,建立对应于我们开发板的文件目录,这里命名为naribf533。
#cd board
#cp –R hhbf naribf533
#cd naribf533
#mv hhbf.c naribf533.c(修改文件名)
删除不需要的文件:
#mv –r hhbf*
#mv psd4256.h
这样我们新开发板的文件目录和文件都有了(现在还不能在我们开发板上运行)。然后修
改naribf533目录下的Makefile和u-boot.lds,把其中的hhbf全部修改为naribf533,后面
编译过程中如果报找不到hhbf的错误也把相应的hhbf改为naribf533。
再加入一个头文件:
#cd include/configs
#cp hhbf.h naribf533.h
这个头文件中有很多内容要修改,我们将在第二部分中予以修改。
修改顶层目录下的Makefile,找到以下内容:
hhbf533_config : unconfig
@ > include/config.h
@echo “#define CONFIG_HHBF  1” >> include/config.h
@echo “#define CONFIG_BF533 1” >> include/config.h
@./mkconfig –a $(@:_config=) blackfin bf533 hhbf533 #hhtech
模仿上述语句,在下面增加以下内容:
naribf533_config : unconfig
@ > include/config.h
@echo “#define CONFIG_HHBF  1” >> include/config.h
@echo “#define CONFIG_BF533 1” >> include/config.h
@./mkconfig –a $(@:_config=) blackfin bf533 naribf533
切记在“@./mkconfig –a $(@:_config=) blackfin bf533 naribf533”前面的是Tab来的
,万万不能用空格代替,因为它是靠这个来识别命令的!
最后编译u-boot,
#make distclean
#make naribf533_config(就是在Makefile里添加的config)
#make
看看有没有错,有错的话按着提示来改,如果没错的话应该就能生成u-boot.bin这个文件
。现在还不能使用,因为这只是hhbf的一个仿制品而已。
编译正确生成u-boot.bin文件,这一部分就算完成了。下面我们尝试修改相应的源代码。


2, 第二部分:
    该部分主要是修改开发板配置文件以及flash驱动。
我们先来修改开发板配置文件,让u-boot能运行起来。修改的主要内容包括:串口设置、
时钟设置、flash设置和SDRAM设置。我们的开发板上目前还没有网络功能,先不设置该内
容。
将以下设置替换原开发板配置文件相应部分即可。
串口设置,将波特率设置为115200。
#define CONFIG_BAUDRATE 115200
时钟设置,根据开发板晶振频率和系统需要的工作频率设置,我们开发板的晶振为27MHz,
内核时钟为输入时钟的22倍频,系统时钟为内核时钟的5分频,所以如下设置。
#ifdef CONFIG_BF533
    #define CONFIG_CLKIN_HZ 27000000
#endif//CONFIG_BF533
#ifdef CONFIG_BF561
    #define CONFIG_CLKIN_HZ 33000000
#endif//CONFIG_BF561

/* CONFIG_CLKIN_HALF controls what is passed to PLL 0=CLKIN      */
/*                                                  1=CLKIN/2    */
#define CONFIG_CLKIN_HALF               0

/* CONFIG_PLL_BYPASS controls if the PLL is used 0=don't bypass  */
/*                                               1=bypass PLL    */
#define CONFIG_PLL_BYPASS               0

/* CONFIG_VCO_MULT controls what the multiplier of the PLL is.   */
/* Values can range from 1-64                                    */
#ifdef CONFIG_BF533
    #define CONFIG_VCO_MULT                 12
#endif//CONFIG_BF533
#ifdef CONFIG_BF561
    #define CONFIG_VCO_MULT                 10
#endif//CONFIG_BF561

/* CONFIG_CCLK_DIV controls what the core clock divider is       */
/* Values can be 1, 2, 4, or 8 ONLY                              */
#define CONFIG_CCLK_DIV                 1

/* CONFIG_SPI_BAUD controls the SPI peripheral clock divider     */
/* Values can range from 2-65535                                 */
/* SCK Frequency = SCLK / (2 * CONFIG_SPI_BAUD)                  */
#define CONFIG_SPI_BAUD                 2


/* CONFIG_SCLK_DIV controls what the peripheral clock divider is */
/* Values can range from 1-15                                    */
#define CONFIG_SCLK_DIV                 4
flash设置,根据你的开发板flash容量和起始地址定制,我们的开发板flash容量为512KB
,起始地址为0x20000000。
#ifdef CONFIG_BF533
#define CFG_MAX_FLASH_BANKS 1 //flash只有一段
#define CFG_MAX_FLASH_SECT 11 //flash一共有11个sector
#endif//CONFIG_BF533

#ifdef CONFIG_BF533
#define CFG_ENV_ADDR 0x20020000
#define CFG_ENV_SECT_SIZE 0x10000
#endif//CONFIG_BF533

#ifdef CONFIG_BF533
#define FLASH_SIZE 0x80000
#define CFG_FLASH_SIZE 0x80000 //容量为512KB
#endif//CONFIG_BF533
SDRAM设置,根据你的开发板SDRAM容量和起始地址定制,我们的开发板SDRAM容量为16MB,
列地址宽度为9,起始地址为0x00000000。
#define CFG_LARGE_IMAGE_LEN 0x1000000   /* Large Image Length */

#ifdef CONFIG_BF533
#define CONFIG_MEM_SIZE                 16             /* 128, 64, 32, 16 */

#endif//CONFIG_BF533

#define CONFIG_MEM_ADD_WDTH             9        /* 8, 9, 10, 11    */

#define CFG_MEMTEST_START 0x00100000 /* memtest works on */
#define CFG_MEMTEST_END 0x00f00000 /* 1..15 MB in DRAM */

#define CFG_SDRAM_BASE 0x00000000
#ifdef CONFIG_BF533
#define CFG_MAX_RAM_SIZE 0x01000000
#endif//CONFIG_BF533
如上设置后,重新编译u-boot,发现出现错误#error "CFG_MONITOR_BASE != TEXT_BASE"
,原因是TEXT_BASE设置值与配置文件不一致,主要是由于我们修改了SDRAM的容量。到b
oard/naribf533目录下修改config.mk文件,将TEXT_BASE的地址修改为0x0fc0000。接下来
编译应该没有任何错误了。
编译生成的u-boot.bin下载到开发板即可以运行了,应该能看到串口返回的u-boot成功运
行的信息。这样第一步修改就完成了。
在上面看到的u-boot运行信息里,你会发现有很多关于华恒的信息,可能你很不愿意显示
这些内容。这是因为你还没有修改flash驱动,里面显示的还是华恒提供的flash驱动显示
的内容。而且此时还不能下载uclinux镜像,因为华恒提供的flash驱动不一定适合你的开
发板,不能对你的开发板flash进行写操作。所以,我们接下来修改flash驱动。
flash驱动对应的文件是board/naribf533/flash.c,它主要包括以下几个函数:
unsigned long flash_init (void ),Flash初始化;
    void flash_print_info (flash_info_t *info),打印Flash信息;
    int flash_erase (flash_info_t *info, int s_first, int s_last),Flash擦除

    volatile static int write_dword (flash_info_t *info, ulong dest, ulong d
ata),Flash写入;
    int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt),
从内存复制数据。
Flash驱动修改要根据你使用的flash特性进行,参考flash的文档。主要修改内容包括:f
lash操作命令、flash扇区分配和一些打印信息。
另外,还有SDRAM的配置。除了再(board).h文件中的配置以外,如果你使用的SDRAM的刷新
频率不同于hhbf531学习板上使用的,还必须到include/asm-blackfin/mem_init.h文件中
去修改SDRAM_Tref和SDRAM_NRA两个参数。

3, 测试U-boot:
如果以上修改内容都做到了,编译得到的u-boot应该没有什么问题了,但测试还是必要的

u-boot能正确打印启动信息,不代表u-boot完全正确了,比如说flash不能正确擦写、SDR
AM不能正确操作等问题都可能存在。这里分一下几项内容测试u-boot。
1)测试u-boot所有命令:
在u-boot的monitor下,键入help,会显示u-boot支持的所有命令。依次测试各命令,检查
是否正确。
2)测试flash驱动:
通过u-boot的loadb和go命令,下载一个可执行程序到某个未使用的地址空间,检查是否正
确运行,以测试flash能否正确读写。
3)测试SDRAM:
SDRAM的测试往往被人忽略,其实该部分是很重要的,一旦错误可能给后面的内核移植带来
很多问题,本人就遇到这样的问题。
测试SDRAM主要包括空间的连续性和是否有空间重叠现象。
连续性测试可以通过md命令,从低地址到高地址依次打印内存信息,检查打印的地址是否
连续。
内存空间是否重叠可以通过对每MB空间写入特定数,检查各MB空间的数据是否重复,重复
则可能因为空间重叠。
除以上测试内容外,可能还有其他小问题,视情况另做测试。
通过以上测试后,你的u-boot基本就没有问题了,可以放心地利用它下载运行linux了。
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    对比ADI两代TD-SCDMA射频IC得
    [结尾篇]ADSP-TS20XS系列DSP
    一种基于DDS的幅值可调信号发
    基于ADSP2181的CAN总线通讯设
    一种采用单片机控制AD9854为
    在vs2008下使用ffmpeg(5):
    在vs2008下使用ffmpeg(4):
    在vs2008下使用ffmpeg(3):
    ADI AD8275电平转换16位ADC驱
    Boot在ADSP-BF533上的移植
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    版权所有:AnalogCN安诺电子 湘ICP备06016315号