uboot移植步骤介绍

uboot移植过程1.修改Makefile首先给要建立的S3C2410开发板取名为TE2410, 移植uboot时以smdk2410为模板,修改Makefile#tar xvjf u-boot-1.1.3.tar.bz2#cd u-boot-1.1.3#vi Makefilescb9328_config : unconfig@./mkconfig $(@:_config=) arm arm920t scb9328 NULL imxsmdk2400_config : unconfig@./mkconfig $(@:_config=) arm arm920t smdk2400 NULL s3c24x0smdk2410_config : unconfig@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0SX1_config : unconfig@./mkconfig $(@:_config=) arm arm925t sx1te2410_config : unconfig@./mkconfig $(@:_config=) arm arm920t te2410 NULL s3c24x0蓝色字体是添加的内容。

其中,te2410_config : unconfig意思是为TE2410建立一个编译项,@./mkconfig $(@:_config=) arm arm920t te2410 NULL s3c24x0中的arm表示CPU的架构是基于ARM体系结构的;arm920t表示CPU类型是arm920t;te2410是开发板的型号;NULL表示开发商或经销商的名称为空;s3c24x0表示是基于s3c24x0的片上系统。

2.在uboot的board目录下建立te2410开发板子目录#cp –fr board/smdk2410 /board/te2410#cd board/te2410#mv smdk2410.c te2410.c还要修改board/te2410/Makefile文件,OBJS := smdk2410.o flash.o -------- OBJS := te2410.o flash.o3.在include/configs目录下建立te2410.h头文件#cd include/configs#cp –fr smdk2410.h te2410.h4.指定交叉编译器的路径选择支持softfloatpoint的交叉编译器,在etc/bashrc文件中添加一行exportPATH=/home/newdisk/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linu x-gnu/bin:$PATH其中,/home/newdisk/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu /bin是交叉编译器路径修改Makefile中的交叉编译器ifeq ($(ARCH),arm)CROSS_COMPILE = arm-softfloat-linux-gnu-Endif5.测试编译#cd u-boot-1.1.3#make te2410_config#make如果编译正确,将会在u-boot-1.1.3目录下生成u-boot、u-boot.bin、u-boot.srec 三个文件,其中u-boot是ELF格式二进制的image文件,u-boot.bin是原始的二进制image文件,u-boot.srec是Motorola S-Record格式的image文件。

接下来的工作就是根据开发板的硬件配置来修改。

6.修改start.S文件首先在ldr pc, _start_armboot一行之前添加如下代码,将程序从Flash复制到DRAM中运行#ifdef CONFIG_S3C2410_NAND_BOOTbl copy_myself@jump to ramldr r1, =on_the_ramadd pc, r1, #0nopnop1:b 1b @infinite loopon_the_ram:#endif然后在_start_armboot: .word start_armboot一行之后添加下面内容#ifdef CONFIG_S3C2410_NAND_BOOTcopy_myself:mov r10, lr@reset NANDmov r1, #NAND_CTL_BASEldr r2, =0xF830 @initial valuestr r2, [r1, #oNFCONF]ldr r2, [r1, #oNFCONF]bic r2, r2, #0x800 @enable chipstr r2, [r1, #oNFCONF]mov r2, #0xFF @reset commandstrb r2, [r1, #oNFCMD]mov r3, #0 @wait1:add r3, r3, #0x1cmp r3, #0xablt 1b2:ldr r2, [r1,#oNFSTAT] @wait readytst r2, #0x01beq 2bldr r2, [r1, #oNFCONF]orr r2, r2, #0x800 @disable chipstr r2, [r1, #oNFCONF]@get ready to call C functions(for nand_read())ldr sp, DW_STACK_START @setup stack pointermov fp, #0 @no previous frame,so fp=0@copy uboot to ramldr r0, =UBOOT_RAM_BASEmov r1, #0mov r2, #0x30000bl nand_read_lltst r0, #0x0beq ok_nand_read#ifdef CONFIG_DEBUG_LLbad_nand_read:ldr r0, STR_FAILldr r1, SerBasebl PrintWord1:b 1b @infinite loop#endifok_nand_read:#ifdef CONFIG_DEBUG_LLldr r0, STR_OKldr r1, SerBasebl PrintWord#endif@verifym ov r0, #0l dr r1, =UBOOT_RAM_BASEm ov r2, #0x400go_next:l dr r3, [r0], #4l dr r4, [r1], #4t eq r3, r4b ne notmatchs ubs r2, r2, #4b eq done_nand_readb ne go_nextnotmatch:#ifdef CONFIG_DEBUG_LL ldr r0, STR_FAILldr r1, SerBasebl PrintWord#endif1: b 1bdone_nand_read:#ifdef CONFIG_DEBUG_LL ldr r0, STR_OKldr r1, SerBasebl PrintWord#endifm ov pc, r10@ clear memory@ r0:start address@ r1:lengthmem_clear:mov r2, #0mov r3, r2mov r4, r2mov r5, r2mov r6, r2mov r7, r2mov r8, r2mov r9, r2clear_loop:stmia r0!,{r2-r9}subs r1, r1, #(8*4)bne clear_loopmov pc, lr#endif /*CONFIG_S3C2410_NAND_BOOT*/在start.S文件最后添加下面几行的内容,用于定义栈地址变量#ifdef CONFIG_S3C2410_NAND_BOOT.align 2DW_STACK_START:.word STACK_BASE+STACK_SIZE-4#endif7.添加nand_read.c和nandflash.h源文件在start.S中调用了nand_read_ll函数,该函数用于NAND Flash读操作,在board/te2410目录下新建nand_read.c源文件,文件内容如下:#include<config.h>#define __REGb(x) (*(volatile unsigned char *)(x))#define __REGi(x) (*(volatile unsigned int *)(x))#define NF_BASE 0x4e000000#define NFCONF __REGi(NF_BASE+0x0)#define NFCMD __REGb(NF_BASE+0x4)#define NFADDR __REGb(NF_BASE+0x8)#define NFDATA __REGb(NF_BASE+0xc)#define NFSTAT __REGb(NF_BASE+0x10)#define BUSY 1inline void wait_idle(void){int i;while(!(NFSTAT & BUSY))for(i=0;i<10;i++);}#define NAND_SECTOR_SIZE 512#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE-1)/*low level nand read function*/int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size) {int i,j;if ((start_addr & NAND_BLOCK_MASK)||(size & NAND_BLOCK_MASK)){return -1; /*invalid alignment*/}/*chip enable*/NFCONF &= ~0x800;for(i=0; i<10; i++);for(i=start_addr; i<(start_addr+size);){/*Read0*/NFCMD = 0;/*Write Address*/NFADDR = i& 0xFF;NFADDR = (i>>9) & 0xFF;NFADDR = (i>>17) & 0xFF;NFADDR = (i>>25) & 0xFF;wait_idle();for(j=0; j<NAND_SECTOR_SIZE; j++, i++){*buf = (NFDATA & 0xFF);buf++;}}/*chip disable*/NFCONF |= 0x800;return 0;}修改board/te2410目录下的Makefile文件OBJS := te2410.o flash.o 改为 OBJS := te2410.o flash.o nand_read.o 在board/te2410目录下添加nandflash.h文件,该文件主要定义了NAND Flash的一些芯片配置函数,代码如下:#include<s3c2410.h>#if (CONFIG_COMMANDS & CFG_CMD_NAND)typedef enum{NFCE_LOW,NFCE_HIGH}NFCE_STATE;static inline void NF_Conf(u16 conf ){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();nand->NFCONF = conf;}static inline void NF_Cmd(u8 cmd){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();nand->NFCMD = cmd;}static inline void NF_CmdW(u8 cmd){NF_Cmd(cmd);udelay(1);}static inline void NF_Addr(u8 addr){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();nand->NFADDR = addr;}static inline void NF_SetCE(NFCE_STATE s){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();switch(s){case NFCE_LOW:nand->NFCONF &= ~(1<<11);break;case NFCE_HIGH:nand->NFCONF |= (1<<11);break;}}static inline void NF_WaitRB(void){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();while( !(nand->NFSTAT & (1<<0)) );}static inline void NF_Write(u8 data){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();nand->NFDATA = data;}static inline u8 NF_Read(void){S3C2410_NAND *const nand = S3C2410_GetBase_NAND();return (nand->NFDATA);}static inline void NF_Init_ECC(void){S3C2410_NAND * const nand = S3C2410_GetBase_NAND();nand->NFCONF |= (1<<12);}static inline u32 NF_Read_ECC(void){S3C2410_NAND *const nand = S3C2410_GetBase_NAND();return (nand->NFECC);}#endif8.修改te2410文件修改这个文件的目的有两个,一是初始化CPU相关的寄存器来支持USB主从设备,二是初始化NAND Flash设备。

合集下载

Tiny6410_Uboot移植步骤详解

Tiny6410_Uboot移植步骤详解

#include <config.h> #include <asm/arch/s3c6400.h>
.globl mem_ctrl_asm_init mem_ctrl_asm_init:
/* DMC1 base address 0x7e001000 */ ldr r0, =ELFIN_DMC1_BASE
#tar xzvf u-boot-gxb.tar.gz
二:在顶层的目录下找到 Makefile 文件,并用 gedit
打开
在 Makefile 中找到下面代码进行修改
########################################################################
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
ldr r1, =DMC_DDR_t_RFC ldr r2, =DMC_DDR_schedule_RFC orr r1, r1, r2 str r1, [r0, #INDEX_DMC_T_RFC]
ldr r1, =DMC_DDR_t_RP ldr r2, =DMC_DDR_schedule_RP orr r1, r1, r2 str r1, [r0, #INDEX_DMC_T_RP]

UBOOT移植1

UBOOT移植1

移植u-boot-2011.03到S3C2440(utu2440)方法与步骤###1. 配置和初步编译摘要:在2011年的时候,本人把u-boot-2011.03成功移植到了S3C2440(utu2440开发板)上。

通过这次移植使自己对u-boot有了较深刻的理解并掌握了u-boot 的移植。

对于未移植过u-boot的人来说,可能觉得很神秘,甚至觉得很难。

实际上,从整个移植过程来看,并未想像中那么难。

如果你接触过嵌入式linux的开发,我觉得移植u-boot并不是难事,至少没想象中的难。

reille博客作为技术分享、技术交流的个人博客,把自己移植u-boot-2011.03的过程、遇到的问题及解决方法作为一个系列专题分享出来。

希望对正在移植u-boot的人有用。

本节主要介绍u-boot-2011.03的配置和初步编译。

开发环境:主机:Window XP SP2;linux:VMware7.01+ubuntu9.10;目标板:扬创utu2440-F开发板交叉编译器:arm-linux-gcc4.3.2(一开始用的是编译内核的版本arm-linux-gcc3.4.1,但出现了软浮点问题,于是换成了现在用的版本,当然本人编译内核的时候还是用3.4.1版本)。

1. 下载uboot源码:u-boot-2011.03本来想移植最新版本u-boot-2011.06,但见其还在修改中,故改为移植u-boot-2011.03,其源码可从如下地址中下载:ftp://ftp.denx.de/pub/u-boot/ 2. 裁减和配置2.1 裁减:1). 删除u-boot-2011.03/arch目录下除arm目录外的所有目录;2). 删除u-boot-2011.03/arch/arm/cpu目录下除arm920tmulu外的所有目录;3). 删除u-boot-2011.03/arch/arch/arm/cpu/arm920t目录下除s3c24x0目录外的所有目录,注:文件不要删;4). 删除u-boot-2011.03/arch/arm/include/asm目录下除arch-s3c24x0目录外的所有arch-xxxx目录,注:文件不要删;5). 删除u-boot-2011.03/board目录下除samsung目录外的所有目录;6). 删除u-boot-2011.03/board/samsung目录下除smdk2410目录外的所有目录;7). 删除u-boot-2011.03/include/configs目录下除smdk2410.h文件外的所有头文件。

路由器编程器固件ubnt的uboot提取和嫁接的方法

路由器编程器固件ubnt的uboot提取和嫁接的方法

路由器编程器固件ubnt的uboot提取和嫁接的方法路由器的第三方固件有很多种,其中有一种是ubnt固件。

在编程器使用过程中,很多固件的uboot的大小是128kb,(比如openwrt)但是ubnt的是256kb.256换算成字节是1024*256=262144.所以要截取ubnt的uboot就要截取ubnt固件的前262144字节,换算成16进制是40000.注意了,如果你截取40000就错了,应该是截取262143,换算成16进制是3ffff.具体方法如图,打开winhex然后点编辑,再点定义段,这里填写3ffff,意思是选择3ffff之前所有的内容。

点确定,被选的uboot部分就被涂上深色。

然后再点编辑,点复制快,点到新文件,就保存好了。

同样,如果想把提取的uboot嫁接到另一个固件上,也可以用winhex。

首先,将一个有uboot的固件的uboot删除,方法是在定义块以后,点击编辑,再点移除。

这样uboot就没有了。

此时不要关闭这个没有uboot的固件。

同时打开你提取的uboot文件,点击编辑,再点击全选,再点击复制块,再点击正常。

下一步,点开没有uboot的固件,确保光标停留在第一个字节,也就是文件的开始位置。

点击编辑,点击剪贴板数据,点击黏贴。

这样就将uboot嫁接到了另一个固件上。

很多cfe或者其他路由器里在dd或tt下备份的cfe都直接刷. ...基本都是直接刷.2.全直接刷.[还没见过jtag备份cfe,jtag的备份的固件不能刷,但好像没见有单独放的cfe]ttl或网页,编程器(编程器一般备份的是全固件的)都能直接刷3.编程器先清空flash 然后查空,如果查空提示非全空的话要么芯片坏了要么没焊接好.全空的话就读入cfe或固件然后编程.编程后半段会自动校验数据是否正确,如果没校验自己手动点校验;校验正常就可以焊接到路由了.一般编程器备份固件是整个flash芯片备份的,也就是cfe带固件一起的.。

uboot——官网下载直接移植(一)

uboot——官网下载直接移植(一)

uboot——官⽹下载直接移植(⼀)1:uboot下载地址:ftp://ftp.denx.de/pub/u-boot/我们下载的版本是:u-boot-2013.10.tar.bz2;2:下载好以后,删除⾥⾯的相关⽂件因为三星是的s5pv1XX这个cpu做了很多个板⼦,我们在移植的时候虽然与三星的开发板不同但是⽤的cpu是相同的,所以我们再选择cpu相关⽂件的时候,要确定好哪个cpu与我们⽤的cpu是相同的,u-boot-2013.10\arch\arm\cpu\armv7\s5pc1xx 在⽬录下有s5pc1xx相关的配置⽂件;这就是我们要选⽤的cpu⽂件;3:相较与我们直接移植三星移植好的uboot,新版的uboot编译配置时有所不同;把主Makefile与board有关的配置信息⽂件分开了;我们可以根据board.cfg⽂件中的配置信息来确定我们⽤的是哪个开发板;打开board.cfg⽂件搜索s5pc1xx我们可以看到两个相关的开发板,goni、smdk100,我们先⽤goni开发板来进⾏移植;⾸先删除其它的⽆关⽂件:arch⽬录下:只保留arm⽂件夹;arm/cpu⽬录下的出armv7⽂件夹以外其他删除;arm/cpu/armv7⽬录下保留s5pc1xx 以及s5p_common这两个⽂件夹,其他的删除;board⽬录下:board⽬录下只保留samsung⽂件夹samsung⽬录下只保留goni、common⽂件夹之后⽤sourceinsight创建项⽬4:对主Makefile进⾏分析,之前我们make的时候⾸先要进⾏配置:make x210_sd_config,⽽在新uboot中的配置依赖于下⾯这个规则:我们进⾏配置的时候make s5p_goni_config 然后执⾏下⾯这段脚本相当于执⾏ ./mkcofig -A s5p_goniMKCONFIG变量还是mkconfig脚本,下⾯我们看⼀下mkconfig脚本如何⼯作:下⾯这段代码的作⽤:1if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then2 # Automatic mode3 line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' boards.cfg`4if [ -z "$line" ] ; then5 echo "make: *** No rule to make target \`$2_config'. Stop." >&26 exit 17 fi89set ${line}10 # add default board name if needed11 [ $# = 3 ] && set ${line} ${1}12 fi判断传参是否两个且第⼀个参数为 -A,如果是则对line赋值,line的值是通过在boards.cfg⽂件中查找第⼆个参数$2,并把这⼀⾏赋值给line,从前⾯内容我们可以看出line = Active arm armv7 s5pc1xx samsung goni s5p_goni -并且把这些由空格分开的字符赋值给$1-$8所以这段代码执⾏完以后的结果是:$1 = Active$2 = arm$3 = armv7$4 = s5pv1xx$5 = samsung$6 = goni$7 = s5p_goni$8 = -继续分析下⾯代码:这段代码实际中没有起到什么作⽤可忽略1while [ $# -gt 0 ] ; do2case"$1"in3 --) shift ; break ;;4 -a) shift ; APPEND=yes ;;5 -n) shift ; BOARD_NAME="${7%_config}" ; shift ;;6 -t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;7 *) break ;;8 esac9 done1011 [ $# -lt 7 ] && exit 112 [ $# -gt 8 ] && exit 1下⾯代码:CONFIG_NAME="${7%_config}"[ "${BOARD_NAME}" ] || BOARD_NAME="${7%_config}"arch="$2"cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $1}'`spl_cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $2}'`if [ "$6" = "-" ] ; thenboard=${BOARD_NAME}elseboard="$6"fi[ "$5" != "-" ] && vendor="$5"[ "$4" != "-" ] && soc="$4"[ $# -gt 7 ] && [ "$8" != "-" ] && {# check if we have a board config name in the options field# the options field mave have a board config name and a list# of options, both separated by a colon (':'); the options are# separated by commas (',').## Check for board nametmp="${8%:*}"if [ "$tmp" ] ; thenCONFIG_NAME="$tmp"fi# Check if we only have a colon...if [ "${tmp}" != "$8" ] ; thenoptions=${8#*:}TARGETS="`echo ${options} | sed 's:,: :g'` ${TARGETS}"fi}config_name = s5p_goni_configBOARD_NAME = s5p_goni_configarch = armcpu = armv7spl_cpu = " "board = gonivendor = samsungsoc = s5pc1xx看下⾯信息:在这⾥第⼀打印出信息:Configuring for s5p_goni_config board...if [ "${ARCH}" -a "${ARCH}" != "${arch}" ]; thenecho "Failed: \$ARCH=${ARCH}, should be '${arch}' for ${BOARD_NAME}"1>&2exit 1fiif [ "$options" ] ; thenecho "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${options}" elseecho "Configuring for ${BOARD_NAME} board..."fi创建头⽂件的符号连接:if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/arch/${arch}/include/asm asmLNPREFIX=${SRCTREE}/arch/${arch}/include/asm/cd ../includemkdir -p asmelsecd ./includerm -f asmln -s ../arch/${arch}/include/asm asmfirm -f asm/archif [ -z "${soc}" ] ; thenln -s ${LNPREFIX}arch-${cpu} asm/archelseln -s ${LNPREFIX}arch-${soc} asm/archfiif [ "${arch}" = "arm" ] ; thenrm -f asm/procln -s ${LNPREFIX}proc-armv asm/procfi符号连接1:/include/asm 连接到 /arch/arm/include/asm符号连接2: /include/asm/arch链接到 /arch/arm/include/asm/arch-s5pc1xx 符号链接3: /include/asm/proc链接到/arch/arm/include/asm/proc-armv看⼀下下⾯的代码:## Create include file for Make#( echo "ARCH = ${arch}"if [ ! -z "$spl_cpu" ] ; thenecho 'ifeq ($(CONFIG_SPL_BUILD),y)'echo "CPU = ${spl_cpu}"echo "else"echo "CPU = ${cpu}"echo "endif"elseecho "CPU = ${cpu}"fiecho "BOARD = ${board}"[ "${vendor}" ] && echo "VENDOR = ${vendor}"[ "${soc}" ] && echo "SOC = ${soc}"exit 0 ) > config.mk这段代码的作⽤是把ARCH = armCPU = armv7BOARD = gonivendor = samsungsoc = s5pc1xx 输出config.mk⽂件中看下⾯代码:# Assign board directory to BOARDIR variableif [ -z "${vendor}" ] ; thenBOARDDIR=${board}elseBOARDDIR=${vendor}/${board}fiBOARDDIR = samsung/goni再看最后⼀段代码:# Create board specific header file#if [ "$APPEND" = "yes" ] # Append to existing config file thenecho >> config.helse> config.h # Create new config filefiecho "/* Automatically generated - do not edit */" >>config.hfor i in ${TARGETS} ; doi="`echo ${i} | sed '/=/ {s/=/ /;q; } ; { s/$/ 1/; }'`"echo "#define CONFIG_${i}" >>config.h ;doneecho "#define CONFIG_SYS_ARCH \"${arch}\"" >> config.hecho "#define CONFIG_SYS_CPU \"${cpu}\"" >> config.hecho "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h [ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h [ "${soc}" ] && echo "#define CONFIG_SYS_SOC \"${soc}\"" >> config.hcat << EOF >> config.h#define CONFIG_BOARDDIR board/$BOARDDIR#include <config_cmd_defaults.h>#include <config_defaults.h>#include <configs/${CONFIG_NAME}.h>#include <asm/config.h>#include <config_fallbacks.h>#include <config_uncmd_spl.h>EOFexit 0上⾯这段代码的作⽤就是添加⼀些宏定义到config.h⽂件中:/* Automatically generated - do not edit */TARGETS为空所以不执⾏#define CONFIG_SYS_ARCH arm#define CONFIG_SYS_CPU armv7#define CONFIG_SYS_BOARD goni#define CONFIG_SYS_SOC s5pc1xxcat << EOF >> config.h 这句代码的作⽤是把下⾯内容写⼊config.h中,直到EOF;。

u-bootUBIFS移植及文件系统烧写

u-bootUBIFS移植及文件系统烧写

u-bootUBIFS移植及文件系统烧写imx515 uboot UBIFS移植及android UBIFS文件系统烧写作者:longfeey1.1 Uboot UBI的移植关于uboot的UBI的移植几乎没有说明介绍,移植首先要保证你的flash驱动能够跑起来,我是在nand flash 上跑的UBI。

刚开始的时候我也没有什么头绪,只能够从uboot的readme开始查找一些蛛丝马迹。

- MTD Support (mtdparts command, UBI support)CONFIG_MTD_DEVICEAdds the MTD device infrastructure from the Linux kernel.Needed for mtdparts command support.CONFIG_MTD_PARTITIONSAdds the MTD partitioning infrastructure from the Linuxkernel. Needed for UBI support.因此,要UBI支持首先得要MTD支持,因此在配置文件中要添加以上两项的定义。

要移植UBI还要添加:#define CONFIG_CMD_UBIFS#define CONFIG_CMD_UBI总的关于UBI的部分是以下几个宏:#define CONFIG_CMD_UBI#define CONFIG_CMD_UBIFS#define CONFIG_CMD_MTDPARTS#define CONFIG_MTD_DEVICE#define CONFIG_MTD_PARTITIONS#define CONFIG_RBTREE#define CONFIG_LZO同时要给NAND建立个默认的分区,方便以后操作。

分区如下:#define MTDIDS_DEFAULT "nand0=nand0"#define MTDPARTS_DEFAULT "mtdparts=nand0:0x100000@0x0(u-boot),0x300000@0x120000(kernel),0x7b00000@0x420000(rootf s),-(reserved)"#define MTD_ACTIVE_PART "nand0,2"以上的配置都在uboot_imx/include/configs/mx51_vdphone.h 文件中进行配置。

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外其他文件夹删除掉。

uuboot 移植流程

uuboot 移植流程U-Boot 移植流程介绍U-Boot是一个开源的引导加载程序,常用于嵌入式系统中。

移植U-Boot可以将其适配到不同的硬件平台上,以满足特定需求。

本文将详细说明U-Boot移植的流程。

准备工作1.硬件选型:根据项目需求,选择适合的硬件平台。

2.获取源代码:从U-Boot官方网站或仓库下载最新版本的源代码。

3.安装交叉编译工具链:根据目标硬件平台的指令集架构,选择合适的交叉编译工具链,并进行安装。

4.了解目标硬件平台:熟悉目标硬件平台的架构、引导方式、存储器布局等相关信息。

移植流程1.配置编译环境:设置交叉编译工具链的环境变量,以确保正确编译U-Boot源代码。

2.配置U-Boot:修改U-Boot源代码中的配置文件,根据目标硬件平台的特性和需求进行相应配置。

–配置目标硬件平台的处理器类型、存储器布局等基本信息。

–配置启动方式,如通过网络(TFTP)或存储介质(SD卡、NAND Flash)等进行启动。

–配置启动流程,如引导加载程序的加载顺序、启动脚本等。

3.添加适配代码:根据目标硬件平台的需求,编写适配代码,包括引导加载程序和设备驱动等。

–引导加载程序:为目标硬件平台选择合适的程序入口点,配置启动参数,加载适配的设备驱动等。

–设备驱动:根据目标硬件平台的外设,编写相应的设备驱动代码,以支持外设的初始化和操作。

4.编译U-Boot:使用交叉编译工具链,编译修改后的U-Boot源代码。

–执行make clean清除之前的编译结果。

–执行make命令编译U-Boot源代码。

5.烧录和运行:将编译生成的U-Boot镜像烧录到目标硬件平台,并进行测试。

–根据目标硬件平台的烧录方式(串口、JTAG等),将U-Boot镜像烧录到目标设备。

–启动目标设备,观察U-Boot的启动信息是否正常输出,检查设备驱动是否正常加载。

6.调试和优化:根据实际情况,进行U-Boot的调试和性能优化。

–使用调试工具进行调试,如调试器、串口打印信息等。

在ubuntu8[1].0.4上移植uboot

在ubuntu8.04上UBOOT移植笔记一、 与windows共享最好的做法是通过SAMBA与Windows建立共享,但是在ubuntu8.04上配置SAMBA服务器是一件非常痛苦的事,特别是对于没有经验的新手来说更是如此。

变通的做法是在UBUNTU8.04上安装SAMBA客户端,用Windows的共享来实现文件交换。

先在windows上建立一个共享文件夹,例如“SWAP”,共享权限是可读可写。

然后搜索Ubuntu的安装光盘,找到“smbclient_3.0.28a-lubuntu4_i386.deb”,双击安装。

安装完成后,在Ubuntu桌面上依次选择“位置”-“网络”,找到Windows共享主机,双击即可看到共享文件夹。

连接成功后,会在Ubuntu的桌面上产生一个映射,以后再次双击该映射图标即可。

二、 安装开发工具链1、arm-linux-gccz首先在你的用户目录下建立tools文件夹:mkdir tools (推荐使用终端操作,也可以在图形用户界面下进行)z然后从以下地址下载arm-linux-gcc-3.3.2.tar.bz2到windows的共享文件夹“/developers/linux/files/tools/arm-linux-gcc-3.3.2.tar.bz2”z将arm-linux-gcc-3.3.2.tar.bz2从共享文件夹拖到刚才建立的 tools文件夹z进入tools文件夹:cd toolsz然后解压缩:tar xvf arm-linux-gcc-3.3.2.tar.bz2,在 tools文件夹形成/usr/local/arm/3.3.2/文件夹z进入刚才形成的local文件夹:cd usr/local/z将arm文件夹拷贝到/usr/local/文件夹:sudo cp -rv arm /usr/local/z将编译器路径添加到系统环境变量export PATH=/usr/local/arm/3.3.2/bin:$PATHz检查环境变量是否添加成功:echo $PATH,在输出的信息中如果含有/usr/local/arm/3.3.2/bin,则表示添加成功。

UBoot移植详解

u-boot 移植步骤详解1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。

其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。

其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。

这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。

这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。

其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。

从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。

当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。

最新Uboot移植步骤 6:NandFlash读操作

最新Uboot移植步骤6:NandFlash读操作前面在调试时把NAND相关的宏CONFIG_CMD_NAND注释掉了一些,现在去重新打开:编译,看看会出什么错误:先看第一个error:72行显示一个不完整的类型看这个nand的定义:发现nand是2410_nand的结构体,但我们未定义CONFIG_S3C2410这个宏,我们现在要使用2440,正好下面有,我们直接使用2440的结构体好了:这个文件都是给2410用的,我们直接拷贝一份,改名为2440,SI文件添加一下:修改宏定义:修改Makefile:先看看nand是如何操作的,着nand相关函数:看nand_init函数:可见这里就可以识别nand并输出nand的大小了,先看运行哪个函数:可见CONFIG_SYS_NAND_SELF_INIT宏未定义,所以运行nand_init_chip函数:看单板初始化函数:把2410修改为2440:发现s3c2440_get_base_nand函数未定义,我们先搜下2410的定义,改为2440的定义:修改发现S3C2440_NAND_BASE未定义,那我们找到2410定义的地方自己仿照定义2440下:修改初始化时序:看这个函数,我们把2410都改成2440:修改这里:看到nfcont,我们还要设置下这个:现在board_nand_init函数修改完了,开始修改nand_scan函数:观察之后,发现要修改如下(具体为何这样修改,参考NAND驱动开发视频,现在我还没看,无法详述):编译,下载:有错误:搜索nand_wait_ready,发现再我们自己的init.c函数里也定义了,把我们的改一下:再编译下载:发现NAND已经可以识别!把uboot从nor拷贝到nand:验证:数据都相同,现在重启开发板从nand启动:这时从NAND启动,Nor无法识别,所以显示0KB!成功!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档