ImageVerifierCode 换一换
格式:DOCX , 页数:51 ,大小:40.82KB ,
资源ID:9729360      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9729360.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Uboot 基于TQ2440 开发板上的移植.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Uboot 基于TQ2440 开发板上的移植.docx

1、Uboot 基于TQ2440 开发板上的移植u-boot-2011.03在TQ2440上的移植(1)-建立自己的demo板收藏参考文章黄刚博客tekkman博客1、到ftp:/ftp.denx.de/pub/u-boot/下载u-boot-2010.06.tar.bz22、解压tar jxvf u-boot-2010.06.tar.bz23、进入ubootcd u-boot-2010.064、删减uboot进入/board,留下samsung,其它全部删除进入/arch,留下arm,其它全部删除进入/arch/arm/cpu,留下arm920t,其它全部删除5、建立自己的DEMO板cd /bo

2、ard/samsungmkdir smdk2440cp -rf smdk2410/* smdk2440/将2410下所有的代码复制到2440下cd smdk2440/进入smdk2440目录mv smdk2410.c smdk2440.c/将smdk2440下的smdk2410.c改名为smdk2440.c然后在文件夹samsung里留下smdk2440,其它全部删除cp include/configs/smdk2410.h include/configs/smdk2440.h/建立2440头文件在include/configs下留下smdk2440.h, 其它全部删除viboard/sams

3、ung/smdk2440/Makefile/修改smdk2440下Makefile的编译项,如下:COBJS := smdk2440.o flash.o/修改第28行因在smdk2440下我们将smdk2410.c改名为smdk2440.c6、修改u-boot跟目录下的Makefile文件。查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立my2440_config的编译选项,另外还要指定交叉编译器,修改159行CROSS_COMPILE ?= arm-linux-/指定交叉编译器为arm-linux-gccsmdk2410_config:unco

4、nfig/2410编译选项格式$(MKCONFIG) $(:_config=)arm arm920t smdk2410 samsung s3c24x0smdk2440_config:unconfig/修改蒂3054行,2440编译选项格式$(MKCONFIG) $(:_config=)arm arm920tsmdk2440 samsung s3c24x0*说明:arm :CPU的架构(ARCH) arm920t:CPU的类型 smdk2440 :对应在board目录下建立新的开发板项目的目录 samsung:新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为N

5、ULL s3c24x0:CPU型号*注意:编译选项格式的第二行要用Tab键开始,否则编译会出错7、测试编译新建的smdk2440开发板项目在uboot根目录测试make smdk2440_configmake即可在uboot根目录下生成bin文件在uboot里,清除中间文件用命令make distcleanu-boot-2011.03在TQ2440上的移植(2)-初始化时钟收藏smdk2440的初始化设置1、u-boot主要的目录结构如下2、启动流程图下图由上图可知u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常

6、放在lib_xxxx/board.c文件中,他用C语言写成。3、在include/configs/smdk2440.h头文件中添加CONFIG_S3C2440宏vi include/configs/smdk2440.h在第40行添加#define CONFIG_S3C2440 14、stage1阶段的硬件设备初始化。vi arch/arm/cpu/arm920t/start.S去掉117,118行点亮AT91RM9200DK系列LED的代码/*bl coloured_LED_initbl red_LED_on*/5、在u-boot中添加对S3C2440一些寄存器的支持、添加中断禁止部分和时钟设

7、置部分。在164行添加如下红色内容#ifdefined(CONFIG_S3C2410)ldr r1,=0x3ffldr r0,=INTSUBMSKstr r1,r0#endif/*164行*/# if defined(CONFIG_S3C2440)/添加s3c2440的中断禁止部分 ldr r1, =0x7fff /根据2440芯片手册,INTSUBMSK寄存器有15位可用 ldr r0, =INTSUBMSK str r1, r0# endif# if defined(CONFIG_S3C2440) /添加s3c2440的时钟部分#define MPLLCON 0x4C000004 /系统主

8、频配置寄存器基地址#define UPLLCON 0x4C000008 /USB时钟频率配置寄存器基地址 ldr r0, =CLKDIVN /设置分频系数FCLK:HCLK:PCLK = 1:4:8 mov r1, #5 str r1, r0 ldr r0, =MPLLCON /设置系统主频为405MHz ldr r1, =0x7F021 /这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分 str r1, r0 ldr r0, =UPLLCON /设置USB时钟频率为48MHz ldr r1, =0x38022 /这个值参考芯片手册“PLL VALUE SELECT

9、ION TABLE”部分 str r1, r0# else /其他开发板的时钟部分,这里就不用管了,我们现在是做2440的6、S3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/smdk2440/smdk2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码,如下:vi board/samsung/smdk2440/smdk2440.c时钟部分修改第34行和在45行添加如下红色部分#define FCLK_SPEED 2 /设置默认等于2,即下面红色代码部分有效#if FCLK_SPEED=0 /* Fout = 203

10、MHz, Fin = 12MHz for Audio */#define M_MDIV 0xC3#define M_PDIV 0x4#define M_SDIV 0x1#elif FCLK_SPEED=1 /* Fout = 202.8MHz */#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#elif FCLK_SPEED=2 /* Fout = 405MHz */#define M_MDIV 0x7F /这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置#define M_PD

11、IV 0x2#define M_SDIV 0x1#endifUSB时钟部分修改第51行和在61行添加如下红色部分#define USB_CLOCK 2 /设置默认等于2,即下面红色代码部分有效#if USB_CLOCK=0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK=1#define U_M_MDIV 0x48#define U_M_PDIV 0x3#define U_M_SDIV 0x2#elif USB_CLOCK=2 /* Fout = 48MHz */#define U_M_MD

12、IV 0x38 /这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置#define U_M_PDIV 0x2#define U_M_SDIV 0x2#endif7、vi arch/arm/cpu/arm920t/s3c24x0/speed.c /根据设置的分频系数FCLK:HCLK:PCLK = 1:4:8修改获取时钟频率的函数get_PLLCLK函数修改第66行如下static ulong get_PLLCLK(int pllreg) S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBas

13、e_CLOCK_POWER(); ulong r, m, p, s; if (pllreg = MPLL) r = clk_power-MPLLCON; else if (pllreg = UPLL) r = clk_power-UPLLCON; else hang(); m = (r & 0xFF000) 12) + 8; p = (r & 0x003F0) 4) + 2; s = r & 0x3;#if defined(CONFIG_S3C2440) if(pllreg = MPLL) /参考S3C2440芯片手册上的公式:PLL=(2 * m * Fin)/(p * 2s) return

14、(CONFIG_SYS_CLK_FREQ * m * 2) / (p s); #endif return(CONFIG_SYS_CLK_FREQ * m) / (p CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK();u-boot-2011.03在TQ2440上的移植(3)-支持norflash启动收藏1、修改命令提示符为自己的vi include/configs/smdk2440.h第118行修改为#define CONFIG_SYS_PROMPT SMDK2440# /将命令行前的名字改成SMDK24402、通常,在嵌入式bootloader中,有两种方式

15、来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认是从Nor Flash启动的。3、TQ2440的所用的Norflash为EN29LV160AB。接线同AM29LV160DB翻开此芯片的datasheet看到TQ2440原理图上的第47脚BYTE#是接高电平的,so 此芯片工作于16位模式(半字模式)A0-A19是地址线,在半字模式下,D0-D15做为数据输入输出口。因为数据位是16位,A0-A19可以选择220 = 1M *2BYTE = 2Mbyte。正好是AM29LV160DB的容量。S3C2440的ADDR1要接AM29LV160DB的A0。上图中

16、AM29LV160DB的A20,A21是空脚,分别接的是LADDR21,LADDR22。这应该是为了以后方便扩展NOR FLASH的容量。LADDR21,LADDR22对AM29LV160DB是没用的。2048K * 8bit / 1024K * 16bit Flash Memory Boot Sector Flash MemoryFlexible Sector Architecture:-One16-Kbyte,two8-Kbyte,one32-Kbyte, andthirty-one64-Kbyte sectors(byte mode)-One8-Kword,two4-Kword,one1

17、6-Kword,andthirty-one32-Kword sectors(word mode)无论哪种模式总扇区是35sectors。4、修改Norflash参数vi include/configs/smdk2440.h/*-* FLASH and environment organization*/#if 0 /注释掉下面两个类型的Nor Flash设置,因为不是我们所使用的型号#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */#define CONFIG_AMD_LV800 1 /* unco

18、mment this if you have a LV800 flash */#endif#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */#ifdef CONFIG_AMD_LV800#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */#define CONFIG_SYS_MAX_FLASH_SECT (19) /* max number of sectors on one chip */#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH

19、_BASE + 0x0F0000) /* addr of environment */#endif#ifdef CONFIG_AMD_LV400#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */#define CONFIG_SYS_MAX_FLASH_SECT (11) /* max number of sectors on one chip */#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) /* addr of environment */#endif/第175行添加如下内容#d

20、efine CONFIG_EON_29LV160AB 1 /添加TQ2440开发板Nor Flash设置#define PHYS_FLASH_SIZE 0x200000 /我们开发板的Nor Flash是2M#define CONFIG_SYS_MAX_FLASH_SECT (35) /根据EN29LV160AB的芯片手册描述,共35个扇区#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x80000) /暂设置环境变量的首地址为0x80000 /在256K处放uboot参数5、添加Norflash的informationvi include/

21、flash.h第181行添加#define EON_ID_LV160AB 0x224922496、修改norflash的驱动,在u-boot中对Nor Flash的操作分别有初始化、擦除和写入,所以我们主要修改与硬件密切相关的三个函数flash_init、flash_erase、write_hword。vi board/samsung/smdk2440/flash.c由-One8-Kword,two4-Kword,one16-Kword,andthirty-one32-Kword sectors(word mode)可知主要扇区大小为32k,so修改第31行#define MAIN_SECT_

22、SIZE 0x8000/定义为32k,主要扇区的大小#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00000555 1)#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE+ (0x000002AA 1)由于我们是把norflash连接到了s3c2440的bank0上,因此norflash中的地址相对于s3c2440来说基址为0x00000000,即CONFIG_SYS_FLASH_BASE = 0。而之所以又把norflas

23、h中的地址向左移一位(即乘以2),是因为我们是把s3c2440的ADDR1连接到了norflash的A0上的缘故。由数据手册可知EN29LV160AB第0扇区大小为8K,第1、2为4K,第3为16K,后面31扇区为32K。前面4个扇区加起来刚好是主要扇区的大小 = 32K, 所以修改87行下如下for (j = 0; j flash_infoi.sector_count; j+) if (j flash_id & FLASH_VENDMASK) case (AMD_MANUFACT & FLASH_VENDMASK):printf (AMD: );break;case (EON_MANUFAC

24、T & FLASH_VENDMASK):printf (EON: );break;default:printf (Unknown Vendor );break;switch (info-flash_id & FLASH_TYPEMASK) case (AMD_ID_LV400B & FLASH_TYPEMASK):printf (1x Amd29LV400BB (4Mbit)n);break;case (AMD_ID_LV800B & FLASH_TYPEMASK):printf (1x Amd29LV800BB (8Mbit)n);break;case (EON_ID_LV160AB & F

25、LASH_TYPEMASK):printf (1x EN29LV160AB (16Mbit)n);break;default:printf (Unknown Chip Typen);goto Done;break;修改int flash_erase (flash_info_t * info, int s_first, int s_last)if (info-flash_id & FLASH_VENDMASK) != (EON_MANUFACT& FLASH_VENDMASK) return ERR_UNKNOWN_FLASH_VENDOR;7、至此,uboot关于Norflash已经移植好make distcleanmake smdk2440_configmake即可生成u-boot.bin下载到板子的Norflash,在命令台输入saveenv即可SMDK2440#saveenvSaving Environment to Flash.Un-Protected 2 sectorsErasing Flash.Erasing sector 19 . ok.Erasing sector 20 . ok.Erased 2 sectorsWriting to Flash. doneProte

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1