s3c6410移植android4.0
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。
S3C6410的u-boot移植

132 .global uboot_cmd_start
133 uboot_cmd_start:
134 .word __u_boot_cmd_start - _start
135 .global uboot_cmd_end
145 "ldr %0, [r0]\n"
146 "ldr r0, =uboot_cmd_end\n"
147 "ldr %1, [r0]\n"
148 "ldr %2, =_start\n"
88 #define DM9000_IO CONFIG_DM9000_BASE
89 #define DM9000_DATA (CONFIG_DM9000_BASE + 4)
90 #define CONFIG_DM9000_BUS16
在114行到117行添加如下,目的在于打开网络支持和ping命令
58 bic r1, r1, r2
59 orr Байду номын сангаас r1, r1, #0x11
60 orr r1, r1, #0x1100
61 str r1, [r0]
62 /* LED ALL ON */
sizeof(cmd_tbl_t));
154 // return find_cmd_tbl(cmd, &__u_boot_cmd_start, len);
155 }
八、修改u-boot-2012.04/include/configs/smdk6400.h
把81到83行注释掉,目的是取消CS8900网卡
基于S3C6410的u-boot SD卡启动方式的分析与移植

U-Boot SD卡启动方式的分析与移植——基于S3C6410平台摘要:BootLoader在嵌入式系统的开发及产品升级过程中有重要作用。
U-Boot以其结构清晰、功能强大、跨平台支持等优势而应用广泛,同时结合SD卡设备方便携带、操作简单的特点,本文分析了U-Boot SD卡启动原理并进行了实际移植工作,在U-Boot中增加了SD卡启动的支持。
实验结果表明使用本文的方法可正确实现U-Boot的SD卡启动,并可进行操作系统内核的加载。
关键词:U-Boot SD卡启动1 前言近年来,伴随着信息技术与电子技术的高速发展,嵌入式技术已经被广泛地应用于人们日常的生产生活中,以嵌入式处理器为核心的各种智能终端不断出现,这些智能终端大都安装有嵌入式操作系统以支持更多功能丰富的应用程序。
随着科技的不断进步以及终端设备功能的不断加强,智能终端已经可以被视为一台微型的计算机系统。
类似于通用的PC机操作系统,嵌入式操作系统也需要在硬件设备初始化后由引导加载程序将系统内核加载至内存中运行。
通用Bootloader(universal boot loader,U-Boot)是遵循GPL条款的开放源代码项目,它不仅可以引导多种操作系统,同时还支持多种体系架构的CPU。
U-Boot代码结构清晰,功能丰富,具有良好的网络技术支持,同时移植方便,这些特点使得U-Boot在嵌入式系统中获得了广泛的应用。
S3C6410是三星公司推出的一款基于ARM11架构的通用嵌入式处理器,该款处理器性能卓越,接口丰富,能够满足大多数嵌入式设备的需求。
因此,本文首先介绍了U-Boot的工作原理,然后基于S3C6410处理器进行了U-Boot硬件相关部分的分析与移植,并且添加了U-Boot目前尚未支持的SD卡启动模式的代码。
2 U-Boot工作原理2.1 U-Boot代码结构简介U-Boot的源码目录结构比较简单,大部分目录通过其名字就可获知该目录下源码功能的信息。
嵌入式设计报告--基于ARM6410的Qtopia 4.4.3的移植

嵌入式技术基础基于ARM6410的Qtopia 4.4.3的移植(嵌入式设计报告)院( 系 ) 信息工程学院专业名称班级学号学生姓名指导教师二O一一年六月摘要图形用户界面的广泛应用是当今计算机技术的重大成就之一,它极大地方便了非专业用户的使用。
在嵌入式系统中,GUI(图形用户界面)是嵌入式实时操作系统的重要组成部分,作为人机互交技术的重要内容,以其丰富的图形图像信息和直观的表达方式与用户互交,被越来越多的嵌入式系统所采用,现在已经成为当今嵌入式领域的发展焦点。
虽然市场上现在已经有了众多的优秀的GUI应用软件,但随着近年来计算机技术的迅速发展,当新硬件、新技术出现时,计算机的体系结构、指令系统和操作系统都可能发生相应的改变,这势必会导致一部分应用软件在新环境下无法正常运行。
如果舍弃原有软件而重新开发,将会耗费大量的人力和资金,而且浪费了许多成熟的软件成果。
而Qt在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。
Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行。
这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。
因此,基于Qt的嵌入式应用程序开发是一个非常有意义的课题,完成了嵌入式图形用户界面开发良好的人机交互界面是嵌入式系统设计的一个关键技术,具有一定的实用意义和价值。
关键词:嵌入式QT 图形用户界面人机交互目录摘要 (II)1.绪论 (1)1.1 课题研究背景和意义 (1)1.2 嵌入式技术发展现状 (2)1.3 嵌入式的发展趋势 (2)2.Qt开发工具简介 (4)2.1 Linux的简介 (4)2.2 QT 的简介 (5)2.3Q t编程机制简介 (5)2.4 常用的两种用户图形界面的简介 (8)3.处理器的概述 (9)4.Qtopia 4.4.3的移植设计 (10)4.1Tslib 1.4的编译 (10)4.2Qtopia4.4.3的编译 (12)4.3Qtopia4.4.3的使用 (13)4.4运行Qtopia4.4.3 (14)4.5Qtopia4.4.3的演示效果 (15)5总结 (16)6参考文献 (17)附录一网络文件系统的挂载 (19)1.绪论1.1 课题研究背景和意义随着嵌入式产品的发展,往往要求嵌入式操作系统有网络和图形的功能。
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友善没有开源的一个驱动之一,所以不用研究了,拷过来就是了。
平板电脑MID 10种ARM芯片方案对比分析

下面介绍的这几款芯片是下一代的产品,采用Cortex-A8,是基于armv7架构的一款处理器,号称是4倍于ARM9,具备超低功耗的性能,运行速度最高可达到1GHz。这些杀手级的产品,配合Android2.2,哇哈哈哈哈....
七、TI OMAP3530,从官网上查到的资料,主频只为600MHz,但也是基于Cortex-A8内核,最高支持到720P高 (PXA166,PXA310),马威尔是一家美国的芯片公司,据说公司创使人之一是一位女性华人,06年收购了Intel XScale应用处理器业务,而名声大燥。PXA166基于ARM 11内核开发,最高到800MHz主频。目前平板上多是用256M内存和Android1.6系统。可以升级到2.1/2.2,升级后的性能目前还不太清楚。整体性能平均,但视频处理上还是达不到720P。盛大最近推出的bambook电子书,就是采用PXA310芯片。
升级版的TCC 8900芯片在年内将会上市,主频将会提升到1GHz,基于ARM11核,目前还没有更多的资料。
六、主频达1至1.2GMHz的ZT-180处理器。卓尼斯(ZeniThink)是一家位于深圳南山麻雀岭工业区的平板电脑厂商,卓尼斯ZT-180平板电脑面市后,其处理器ZT-180亦受业界关注。凭心而论,卓尼斯的ZT-180平板电脑是采用了跟苹果iPad同样尺寸的10寸屏,确实在视觉体验上要比其它千元RMB价格或以内的7寸屏平板电脑要好一些。但目前外界有两方面的质疑,一是他们的ZT-180处理器到底采用了ARM11还是cortex A8的核,二是该公司的主控芯片是否真如业界传闻,是上海盈方微5月刚开发的IX 2X0系列主控芯片,更是有待查明。
瑞芯微Rockchip 2818即将上市。是RK2808的升级版,基于ARM11内核,主频还是为600MHz,操作系统使用的是Android 2.1,内存支持128M-512M DDR,屏幕分辨率最高可支持到1024x600。性能虽然提升有限,但最大的优势是芯片价格和RK2808相当,加量不加价。
最新10款平板电脑上的ARM芯片竞争分析

10款平板电脑上的A R M芯片竞争分析10款平板电脑上的ARM芯片竞争分析一、VIA的WonderMedia WM8505处理器,基于ARM9内核,主频为400MHz,内存128M,系统使用的是Android 1.73,实际上是基于Android1.6再开发。
性能不敢恭维,最大的优势是超低价格,代表作是国美的飞触平板电脑。
二、三星S3C6410主控芯片,基于ARM11,主频为667MHz。
256M DDR内存,使用Android1.6系统,可以升级到2.1,但运行性能会大幅下降,1.6才是最佳的搭配系统。
支持720×480,30帧/秒的视频,支持AVI、MP4、3GP、MOV、ASF、WMV、MPEG、MKV、FLV等文件格式。
采用该方案经典的机型就是魅族M8,目前山寨平板也有采用该方案,但是视频播放还没完全优化好。
性能和瑞芯微的RK2808在同一档次,但视频方面不如。
三、瑞芯微电子(Rockchip)的2808。
瑞芯微2808 ARM9 @ 600 MHz + DSP双核 @600MHz。
现在用于Apad iRobot,操作系统彩的是Android 1.5。
7寸屏,800×480分辨率,内存128M。
视频播放最高分辨率720P,支持MKV(H.264HP),AVI、WMA、RMVB、 MPEG_1,2,3。
该机子可以升级到2.1,但由于只支持128M SDR内存,升级以后运行起来注定是悲剧。
瑞芯微Rockchip 2818,即将上市。
是RK2808的升级版,基于ARM11内核,主频还是为600MHz,操作系统使用的是Android 2.1,内存支持128M-512M DDR,屏幕分辨率最高可支持到1024×600。
性能虽然提升有限,但最大的优势是芯片价格和RK2808相当,加量不加价。
四、Marvell ARMADA (PXA166,PXA310),马威尔是一家美国的芯片公司,据说公司创使人之一是一位女性华人,06年收购了Intel XScale应用处理器业务,而名声大燥。
GT8xx多芯片模组应用于Android平台驱动移植说明书V1.5

GT8xx 多芯片模组应用于Android 平台驱动移植说明书V1.5【程序总揽】本程序针对Android2.1系统,移植的硬件平台为华天正科技开发的Real6410(基于S3C6410)。
本驱动支持多指,通过编译宏开关能够支持三种运行方式;能够在系统支持的情况下在主控进入关屏状态时自动调整GT8XX 工作状态,达到省电的目的。
1.1 系统硬件资源使用 资源类型GOODIX 演示主控配置 作用外部中断(可选,建议使用)硬件IO :S3C64XX_GPL(10)接收GT8XX 的数据中断,通知系统运行相应的坐标处理; 在GT8XX 睡眠时用作唤醒管脚 系统中断号:119((外部中断18),触发类型可通过配置信息控制IO 口(Reset )(可选)154(S3C64XX_GPF(3)),配置为输出控制控制GT8XX 运行状态,硬件复位GT8XX (低有效) I2C 适配器(SCL 、SDA )I2C-0GT8XX 控制、数据传输注:如需要支持GT8XX 的睡眠功能,则INT 管脚和Reset 必选其一。
1.2 系统运行流程为了便于移植,程序中采用了中断、中断+不定时查询和轮询三种方式,程序根据编译宏自动选择方式。
以边沿触发中断方式为例,系统的主运行流程如下所示:1. 创建GT8XX 对应的i2c_client 对象,其中完成了该适配器的相关信息设置(name ,address 等);2.加载触摸屏驱动,注意该驱动必须在I2C 总线驱动已经加载的情况下才能进行,否则I2C 通信将出错。
程序中将其加载优先级设为最低; 3.创建驱动结构体,探测GT8XX 设备,并将其挂载到I2C 总线驱动上;测试I2C 通信,注册input 设备,申请IO 口和中断资源,完成GT8XX 初始化工作; 4. 开启触摸屏中断,等待数据接收; 5. 收到触摸屏数据中断,关中断; 6. 通过I2C 传输数据,分析手指信息,;7. 更新按键信息,上报手指坐标、按键等信息,开中断; 8.重复4-7之间的循环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S3c6410移植android 4.0
1,搭建androod4.0编译环境
按照官网上的步骤:
这里要值得注意一点,推荐大家用ubuntu 10.04和10.10 64位的系统,因为这个版本的系统的Python 和gcc的版本和官网上要求都是一致的。
Ubuntu10.10下载sun-java5-jdk的时候可能会出现以下问题:
:E: 软件包sun-java6-jdk 没有可供安装的候选者
解决方法:
$ sudo add-apt-repository "deb /ubuntu/ hardy multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
下载android4.0编译所依赖的包:
这个我官网上配置
USB我不知道是为什么,但是我还是按照他说的配置了:这样在/etc/udev/rules.d/51-android.rule应该有个文件。
2,下载源码
按照官网上的步骤下载可能会出现几个错误:
1>,命令的时候:
repo init -u git:///platform/manifest.git
终端提示以下错误:
Traceback (most recent call last):
File "/home/helei/bin/repo", line 603, in <module>
main(sys.argv[1:])
File "/home/helei/bin/repo", line 570, in main
_Init(args)
File "/home/helei/bin/repo", line 184, in _Init
_CheckGitVersion()
File "/home/helei/bin/repo", line 213, in _CheckGitVersion
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
File "/usr/lib/python2.6/subprocess.py", line 623, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
原因是没有安装git,执行以下命令:
sudo apt-get install git
sudo apt-get install git-core
2>,但是当使用命令repo syns的时候总是失败DownloadError: : <urlopen
error [Errno 110] Connection timed out>
其实官网(/source/downloading.html)有段说明,如果认真执行就可解决。
1,先按官网的步骤一步步执行
2,当遇到上述问题后,用浏览器登录https:///new-password,并用gmail 帐号登录;
3,点击网页上的“允许访问”,得到类似的结果:
machine login git-<userName> password <password>
machine login git-<userName> password <password>
将上边的两行追加到~/.netrc文件结尾。
(如果你的linux系统中从来没有建立过此文件,就在home目录下建立.netrc文件,将上面的信息加到新建的文件中去),
4,下载地址的URI更改为https:///a/platform/manifest(中间加上“/a”)。
5,然后执行repo sync就可以正常下载了
因为访问基本是匿名的,为了防止连接过多,对同一IP地址的连接数做了一定的限制。
用gmail帐号进行认证。
3,修改源码使其支持s3c6410
1>,修改/WORKING_DIRECTORY/build/target/board/generic下的BoardConfig.mk 文件:
pillar@Pillar:~/WORKING_DIRECTORY/build/target/board/generic$ gedit BoardConfig.mk
修改以下内容:
TARGET_ARCH_VARIANT := armv5te-vfp
TARGET_CPU_ABI := armeabi
TARGET_CPU_ABI2 := armeabi
2>,修改external/webrtc/src/common_audio/signal_processing_library/main/interface/spl_inl.h文件,具体的修复方法在
https:///TeamICS/android_external_webrtc/commit/03dad79b60592ddcaa1512a b791c925216710f3d#diff-0可以找到,修改的内容如下:
如果修改不好就会出现一下错误:
/tmp/ccpSksGM.s:208: Error: selected processor does not support `qadd16 ip,r0,r3'
/tmp/ccpSksGM.s:236: Error: selected processor does not support `qadd16 r9,r4,r9'
/tmp/ccpSksGM.s:253: Error: selected processor does not support `qadd16 ip,ip,r4'
make: ***
[out/target/product/generic/obj/STATIC_LIBRARIES/libwebrtc_spl_intermediates/auto_corr_to_refl_coef.o] 错误 1
make: *** 正在等待未完成的任务....
4>,编译源码:
按照官网上的步骤编译:
从配置信息可以看出我这里编译的架构类型
由于我电脑装的是64位的系统但是内存只有3G,在编译过程中出现了几次错误,电脑卡死的情况,由于当时电脑卡死了,所以错误就没有记录下来,没有办法只好重启电脑重新编译,这里要注意一点,重新编译的时候,不要直接make -j4,要重新运行脚本文件,其实这里的脚本文件就是设置环境变量,这里总结一点,在编译过程中先要把环境搭好,可以用env命令查看当前的环境变量。
只要环境环境变量设置好了,在编译过程中不要轻易修改源代码。
编译应该是很顺利的。
对于像我这种内存只有3G的情况,推荐大家添加一个swap 设置大小4G左右
编译完了之后就会生成以下文件:
模拟器在
WORKING_DIRECTORY/out/host/linux-x86/bin
执行./emulator -verbose -show-kernel -shell -debug-enable -trace test就可以模拟了。