当前位置:文档之家› Uboot_for_mini6410_移植步骤详解

Uboot_for_mini6410_移植步骤详解

这是u-boot-2010.09 针对友善之臂MINI6410移植的最基础版本,只包含了就基本的系统引导,NAND读写,DM9000网卡等等。

但是这个足够开发的方便使用。

今后会陆续添加原先我为mini2440添加的所有功能。

但是此次移植并非我的功劳,首先基本的移植是由Alex Ling <kasimling at >完成的,你可以在这里看到他提交的补丁,但是编译后无法使用,可能是因为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。

lwf@lwf-desktop:/home/u-boot-2010.12$ sudo gedit Makefile在这个Makefile你会找到:########################################################################### ARM1176 Systems#########################################################################smdk6400_noUSB_config \smdk6400_config : unconfig@mkdir -p $(obj)include $(obj)board/samsung/smdk6400@mkdir -p $(obj)nand_spl/board/samsung/smdk6400@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk@if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\ else \echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\ fi@$(MKCONFIG) smdk6400 arm arm1176 smdk6400 samsung s3c64xx@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk然后我们可以这样为了适用我们的板子的仿照一下上面的写法于是就有这样:######################################################################### ## ARM1176 Systems######################################################################### smdk6400_noUSB_config \smdk6400_config : unconfig@mkdir -p $(obj)include $(obj)board/samsung/smdk6400@mkdir -p $(obj)nand_spl/board/samsung/smdk6400@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk@if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\ else \echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\ fi@$(MKCONFIG) smdk6400 arm arm1176 smdk6400 samsung s3c64xx@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mkmini6410_noUSB_config \mini6410_config : unconfig@mkdir -p $(obj)include $(obj)board/samsung/mini6410@mkdir -p $(obj)nand_spl/board/samsung/mini6410@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk@if [ -z "$(findstring mini6410_noUSB_config,$@)" ]; then \echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/mini6410/config.tmp;\ else \echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/mini6410/config.tmp;\ fi@$(MKCONFIG) mini6410 arm arm1176 mini6410 samsung s3c64xx@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk上面红色部分则为添加的代码。

四:修改arch\arm\cpu\arm1176\s3c64xx\cpu_init.S后面添加外设存储的操作bne check_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) // 14clk access 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_DA TA ((1<<7) | (1<<6) | (1<<4))#define SROM_BW_REG_BC1 (0xf << 4)#define SROM_BC1_REG_DA TA ((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))ldr r0, =ELFIN_SROM_BASEldr r1, [r0, #SROM_BW_REG_DA TA]mov r2, #(~SROM_BW_REG_BC1)and r1, r1, r2mov r2, #SROM_BW_REG_DA TAorr r1, r1, r2str r1, [r0, #INDEX_SROM_BW_REG]ldr r1, =SROM_BC1_REG_DA TAstr r1, [r0, #INDEX_SROM_BC1_REG]#endifmov pc, lr五:arch\arm\cpu\arm1176\s3c64xx\Makefile修改: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六:arch\arm\include\asm\arch-s3c64xx\s3c64x0.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 <asm/types.h>七:arch\arm\include\asm\arch-s3c64xx\s3c6400.hdefine ELFIN_SROM_BASE 0x70000000#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_REG 0x0#define INDEX_SROM_BC0_REG 0x4#define INDEX_SROM_BC1_REG 0x8#define INDEX_SROM_BC2_REG 0xC#define INDEX_SROM_BC3_REG 0x10#define INDEX_SROM_BC4_REG 0x14#define INDEX_SROM_BC5_REG 0x18八:在board\samsung建立Mini6410的文件夹,并且把smdk6400文件里面的所有文件复制过去board\samsung\mini6410\lowlevel_init.S_TEXT_BASE:.word TEXT_BASE.globl lowlevel_initlowlevel_init:mov r12, lrldr r0, =ELFIN_GPIO_BASEldr r1, =0x55540000str r1, [r0, #GPNCON_OFFSET]ldr r1, =0x55555555str r1, [r0, #GPNPUD_OFFSET]ldr r1, =0xf000str r1, [r0, #GPNDA T_OFFSET]把这个上面的LED屏蔽掉在这个添加wakeup_reset:ldr r0, =(ELFIN_CLOCK_POWER_BASE + WAKEUP_STAT_OFFSET) ldr r1, [r0]str r1, [r0]ldr r0, =ELFIN_GPIO_BASEldr r1, =0x3000str r1, [r0, #GPNDA T_OFFSET]把上面这个红色的屏蔽掉#if !defined(CONFIG_S3C6400) && !defined(CONFIG_S3C6410)ldr r1, [r0, #OTHERS_OFFSET]bic r1, r1, #0xC0orr r1, r1, #0x40str r1, [r0, #OTHERS_OFFSET]添加多一个标志定义!defined(CONFIG_S3C6410)同样下面的也是添加if defined(CONFIG_SYNC_MODE)ldr r1, [r0, #OTHERS_OFFSET]orr r1, r1, #0x20str r1, [r0, #OTHERS_OFFSET]#elif !defined(CONFIG_S3C6400) && !defined(CONFIG_S3C6410)ldr r1, [r0, #OTHERS_OFFSET]bic r1, r1, #0x20str r1, [r0, #OTHERS_OFFSET]#endifmov pc, lrboard\samsung\mini6410\Makefile中include $(TOPDIR)/config.mkLIB = $(obj)lib$(BOARD).aCOBJS-y := mini6410.oSOBJS := lowlevel_init.oboard\samsung\mini6410\mini6410.c中把头文件#include <netdev.h>屏蔽掉并且屏蔽掉:#define CS8900_Tacs 0x0#define CS8900_Tcos 0x4#define CS8900_Tacc 0xE#define CS8900_Tcoh 0x1#define CS8900_Tah 0x4#define CS8900_Tacp 0x6#define CS8900_PMC 0x0static 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: SMDK6400\n");return 0;}把SMDK6400改成MINI6410下面红色标记的也是要改成virt_to_phy_mini6410#ifdef CONFIG_ENABLE_MMUulong virt_to_phy_smdk6400(ulong addr){if ((0xc0000000 <= addr) && (addr < 0xc8000000))return addr - 0xc0000000 + 0x50000000;elseprintf("do not support this address : lx\n", addr);return addr;}#endif屏蔽下面这段:ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t *info) {if (banknum == 0) {info->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九:drivers\net\dm9000x.cDM9000_ior(DM9000_MRCMDX);rxbyte = DM9000_inb(DM9000_DA TA) & 0x03;//MR. xiao#if 1u8 temp;temp=DM9000_ior(DM9000_MRRH);temp=DM9000_ior(DM9000_MRRL);#endif//MR. xiao增加红色的部分十:drivers\usb\host\ohci-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十一:include\configs\mini6410.h这个mini6410.h,自己建设一个,内容复制copy的就可以了。

相关主题