Uboot_for_Tiny6410_移植步骤详解
uboot移植到6410开发板的过程及环境变量的修改

天涯海阁嵌入式linuxu boot移植到6410开发板的过程及环境变量的修改分类: uboot 2012-09-28 11:16 319人阅读 评论(0) 收藏举报一、通过U盘下载uboot.bin到开发板,U盘事先必须用飞凌光盘里的一个快速烧写工具,把mmc.bin烧写进U盘内,但是打开U盘后看不到这个文件。
然后将uboot.bin烧写进U盘。
(ps,如果要直接通过U盘将内核还有文件系统烧写进开发板里,可以直接将zImage跟cramfs文件系统拷进U盘)二、将U盘插入开发板,选择U盘启动模式,1 2 3 off ,其他on;打开终端,启动;之后就开始烧写,由于没有在U 盘内放zImage ,所以烧写的最后一行会提示not found zImage 等。
三、断开电源,选择nand flash启动:1 2 3 6 7 off,其他on;打开电源,在bootdelay计时的时候按下空格键;进入uboot的命令模式;四、查看环境变量:printenv五、修改环境变量:setenv,包括ip地址等,主要是修改bootcmd跟bootargs,我是用tftp下载uImage,用nfs挂载根文件系统:Setenv bootcmd 'tftp c0008000 uImage;bootm c0008000'(如果要设置多个,就要加上''号,如果有多个命令,在两个命令之间加;号)Setenv bootargs ‘console=ttySAC0 root=/dev/nfs nfsroot=172.22.17.20:/nfsroot/rootfsip=172.22.17.21’(consle是设置平台,nfsroot 是设置nfs的挂载地址,172.22.17.21是开发板的ip,172.22.17.20是主机的ip)都设置完再查看环境变量printenv ,如果没问题就保存:saveenv六、重启 ok**************************************************************************************************** 下面对bootargs的设置做一些介绍:bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。
07- Tiny6410 Ubuntu用户手册

(本手册正在不断更新中,建议您到网站下载最新版本) copyright@2010
更新说明:
Step4: 把开发板S2设置为SDBOOT,并插入SD卡,开机上电,即可运行Ubuntu Ubuntu系统开始启动,如下界面。
我们配置的Ubuntu系统,使用了XFCE窗口管理器,而不是
太庞大了,整个系统几乎无法运行。
进入系统之后,你可能看不到有趣的的应用程卡,并在桌面上显示出来。
这是它的一些设置菜单截图。
说明:通过SD卡运行Ubuntu系统,实际上只用到了
- uzImage : 内核文件,对于不同型号的LCD,分别有不同的内核文件(2)解压安装u-boot源代码
在工作目录/opt/FriendlyARM/mini6410/ubuntu中执行:
小一些,这样也可以烧写的更快一些。
Uboot_for_Tiny6410_移植步骤详解

Uboot_for_Tiny6410_移植步骤详解一、设计要求1.目的1)掌握U-boot剪裁编写2)掌握交叉编译环境的配置3)掌握U-boot的移植2.实现的功能1)U-boot编译成功2)移植U-boot,使系统支持从NAND FLASH启动二、设计方案1.硬件资源1)ARM处理器:ARM11芯片(SamsungS3C6410A),基于ARM1176JZF-S核设计,运行频率533Mhz, 最高可达667Mhz2)存储器:128M DDR RAM,可升级至256M;MLC NAND Flash(2GB)3)其他资源:具有三LCD接口、4线电阻触摸屏接口、100M 标准网络接口、标准DB9 五线串口、Mini USB 2.0 接口、USB Host 1.1、3.5mm音频输入输出口、标准TV-OUT 接口、SD卡座、红外接收等常用接口;另外还引出4路TTL串口,另1 路TV-OUT、SDIO2 接口(可接SD WiFi)接口等;在板的还有蜂鸣器、I2C-EEPROM、备份电池、AD可调电阻、8 个中断式按键等。
2.软件资源1)arm-linux-gcc-4.5.1(交叉编译)2)u-boot-2010.09.tar.gzarm-linux-gcc-4.5.1-v6-vfp-20101103.tgz三、移植过程1.环境搭建1)建立交叉编译环境2)去这2 个网站随便下载都可以下载得到最新或者你想要的u-boot。
(/batch.viewlink.php?itemid=1694ftp://ftp.denx.de/pub/u-boot/)下面是具体的对u-boot…的修改一:下载并解压u-boot-gxb.tar.gz。
#tar xzvf u-boot-gxb.tar.gz二:在顶层的目录下找到Makefile文件,并用gedit打开在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下面红色的为新增加的#=====================更改部分=======================================tiny6410_noUSB_config \tiny6410_config : unconfig@mkdir -p $(obj)include $(obj)board/samsung/tiny6410@mkdir -p $(obj)nand_spl/board/samsung/tiny6410@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk@if [ -z "$(findstring tiny6410_noUSB_config,$@)" ]; then \echo "RAM_TEXT = 0x57e00000" >>$(obj)board/samsung/tiny6410/config.tmp;\else \echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/tiny6410/config.tmp;\fi@$(MKCONFIG) tiny6410 arm arm1176 tiny6410 samsung s3c64xx@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk#==================================================================三: arch/arm/cpu/arm1176/s3c64xx/cpu_init.S#gedit arch/arm/cpu/arm1176/s3c64xx/cpu_init.S#include <config.h>#include <asm/arch/s3c6400.h>.globl mem_ctrl_asm_initmem_ctrl_asm_init:/* DMC1 base address 0x7e001000 */ldr r0, =ELFIN_DMC1_BASEldr r1, =0x4str r1, [r0, #INDEX_DMC_MEMC_CMD]ldr r1, =DMC_DDR_REFRESH_PRDstr r1, [r0, #INDEX_DMC_REFRESH_PRD]ldr r1, =DMC_DDR_CAS_LATENCYstr r1, [r0, #INDEX_DMC_CAS_LATENCY]ldr r1, =DMC_DDR_t_DQSSstr r1, [r0, #INDEX_DMC_T_DQSS]ldr r1, =DMC_DDR_t_MRDstr r1, [r0, #INDEX_DMC_T_MRD]ldr r1, =DMC_DDR_t_RASstr r1, [r0, #INDEX_DMC_T_RAS]ldr r1, =DMC_DDR_t_RCstr r1, [r0, #INDEX_DMC_T_RC]ldr r1, =DMC_DDR_t_RCDldr r2, =DMC_DDR_schedule_RCDorr r1, r1, r2str r1, [r0, #INDEX_DMC_T_RCD]ldr r1, =DMC_DDR_t_RFCldr r2, =DMC_DDR_schedule_RFCorr r1, r1, r2str r1, [r0, #INDEX_DMC_T_RFC]ldr r1, =DMC_DDR_t_RPldr r2, =DMC_DDR_schedule_RPorr r1, r1, r2str r1, [r0, #INDEX_DMC_T_RP]ldr r1, =DMC_DDR_t_RRDstr r1, [r0, #INDEX_DMC_T_RRD]ldr r1, =DMC_DDR_t_WRstr r1, [r0, #INDEX_DMC_T_WR]ldr r1, =DMC_DDR_t_WTRstr r1, [r0, #INDEX_DMC_T_WTR]ldr r1, =DMC_DDR_t_XPstr r1, [r0, #INDEX_DMC_T_XP]ldr r1, =DMC_DDR_t_XSRstr r1, [r0, #INDEX_DMC_T_XSR]ldr r1, =DMC_DDR_t_ESRstr r1, [r0, #INDEX_DMC_T_ESR]ldr r1, =DMC1_MEM_CFGstr r1, [r0, #INDEX_DMC_MEMORY_CFG]ldr r1, =DMC1_MEM_CFG2str r1, [r0, #INDEX_DMC_MEMORY_CFG2]ldr r1, =DMC1_CHIP0_CFGstr r1, [r0, #INDEX_DMC_CHIP_0_CFG]ldr r1, =DMC_DDR_32_CFGstr r1, [r0, #INDEX_DMC_USER_CONFIG]/* DMC0 DDR Chip 0 configuration direct command reg */ ldr r1, =DMC_NOP0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Precharge All */ldr r1, =DMC_PA0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Auto Refresh 2 time */ldr r1, =DMC_AR0str r1, [r0, #INDEX_DMC_DIRECT_CMD]str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* MRS */ldr r1, =DMC_mDDR_EMR0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Mode Reg */ldr r1, =DMC_mDDR_MR0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Enable DMC1 */mov r1, #0x0str r1, [r0, #INDEX_DMC_MEMC_CMD]check_dmc1_ready:ldr r1, [r0, #INDEX_DMC_MEMC_STATUS]mov r2, #0x3and r1, r1, r2cmp r1, #0x1bne check_dmc1_readynop添加下面红色的代码/*===========================更改部分=============================*/#if defined(CONFIG_TINY6410)#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_DATA ((1<<7) | (1<<6) | (1<<4))#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))ldr r0, =ELFIN_SROM_BASEldr r1, [r0, #SROM_BW_REG_DATA]mov r2, #(~SROM_BW_REG_BC1)and r1, r1, r2mov r2, #SROM_BW_REG_DATAorr r1, r1, r2str r1, [r0, #INDEX_SROM_BW_REG]ldr r1, =SROM_BC1_REG_DATAstr r1, [r0, #INDEX_SROM_BC1_REG]#endif/*========================================================*/ mov pc, lr.ltorg四:修改arch/arm/cpu/arm1176/s3c64xx/Makefile# gedit arch/arm/cpu/arm1176/s3c64xx/Makefileinclude $(TOPDIR)/config.mkLIB = $(obj)lib$(SOC).aSOBJS = reset.o#COBJS-$(CONFIG_S3C6400) += cpu_init.o speed.o添加下面红色代码#==================================更改部分================================ COBJS-$(CONFIG_S3C6410) += cpu_init.o speed.o#========================================================================= COBJS-y += timer.oOBJS := $(addprefix $(obj),$(SOBJS) $(COBJS-y))all: $(obj).depend $(START) $(LIB)$(LIB): $(OBJS)$(AR) $(ARFLAGS) $@ $(OBJS)五:修改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.h#define 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建立tiny6410的文件夹,并且把smdk6400文件里面的所有文件复制过去,在修改board/samsung/tiny6410/lowlevel_init.S_TEXT_BASE:.word TEXT_BASE.globl lowlevel_initlowlevel_init:mov r12, lr/* LED on only #8 *//*=========================================更改部分========================*/ #if 0ldr r0, =ELFIN_GPIO_BASEldr r1, =0x55540000str r1, [r0, #GPNCON_OFFSET]ldr r1, =0x55555555str r1, [r0, #GPNPUD_OFFSET]ldr r1, =0xf000str r1, [r0, #GPNDAT_OFFSET]#endif/*=========================================================================*/ 将上面的红色的部分屏蔽掉wakeup_reset:/* Clear wakeup status register */ldr r0, =(ELFIN_CLOCK_POWER_BASE + WAKEUP_STAT_OFFSET)ldr r1, [r0]str r1, [r0]/* LED test *//*========================================更改部分===========================*/ #if 0ldr r0, =ELFIN_GPIO_BASEldr r1, =0x3000str r1, [r0, #GPNDAT_OFFSET]#endif/*===========================================================================*/ /* Load return address and jump to kernel */ldr r0, =(ELFIN_CLOCK_POWER_BASE + INF_REG0_OFFSET)/* r1 = physical address of s3c6400_cpu_resume function */ldr r1, [r0]/* Jump to kernel (sleep-s3c6400.S) */mov pc, r1nopnop将上面红色的部分屏蔽掉/** This was unconditional in original Samsung sources, but it doesn't* seem to make much sense on S3C6400.*//*======================================更改部分===========================*/ /*#ifndef CONFIG_S3C6400*/#if !defined(CONFIG_S3C6400) && !defined(CONFIG_S3C6410)/*=========================================================================*/ ldr r1, [r0, #OTHERS_OFFSET]bic r1, r1, #0xC0orr r1, r1, #0x40str r1, [r0, #OTHERS_OFFSET]八:修改board/Samsung/tiny6410/Makefile中include $(TOPDIR)/config.mkLIB = $(obj)lib$(BOARD).a#=============================更改部分=====================COBJS-y := tiny6410.oSOBJS := lowlevel_init.o#===========================================================SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)OBJS := $(addprefix $(obj),$(COBJS-y))SOBJS := $(addprefix $(obj),$(SOBJS))九:修改board/samsung/tiny6410/tiny6410.c屏蔽掉下面头文件;/*===========================更改部分====================================*/ #if 0#include <netdev.h>#endif/*============================================================================* /#include <asm/arch/s3c6400.h>/* ===============================更改部分====================================*/ #if 0#define CS8900_Tacs 0x0 /* 0clk address set-up */#define CS8900_Tcos 0x4 /* 4clk chip selection set-up */#define CS8900_Tacc 0xE /* 14clk access cycle */#define CS8900_Tcoh 0x1 /* 1clk chip selection hold */#define CS8900_Tah 0x4 /* 4clk address holding time */#define CS8900_Tacp 0x6 /* 6clk page mode access cycle */#define CS8900_PMC 0x0 /* normal(1data)page mode configuration */#endif/*============================================================================* /static inline void delay(unsigned long loops){__asm__ volatile ("1:\n" "subs %0, %1, #1\n""bne 1b": "=r" (loops) : "0" (loops));}/** Miscellaneous platform dependent initialisations*//*=====================================更改部分==========================*/#if 0static 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);}#endif/*=======================================================================*/int board_init(void){DECLARE_GLOBAL_DATA_PTR;/*=========================================更改部分===================*/ #if 0cs8900_pre_init();#endif/* NOR-flash in SROM0 *//* Enable WAIT */SROM_BW_REG |= 4 | 8 | 1;gd->bd->bi_arch_number = MACH_TYPE;gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;return 0;}int dram_init(void){DECLARE_GLOBAL_DATA_PTR;gd->bd->bi_dram[0].start = PHYS_SDRAM_1;gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;return 0;}#ifdef CONFIG_DISPLAY_BOARDINFOint checkboard(void){printf("Board: TINY6410\n");return 0;}#endif#ifdef CONFIG_ENABLE_MMU/*=====================================更改部分==========================*/ ulong virt_to_phy_tiny6410(ulong addr)/*=======================================================================*/ {if ((0xc0000000 <= addr) && (addr < 0xc8000000))return addr - 0xc0000000 + 0x50000000;elseprintf("do not support this address : %08lx\n", addr);return addr;}#endif/*=======================================更改部分=======================*/ #if 0ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t *info){if (banknum == 0) { /* non-CFI boot flash */info->portwidth = FLASH_CFI_16BIT;info->chipwidth = FLASH_CFI_BY16;info->interface = FLASH_CFI_X16;return 1;} elsereturn 0;}#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); /* Dummy read *//* Get most updated data,only look at bits 0:1, See application notes DM9000 */rxbyte = DM9000_inb(DM9000_DATA) & 0x03;/*========================================更改部分==========================*/ #if 1u8 temp;temp=DM9000_ior(DM9000_MRRH);temp=DM9000_ior(DM9000_MRRL);#endif红色的为增加的/*============================================================================= *//* Status check: this byte must be 0 or 1 */if (rxbyte > DM9000_PKT_RDY) {DM9000_iow(DM9000_RCR, 0x00); /* Stop Device */DM9000_iow(DM9000_ISR, 0x80); /* Stop INT request */printf("DM9000 error: status check fail: 0x%x\n",rxbyte);return 0;}十一:修改drivers/usb/host/ohci-hcd.c#ifdef CONFIG_AT91RM9200#include <asm/arch/hardware.h> /* needed for AT91_USB_HOST_BASE */#endif//=====================更改部分================#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 /* force NoPowerSwitching mode */#endif#undef OHCI_VERBOSE_DEBUG /* not always helpful */十二:include/configs/tiny6410.h/** High Level Configuration Options* (easy to change)*///======================更改部分==================================//#define CONFIG_S3C6400 1 /* in a SAMSUNG S3C6400 SoC */#define CONFIG_S3C6410 1 /* in a SAMSUNG S3C6400 SoC */ //===============================================================#define CONFIG_S3C64XX 1 /* in a SAMSUNG S3C64XX Family */#define CONFIG_SMDK6400 1 /* on a SAMSUNG SMDK6400 Board *///=========================更改部分====================================#define CONFIG_TINY6410 1//===================================================================#define CONFIG_SKIP_RELOCATE_UBOOT#define CONFIG_PERIPORT_REMAP#define CONFIG_PERIPORT_BASE 0x70000000#define CONFIG_PERIPORT_SIZE 0x13#define CONFIG_SYS_SDRAM_BASE 0x50000000/* input clock of PLL: SMDK6400 has 12MHz input clock */#define CONFIG_SYS_CLK_FREQ 12000000#if !defined(CONFIG_NAND_SPL) && (TEXT_BASE >= 0xc0000000)#define CONFIG_ENABLE_MMU#endif#define CONFIG_SETUP_MEMORY_TAGS#define CONFIG_CMDLINE_TAG#define CONFIG_INITRD_TAG/** Architecture magic and machine type*///===================更改部分=====================/*#define MACH_TYPE 1270 */#define MACH_TYPE 2520//==============================================#define CONFIG_DISPLAY_CPUINFO#define CONFIG_DISPLAY_BOARDINFO/** Size of malloc() pool*/#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 1024 * 1024) #define CONFIG_SYS_GBL_DATA_SIZE 128 /* size in bytes for initial data *//** Hardware drivers*///==========================更改部分============================ 将sc8900的网卡干掉#if 0#define CONFIG_NET_MULTI#define CONFIG_CS8900 /* we have a CS8900 on-board */#define CONFIG_CS8900_BASE 0x18800300#define CONFIG_CS8900_BUS16 /* follow the Linux driver */#endif换成下面的#define CONFIG_NET_MULTI 1#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_NO_SROM 1#define CONFIG_DM9000_USE_16BIT 1#define CONFIG_DM9000_BASE 0x18000300#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE+4)#define CONFIG_ETHADDR 08:08:10:12:10:27#define CONFIG_NETMASK 255.255.255.0#define CONFIG_IPADDR 192.168.1.253#define CONFIG_SERVERIP 192.168.1.159#define CONFIG_GATEWAYIP 192.168.1.1//=============================================================/** select serial console configuration*/#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK6400 */#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */ #ifdef CONFIG_SYS_HUSH_PARSER#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "#endif#define CONFIG_CMDLINE_EDITING/* allow to overwrite serial and ethaddr */#define CONFIG_ENV_OVERWRITE#define CONFIG_BAUDRATE 115200/************************************************************ Command definition***********************************************************/#include <config_cmd_default.h>#define CONFIG_CMD_CACHE#define CONFIG_CMD_REGINFO#define CONFIG_CMD_LOADS#define CONFIG_CMD_LOADB#define CONFIG_CMD_SAVEENV#define CONFIG_CMD_NAND#if defined(CONFIG_BOOT_ONENAND)#define CONFIG_CMD_ONENAND#endif#define CONFIG_CMD_PING#define CONFIG_CMD_ELF#define CONFIG_CMD_FAT#define CONFIG_CMD_EXT2//===========================================更改部分==================添加红色部分#undef CONFIG_CMD_IMLS//======================================================================#define CONFIG_BOOTDELAY 3#define CONFIG_ZERO_BOOTDELAY_CHECK#if (CONFIG_COMMANDS & CONFIG_CMD_KGDB)#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */#endif/** Miscellaneous configurable options*/#define CONFIG_SYS_LONGHELP /* undef to save memory */下面修改为自己喜欢的提示字符//==============================更改部分====================================== //#define CONFIG_SYS_PROMPT "SMDK6400 # " /* Monitor Command Prompt */ #define CONFIG_SYS_PROMPT "TINY6410 # " /* Monitor Command Prompt *///===========================================================================#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */#define CONFIG_SYS_PBSIZE 384 /* Print Buffer Size */#define CONFIG_SYS_MAXARGS 16 /* max number of command args */#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */#define CONFIG_SYS_MEMTEST_START C ONFIG_SYS_SDRAM_BASE /* memtest works on*/#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_SDRAM_BASE + 0x7e00000) /* 126MB in DRAM */#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE /* default load address */#define CONFIG_SYS_HZ 1000/* valid baudrates */#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }/*-----------------------------------------------------------------------* Stack sizes** The stack sizes are set up in start.S using the settings below*/#define CONFIG_STACKSIZE 0x40000 /* regular stack 256KB *//**********************************Support Clock Settings**********************************Setting SYNC ASYNC----------------------------------667_133_66 X O533_133_66 O O400_133_66 X O400_100_50 O O**********************************/提高主频//===========================================更改部分===================== #define CONFIG_CLK_667_133_66//#define CONFIG_CLK_533_133_66//========================================================================= /*#define CONFIG_CLK_400_100_50#define CONFIG_CLK_400_133_66#define CONFIG_SYNC_MODE*//* SMDK6400 has 2 banks of DRAM, but we use only one in U-Boot */#define CONFIG_NR_DRAM_BANKS 1#define PHYS_SDRAM_1 CONFIG_SYS_SDRAM_BASE /* SDRAM Bank #1 */#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB in Bank #1 */#define CONFIG_SYS_FLASH_BASE 0x10000000#define CONFIG_SYS_MONITOR_BASE 0x00000000/*-----------------------------------------------------------------------* FLASH and environment organization*/#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks *//* AM29LV160B has 35 sectors, AM29LV800B - 19 */#define CONFIG_SYS_MAX_FLASH_SECT 40#define CONFIG_AMD_LV800//===================================更改部分=========================//#define CONFIG_SYS_FLASH_CFI 1 /* Use CFI parameters (needed?) */将上面的换成下面红色的部分#define CONFIG_SYS_NO_FLASH 1 /* Use CFI parameters (needed?) *///=================================================================//=========================更改部分===================================删掉下面黄色的#if 0/* Use drivers/cfi_flash.c, even though the flash is not CFI-compliant */#define CONFIG_FLASH_CFI_DRIVER 1#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_16BIT#define CONFIG_FLASH_CFI_LEGACY#define CONFIG_SYS_FLASH_LEGACY_512Kx16/* timeout values are in ticks */#define CONFIG_SYS_FLASH_ERASE_TOUT (5 * CONFIG_SYS_HZ) /* Timeout for Flash Erase */ #define CONFIG_SYS_FLASH_WRITE_TOUT (5 * CONFIG_SYS_HZ) /* Timeout for Flash Write */ #endif//============================================================================= ==========#define CONFIG_ENV_SIZE 0x4000 /* Total Size of Environment Sector *//** SMDK6400 board specific data*///=========================================更改部分============================ //#define CONFIG_IDENT_STRING " for SMDK6400"将上面的改为下面的#define CONFIG_IDENT_STRING " for TINY6410"//============================================================================= ====/* base address for uboot */#define CONFIG_SYS_PHY_UBOOT_BASE (CONFIG_SYS_SDRAM_BASE + 0x07e00000)/* total memory available to uboot */#define CONFIG_SYS_UBOOT_SIZE (1024 * 1024)十三:修改include/common.hulong get_OPB_freq (void);ulong get_PCI_freq (void);#endif/*======================================更改部分============================*/ #if defined(CONFIG_S3C24X0) || \defined(CONFIG_LH7A40X) || \defined(CONFIG_S3C6400) || \defined(CONFIG_S3C6410) || \ 添加红色的defined(CONFIG_EP93XX)/*============================================================================= */ulong get_FCLK (void);ulong get_HCLK (void);ulong get_PCLK (void);ulong get_UCLK (void);#endif十四:修改顶层的MAKEALL########################################################################### ARM11 Systems#########################################################################LIST_ARM11=" \cp1136 \omap2420h4 \apollon \imx31_litekit \imx31_phycore \imx31_phycore_eet \mx31ads \mx31pdk \mx31pdk_nand \qong \smdk6400 \tnetv107x_evm \添加下面红色的部分/*=======================================更改部分============================*/ tiny6410 \/*===========================================================================*/ "#########################################################################十五:修改顶层的MAINTAINERS修改下面的为自己的Alex Z黳ke <azu@sysgo.de>lart SA1100dnp1110 SA1110/*==================================更改部分=============================*/ Wnn168<wnn168@>TINT6410 ARM1176JZF-S (S3C6410)/*========================================================================*/-------------------------------------------------------------------------Unknown / orphaned boards:十六:修改nand_spl/board/samsung/ tiny6410/config.mk下面的这个没有改动# FriendlyARM TINY6410 development board,based on# Samsung S3C64xx Reference Platform (smdk6400) board# TEXT_BASE for SPL:## On S3C64xx platforms the SPL is located in SRAM at 0.## TEXT_BASE = 0include $(TOPDIR)/board/$(BOARDDIR)/config.mk# PAD_TO used to generate a 4kByte binary needed for the combined image# -> PAD_TO = TEXT_BASE + 4096PAD_TO := $(shell expr $(TEXT_BASE) + 4096)ifeq ($(debug),1)PLATFORM_CPPFLAGS += -DDEBUGEndif十七:在nand_sql/board/Samsung/tiny6410 这个tiny6410是仿照上述smdk6410做的内容一样复制然后修改下面的就OKNand_sql/board/Samsung/tiny6410/Makefile# from board directory#=========================更改部分=================================== $(obj)lowlevel_init.S:@rm -f $@# @ln -s $(TOPDIR)/board/samsung/smdk6400/lowlevel_init.S $@@ln -s $(TOPDIR)/board/samsung/tiny6410/lowlevel_init.S $@#=================================================================# from nand_spl directory。
tiny6410内核移植

Tiny6410 的内核移植(拿来主义)一、开发环境宿主机: vista+VMware+ fedoral13(win7下虚拟机)编译器: 友善自带arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz开发板: tiny6410,核心板号1106 NAND 2G RAM 256M注意:移植内核时,确保引导文件为u-boot类型,否则到后面下载到开发板使会出现乱码以及不必要的错误二、移植nand_flash1 下载linux-2.6.38的源码ftp:///pub/linux/kernel/v2.6/linux-2.6.38.tar.bz22 解压#tar xvfj /mnt/ubuntu/linux-2.6.38.tar.bz2 -C .3 修改根下的Makefile#vi Makefile191行改为ARCH ?= armCROSS_COMPILE ?= arm-linux- (找到其交叉编译环境)4 生成默认配置文件#cp arch/arm/configs/s3c6400_defconfig .config(如果省略的话,后面会找不到System Type)5 修改配置项(基本配置)#make menuconfigGeneral setup->(/usr/4.5.1/bin/arm-linux-) Cross-compiler tool prefix 我将编译器解压到了/opt/Friendly/toolschain/4.5.1/bin目录(如果第三步中以修改“plier ? = arm-linux- ”此项,这步可以不作)System Type->[*] MINI6410 选上,其他的可以去掉,不确定的可以参考友善之臂的(这样编译出来的内核是可以被uboot引导的,然后是增加nand flash支持)vi arch/arm/mach-s3c64xx/mach-mini6410.c第117行struct mtd_partition mini6410_nand_part[] = {{.name = "Bootloader",.offset = 0,.size = (4 * 128 *SZ_1K),.mask_flags = MTD_CAP_NANDFLASH,},{.name = "Kernel",.offset = (4 * 128 *SZ_1K),.size = (5*SZ_1M) ,.mask_flags = MTD_CAP_NANDFLASH,},{.name = "File System",.offset = MTDPART_OFS_APPEND,.size = MTDPART_SIZ_FULL,}}; //update at 2011-8-26 经过测试发现,这里改完后根本不起作用,甚至将整个注释也无妨,估计分区已经固死在后面的s3c_nand_mlc.fo 中6 拷贝NAND FLASH驱动(将6410内核中的如下文件拷到相应的目录下)需拷贝文件:drivers/mtd/nand/s3c_nand.carch/arm/plat-samsung/include/plat/regs-nand.h 覆盖掉drivers/mtd/nand/s3c_nand_mlc.fo《s3c_nand_mlc.fo友善没有开源的一个驱动之一,所以不用研究了,拷过来就是了。
tiny6410烧写环境

1、准备SD卡uboot需要SD卡烧写器和uboot镜像下载地址为:SD卡烧写器:/detail/songlan0012/7297353sd卡uboot镜像:/detail/songlan0012/73033692、将串口转usb线硬件连接好,串口接到tiny6410开发板,usb口接到电脑,会检查到新usb硬件图一这个是串口转USB驱动没有安装,点击取消,下载安装文件:PL2303_Prolific_DriverInstaller_v110.zip(我使用的是这个硬件)。
usb转串口驱动下载地址:/detail/songlan0012/7303905安装完后在设备管理器其中查看如图(可能需要重新拔掉再插上usb接口)图二图中COM3就是了。
打开dnw(串口界面工具),下载地址:/detail/songlan0012/7297327初始状态如图:图三点击Serial Port 菜单中的Connect选项,状态如下图:图四如果如上图出现COM3,115200bps (COM3是设备管理器中的COM3可能是其他COM口编号)恭喜,至此tiny6410串口驱动安装成功。
2、制作sd卡uboot资源:需要一个大于等于4G的SD卡,格式化成FAT32格式工具:SD-Flasher.exe (SD卡烧写器)工具下载地址:/detail/songlan0012/7297353这个工具不需要安装,直接运行使用。
直接打开界面为下图:图五点击Image file to fuse输入框后面的按钮选择要烧写的superuboot镜像,镜像下载地址为:/detail/songlan0012/7303369然后点击Scan按钮,按钮左侧的显示区会显示sd卡信息,例如下图:图六这说明已经检测到了正确检测到了SD卡点击Fuse按钮烧写会出现如下图信息:图七这说明sd卡uboot烧写成功。
将sd卡插入tiny6410的sd卡插槽内,将选择sd卡或者nand启动的开关拨到SD卡启动,连接好usb转串口线,插上开发板电源线,打开DNW至图四状态,上电,DNW会显示如下图信息:图八恭喜您,sd卡中的Uboot已经启动了。
U—Boot在64位多内核MIPS处理器上的移植

启动代码一般存放在外部的非易失性存储器 上 , 例如 Fah ls 芯片 。通常不 同的处理 器 , 即便 基于相 同的架 构 , 启动 代码往 往 大相径庭 , 更何况 不 同的处理 器架构 了。例如 , I 启动代 B OS
码适合于 x 6 8 的处理器 , 河 ( n r e) 司的基 于 Vx rs 风 Widi r公 v Wok
编译、 内核 的启 动顺序 等。 多
关键 词 :MI S P ;U- o t B 0;启 动 代 码 ; 高速 缓 存
Tr ns an a i n f U . o t n 6 . i ulic r M I Pr c s o a pl t to o . o o B 4. t M b t- o e - PS o esr
0 引言
目前 , 处 理 器 架 构 呈 百 家 争 鸣 之 势 , 8 、 o eP 、 微 x6 P w rC MI S 6 x AR 、 cl等架 构纷纷在 广阔的 电子产 品市 场划 P 、8 、 M Xsae 分势力范 围。x 6 8 架构在 P C机领域 独领 风骚——虽然基于 x 6 8 的处 理 器迄今 最 多集成 4 内核 , 个 小于 MIS架构 的 3 P 2内核 。
到了业界先进 的两款 6 位多 内核 MIS 4 P 处理器上 。
1 U— o t 结构 B o的
U Bo t 新 版 本 的 源 码 可 以 从 其 官 方 网 站 (t : — o最 ht / p/ sucfrent r etu b o) o reog . / o cs - o t下载 。其 目录结 构按 功能 模块 ep j /
W U Xio h n. WANG i n a—a Ja g
(h n h iB l C . t.C G h n h i2 . 0 ,C ia S a g a el o ,Ld P ,S a g a 01 6 hn ) 2
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外其他文件夹删除掉。
03- Tiny6410刷机指南-20110810

Tiny6410 刷机指南版本:2011-08-09(本手册正在不断更新中,建议您到网站下载最新版本)copyright@2010版权声明本手册版权归属广州友善之臂计算机科技有限公司(以下简称“友善之臂”)所有, 并保留一切权力。
非经友善之臂同意(书面形式),任何单位及个人不得擅自摘录本手册部分或全部,违者我们将追究其法律责任。
敬告:在售开发板的手册会经常更新,请在网站查看最近更新,并下载最新手册,不再另行通知。
更新说明:日期说明2011-08-09 增加了低级格式NAND Flash的说明(1.3.3)2011-07-21 提供全新的Superboot,支持进度显示,无需PC实现多系统烧写。
2011-05-19 SD-Flasher工具增加了Re-format功能,可以把Re-layout重新分区过的SD卡恢复成普通卡。
2011-04-08 1.Superboot增加了对三星2代MLC Nand Flash(以下简称MLC2)的支持a)通过SD卡脱机快速烧写Linux/WinCE/Android/Ubuntu系统b)通过USB下载烧写Linux/WinCE/Android/Ubuntu系统c)自动识别SLC/MLC2 Nand Flash2.U-boot升级:增加了读取MLC2的支持(型号:K9GAG08U0E)2011-1-4 Superboot增加了“Download & Run”功能,也就是把裸机程序下载到内存中运行,示例见“2.4”章节2010-11-26 本手册第一次发布,任何问题请反馈至capbily@目录Tiny6410 刷机指南.........................................................................................................................................- 1 - 第一章 制作SD卡启动盘....................................................................................................................................- 5 -1.1 烧写BIOS到SD卡.................................................................................................................................- 6 -1.1.1 BIOS简介.....................................................................................................................................- 6 -1.1.1 基于WindowsXP烧写BIOS........................................................................................................- 7 -1.1.2 基于Windows7烧写BIOS........................................................................................................- 10 -1.1.2恢复SD卡到原始状态...............................................................................................................- 14 -1.2 体验快速安装、更新、恢复和运行系统...........................................................................................- 15 -1.2.1 通过交互式图形界面安装系统...............................................................................................- 16 -1.2.2 快速安装WindowsCE系统.......................................................................................................- 19 -1.2.3 快速更新为Android系统..........................................................................................................- 20 -1.2.4 快速恢复为Linux系统..............................................................................................................- 21 -1.2.5 在SD卡中直接运行Ubuntu系统(500M)..................................................................................- 21 -1.2.6 关于配置文件FriendlyARM.ini................................................................................................- 22 -1.3 Superboot菜单功能介绍.......................................................................................................................- 26 -1.3.1 安装USB下载驱动....................................................................................................................- 27 -1.3.2 功能主菜单说明.......................................................................................................................- 33 -1.3.3低级格式化NAND Flash...........................................................................................................- 34 - 第二章 安装和更新或运行系统.......................................................................................................................- 36 -2.1 使用USB一键安装系统.......................................................................................................................- 36 -2.1.1一键安装Linux系统(yaffs2或UBIFS格式).............................................................................- 37 -2.1.2 一键安装WinCE系统................................................................................................................- 43 -2.1.3 一键安装Android(yaffs2或UBIFS格式).................................................................................- 48 -2.2 使用SD卡脱机快速安装系统.............................................................................................................- 54 -2.2.1快速安装Linux(UBIFS格式).....................................................................................................- 54 -2.2.2 快速安装WindowsCE6.............................................................................................................- 55 -2.2.3 快速安装Android(UBIFS格式)...............................................................................................- 56 -2.2.4 快速安装Ubuntu(UBIFS格式).................................................................................................- 56 -2.3 从SD卡直接运行各个系统.................................................................................................................- 57 -2.3.1 直接运行SD卡中的Linux.........................................................................................................- 57 -2.3.2 直接运行SD卡中的WindowsCE..............................................................................................- 57 -2.3.3 直接运行SD卡中的Android.....................................................................................................- 58 -2.3.4 直接运行SD卡中的Ubuntu......................................................................................................- 58 -2.4 使用USB下载并运行裸机程序...........................................................................................................- 59 -第一章 制作SD卡启动盘完全空白的SD卡是不能直接启动6410开发板的,必须先在PC上使用特殊的烧写软件把BIOS(也可以称为bootloader)写入SD卡才可以,并且写入的这个BIOS是无法在电脑上直接看到的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Uboot_for_Tiny6410_移植步骤详解一、设计要求1.目的1)掌握U-boot剪裁编写2)掌握交叉编译环境的配置3)掌握U-boot的移植2.实现的功能1)U-boot编译成功2)移植U-boot,使系统支持从NAND FLASH启动二、设计方案1.硬件资源1)ARM处理器:ARM11芯片(SamsungS3C6410A),基于ARM1176JZF-S核设计,运行频率533Mhz, 最高可达667Mhz2)存储器:128M DDR RAM,可升级至256M;MLC NAND Flash(2GB)3)其他资源:具有三LCD接口、4线电阻触摸屏接口、100M 标准网络接口、标准DB9 五线串口、Mini USB 2.0 接口、USB Host 1.1、3.5mm音频输入输出口、标准TV-OUT 接口、SD卡座、红外接收等常用接口;另外还引出4路TTL串口,另1 路TV-OUT、SDIO2 接口(可接SD WiFi)接口等;在板的还有蜂鸣器、I2C-EEPROM、备份电池、AD可调电阻、8 个中断式按键等。
2.软件资源1)arm-linux-gcc-4.5.1(交叉编译)2)u-boot-2010.09.tar.gzarm-linux-gcc-4.5.1-v6-vfp-20101103.tgz三、移植过程1.环境搭建1)建立交叉编译环境2)去这2 个网站随便下载都可以下载得到最新或者你想要的u-boot。
(/batch.viewlink.php?itemid=1694ftp://ftp.denx.de/pub/u-boot/)下面是具体的对u-boot…的修改一:下载并解压u-boot-gxb.tar.gz。
#tar xzvf u-boot-gxb.tar.gz二:在顶层的目录下找到Makefile文件,并用gedit打开在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下面红色的为新增加的#=====================更改部分=======================================tiny6410_noUSB_config \tiny6410_config : unconfig@mkdir -p $(obj)include $(obj)board/samsung/tiny6410@mkdir -p $(obj)nand_spl/board/samsung/tiny6410@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk@if [ -z "$(findstring tiny6410_noUSB_config,$@)" ]; then \echo "RAM_TEXT = 0x57e00000" >>$(obj)board/samsung/tiny6410/config.tmp;\else \echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/tiny6410/config.tmp;\fi@$(MKCONFIG) tiny6410 arm arm1176 tiny6410 samsung s3c64xx@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk#==================================================================三: arch/arm/cpu/arm1176/s3c64xx/cpu_init.S#gedit arch/arm/cpu/arm1176/s3c64xx/cpu_init.S#include <config.h>#include <asm/arch/s3c6400.h>.globl mem_ctrl_asm_initmem_ctrl_asm_init:/* DMC1 base address 0x7e001000 */ldr r0, =ELFIN_DMC1_BASEldr r1, =0x4str r1, [r0, #INDEX_DMC_MEMC_CMD]ldr r1, =DMC_DDR_REFRESH_PRDstr r1, [r0, #INDEX_DMC_REFRESH_PRD]ldr r1, =DMC_DDR_CAS_LATENCYstr r1, [r0, #INDEX_DMC_CAS_LATENCY]ldr r1, =DMC_DDR_t_DQSSstr r1, [r0, #INDEX_DMC_T_DQSS]ldr r1, =DMC_DDR_t_MRDstr r1, [r0, #INDEX_DMC_T_MRD]ldr r1, =DMC_DDR_t_RASstr r1, [r0, #INDEX_DMC_T_RAS]ldr r1, =DMC_DDR_t_RCstr r1, [r0, #INDEX_DMC_T_RC]ldr r1, =DMC_DDR_t_RCDldr r2, =DMC_DDR_schedule_RCDorr r1, r1, r2str r1, [r0, #INDEX_DMC_T_RCD]ldr r1, =DMC_DDR_t_RFCldr r2, =DMC_DDR_schedule_RFCorr r1, r1, r2str r1, [r0, #INDEX_DMC_T_RFC]ldr r1, =DMC_DDR_t_RPldr r2, =DMC_DDR_schedule_RPorr r1, r1, r2str r1, [r0, #INDEX_DMC_T_RP]ldr r1, =DMC_DDR_t_RRDstr r1, [r0, #INDEX_DMC_T_RRD]ldr r1, =DMC_DDR_t_WRstr r1, [r0, #INDEX_DMC_T_WR]ldr r1, =DMC_DDR_t_WTRstr r1, [r0, #INDEX_DMC_T_WTR]ldr r1, =DMC_DDR_t_XPstr r1, [r0, #INDEX_DMC_T_XP]ldr r1, =DMC_DDR_t_XSRstr r1, [r0, #INDEX_DMC_T_XSR]ldr r1, =DMC_DDR_t_ESRstr r1, [r0, #INDEX_DMC_T_ESR]ldr r1, =DMC1_MEM_CFGstr r1, [r0, #INDEX_DMC_MEMORY_CFG]ldr r1, =DMC1_MEM_CFG2str r1, [r0, #INDEX_DMC_MEMORY_CFG2]ldr r1, =DMC1_CHIP0_CFGstr r1, [r0, #INDEX_DMC_CHIP_0_CFG]ldr r1, =DMC_DDR_32_CFGstr r1, [r0, #INDEX_DMC_USER_CONFIG]/* DMC0 DDR Chip 0 configuration direct command reg */ ldr r1, =DMC_NOP0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Precharge All */ldr r1, =DMC_PA0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Auto Refresh 2 time */ldr r1, =DMC_AR0str r1, [r0, #INDEX_DMC_DIRECT_CMD]str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* MRS */ldr r1, =DMC_mDDR_EMR0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Mode Reg */ldr r1, =DMC_mDDR_MR0str r1, [r0, #INDEX_DMC_DIRECT_CMD]/* Enable DMC1 */mov r1, #0x0str r1, [r0, #INDEX_DMC_MEMC_CMD]check_dmc1_ready:ldr r1, [r0, #INDEX_DMC_MEMC_STATUS]mov r2, #0x3and r1, r1, r2cmp r1, #0x1bne check_dmc1_readynop添加下面红色的代码/*===========================更改部分=============================*/#if defined(CONFIG_TINY6410)#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_DATA ((1<<7) | (1<<6) | (1<<4))#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))ldr r0, =ELFIN_SROM_BASEldr r1, [r0, #SROM_BW_REG_DATA]mov r2, #(~SROM_BW_REG_BC1)and r1, r1, r2mov r2, #SROM_BW_REG_DATAorr r1, r1, r2str r1, [r0, #INDEX_SROM_BW_REG]ldr r1, =SROM_BC1_REG_DATAstr r1, [r0, #INDEX_SROM_BC1_REG]#endif/*========================================================*/ mov pc, lr.ltorg四:修改arch/arm/cpu/arm1176/s3c64xx/Makefile# gedit arch/arm/cpu/arm1176/s3c64xx/Makefileinclude $(TOPDIR)/config.mkLIB = $(obj)lib$(SOC).aSOBJS = reset.o#COBJS-$(CONFIG_S3C6400) += cpu_init.o speed.o添加下面红色代码#==================================更改部分================================ COBJS-$(CONFIG_S3C6410) += cpu_init.o speed.o#========================================================================= COBJS-y += timer.oOBJS := $(addprefix $(obj),$(SOBJS) $(COBJS-y))all: $(obj).depend $(START) $(LIB)$(LIB): $(OBJS)$(AR) $(ARFLAGS) $@ $(OBJS)五:修改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.h#define 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建立tiny6410的文件夹,并且把smdk6400文件里面的所有文件复制过去,在修改board/samsung/tiny6410/lowlevel_init.S_TEXT_BASE:.word TEXT_BASE.globl lowlevel_initlowlevel_init:mov r12, lr/* LED on only #8 *//*=========================================更改部分========================*/ #if 0ldr r0, =ELFIN_GPIO_BASEldr r1, =0x55540000str r1, [r0, #GPNCON_OFFSET]ldr r1, =0x55555555str r1, [r0, #GPNPUD_OFFSET]ldr r1, =0xf000str r1, [r0, #GPNDAT_OFFSET]#endif/*=========================================================================*/ 将上面的红色的部分屏蔽掉wakeup_reset:/* Clear wakeup status register */ldr r0, =(ELFIN_CLOCK_POWER_BASE + WAKEUP_STAT_OFFSET)ldr r1, [r0]str r1, [r0]/* LED test *//*========================================更改部分===========================*/ #if 0ldr r0, =ELFIN_GPIO_BASEldr r1, =0x3000str r1, [r0, #GPNDAT_OFFSET]#endif/*===========================================================================*/ /* Load return address and jump to kernel */ldr r0, =(ELFIN_CLOCK_POWER_BASE + INF_REG0_OFFSET)/* r1 = physical address of s3c6400_cpu_resume function */ldr r1, [r0]/* Jump to kernel (sleep-s3c6400.S) */mov pc, r1nopnop将上面红色的部分屏蔽掉/** This was unconditional in original Samsung sources, but it doesn't* seem to make much sense on S3C6400.*//*======================================更改部分===========================*/ /*#ifndef CONFIG_S3C6400*/#if !defined(CONFIG_S3C6400) && !defined(CONFIG_S3C6410)/*=========================================================================*/ ldr r1, [r0, #OTHERS_OFFSET]bic r1, r1, #0xC0orr r1, r1, #0x40str r1, [r0, #OTHERS_OFFSET]八:修改board/Samsung/tiny6410/Makefile中include $(TOPDIR)/config.mkLIB = $(obj)lib$(BOARD).a#=============================更改部分=====================COBJS-y := tiny6410.oSOBJS := lowlevel_init.o#===========================================================SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)OBJS := $(addprefix $(obj),$(COBJS-y))SOBJS := $(addprefix $(obj),$(SOBJS))九:修改board/samsung/tiny6410/tiny6410.c屏蔽掉下面头文件;/*===========================更改部分====================================*/ #if 0#include <netdev.h>#endif/*============================================================================* /#include <asm/arch/s3c6400.h>/* ===============================更改部分====================================*/ #if 0#define CS8900_Tacs 0x0 /* 0clk address set-up */#define CS8900_Tcos 0x4 /* 4clk chip selection set-up */#define CS8900_Tacc 0xE /* 14clk access cycle */#define CS8900_Tcoh 0x1 /* 1clk chip selection hold */#define CS8900_Tah 0x4 /* 4clk address holding time */#define CS8900_Tacp 0x6 /* 6clk page mode access cycle */#define CS8900_PMC 0x0 /* normal(1data)page mode configuration */#endif/*============================================================================* /static inline void delay(unsigned long loops){__asm__ volatile ("1:\n" "subs %0, %1, #1\n""bne 1b": "=r" (loops) : "0" (loops));}/** Miscellaneous platform dependent initialisations*//*=====================================更改部分==========================*/#if 0static 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);}#endif/*=======================================================================*/int board_init(void){DECLARE_GLOBAL_DATA_PTR;/*=========================================更改部分===================*/ #if 0cs8900_pre_init();#endif/* NOR-flash in SROM0 *//* Enable WAIT */SROM_BW_REG |= 4 | 8 | 1;gd->bd->bi_arch_number = MACH_TYPE;gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;return 0;}int dram_init(void){DECLARE_GLOBAL_DATA_PTR;gd->bd->bi_dram[0].start = PHYS_SDRAM_1;gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;return 0;}#ifdef CONFIG_DISPLAY_BOARDINFOint checkboard(void){printf("Board: TINY6410\n");return 0;}#endif#ifdef CONFIG_ENABLE_MMU/*=====================================更改部分==========================*/ ulong virt_to_phy_tiny6410(ulong addr)/*=======================================================================*/ {if ((0xc0000000 <= addr) && (addr < 0xc8000000))return addr - 0xc0000000 + 0x50000000;elseprintf("do not support this address : %08lx\n", addr);return addr;}#endif/*=======================================更改部分=======================*/ #if 0ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t *info){if (banknum == 0) { /* non-CFI boot flash */info->portwidth = FLASH_CFI_16BIT;info->chipwidth = FLASH_CFI_BY16;info->interface = FLASH_CFI_X16;return 1;} elsereturn 0;}#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); /* Dummy read *//* Get most updated data,only look at bits 0:1, See application notes DM9000 */rxbyte = DM9000_inb(DM9000_DATA) & 0x03;/*========================================更改部分==========================*/ #if 1u8 temp;temp=DM9000_ior(DM9000_MRRH);temp=DM9000_ior(DM9000_MRRL);#endif红色的为增加的/*============================================================================= *//* Status check: this byte must be 0 or 1 */if (rxbyte > DM9000_PKT_RDY) {DM9000_iow(DM9000_RCR, 0x00); /* Stop Device */DM9000_iow(DM9000_ISR, 0x80); /* Stop INT request */printf("DM9000 error: status check fail: 0x%x\n",rxbyte);return 0;}十一:修改drivers/usb/host/ohci-hcd.c#ifdef CONFIG_AT91RM9200#include <asm/arch/hardware.h> /* needed for AT91_USB_HOST_BASE */#endif//=====================更改部分================#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 /* force NoPowerSwitching mode */#endif#undef OHCI_VERBOSE_DEBUG /* not always helpful */十二:include/configs/tiny6410.h/** High Level Configuration Options* (easy to change)*///======================更改部分==================================//#define CONFIG_S3C6400 1 /* in a SAMSUNG S3C6400 SoC */#define CONFIG_S3C6410 1 /* in a SAMSUNG S3C6400 SoC */ //===============================================================#define CONFIG_S3C64XX 1 /* in a SAMSUNG S3C64XX Family */#define CONFIG_SMDK6400 1 /* on a SAMSUNG SMDK6400 Board *///=========================更改部分====================================#define CONFIG_TINY6410 1//===================================================================#define CONFIG_SKIP_RELOCATE_UBOOT#define CONFIG_PERIPORT_REMAP#define CONFIG_PERIPORT_BASE 0x70000000#define CONFIG_PERIPORT_SIZE 0x13#define CONFIG_SYS_SDRAM_BASE 0x50000000/* input clock of PLL: SMDK6400 has 12MHz input clock */#define CONFIG_SYS_CLK_FREQ 12000000#if !defined(CONFIG_NAND_SPL) && (TEXT_BASE >= 0xc0000000)#define CONFIG_ENABLE_MMU#endif#define CONFIG_SETUP_MEMORY_TAGS#define CONFIG_CMDLINE_TAG#define CONFIG_INITRD_TAG/** Architecture magic and machine type*///===================更改部分=====================/*#define MACH_TYPE 1270 */#define MACH_TYPE 2520//==============================================#define CONFIG_DISPLAY_CPUINFO#define CONFIG_DISPLAY_BOARDINFO/** Size of malloc() pool*/#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 1024 * 1024) #define CONFIG_SYS_GBL_DATA_SIZE 128 /* size in bytes for initial data *//** Hardware drivers*///==========================更改部分============================ 将sc8900的网卡干掉#if 0#define CONFIG_NET_MULTI#define CONFIG_CS8900 /* we have a CS8900 on-board */#define CONFIG_CS8900_BASE 0x18800300#define CONFIG_CS8900_BUS16 /* follow the Linux driver */#endif换成下面的#define CONFIG_NET_MULTI 1#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_NO_SROM 1#define CONFIG_DM9000_USE_16BIT 1#define CONFIG_DM9000_BASE 0x18000300#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE+4)#define CONFIG_ETHADDR 08:08:10:12:10:27#define CONFIG_NETMASK 255.255.255.0#define CONFIG_IPADDR 192.168.1.253#define CONFIG_SERVERIP 192.168.1.159#define CONFIG_GATEWAYIP 192.168.1.1//=============================================================/** select serial console configuration*/#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK6400 */#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */ #ifdef CONFIG_SYS_HUSH_PARSER#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "#endif#define CONFIG_CMDLINE_EDITING/* allow to overwrite serial and ethaddr */#define CONFIG_ENV_OVERWRITE#define CONFIG_BAUDRATE 115200/************************************************************ Command definition***********************************************************/#include <config_cmd_default.h>#define CONFIG_CMD_CACHE#define CONFIG_CMD_REGINFO#define CONFIG_CMD_LOADS#define CONFIG_CMD_LOADB#define CONFIG_CMD_SAVEENV#define CONFIG_CMD_NAND#if defined(CONFIG_BOOT_ONENAND)#define CONFIG_CMD_ONENAND#endif#define CONFIG_CMD_PING#define CONFIG_CMD_ELF#define CONFIG_CMD_FAT#define CONFIG_CMD_EXT2//===========================================更改部分==================添加红色部分#undef CONFIG_CMD_IMLS//======================================================================#define CONFIG_BOOTDELAY 3#define CONFIG_ZERO_BOOTDELAY_CHECK#if (CONFIG_COMMANDS & CONFIG_CMD_KGDB)#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */#endif/** Miscellaneous configurable options*/#define CONFIG_SYS_LONGHELP /* undef to save memory */下面修改为自己喜欢的提示字符//==============================更改部分====================================== //#define CONFIG_SYS_PROMPT "SMDK6400 # " /* Monitor Command Prompt */ #define CONFIG_SYS_PROMPT "TINY6410 # " /* Monitor Command Prompt *///===========================================================================#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */#define CONFIG_SYS_PBSIZE 384 /* Print Buffer Size */#define CONFIG_SYS_MAXARGS 16 /* max number of command args */#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */#define CONFIG_SYS_MEMTEST_START C ONFIG_SYS_SDRAM_BASE /* memtest works on*/#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_SDRAM_BASE + 0x7e00000) /* 126MB in DRAM */#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE /* default load address */#define CONFIG_SYS_HZ 1000/* valid baudrates */#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }/*-----------------------------------------------------------------------* Stack sizes** The stack sizes are set up in start.S using the settings below*/#define CONFIG_STACKSIZE 0x40000 /* regular stack 256KB *//**********************************Support Clock Settings**********************************Setting SYNC ASYNC----------------------------------667_133_66 X O533_133_66 O O400_133_66 X O400_100_50 O O**********************************/提高主频//===========================================更改部分===================== #define CONFIG_CLK_667_133_66//#define CONFIG_CLK_533_133_66//========================================================================= /*#define CONFIG_CLK_400_100_50#define CONFIG_CLK_400_133_66#define CONFIG_SYNC_MODE*//* SMDK6400 has 2 banks of DRAM, but we use only one in U-Boot */#define CONFIG_NR_DRAM_BANKS 1#define PHYS_SDRAM_1 CONFIG_SYS_SDRAM_BASE /* SDRAM Bank #1 */#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB in Bank #1 */#define CONFIG_SYS_FLASH_BASE 0x10000000#define CONFIG_SYS_MONITOR_BASE 0x00000000/*-----------------------------------------------------------------------* FLASH and environment organization*/#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks *//* AM29LV160B has 35 sectors, AM29LV800B - 19 */#define CONFIG_SYS_MAX_FLASH_SECT 40#define CONFIG_AMD_LV800//===================================更改部分=========================//#define CONFIG_SYS_FLASH_CFI 1 /* Use CFI parameters (needed?) */将上面的换成下面红色的部分#define CONFIG_SYS_NO_FLASH 1 /* Use CFI parameters (needed?) *///=================================================================//=========================更改部分===================================删掉下面黄色的#if 0/* Use drivers/cfi_flash.c, even though the flash is not CFI-compliant */#define CONFIG_FLASH_CFI_DRIVER 1#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_16BIT#define CONFIG_FLASH_CFI_LEGACY#define CONFIG_SYS_FLASH_LEGACY_512Kx16/* timeout values are in ticks */#define CONFIG_SYS_FLASH_ERASE_TOUT (5 * CONFIG_SYS_HZ) /* Timeout for Flash Erase */ #define CONFIG_SYS_FLASH_WRITE_TOUT (5 * CONFIG_SYS_HZ) /* Timeout for Flash Write */ #endif//============================================================================= ==========#define CONFIG_ENV_SIZE 0x4000 /* Total Size of Environment Sector *//** SMDK6400 board specific data*///=========================================更改部分============================ //#define CONFIG_IDENT_STRING " for SMDK6400"将上面的改为下面的#define CONFIG_IDENT_STRING " for TINY6410"//============================================================================= ====/* base address for uboot */#define CONFIG_SYS_PHY_UBOOT_BASE (CONFIG_SYS_SDRAM_BASE + 0x07e00000)/* total memory available to uboot */#define CONFIG_SYS_UBOOT_SIZE (1024 * 1024)十三:修改include/common.hulong get_OPB_freq (void);ulong get_PCI_freq (void);#endif/*======================================更改部分============================*/ #if defined(CONFIG_S3C24X0) || \defined(CONFIG_LH7A40X) || \defined(CONFIG_S3C6400) || \defined(CONFIG_S3C6410) || \ 添加红色的defined(CONFIG_EP93XX)/*============================================================================= */ulong get_FCLK (void);ulong get_HCLK (void);ulong get_PCLK (void);ulong get_UCLK (void);#endif十四:修改顶层的MAKEALL########################################################################### ARM11 Systems#########################################################################LIST_ARM11=" \cp1136 \omap2420h4 \apollon \imx31_litekit \imx31_phycore \imx31_phycore_eet \mx31ads \mx31pdk \mx31pdk_nand \qong \smdk6400 \tnetv107x_evm \添加下面红色的部分/*=======================================更改部分============================*/ tiny6410 \/*===========================================================================*/ "#########################################################################十五:修改顶层的MAINTAINERS修改下面的为自己的Alex Z黳ke <azu@sysgo.de>lart SA1100dnp1110 SA1110/*==================================更改部分=============================*/ Wnn168<wnn168@>TINT6410 ARM1176JZF-S (S3C6410)/*========================================================================*/-------------------------------------------------------------------------Unknown / orphaned boards:十六:修改nand_spl/board/samsung/ tiny6410/config.mk下面的这个没有改动# FriendlyARM TINY6410 development board,based on# Samsung S3C64xx Reference Platform (smdk6400) board# TEXT_BASE for SPL:## On S3C64xx platforms the SPL is located in SRAM at 0.## TEXT_BASE = 0include $(TOPDIR)/board/$(BOARDDIR)/config.mk# PAD_TO used to generate a 4kByte binary needed for the combined image# -> PAD_TO = TEXT_BASE + 4096PAD_TO := $(shell expr $(TEXT_BASE) + 4096)ifeq ($(debug),1)PLATFORM_CPPFLAGS += -DDEBUGEndif十七:在nand_sql/board/Samsung/tiny6410 这个tiny6410是仿照上述smdk6410做的内容一样复制然后修改下面的就OKNand_sql/board/Samsung/tiny6410/Makefile# from board directory#=========================更改部分=================================== $(obj)lowlevel_init.S:@rm -f $@# @ln -s $(TOPDIR)/board/samsung/smdk6400/lowlevel_init.S $@@ln -s $(TOPDIR)/board/samsung/tiny6410/lowlevel_init.S $@#=================================================================# from nand_spl directory。