u-boot在S3C2440上的移植问题及解决方法集锦(二)

合集下载

uboot代码完全解析

uboot代码完全解析
1.相关文件 ....................................................................................................................................28 2.数据结构 ....................................................................................................................................28 3.ENV 的初始化...........................................................................................................................30
目录
u-boot-1.1.6 之 cpu/arm920t........................................................................2 u-boot 中.lds 连接脚本文件的分析 ...................................................................................................12 分享一篇我总结的 uboot 学习笔记(转) .....................................................................................15 U-BOOT 内存布局及启动过程浅析 ...................................................................................................22 u-boot 中的命令实现 ..........................................................................................................................25 U-BOOT 环境变量实现 ........................................................................................................................28

linux在TQ2440上移植6--完善串口驱动

linux在TQ2440上移植6--完善串口驱动

1、s3c2440有3个串口,其中串口2在linux-2.6.35.3里作了红外模式,我们要把它改为普通的串口用。

2、在smdk2440平台第100行修改线控制寄存器 ULCONnvi arch/arm/mach-s3c2440/mach-smdk2440.c/* IR port */[2] = {.hwport = 2,.flags = 0,.ucon = 0x3c5,.ulcon = 0x03,.ufcon = 0x51,}3、增加UART2 收发引脚功能vi drivers/serial/samsung.cdbg("s3c24xx_serial_startup ok\n");/* the port reset code should have done the correct* register setup for the port controls */if (port->line == 2){s3c2410_gpio_cfgpin(S3C2410_GPH6, S3C2410_GPH6_TXD2);s3c2410_gpio_pullup(S3C2410_GPH6, 1);s3c2410_gpio_cfgpin(S3C2410_GPH7, S3C2410_GPH7_RXD2); s3c2410_gpio_pullup(S3C2410_GPH7, 1);}a. 上面的函数s3c2410...cfg , pull都定义在arch/arm/mach-s3c2410/include/mach/gpio-fns.h中所以要在drivers/serial/samsung.c 中添加头文件 #include<mach/gpio-fns.h>b. S3C2410_GPH6, 7 也需要自己定义在arch/arm/mach-s3c2410/include/mach/gpio-nrs.h中#define S3C2410_GPH6 S3C2410_GPH(6)#define S3C2410_GPH7 S3C2410_GPH(7)同样也要在drivers/serial/samsung.c 中添加头文件 #include<mach/gpio-nrs.h>c. S3C2410_GPH6_TXD2S3C2410_GPH7_RXD2定义在arch/arm/mach-s3c2410/include/mach/regs-gpio.h同样也要在drivers/serial/samsung.c 中添加头文件 #include<mach/regs-gpio.h>4、下面还有一个重要的数据结构第889行static struct uart_driver s3c24xx_uart_drv = {.owner = THIS_MODULE,.dev_name = "s3c2410_serial", //这个是串口设备的名称,必须和文件系统的inittab里控制台的名称相对应.nr = CONFIG_SERIAL_SAMSUNG_UARTS,.cons = S3C24XX_SERIAL_CONSOLE,.driver_name = S3C24XX_SERIAL_NAME,.major = S3C24XX_SERIAL_MAJOR,.minor = S3C24XX_SERIAL_MINOR,};5、make menuconfigDdvices Drivers --->Character devices --->Serial Drivers --->1、s3c2440有3个串口,其中串口2在linux-2.6.35.3里作了红外模式,我们要把它改为普通的串口用。

制作u-boot LCD开机logo 及LCD字符显示错误的解决

制作u-boot LCD开机logo 及LCD字符显示错误的解决

前段时间总感觉忙,驱动、应用瞎搞一通,移植的uboot也是缺胳膊少腿,都是没开机logo 的,只实现了基本功能。

最近闲下来了,想弄些好玩点的东西,从那开始呢?还是uboot,把uboot一点一点完善起来,这应该是一个比较有意思的过程。

做一个自己喜欢的开机logo,岂不是很炫。

要想显示logo,当然我们首先要做的是修改完善lcd的驱动,修改驱动这一块我就不赘述了,网上一搜一大把,不过推荐一下Tekkaman Ninja 的博客,参照他的肯定是没问题的。

以下引自Tekkaman Ninja/****************************************************************************** 图片的放置路径所有的开机logo都放在了/tools/logos 之下,你只需要将你的班子作对应的logo替换就好了。

对于S3C2440,你只需要将denx.bmp替换成你想要的logo就好了。

对于ATMEL的芯片,据说会显示ATMEL的logo,所以替换那个logo即可。

但是你所替换的logo必须和原来的大小、格式一模一样,否则会出现u-boot使用过程中宕机重启的后果。

--------------------------------------------------------------------------------二、图片的大小标准不同的logo对应不同的大小,这里S3C2440所对应的是160*96分辨率的BMP图片。

--------------------------------------------------------------------------------三、图片的转换脚本在制作图片前,请您现确认您的Linux主机上安装了Netpbm 工具包。

如果是Ubuntu,你可以直接用新立得安装;如果是别的发行版,可以在Netpbm主页下载源代码编译。

基于三星S3C2440 Boot Loader的研究

基于三星S3C2440 Boot Loader的研究
HE e ・ i n , Zh n x a g CHEN Bo
( o lg f mp tr S u h s Unv r i f ce c C l eo e Co u e, o t wet ie s y o in e& T c n l g , i y n 2 0 0 C ia t S e h o o y M a a g 6 1 l , hn ) n
Ab ta t sr c :An l z h a y e t e mo t p p l r Bo t a e r m h o r e c d .Th o Lo d r i Bo t wh c o t h s o u a o Lo d r f o t e s u c o e e Bo t a e s U— o i h b o s t e S ms n ’ a u g S¥3 2 4 . c 4 0 Emp a i e t e t t g so o Lo d rwh c o t r m n F a h a d c p h o Lo d rf o h s z h wo sa e fBo t a e i h b o sf o Na d l s n o y t e Bo t a e r m Na d l s o me r s n h f i i n s e n F a h t mo y u i g t e e fc e ta s mb e n t e fr tsa e n n l z n r n h s a o tb o i g d l y o h l ro h s t g .a d a a y i g b a c e b u o tn e a n t e i
着重 分析 从 N nFah启动 的 B o odr 2个运 行 阶段 ,在 第 1阶段 用 高效 的汇 编代 码 实现 对 N nFah 动 , ad l s ot ae 的 L ad l 驱 s 将 Bo t o d r Na d ls o a e 从 L n Fah复制 到 内存 ,提 高 了运 行 效 率 ,最 后分 析 第 2阶段 与启 动延 时相 关 的分 支操 作 。

U-BOOT启动过程

U-BOOT启动过程

U-Boot启动过程U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:(1)第一阶段的功能Ø硬件设备初始化Ø加载U-Boot第二阶段代码到RAM空间Ø设臵好栈Ø跳转到第二阶段代码入口(2)第二阶段的功能Ø初始化本阶段使用的硬件设备Ø检测系统内存映射Ø将内核从Flash读取到RAM中Ø为内核设臵启动参数Ø调用内核1.1.1U-Boot启动第一阶段代码分析第一阶段对应的文件是cpu/arm920t/start.S和board/samsung/mini2440/lowlevel_init.S。

U-Boot启动第一阶段流程如下:图 2.1 U-Boot启动第一阶段流程根据cpu/arm920t/u-boot.lds中指定的连接方式:ENTRY(_start)SECTIONS{. = 0x00000000;. = ALIGN(4);.text :{cpu/arm920t/start.o (.text)board/samsung/mini2440/lowlevel_init.o (.text)board/samsung/mini2440/nand_read.o (.text)*(.text)}……}第一个链接的是cpu/arm920t/start.o,因此u-boot.bin的入口代码在cpu/arm920t/start.o中,其源代码在cpu/arm920t/start.S中。

下面我们来分析cpu/arm920t/start.S的执行。

1.硬件设备初始化(1)设臵异常向量cpu/arm920t/start.S开头有如下的代码:.globl _start_start: b start_code /* 复位*/ldr pc, _undefined_instruction /* 未定义指令向量 */ldr pc, _software_interrupt /* 软件中断向量*/ldr pc, _prefetch_abort /* 预取指令异常向量 */ldr pc, _data_abort /* 数据操作异常向量 */ldr pc, _not_used /* 未使用 */ldr pc, _irq /* irq中断向量 */ldr pc, _fiq /* fiq中断向量 *//* 中断向量表入口地址 */_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq.balignl 16,0xdeadbeef以上代码设臵了ARM异常向量表,各个异常向量介绍如下:表 2.1 ARM异常向量表在cpu/arm920t/start.S中还有这些异常对应的异常处理程序。

S3C2440处理器资料

S3C2440处理器资料
S3C2440处理器介绍
1
S3C2440处理器介绍
1.1三星ARM处理器介绍 1.2 S3C2440功能特点 1.3 S3C2440系统管理/体系结构 1.4 S3C2440存储器 1.5 S3C2440时钟和电源管理
2
1.1三星ARM处理器介绍
S3C44B0:ARM7TDMI、66MHz、集成LCD控制器 (支持STN,但不支持TFT)、无网络接口;适用产品: POS、PDA、E-BOOK、GPS、智能电话、电子书包、 机顶盒,手持游戏机等等。160LQFP,160FBGA。支 持LINUX、PSOS、uC/OSII等。 S3C2410:ARM920T、200MHz、支持TFT、USB HOST、USB DEVICE、 SD Card 以及MMC接口、 触摸屏接口, NAND FLASH直接引导。无网络接口。 适用产品: POS、PDA、E-BOOK、GPS、智能电话、 电子书包、机顶盒,手持游戏机、电子相册、多媒体产 品、视频监控、智能控制仪表等等。272BGA。支持 WINCE、LINUX、VxWorks等。
用于控制各模块是否有频率输入,一般保持默认即可
32
3、时钟控制寄存器(CLKCON续1)
33
3、时钟控制寄存器(CLKCON续2)
Bit3: 1:进入睡眠模式 Bit2:1 进入特别模式(保留模式,没有使用)
34
4、慢时钟控制寄存器(CLKSLOW)
慢时钟模式,用于设置与慢时钟模式相关的配置信息
大纲
s3c2440 时钟频率管理 S3c2440 电源管理模块 相关寄存器使用说明
15
时钟 频率 管理
16
晶振电路和外部时钟
17
时钟源选择

S3C2440_LCD控制器中文手册

S3C2440支持查找表作为彩色或者灰度等级映射的多种选择,保证为用户提供具有弹性的操作。 查找表就是一个调色板,它允许在彩色或者灰度等级上进行选择(假如在4级灰度下,可以选择16灰度 级别中的4级,假设在256色模式下,可以选择16级红色中的8种,16级绿色中的8种,16级蓝色中的 4种)。换句话说,在4级灰度模式,用户可以通过查找表选择16种灰度等级中的4种。在16级灰度模 式下,灰度等级不能被选择;在可能的16种灰度等级中,所有的16种灰度等级必须被选择。假设在 256色模式下,3位被分配用于红色,3位用于绿色,2位用于蓝色。这256色意味着这些颜色是由8种 红色,8种绿色,4种蓝色组合而成(8*8*4=256)。在彩色模式,这个查找表能被用作合适的选择。8 种红色等级能在16种可能的红色等级中被选择,8种绿色同样可以在16种可能的绿色种式,就没有象256色模式下的那种选择。 灰度模式操作
的GREENVAL[31:0]和BLUELUT寄存器中的BLUEVAL[31:0]作为可编程的查找表入口。与灰度等级 显示类似,在寄存器REDLUR中的8组或者4位域,换言之,REDVAL[31:28],REDLUT[27:24], REDLUT[23:20],,REDLUT[19:16], REDLUT[15:12], REDLUT[11:8],REDLUT[7:4]和REDLUT[3:0] 被分配给每个红色等级。4位(每个域)的可能组合有16种,并且每个红色等级应该被分配16种等级种 的1种。换句话说,用户可以通过该类型的查找表选择合适的红色等级。对于绿色,寄存器GREENLUT 中的GREENVAL[31:0]在查找表中的分配形式与红色是一样的。类似地,寄存器BLUELUT中的 BLUEVAL[31:0]在查找表中也是这样分配的。对于蓝色,2位组成4种颜色等级,与8种红色,绿色等 级是不一样的。 4096 色模式操作

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;。

S3C44B0 学习板使用指南

一、S3C44B0 学习板简介 (3)二、系统上电 (5)三、测试程序 (8)四、建立 Windows 系统上虚拟 Linux 环境 Cygwin 以及 ARM 交叉编译环境 (9)五、Bootloader 装载程序(U-BOOT) (11)六、uClinux 编译与下载 (21)七、开发板的地址空间分配 (35)八、FAQ 常见问题 (36)S3C44B0 学习板使用指南三星公司推出的 16/32 位 RISC 处理器 S3C44B0X 为手持设备和一般类型的提供了一种高性能低成本的解决方案。

为了降低整个系统的成本,S3C44B0X 内部集成了丰富的片内外设,包括:8K 的 cache,可选的片内 SRAM,LCD 控制器,带有握手信号的双同道 UART,4 同道 DMA,系统管理器(片选逻辑,FP/EDO/SDRAM 控制器),带有PWM 功能的 5 通道定时器,I/O 端口,RTC 实时时钟,8 通道 10 位 ADC,IIC、IIS 总线接口,同步 SIO 接口以及用于时钟管理的PLL 锁相环。

S3C44B0X 采用了 ARM7TDMI 内核,0.25um 标准宏单元和存储编译器。

TDMI 的每一个字母代表一种功能: T(Thumb),支持 16 为压缩指令集 Thumb D(Debug),支持片上 Debug M(Multiplier),内嵌硬件乘法器 I(ICE):嵌入式 ICE,支持片上断点和调试点S3C44B0X 极低的功耗以及简单,只能的全静态设计使其非常适合对成本和功耗敏感的项目。

同时S3C44B0X 还采用了一种新的总线结构,即 SAMBAII(三星 ARM CPU 嵌入式微处理器总线结构)S3C44B0X 通过集成全面、通用的片内外设,大大减少了系统电路中除处理器外的器件需求,从而最小化系统成本。

下列是其集成的边内外设: 外部存储器控制器(FP/EDO/SDRAM 控制器,片选逻辑)控制器(最大支持 256 色 STN,LCD 具有一个专用的 DMA 通道) LCD 2个通用 DMA 通道,2 个外设 DMA 通道并有片外请求管脚个 UART,带有握手协议(支持 irDA1.0,具有 16 字节 FIFO)1 通道 SIO 2多主总线接口 IIC IIS总线控制器个 PWM 定制器和 1 通道内部定时器 5 看门狗定时器个通用 I/O 口,作多支持 8 各片外中断源 71 功耗管理:普通,慢速,空闲和停止模式 8 通道 10 位 ADC 具有日立功能的 RTC 带 PLL 的片内时钟发生器使用 S3C44B0X 来构建系统,能够降低真个系统的成本,我们列举以下一些可以采用 S3C44B0X 构建系统应用: GPS 电话 PDA(个人数字助理) 掌上游戏机 指纹识别系统 终端汽车导航系统 mp3 等手持应用一、 S3C44B0 学习板简介S3C44B0 开发板是依据三星公司评估板的基础上开发而来, 其主要硬件包括: Samsung S3C44B0X 66MHz (ARM7 内核) 8M Flash 2M SDRAM 10M Base-T 以太网接口 IDE 接口 USB1.1 设备接口 IIC 总线接口 RTC 实时时钟 LCD 接口,支持 640×480 以下单色或 320×240 以下 STN/DSTN 256 色 2 个 RS232 UART 串行口,支持 Modem 握手信号 标准 14 针 JTAG 接口 1×4 键盘,1×3 LED 灯 可扩展总线接口同时,本开发板提供完善的开发包和各种硬件测试程序(含源码),以帮助客户快速掌握 S3C44B0 的各种片内外设以及扩展接口的使用方法: ADS1.2 IDE, ARM 程序开发集成环境 GNU 工具包(包括交叉编译器、链接、汇编工具) uClinux 源码包 U-Boot1.1.1(BOIS)启动控制程序(含源码) 应用程序代码 相关技术文档,手册 键盘控制 LED 试验 实时时钟演示 IIC 测试程序 PWM 测试程序 uCOS-II 实时操作系统加载试验下图是 S3C44B0 的开发板图,我们在这里可以看到使用的板子的各种外围芯片,外设以及各种接口。

Hi3531/Hi3532 U-boot 移植应用 开发指南


文档版本 00B10 (2012-05-15)
海思专有和保密信息 版权所有 © 深圳市海思半导体有限公司
v
Hi3531/Hi3532 U-boot 移植应用 开发指南
插图目录
插图目录
图 4-1 RealView Debugger 窗口 ........................................................................................................................... 9 图 4-2 Connetct to Target 窗口 ............................................................................................................................ 10 图 4-3 Choose RealView-ICE .............................................................................................................................. 11 图 4-4 RealView Debugger 信息提示框 ............................................................................................................. 12 图 4-5 RealView Debugger 信息提示框 2 .......................................................................................................... 13 图 4-6 Connect to A9 ........................................................................................................................................... 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

u-boot在S3C2440上的移植问题及解决方法集锦(二)
一、移植环境
 主 机:VMWare6.5--Fedora 9
 开发板:自制开发板
CPU:S3C2440; SDRAM:HY57V561620FTP-H;
NOR flash:SST_39VF1601(2M);
NAND flash:K9F1G08U0B(128M); 网卡芯片:
DM9000EP

 编译器:arm-linux-gcc-4.3.2
 u-boot:u-boot-2009.08
 linux kernel:linux-2.6.30
 busybox:busybox-1.13.3
二、博客地址
http://blog.csdn.net/liuqiqi677
如有错误,欢迎指正。

三、参考资料
主要参考了黄刚的博客http://blogold.chinaunix.net/u3/101649/ ,他的
博客写得相当不错,将嵌入式开发各个阶段的知识以边做边学的方式,辅以
图片、解释,清晰地呈现给读者,能够让读者把握主线,对嵌入式开发有整
体的了解。强烈推荐!!!

四、问题及解决方法
4、u-boot-2009.03中没有dm9000_initialize函数
开始,我使用的u-boot是u-boot-2009.03,黄刚用的是
u-boot-2009.08,一路照着他的博客做下来,到添加对dm9000网卡支持的时
候,就出问题了。对u-boot进行编译的时候,报了这个错误:undefined
reference to `dm9000_initialize',意思是dm9000_initialize这个函数没有定
义,我又检查了一下步骤,完全是照着做下来的,那唯一的差别就只是u-boot
的版本不同了。于是,我下载了u-boot-2009.08,在 drivers/net/dm9000x.c
中发现了 dm9000_initialize 函数的定义,但是在u-boot-2009.03的相应文
件中却没有发现 dm9000_initialize 函数,这下原因就很清楚了。
那么,在u-boot-2009.03中药怎么添加对dm9000网卡的支持呢?这
个很简单,按照黄刚的博客,
不在 board/samsung/my2440/my2440. c 中添加

board_eth_init(bd_t *bis) 函数就可以了。
5、u-boot-2009.08超级终端输出信息不完整

在启动u-boot-2009.08的时候,我无意间发现它的输出信息少了几行,
对比图4和图5:

图4 输出信息不完整的u-boot-2009.08
图5 修复bug后的u-boot-2009.08
通过分析,将问题定位在 common/console.c 文件中的
stdio_print_current_devices 函数中,我们看一下这个函数的定义:

图6 stdio_print_current_devices函数源码
到这里,原因就很明显了,我们读一下上面的条件编译语句,它的意
思是,如果定义了 CONFIG_SYS_CONSOLE_INFO_QUIET 就打印下面的
信息,但是这个宏的字面意思是系统终端信息不打印,这就出现矛盾了!解
决方法很简单,将#ifdef 改为#ifndef 即可。重新编译u-boot,下载到开发板,
运行,如图5所示,终端信息正常打印出来了!
6、网络地址设置不成功
我在 include/configs/my2440.h 中设置了开发板的MAC地址、IP地
址和linux主机的IP地址,然后每次把编译好的u-boot下载到开发板,输入
printenv 命令 ,想查看是否设置成功,但是打印的信息却和之前默认的值一
样,根本没有修改到!但是,我确实是改了的啊。为什么会出现这个问题呢?
在没有办法的时候,我突然灵光一闪,呀,我意识到我犯了一个低级错误!
u-boot和系统环境变量是分开存放的,之前我用saveenv命令已经将环境变
量保存到了NAND flash中,并且一直都没有再动过这个区域了。我重新烧写
了u-boot,但是系统的环境变量却还是之前的值啊。我将Nand Flash全部擦
除,重新下载u-boot,并在终端输入 saveenv 命令,重新开机,查看环境
变量,已经变成我修改过的值了。
今天就先总结这么多,估计写多了大家一看脑袋就大了,呵呵。今天
还是继续研究一下驱动。^_^

相关文档
最新文档