Uboot for mini6410 移植步骤详解.doc_第1页
Uboot for mini6410 移植步骤详解.doc_第2页
Uboot for mini6410 移植步骤详解.doc_第3页
Uboot for mini6410 移植步骤详解.doc_第4页
Uboot for mini6410 移植步骤详解.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这是u-boot-2010.09 针对友善之臂MINI6410移植的最基础版本,只包含了就基本的系统引导,NAND读写,DM9000网卡等等。但是这个足够开发的方便使用。今后会陆续添加原先我为mini2440添加的所有功能。 但是此次移植并非我的功劳,首先基本的移植是由Alex Ling 完成的,你可以在这里看到他提交的补丁,但是编译后无法使用,可能是因为host系统不同,对脚本的解析不同,使得spl部分的生成出现问题,只需修改一下nand_spl目录下目标板目录的中config.mk中的PAD_TO:= $(shell expr $(TEXT_BASE) + 4096)即可。 DM9000的驱动没有太大的问题(修改了一点可能出现问题的地方,感谢肖工指教),但是原本的u-boot并没有调整所有SROM控制器的配置(其中包括连接DM9000所使用的bank1的总线),我使用了友善带的u-boot的参数配置了一下就好了。一:/batch.viewlink.php?itemid=1694ftp:/ftp.denx.de/pub/u-boot/去这2个网站随便下载都可以下载得到最新或者你想要的u-boot。现在我将下载u-boot-2010-09,这个也就是最新的版本啦。下载后把它解压,然后得到u-boot-2010-09的文件夹,然后进去,并且做下面几件事情:1:进入arch这个文件夹,把出arm外的前部文件夹删掉2:进入board这个文件夹,把除samsung外前部文件夹删掉3:进入include/configs,把除smdk6400.h外的所有文件删除。4: 把顶层目录下有一个叫onenand_ipl的文件夹删除掉,因为没有用到。5:进入nand_spl/board,把除samsung外全部文件删除掉。6:再进入arch/arm/cpu文件夹,把除arm1176外其他文件夹删除掉。7:再进入arch/arm/include/asm文件夹,把除arch-s3c64xx文件外带arch-XX的文件夹删除8:再进入board/samsung文价夹下,把除smdk6400外其他文价夹删除掉。至此已经把没用到或者不想见到它的文件夹跟文件删除掉了。爽吧。二:1:在顶层的目录下找到Makefile文件,并且打开,因为vi或者vim没用习惯而是改用gedit。lwflwf-desktop:/home/u-boot-2010.12$ sudo gedit Makefile在这个Makefile你会找到:# ARM1176 Systems#smdk6400_noUSB_configsmdk6400_config:unconfigmkdir -p $(obj)include $(obj)board/samsung/smdk6400mkdir -p $(obj)nand_spl/board/samsung/smdk6400echo #define CONFIG_NAND_U_BOOT $(obj)include/config.hecho CONFIG_NAND_U_BOOT = y $(obj)include/config.mkif -z $(findstring smdk6400_noUSB_config,$) ; thenecho RAM_TEXT = 0x57e00000 $(obj)board/samsung/smdk6400/config.tmp;elseecho RAM_TEXT = 0xc7e00000 $(obj)board/samsung/smdk6400/config.tmp;fi$(MKCONFIG) smdk6400 arm arm1176 smdk6400 samsung s3c64xxecho CONFIG_NAND_U_BOOT = y $(obj)include/config.mk然后我们可以这样为了适用我们的板子的仿照一下上面的写法于是就有这样:# ARM1176 Systems#smdk6400_noUSB_configsmdk6400_config:unconfigmkdir -p $(obj)include $(obj)board/samsung/smdk6400mkdir -p $(obj)nand_spl/board/samsung/smdk6400echo #define CONFIG_NAND_U_BOOT $(obj)include/config.hecho CONFIG_NAND_U_BOOT = y $(obj)include/config.mkif -z $(findstring smdk6400_noUSB_config,$) ; thenecho RAM_TEXT = 0x57e00000 $(obj)board/samsung/smdk6400/config.tmp;elseecho RAM_TEXT = 0xc7e00000 $(obj)board/samsung/smdk6400/config.tmp;fi$(MKCONFIG) smdk6400 arm arm1176 smdk6400 samsung s3c64xxecho CONFIG_NAND_U_BOOT = y $(obj)include/config.mkmini6410_noUSB_configmini6410_config:unconfigmkdir -p $(obj)include $(obj)board/samsung/mini6410mkdir -p $(obj)nand_spl/board/samsung/mini6410echo #define CONFIG_NAND_U_BOOT $(obj)include/config.hecho CONFIG_NAND_U_BOOT = y $(obj)include/config.mkif -z $(findstring mini6410_noUSB_config,$) ; thenecho RAM_TEXT = 0x57e00000 $(obj)board/samsung/mini6410/config.tmp;elseecho RAM_TEXT = 0xc7e00000 $(obj)board/samsung/mini6410/config.tmp;fi$(MKCONFIG) mini6410 arm arm1176 mini6410 samsung s3c64xxecho CONFIG_NAND_U_BOOT = y $(obj)include/config.mk上面红色部分则为添加的代码。四:修改archarmcpuarm1176s3c64xxcpu_init.S后面添加外设存储的操作bnecheck_dmc1_readynop#if defined(CONFIG_MINI6410)#define SROM_BC1_REG_Tacs (0x0) / 0clk address set-up#define SROM_BC1_REG_Tcos (0x4) / 4clk chip selection set-up#define SROM_BC1_REG_Tacc (0xE) / 14clkaccess cycle#define SROM_BC1_REG_Tcoh (0x1) / 1clk chip selection hold#define SROM_BC1_REG_Tah(0x4) / 4clk address holding time#define SROM_BC1_REG_Tacp (0x6) / 6clk page mode access cycle#define SROM_BC1_REG_PMC(0x0) / normal(1data)page mode configuration#define SROM_BW_REG_DATA(17) | (16) | (14)#define SROM_BW_REG_BC1(0xf 4)#define SROM_BC1_REG_DATA(SROM_BC1_REG_Tacs 28) | (SROM_BC1_REG_Tcos 24) | (SROM_BC1_REG_Tacc 16) | (SROM_BC1_REG_Tcoh 12) | (SROM_BC1_REG_Tah 8) | (SROM_BC1_REG_Tacp 4) | (SROM_BC1_REG_PMC)ldrr0, =ELFIN_SROM_BASEldrr1, r0, #SROM_BW_REG_DATAmovr2, #(SROM_BW_REG_BC1)andr1, r1, r2movr2, #SROM_BW_REG_DATAorrr1, r1, r2strr1, r0, #INDEX_SROM_BW_REGldrr1, =SROM_BC1_REG_DATAstrr1, r0, #INDEX_SROM_BC1_REG#endifmovpc, lr五:archarmcpuarm1176s3c64xxMakefile修改:include $(TOPDIR)/config.mkLIB= $(obj)lib$(SOC).aSOBJS= reset.oCOBJS-$(CONFIG_S3C6400)+= cpu_init.o speed.oCOBJS-$(CONFIG_S3C6410)+= cpu_init.o speed.oCOBJS-y+= timer.o六:archarmincludeasmarch-s3c64xxs3c64x0.h#ifndef _S3C64XX_H_#define _S3C64XX_H_#if defined(CONFIG_SYNC_MODE) & (defined(CONFIG_S3C6400) | defined(CONFIG_S3C6410)#error CONFIG_SYNC_MODE unavailable on S3C6400, please, fix your configuration!#endif#include 七:archarmincludeasmarch-s3c64xxs3c6400.hdefine ELFIN_SROM_BASE0x70000000#define SROM_BW_REG_REG(ELFIN_SROM_BASE + 0x0)#define SROM_BC0_REG_REG(ELFIN_SROM_BASE + 0x4)#define SROM_BC1_REG_REG(ELFIN_SROM_BASE + 0x8)#define SROM_BC2_REG_REG(ELFIN_SROM_BASE + 0xC)#define SROM_BC3_REG_REG(ELFIN_SROM_BASE + 0x10)#define SROM_BC4_REG_REG(ELFIN_SROM_BASE + 0x14)#define SROM_BC5_REG_REG(ELFIN_SROM_BASE + 0x18)#define INDEX_SROM_BW_REG0x0#define INDEX_SROM_BC0_REG0x4#define INDEX_SROM_BC1_REG0x8#define INDEX_SROM_BC2_REG0xC#define INDEX_SROM_BC3_REG0x10#define INDEX_SROM_BC4_REG0x14#define INDEX_SROM_BC5_REG0x18八:在boardsamsung建立Mini6410的文件夹,并且把smdk6400文件里面的所有文件复制过去boardsamsungmini6410lowlevel_init.S_TEXT_BASE:.wordTEXT_BASE.globl lowlevel_initlowlevel_init:movr12, lrldrr0, =ELFIN_GPIO_BASEldrr1, =0x55540000strr1, r0, #GPNCON_OFFSETldrr1, =0x55555555strr1, r0, #GPNPUD_OFFSETldrr1, =0xf000strr1, r0, #GPNDAT_OFFSET把这个上面的LED屏蔽掉在这个添加wakeup_reset:ldrr0, =(ELFIN_CLOCK_POWER_BASE + WAKEUP_STAT_OFFSET)ldrr1, r0strr1, r0ldrr0, =ELFIN_GPIO_BASEldrr1, =0x3000strr1, r0, #GPNDAT_OFFSET把上面这个红色的屏蔽掉#if !defined(CONFIG_S3C6400) & !defined(CONFIG_S3C6410)ldrr1, r0, #OTHERS_OFFSETbicr1, r1, #0xC0orrr1, r1, #0x40strr1, r0, #OTHERS_OFFSET添加多一个标志定义!defined(CONFIG_S3C6410)同样下面的也是添加if defined(CONFIG_SYNC_MODE)ldrr1, r0, #OTHERS_OFFSETorrr1, r1, #0x20strr1, r0, #OTHERS_OFFSET#elif !defined(CONFIG_S3C6400) & !defined(CONFIG_S3C6410)ldrr1, r0, #OTHERS_OFFSETbicr1, r1, #0x20strr1, r0, #OTHERS_OFFSET#endifmovpc, lrboardsamsungmini6410Makefile中include $(TOPDIR)/config.mkLIB= $(obj)lib$(BOARD).aCOBJS-y:= mini6410.oSOBJS:= lowlevel_init.oboardsamsungmini6410mini6410.c中把头文件#include 屏蔽掉并且屏蔽掉:#define CS8900_Tacs0x0#define CS8900_Tcos0x4#define CS8900_Tacc0xE#define CS8900_Tcoh0x1#define CS8900_Tah0x4#define CS8900_Tacp0x6#define CS8900_PMC0x0static void cs8900_pre_init(void)SROM_BW_REG &= (0xf 4);SROM_BW_REG |= (1 7) | (1 6) | (1 4);SROM_BC1_REG = (CS8900_Tacs 28) + (CS8900_Tcos 24) +(CS8900_Tacc 16) + (CS8900_Tcoh 12) +(CS8900_Tah 8) + (CS8900_Tacp 4) + CS8900_PMC);cs8900_pre_init();SROM_BW_REG |= 4 | 8 | 1;int checkboard(void)printf(Board: SMDK6400n);return 0;把SMDK6400改成MINI6410下面红色标记的也是要改成virt_to_phy_mini6410#ifdef CONFIG_ENABLE_MMUulong virt_to_phy_smdk6400(ulong addr)if (0xc0000000 = addr) & (addr portwidth = FLASH_CFI_16BIT;info-chipwidth = FLASH_CFI_BY16;info-interface = FLASH_CFI_X16;return 1; elsereturn 0;把下面这个#ifdef CONFIG_CMD_NETint board_eth_init(bd_t *bis)int rc = 0;#ifdef CONFIG_CS8900rc = cs8900_initialize(0, CONFIG_CS8900_BASE);#endifreturn rc;#endif改成:#ifdef CONFIG_CMD_NETint board_eth_init(bd_t *bi)int rc = 0;#if defined(CONFIG_DRIVER_DM9000)rc = dm9000_initialize(bi);#endifreturn rc;#endif九:driversnetdm9000x.cDM9000_ior(DM9000_MRCMDX);rxbyte = DM9000_inb(DM9000_DATA) & 0x03;/MR. xiao#if 1 u8 temp; temp=DM9000_ior(DM9000_MRRH); temp=DM9000_ior(DM9000_MRRL);#endif/MR. xiao增加红色的部分十:driversusbhostohci-hcd.c 添加下面红色的部分#if defined(CONFIG_ARM920T) | defined(CONFIG_S3C24X0) | defined(CONFIG_S3C6400) | defined(CONFIG_S3C6410) | defined(CONFIG_440EP) | defined(CONFIG_PCI_OHCI) | defined(CONFIG_MPC5200) | defined(CONFIG_SYS_OHCI_USE_NPS)# define OHCI_USE_NPS#endif十一:includeconfigsmini6410.h这个mini6410.h,自己建设一个,内容复制copy的就可以了。然后打开mini6410.h修改如下:/#define CONFIG_S3C64001#define CONFIG_S3C64101#define CONFIG_S3C64XX1#define CONFIG_MINI64101* Architecture magic and machine type*/#define MACH_TYPE2520这个机械ID 我不知道为什么要改成2520 错了 内核是驱动不了的。把CS89的网卡干掉 换成这样:#define CONFIG_NET_MULTI 1#define CONFIG_DRIVER_DM90001#define CONFIG_DM9000_NO_SROM1#define CONFIG_DM9000_USE_16BIT1#define CONFIG_DM9000_BASE0x18000300#define DM9000_IOCONFIG_DM9000_BASE#define DM9000_DATA(CONFIG_DM9000_BASE+4)#define CONFIG_ETHADDR08:08:10:12:10:27#define CONFIG_NETMASK#define CONFIG_IPADDR53#define CONFIG_SERVERIP59#define CONFIG_GATEWAYIP添加下面的宏(红色部分)#define CONFIG_CMD_PING#define CONFIG_CMD_ELF#define CONFIG_CMD_FAT#define CONFIG_CMD_EXT2#undef CONFIG_CMD_IMLS#define CONFIG_BOOTDELAY3#define CONFIG_SYS_LONGHELP#define CONFIG_SYS_PROMPTMINI6410 # 改成你自己喜欢的提示字符 这里是MINI6410 # *Support Clock Settings*SettingSYNCASYNC-667_133_66 XO533_133_66 OO400_133_66 XO400_100_50 OO*/#define CONFIG_CLK_667_133_66提高主频把下面的全部删除掉把#define CONFIG_SYS_FLASH_CFI1换成#define CONFIG_SYS_NO_FLASH*-* FLASH and environment organization*/#define CONFIG_SYS_MAX_FLASH_BANKS1#define CONFIG_SYS_MAX_FLASH_SECT40#define CONFIG_AMD_LV800#define CONFIG_SYS_FLASH_CFI1#define CONFIG_FLASH_CFI_DRIVER1#define CONFIG_SYS_FLASH_CFI_WIDTHFLASH_CFI_16BIT#define CONFIG_FLASH_CFI_LEGACY#define CONFIG_SYS_FLASH_LEGACY_512Kx16#define CONFIG_SYS_FLASH_ERASE_TOUT(5 * CONFIG_SYS_HZ)#define CONFIG_SYS_FLASH_WRITE_TOUT(5 * CONFIG_SYS_HZ)#define CONFIG_IDENT_STRING for SMDK6400 改成#define CONFIG_IDENT_STRING for MINI6410十二:includecommon.h添加如下:#ifdef CONFIG_4xxulongget_OPB_freq (void);ulongget_PCI_freq (void);#endif#if defined(CONFIG_S3C24X0) | defined(CONFIG_LH7A40X) | defined(CONFIG_S3C6400) | defined(CONFIG_S3C6410) | defined(CONFIG_EP93XX)ulongget_FCLK (void);ulongget_HCLK (void);ulongget_PCLK (void);ulongget_UCLK (void);#endif十三:顶层的MAKEAL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论