![]() |
|
||||||||||||||
| | 首页 | 新闻 | 文库 | 方案 | 技术 | 独家 | 座谈 | 下载 | 图库 | 开发板 | 仿真器 | 邮购 | VIP | 芯片 | 客户评价 | 论坛 | | ||
|
||
|
|||||
| Blackfin上移植u-boot(2) | |||||
作者:佚名 文章来源:Internet 点击数: 更新时间:2008-9-22 ![]() |
|||||
|
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 | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 本站介绍 | 合作联络 | 欢迎投稿 | 广告业务 | 网站地图 | 设为首页 | 加入收藏 | 友情链接 | 网站公告 | 联系我们 | | |||
|