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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

uboot带DMA网卡移植到扬创F移植详细步骤.docx

1、uboot带DMA网卡移植到扬创F移植详细步骤扬创utu2440板子注明:本篇文章,绝大部分都是来源与tekkaman的移植U,原文链接/34474/showart.php?id=487416,只是因为,结合自己的调试经历,写下此篇,希望新手不会像我这样曲折。一、在U-Boot中建立自己的开发板类型,并测试编译。我为开发板取名叫: utu2440 1 进入U-Boot目录,修改Makefilerootlocalhost u-boot- vim Makefile#为utu2440建立编译项smdk2410_config : unconfig $(MKCONFIG) $(:_config=) ar

2、m arm920t smdk2410 NULL s3c24x0 utu2440_config : unconfig $(MKCONFIG) $(:_config=) arm arm920t utu2440 NULL s3c24x0各项的意思如下:arm: CPU的架构(ARCH)arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。utu2440: 开发板的型号(BOARD),对应于board/utu2440/目录,我将smdk2410覆盖了NULL: 开发者/或经销商(vender)。s3c24x0: 片上系统(SOC)。设置环境变量rootlocalhost u-

3、boot- vim /root/.bash_profile在PATH一行后添加/usr/local/arm/2 在/board子目录中建立自己的开发板utu2440目录rootlocalhost u-boot- cd boardrootlocalhost board# cp -raf smdk2410/ utu2440rootlocalhost board# cd utu2440rootlocalhost utu2440# mv smdk2410.c utu2440.c还要记得修改自己的开发板tekkaman2440目录下的Makefile文件,不然编译时会出错:rootlocalhost u

4、tu2440# vim MakefileCOBJS := utu2440.o flash.o3 在include/configs/中建立配置头文件rootlocalhost u-boot- cp include/configs/smdk2410.h include/configs/utu2440.h4 测试编译能否成功 1)配置rootlocalhost u-boot- make tekkaman2440_configConfiguring for utu2440 board.注: (1) 如果出现: rootlocalhost u-boot- make utu2440_config Make

5、file:2497: * 遗漏分隔符 (您的意思是用 TAB 代替 8 个空格?)。 停止。 请在Uboot的根目录下的Makefile的 $(MKCONFIG) $(:_config=) arm arm920t utu2440 NULL s3c24x0) 前加上“Tab”键2)测试编译rootlocalhost u-boot-0、修改makefile文件_LIBS := $(subst $(obj),$(LIBS) $(subst $(obj),$(LIBBOARD) 改为:_LIBS := $(subst $(obj),$(LIBBOARD) $(subst $(obj),$(LIBS)

6、二、进行移植,修改uboot代码1、修改/cpu/arm920t/start.S#include #include #if defined(CONFIG_AT91RM9200DK)#include /*这是针对AT91RM9200DK开发板的。#endif./* the actual start code*/start_code: /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0#if defined(CONFIG_AT91RM9200DK) bl coloured

7、_LED_init bl red_LED_on#endif(0)修改寄存器地址定义 #if defined(CONFIG_S3C2400) | defined(CONFIG_S3C2410)| defined(CONFIG_S3C2440) /* turn off the watchdog */#if defined(CONFIG_S3C2400)#define pWTCON 0x#define INTMSK 0x /* Interupt-Controller base addresses */#define CLKDIVN 0x /* clock divisor register */#el

8、se#define pWTCON 0x#define INTMSK 0x4A000008 /* Interupt-Controller base addresses */#define INTSUBMSK 0x4A00001C#define CLKDIVN 0x4C000014 /* clock divisor register */#define CLK_CTL_BASE 0x4C000000 #define MPLLCON 4 /*MPLLCON的偏移地址*/#endif.(1)修改中断禁止部分 #if defined(CONFIG_S3C2410) ldr r1, =0x7ff /*根据

9、2410芯片手册,INTSUBMSK有11位可用, vivi也是0x7ff,UBoot一直没改过来。*/ ldr r0, =INTSUBMSK str r1, r0#endif#if defined(CONFIG_S3C2440) ldr r1, =0x7fff /*根据2440芯片手册,INTSUBMSK有15位可用*/ ldr r0, =INTSUBMSK str r1, r0#endif(2)修改时钟设置(2440的主频为405MHz。) # if defined(CONFIG_S3C2440) /* FCLK:HCLK:PCLK = 1:4:8 */ ldr r0, =CLKDIVN

10、mov r1, #5 str r1, r0 mrc p15, 0, r1, c1, c0, 0 /*read ctrl register */ orr r1, r1, #0xc0000000 /*Asynchronous */ mcr p15, 0, r1, c1, c0, 0 /*write ctrl register*/ /*now, CPU clock is 405.00 Mhz 这边直接copy了vivi的部分代码*/mov r1, #CLK_CTL_BASE ldr r2, mpll_value clock default ldr r2, =0x7f021 mpll_value_US

11、ER str r2, r1, #MPLLCON #else ldr r0, =CLKDIVN mov r1, #3 str r1, r0 mrc p15, 0, r1, c1, c0, 0 /*read ctrl register*/ orr r1, r1, #0xc0000000 /*Asynchronous */ mcr p15, 0, r1, c1, c0, 0 /*write ctrl register*/ /*now, CPU clock is 202.8 Mhz */ mov r1, #CLK_CTL_BASE mov r2, #MDIV_200 /* mpll_200mhz */

12、 add r2, r2, #PSDIV_200 /* mpll_200mhz */ str r2, r1, #0x04 # endif#endif /* CONFIG_S3C2400 | CONFIG_S3C2410| CONFIG_S3C2440 */ /* * we do sys-critical inits only at reboot, * not when booting from ram! */ #ifndef CONFIG_SKIP_LOWLEVEL_INIT bl cpu_init_crit #endif mov r1, #GPIO_CTL_BASE add r1, r1, #

13、oGPIO_F ldr r2,=0x55aa str r2, r1, #oGPIO_CON mov r2, #0xff str r2, r1, #oGPIO_UP mov r2, #0x0 str r2, r1, #oGPIO_DAT /*时钟以及内存配置配置好后灯全亮*/(3)将从Flash启动改成从NAND Flash启动。注释掉以下UBoot的重定向语句#ifdef CONFIG_AT91RM9200#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate: /* relocate U-Boot to RAM */ adr r0, _start /* r0 #

14、endif然后copy vivi中从nand启动的代码 #ifdef CONFIG_S3C2440_NAND_BOOT reset NAND mov r1, #NAND_CTL_BASE ldr r2, =( (7在“ldr pc, _start_armboot”之前加入: mov r1, #GPIO_CTL_BASE add r1, r1, #oGPIO_F mov r2, #0xc0 str r2, r1, #oGPIO_DAT在 “_start_armboot: .word start_armboot” 后加入: .align 2DW_STACK_START: .word STACK_B

15、ASE+STACK_SIZE-4 2在board/utu2440加入NAND Flash读函数文件,拷贝vivi中的nand_read.c文件到board/utu2440/即可不需要作任何改动:#include #define _REGb(x) (*(volatile unsigned char *)(x)#define _REGi(x) (*(volatile unsigned int *)(x)#define NF_BASE 0x4e000000# if defined(CONFIG_S3C2440)#define NFCONF _REGi(NF_BASE + 0x0)#define NF

16、CONT _REGi(NF_BASE + 0x4)#define NFCMD _REGb(NF_BASE + 0x8)#define NFADDR _REGb(NF_BASE + 0xC)#define NFDATA _REGb(NF_BASE + 0x10)#define NFSTAT _REGb(NF_BASE + 0x20)/#define GPDAT _REGi(GPIO_CTL_BASE+oGPIO_F+oGPIO_DAT)#define NAND_CHIP_ENABLE (NFCONT &= (1 9) & 0xff; NFADDR = (i 17) & 0xff; NFADDR

17、= (i 25) & 0xff; NAND_DETECT_RB; for(j=0; j 9) & 0xff; NFADDR = (i 17) & 0xff; NFADDR = (i 25) & 0xff; wait_idle(); for(j=0; j 3 修改board/utu2440/Makefile文件.OBJS := utu2440.o nand_read.o flash.o.4 修改include/configs/utu2440.h文件,添加如下内容:. ./* Nandflash Boot*/#define STACK_BASE 0x33f00000#define STACK_SI

18、ZE 0x8000/#define UBOOT_RAM_BASE 0x33f80000/* NAND Flash Controller */#define NAND_CTL_BASE 0x4E000000#define bINT_CTL(Nb) _REG(INT_CTL_BASE + (Nb)/* Offset */#define oNFCONF 0x00# if defined(CONFIG_S3C2440)#define CONFIG_S3C2440_NAND_BOOT 1/* Offset */#define oNFCONT 0x04#define oNFCMD 0x08#define

19、oNFADDR 0x0c#define oNFDATA 0x10#define oNFSTAT 0x20#define oNFECC 0x2c#define rNFCONF (*(volatile unsigned int *)0x4e000000)#define rNFCONT (*(volatile unsigned int *)0x4e000004)#define rNFCMD (*(volatile unsigned char *)0x4e000008)#define rNFADDR (*(volatile unsigned char *)0x4e00000c)#define rNFD

20、ATA (*(volatile unsigned char *)0x4e000010)#define rNFSTAT (*(volatile unsigned int *)0x4e000020)#define rNFECC (*(volatile unsigned int *)0x4e00002c)/* GPIO */#define GPIO_CTL_BASE 0x#define oGPIO_F0x50#define oGPIO_CON0x0 /* R/W, Configures the pins of the port */#define oGPIO_DAT0x4 /* R/W, Data

21、register for port */#define oGPIO_UP0x8 /* R/W, Pull-up disable register */#endif#endif /* _CONFIG_H */5 修改board/utu2440/lowlevel_init.S文件 依照开发板的内存区的配置情况, 修改board/utu2440/lowlevel_init.S文件,我利用友善之臂提供的vivi源码里的信息做了如下更改: .#define B1_BWSCON (DW16)#define B2_BWSCON (DW16)#define B3_BWSCON (DW16 + WAIT + U

22、BLB)#define B4_BWSCON (DW16)#define B5_BWSCON (DW16)#define B6_BWSCON (DW32)#define B7_BWSCON (DW32).#define B2_Tacs 0x0#define B2_Tcos 0x0#define B2_Tacc 0x7#define B2_Tcoh 0x0#define B2_Tah 0x0#define B2_Tacp 0x0#define B2_PMC 0x0#endif/* REFRESH parameter */#define REFEN 0x1 /* Refresh enable */#

23、define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */#define Trc 0x3 /* 7clk */#define Tchr 0x2 /* 3clk */# if defined(CONFIG_S3C2440)#define Trp 0x2 /* 4clk */#define REFCNT 1265#endif/*/_TEXT_BASE:.word TEXT_BASE.globl lowlevel_initlowlevel_init:/* memory control configuration */* make r0 relat

24、ive the current location so that it */* reads SMRDATA out of FLASH rather than memory ! */ldr r0, =SMRDATAadrl r0, SMRDATA /edited by yaoyi ldr r1, _TEXT_BASE/ sub r0, r0, r1ldr r1, =BWSCON /* Bus Width Status Controller */add r2, r0, #13*40:ldr r3, r0, #4str r3, r1, #4cmp r2, r0bne 0b6 修改/board/utu

25、2440/utu2440.c修改其对GPIO和PLL的配置(请参阅开发板的硬件说明和芯片手册): .#define FCLK_SPEED 1#if FCLK_SPEED=0 /* Fout = 203MHz, Fin = 12MHz for Audio */#define M_MDIV 0xC3#define M_PDIV 0x4#define M_SDIV 0x1#elif FCLK_SPEED=1 #if defined(CONFIG_S3C2410)/* Fout = 202.8MHz */#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SD

26、IV 0x1#endif#if defined(CONFIG_S3C2440)/* Fout = 405MHz */#define M_MDIV 0x7f #define M_PDIV 0x2#define M_SDIV 0x1#endif#define USB_CLOCK 1#if USB_CLOCK=0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK=1#if defined(CONFIG_S3C2410)#define U_M_MDIV 0x48#define U_M_PDIV 0x3

27、#endif#if defined(CONFIG_S3C2440)#define U_M_MDIV 0x38#define U_M_PDIV 0x2#endif#define U_M_SDIV 0x2#endif.int board_init (void) . gpio-GPFDAT=0xaf; /板子初始化完后,亮灯 .7 为了实现NAND Flash的读写,再次修改/include/configs/utu2440.h./* High Level Configuration Options* (easy to change)*/#define CONFIG_ARM920T 1 /* This is an ARM920T Core */#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */ /edited by yaoyi /#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board*/edited by yaoyi #define CONFIG_utu2440 1#define CONFIG_S3C2440 1 .#include #define CONFIG_CMD_ELF#define CONFIG_C

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

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