Mini2440 Uboot移植
- 格式:doc
- 大小:119.00 KB
- 文档页数:17
3420更换不用TTL线救砖的UBOOT及救砖教教程现开发3420的新UBOOT,刷砖后,不需要使用TTL线就能救砖,适用于300R V2/ 841V7/TP 3420的机型.本教程分2部分一.用新UBOOT替换旧的UBOOT教程(2012年2月11日及以后发货的3420机型均已使用新UBOOT) .二.新UBOOT的救砖教程Uboot文件,因为要对应你的路由的MAC和PIN才能正常使用,所以如果有需要的,请直接找你的卖家,告知卖家你的路由的MAC,PIN(这在路由的底部标签可以找到)以及购买的淘宝旺旺名还有你的路由的FLASH是8M还是16M的,.然后卖家给你一个专用的UBOOT文件.一.用新UBOOT替换旧的UBOOT教程1.在OP里直接刷入群共享的841V7的DD-WRT.刷完后如下图:这里先设置一下帐号与密码.我这里设置USERNAME:rootPASSWORD:admin设置好后,重新登录,进行如下2步的设置,主要是打开SSH服务.具体请看图中红圈进行操作就得了.设置好后,按上图红圈里的按钮应用.这图里也是打开SSH服务的.应用后,SSH服务已经打开了.为保险起见,先重启一下路由.重启完后,用WINSCP登录路由(WINSCP可以在群共享里下载,里面有简单的使用说明), 按下图,把对应的UBOOT文件拖到右边窗口的/tmp文件夹下.点上图(2)的图标,出现下图的命令窗口在命令窗口里打入刷UBOOT的命令,如图中红框所示(注意区分大小写).8M FLASH的命令mtd -r write /tmp/3420-8M-tftp-uboot.bin RedBoot16M FLASH的命令mtd -r write /tmp/3420-16M-tftp-uboot.bin RedBoot 命令打完后,路由会自动重启,到此,UBOOT已经更换完了.二.新UBOOT的救砖教程1. 在电脑架设TFTP服务端把TFTP32软件(在群共享可以下载)和救砖待刷的固件改名为”factory.bin”放在同一文件夹下.2.设置电脑网卡的IP为192.168.1.100,并把网线插到路由的W AN口3.运行TFTP32软件如下图,看到Server interface里出现了192.168.1.100的字样,就说明TFTP 服务端已经正常了.如果没有IP出现,可以先关闭TFTP软件,打开路由电源,等一下子再开软件.4.按着路由的QSS键,并给路由通电(如果原来是通电的,要先关闭电源).看到弹出上图中红圈的窗口,说明正在上传固件到路由了.这个时候你什么也不用做了.等待路由自动重刷固件并自动重启就OK了.。
刷入uboot和大分区的方法一、概念解释1.1 uboot是什么U-boot是一种开源的引导加载程序,它通常用于嵌入式系统的启动过程中,负责引导操作系统的启动和初始化硬件设备。
在嵌入式系统中,uboot扮演着非常重要的角色,它的稳定性和可靠性直接影响整个系统的稳定性。
1.2 分区的作用分区是将存储设备按照一定的规则划分成多个逻辑部分的过程。
对于嵌入式系统而言,合理的分区管理可以提高存储设备的利用率,同时也方便系统的管理和维护。
二、刷入uboot的步骤2.1 确定目标设备我们需要明确要刷入uboot的目标设备是什么,是一个嵌入式开发板还是其他类型的设备。
不同的设备可能需要不同的uboot版本和刷入方法。
2.2 获取uboot源码接下来,我们需要从冠方或者其他可靠渠道获取uboot的源码。
一般来说,冠方的源码是最稳定和可靠的选择,我们可以从冠方的仓库或者全球信息站上下载源码。
2.3 编译uboot获取源码之后,我们需要根据目标设备的硬件配置,对源码进行编译。
在编译之前,我们需要配置好交叉编译工具链和相关的环境变量,确保编译过程顺利进行。
2.4 刷入uboot当uboot源码编译完成之后,我们需要将编译生成的二进制文件刷入目标设备的存储设备中。
这个过程可能涉及到串口或者其他调试工具的使用,需要特别注意刷入过程中的各项参数和配置。
2.5 测试uboot刷入完成后,我们需要对uboot进行测试,确保它能够正常启动,并且能够正确识别硬件设备。
三、创建大分区的步骤3.1 确定分区方案在创建大分区之前,我们需要确定硬盘或者TF卡的分区方案,包括分区的数量、大小和格式等。
3.2 使用分区工具常用的分区工具有fdisk、parted等,我们可以使用这些工具来创建和调整分区。
在使用分区工具时,需要特别注意当前存储设备上是否有重要的数据,避免误操作导致数据丢失。
3.3 格式化分区创建完分区之后,我们需要对分区进行格式化,以便后续的数据存储和管理。
QT4移植到FL2440开发板的详细过程(转载并加以修改)不知道是大家的系统环境不同还是网友们打错字了,我在网上找了不下十篇有关QT移植的文档。
文档大部分相同,但有一些不一样,但我全都试了,都有一些小问题!后来我一篇文档为主,其他文档为辅,对比错误,修改文档,得出这个适合我自己移植QT的完整版,这供大家参考!因为我的板子是飞凌的2440开发板。
网上关于qt4移植到飞凌2440的文章并不是很多,其中移植这部分我也走了很多弯路,遇到很多问题,但最后还是搞出来了,其实这过去也有快一个月了,那个时候也没时间写文章,但为了跟大家一同学习,今天特花了点时间把前面的经验写下来,希望能帮到各位,好了下面就开始我们的移植之旅吧!一、系统环境(蓝色是我的配置)宿主机:window xp sp3虚拟机linux centOS 或者fedora9,10linux编译器(交叉编译器):arm-linux-gcc 3.4.1开发板:飞凌2440--LCD 3.5寸系统linux-2.6.24(2.6.28也可以)2.6.12文件系统为yaffs系统所需软件包:arm-linux-gcc-3.4.1.tar.bz2 下载地址:/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2qt-embedded-linux-opensource-src-4.5.3.tar.gz下载地址大家到网上搜一下就出来了。
tslib-1.4.tar.gz(用于触摸验证)说明:说明一下这里为什么选择这些软件,首先fl2440板子需要编译器可以是2.95.3也可以使3.4.1这里我只是试了这两个,可能其他的也可以。
而qt/embeded则是我随便下了一个。
补充:这里为了说的完整些,我把qt的各版本也给大家说一下,关于Qt,Qt/E,Qtopia Core, Qtopia。
Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。
mini2440使用uboot(详细)文章出处:/swgshj/archive/2010/04/20/5502121.aspx文章写于2010.4.17,总结了友善之臂的mini2440开发板使用自带uboot的具体方法,希望能对正在使用mini2440开发板,而且又想使用uboot引导系统的朋友们有所帮助。
Google一下会发现网上类似的帖子不少,但是对mini2440开发板是哪一个版本都没有具体的说明,个人感觉mini2440开发板的版本是经常更新的,可能不同的版本的开发板在移植uboot时会稍有不同,因此这里我把自己使用的开发板的详细信息都罗列一下,希望网友少走弯路。
另外,要感谢illidan和Martin两位的文章:/2009/05/mini2440使用u-boot//bbs/viewthread.php?tid=14使用的mini2440开发板的详细信息:kernel:linux-2.6.29-mini2440-20090708.tgzgcc:arm-linux-gcc-4.3.2.tgzuboot:bootloader.tgz(该压缩包内含有u-boot-1.1.6)roots:root_qtopia-64M.img问题源于:(1)使用128M NAND Flash mini2440开发板的用户都知道,此时开发板附带的supervivi-64M和supervivi-128M都不再支持“空格”进入supervivi的menu菜单,而是改成了使用开发板上的k1~k6任何一个按键触发进入menu(而我需要空格键触发menu的方式);(2)开发板附带的supervivi不支持网络下载kernel和root(文件系统)。
具体的修改步骤如下:注1:arm-linux-gcc的安装方法见《mini2440-um-20090817.pdf》第5.3小节。
注2:mini2440开发板附带的uboot源码已经是经过移植的,适用s3c2440处理器,我们只需要修改一些uboot参数即可。
把minicom2.7移植到arm(2440上armv4t架构)上1:先决条件1)交叉编译器为arm-none-linux-gnueabi-gcc的4.8.32)因为minicom的编译需要用到ncurses库,所以得先把ncures库配置安装到交叉编译器中去,即安装一些程序,添加库文件等等,之后在可以把minicom交叉编译,最后在arm上运行,配置。
还有一定要安装g++,否则会出错,因为可能ncurses是用C++开发的2:安装步骤:1准备工作下载ncursee-5.9.tar.gz 和minicom-2.7.tar.gz。
(建议下载最新版,否则会出一些莫名其妙的错误)在/home/taopeng中新建文件夹minicom。
2:交叉编译ncurses1)首先在/home/taopeng/download 中解压ncurses-5.9.,随后进入该文件夹,创建run文件,增加可执行属性,在run中添加如下文本:./configure CC=arm-none-linux-gnueabi-gcc--prefix=/opt/arm-2014/arm-none-linux-gnueabi--host=arm-linuxCFLAGS=-march=arm4vtCPPFLAGS=-I/opt/arm-2014.05/arm-none-linux-gnueabi/includeLDFLAGS=-L/opt/arm-2014.05/arm-none-linux-gnueabi/lib解释下各行话的意思:1)说明交叉编译器,2)程序安装位置(会把自己的bin,lib,include等放到该文件下,如果原来就有会合并)。
3)交叉编译宿主类型。
4)这句话指定目标板cpu架构,一定要加,我的交叉编译其默认不是该架构,导致编译后在目标板上运行时出现illegal instruction。
5)交叉编译引用文件位置。
6)交叉编译的库文件位置2)输入./run ,完成后输入make,完成之后make install。
凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。
它是在操作系统内核启动之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
现在主流的bootloader有U-BOOT、vivi、Eboot等。
本次作业先做Uboot的烧写吧。
希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。
首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持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项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
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;。
构建MINI2440开发板Ubuntu开发环境-串口配置及使用2012-06-14 10:52:15来源: 作者: 【大中小】浏览:2次评论:0条做嵌入式开发,调试开发板最常使用的工具就是串口和网口,本文主要介绍在Ubuntu系统如何安装和设置串口软件(minicom和kermit)连接MINI2440开发板。
本文假设你已经在电脑上安装了Ubuntu系统。
对于现今大多数的笔记本而言,主板上一般都没有配置接口。
我们可以在网上购买到USB口转串口接口,网上有很多种类型的USB转接口,可以根据价格选择一个合适的就行。
这里使用的是基于PL2303芯片的USB 转接口。
1. 连接MINI2440开发板将USB串口转接器插上开发板和电脑后,在终端上敲dmesg命令,可以查看转接口已经被PC识别,如下图所示:从上图中我们可以看到我们所连接的串口设备是ttyUSB0,可以通过命令ls -l /dev/ttyUSB*来查看相关的信息。
至此,我们已经顺利的将串口连接到Ubuntu系统上了。
这里顺便提起一下,我在Windows下使用USB 转串口时,要先从网上下载一个安装PL-2302 USB Serial Driver,安装该驱动以后,才可以正常使用,而Linux 内核中已经支持PL2303芯片,所以不需要自行安装。
下面就会介绍minicom和kermit的使用。
2. minicom安装及设置Ubuntu系统中默认是没有安装minicom软件,所以我们首先自己需要安装,可以使用apt-get 命令来安装,如下图所示:安装完成以后,我们运行minicom -s命令进行一些初始配置,如下截图:参数的设置如下图所示,这里需要注意的一点是一定要把Hardware Flow Control也设置成None,我开始时就是因为没有设置这一项导致串口一直连不上去。
最后Save setup as dfl并退出,再次输入minicom命令,可以看到已经成功的连到了MINI2440开发板,如下图所示。
环境:u-boot-1.1.4FC3NorFlash SST39VF1601toolchains Arm-linux-uclibc-u-boot-1.1.4版本中带有移植好的SMDK2410源代码,使用SMDK2410的配置生成的u-boot.bin烧写到FS2410开发板中,已经可以运行和驱动CS8900网卡芯片,但是Flash驱动不同,故环境变量的保存无法实现。
本文档主要论述Flash 驱动的修改和环境变量保存的实现。
解压u-boot-1.1.4源码包make smdk2410_config修改主Makefile在export CROSS_COMPILE上一行加上CROSS_COMPILE = arm-linux-uclibc-make此时会出现一个错误:cc1: error: invalid option `abi=apcs-gnu'修改/cpu/arm920t/下的config.mk:将PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)改成:PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu),)再次make这次可以完全编译成功,主目录下生成u-boot.bin,使用Flash Programmer 主目录下带的BinToS19.exe将u-boot.bin转化为u-boot.s19格式使用Flash Programmer烧写到FS2410可以看到下列启动画面从启动画面可以看到,Flash的大小显示的是错误的,并且反复开机都有bad crc出现。
测试savenev命令显示可以保存环境变量,但是开机后环境变量还是默认值。
上述问题是由于SMDK2410开发板所使用的Flash与FS2410的不同而造成,故下面我们来改写它的flash.c文件。
U-Boot工作过程U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:(1)第一阶段的功能硬件设备初始化加载U-Boot第二阶段代码到RAM空间设置好栈跳转到第二阶段代码入口(2)第二阶段的功能初始化本阶段使用的硬件设备检测系统内存映射将内核从Flash读取到RAM中为内核设置启动参数调用内核1.1.1 U-Boot启动第一阶段代码分析第一阶段对应的文件是cpu/arm920t/和board/samsung/mini2440/。
U-Boot启动第一阶段流程如下:图 U-Boot启动第一阶段流程根据cpu/arm920t/中指定的连接方式:ENTRY(_start)SECTIONS{. = 0x00000000;. = ALIGN(4);.text :{cpu/arm920t/ (.text)board/samsung/mini2440/ (.text)board/samsung/mini2440/ (.text)*(.text)}… …}第一个链接的是cpu/arm920t/,因此的入口代码在cpu/arm920t/中,其源代码在cpu/arm920t/中。
下面我们来分析cpu/arm920t/的执行。
1. 硬件设备初始化(1)设置异常向量cpu/arm920t/开头有如下的代码:.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异常向量表,各个异常向量介绍如下:表 ARM异常向量表在cpu/arm920t/中还有这些异常对应的异常处理程序。
Qt移植学习之路 QT4.5.3至mini2440(1)本文介绍的是Qt移植学习之路QT4.5.3至mini2440,终于成功移植QT 4.5.3至mini2440,并能运行QT自带的应用程序,总得来说还算很顺利,下面是我移植的全部过程。
首先,我交待一下我的开发环境:宿主机:Fedora9主机Gcc:gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)交叉编译器:arm-linux-gcc-4.3.2 (友善光盘自带)开发板:mini2440(NAND 128M SDRAM 64M)移植步骤:1.准备源码包从ftp:///qt/source/ 下载:qt-embedded-linux-opensource-src-4.5.3.tar.gz和qt-x11-opensource-src-4.5.3.tar.gz前者是移植到开发板上运行的,后者是方便在X86机上开发应用程序,待一切调试成功再经交叉编译后下载到开发板上运行。
从网上下载tslib-1.4.tar.gz包,这包用于管理触摸屏,例如可用于它来校正触摸屏,并保存校正数据。
2.编译安装tslib-1.4把tslib-1.4 COPY到Fedora9的 /opt下,在Fedora9的终端下执行:1.#cd/tmp2.#tarzxvftslib-1.4.tar.gz――――――――(最后在/tmp下解压生成tslib)3.#cdtslib4.#./autogen.sh5.#./configure--prefix=/home/mytslib/--host=arm-linuxac_cv_func_malloc_0_nonnull=yes6.#make7.#makeinstall成功后可在/home下生成mytslib,进入mytslib可以看到有bin include lib etc 四个文件夹。
我们暂时先不理它,在接下来的移植过程中才用到这些文件夹。
Mini2440 NOR FLASH 驱动移植一:硬件连接2440的开发板采用了SST39VF1601,SST39VF160是由SST公司推出的容量为1MB×16bit 的CMOS多用途flash。
原理图如下pin 的定义如下:问题一:cpu mini2440对NOR FLASH的寻址范围是多大?二:NOR FLASH工作原理FLASH的编程原理都是只能将1写为0,而不能将0写为1.所以在FLASH编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为1的过程,块内的所有字节变为0Xff。
对FALSH进行的最基本操作由读操作,写操作,和擦除操作。
以下将详细介绍,所有的都是参考sst39vf1601 datasheet读操作:datasheet p2 read用/CE和/OE信号线控制的。
当两者都为低时,处理器就可以从SST39VF160的输出口读取数据。
/CE是SST39VF160的片选线,当/CE为高,芯片未被选中,/OE是输出使能信号线,当/CE和/OE中的某一个为高时,SST39VF160的数据线为高阻态。
时序如下:写操作: datasheet p2在写入之前,扇区中如果有数据(0),则必须首先进行充分地擦除。
写操作分三步进行。
第1步,送出“软件数据保护”的3字节;第2步,送出地址和数据;第3步,内部写入处理阶段,这个阶段在第4个/WE或/CE的上升沿时被初始化。
被初始化后,内部写入处理将在10us时间内完成。
在内部写入阶段,任何指令将被忽略。
除了Data# plling(轮询) 和Toggle Bit(翻转位)写操作flowcharts如图所示:擦除操作:SST39VF1601 支持两种擦除方式:sectro-Erase(扇区擦除)、block-Erase(块擦除)sector 2Kword,即一个sector的大小是4KB;block 32Kword,即一个block的大小是64KB;问题二:若按照sector 擦除,共有多少sector? 若按照block 擦除,共有多少block?扇区擦除操作通过执行6字节的指令序列来进行,这个指令序列中包括扇区擦除指令(30h)和扇区地址(SA)。
最新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!成功!。
Mini2440下移植媒体播放器MadPlayer宿主机:Linux—RedHat5开发板:mini2440本次移植所需的四个文件分别为:madplay-0.15.2b.tar.gzlibmad-0.15.1b.tar.gzlibid3tag-0.15.1b.tar.gzzlib-1.2.5.tar.bz2编译器:gcc 4.1.2 arm-linux-gcc-4.4.3一、搭建交叉编译器arm-linux-gcc●将软件包arm-linux-gcc-4.4.3.tar.gz放在Linux的/opt/mywork下●直接解压该软件包到当前目录下:tar zxvf arm-linux-gcc-4.4.3.tar.gz解压后要获得其绝对路径:/opt/mywork/opt/FriendlyARM/toolschain/4.4.3/bin 添加该交叉编译器的环境变量到vi /etc/profileunset iunset pathmunge#PATH=$PATH:/opt/host/armv4l/binPATH=$PATH:/opt/mywork/opt/FriendlyARM/toolschain/4.4.3/bin-- INSERT –输入source /etc/profile使它生效●编一个hello.c的文件来测试一下交叉编译器是否能用,得到下面结果:root@bogon mywork]# arm-linux-gcc hello.c -o hello/opt/mywork/opt/FriendlyARM/toolschain/4.4.3/bin/../libexec/gcc/arm-none-linu x-gnueabi/4.4.3/cc1: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/mywork/opt/FriendlyARM/toolschain/4.4.3/lib/libppl_c.so.2) /opt/mywork/opt/FriendlyARM/toolschain/4.4.3/bin/../libexec/gcc/arm-none-linu x-gnueabi/4.4.3/cc1: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/mywork/opt/FriendlyARM/toolschain/4.4.3/lib/libppl.so.7)●这是因为原来的libstdc++.so.6版本低了,用libstdc++.so.6.0.10来代替,作如下操作:⏹[root@bogon mywork]# rm /usr/lib/libstdc++.so.6rm:是否删除符号链接“/usr/lib/libstdc++.so.6”? y[root@bogon mywork]# cp /mnt/hgfs/share/libstdc++.so.6.0.10 /usr/lib[root@bogon mywork]# ln -s /usr/lib/libstdc++.so.6.0.10/usr/lib/libstdc++.so.6看结果来检验是否替换完成[root@bogon mywork]#strings /usr/lib/libstdc++.so.6 |grep GLIBCXXGLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_FORCE_NEWGLIBCXX_DEBUG_MESSAGE_LENGTH●重新测试交叉编译器是否能用,得到下图结果:查看文件的运行平台file hello结果如下hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.32, dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped这表示该交叉编译器已经正确编译了。
5.3 建立交叉编译环境在Linux 平台下,要为开发板编译内核,图形界面Qtopia,bootloader,还有其他一些应用程序,均需要交叉编译工具链。
之前的系统,要使用不同的编译器版本才能正常编译各个部分,因此要在开发过程不断切换设置,这十分不利于初学者使用,也降低了开发的效率;自从Linux-2.6.29 开始,我们把交叉编译器统一为arm-linux-gcc-4.3.2,下面是它的安装设置步骤。
Step1:将光盘目录linux\中的arm-linux-gcc-4.3.2.tgz 复制到某个目录下如tmp\,然后进入到该目录,执行解压命令:#cd \tmp#tar xvzf arm-linux-gcc-4.3.2.tgz –C /注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。
执行该命令,将把arm-linux-gcc 安装到/usr/loca/arm/4.3.2 目录。
解压过程如图所示:Step2:把编译器路径加入系统环境变量,运行命令#gedit /root/.bashrc编辑/root/.bashrc 文件,在最后一行export PATH=$PATH:/usr/local/arm/4.3.2/bin如图,保存退出。
重新登录系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令行输入arm-linux-gcc –v,会出现如下信息,这说明交叉编译环境已经成功安装。
5.4 解压安装源代码及其他工具本小节将解压安装开发学习过程所用到的全部源代码以及其他一些小工具,这包括:- linux-2.6.29 内核源代码- 嵌入式图形界面Qropia 源代码(分为x86 和arm 平台两个版本)- busybox-1.13 源代码- linux 编程示例源代码(均为友善之臂自主开发并开放)- linux 下的开源bootloader(vivi 和u-boot)- 其他开源软件源代码,如boa(web server), madplay(一个命令行mp3 播放器)- 目标文件系统目录- 目标文件系统映象制作工具mkyaffsimage- 图形界面的Linux logo 制作工具logo_maker注意:所有的源代码和工具都是通过解压方式安装的,所有的源代码均使用统一的编译器arm-linux-gcc-4.3.2 编译(见上一节)下面是详细的解压安装过程,并有简要的介绍。
1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
第一部分根据uboot-2008.10,移植出能在mini2440 nor flash上运行的uboot1 修改Makefile:在uboot-2008.10顶层目录中的Makefile中,参考smdk2410_config,添加新的配置选项。
# add,flyrizmini2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x02 修改cpu/arm920t/start.S:2.1添加支持S3C2440的编译条件/* #if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410) *//*modify,flyriz*/#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) 2.2添加S3C2440寄存器的定义#else# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */# endif/*add,flyriz,for 2440,register define*/#define CLK_CTL_BASE 0x4C000000#define MDIV_405 0x7f<<12#define PSDIV_405 0x21#define UPLL_MDIV_48 0x38<<12#define UPLL_PSDIV_48 0x22#define MDIV_200 0xa1<<12#define PSDIV_200 0x31/****************************/2.3修改中断禁止代码# if defined(CONFIG_S3C2410)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, [r0]# endif/*add,flyriz*/# if defined(CONFIG_S3C2440)ldr r1, =0x7fff /* S3C2440有15个子中断[0...14] */ldr r0, =INTSUBMSKstr r1, [r0]# endif2.4 修改时钟设置/********************* FCLK:HCLK:PCLK = 1:2:4 ** default FCLK is 120 MHz ! *ldr r0, =CLKDIVNmov r1, #3str r1, [r0]#endif * CONFIG_S3C2400 || CONFIG_S3C2410 *********************//*modify,flyriz*/#if defined(CONFIG_S3C2440)/*FCLK:HCLK:PCLK=1:4:8*/ldr r0,=CLKDIVNmov r1,#5str r1,[r0]mrc p15,0,r1,c1,c0,0 /* CP15中的寄存器C1是一个控制寄存器,用于配置MMU中的一些操作 */orr r1,r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASE /* 0x4C000000 LOCKTIME:PLL lock time counter */mov r2,#UPLL_MDIV_48add r2,r2,#UPLL_PSDIV_48str r2,[r1,#0x08] /* 0x4C000008 UPLLCON=0x38<<12||0x22,output 48MHz */mov r2,#MDIV_405add r2,r2,#PSDIV_405str r2,[r1,#0x04] /* 0x4C000004 MPLLCON=0x7f<<12||0x21,output 405MHz */ #elseldr r0,=CLKDIVNmov r1,#3str r1,[r0]mrc p15,0,r1,c1,c0,0orr r1,r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASEmov r2,#MDIV_200add r2,r2,#PSDIV_200str r2,[r1,#0x04]#endif#endif /*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*//**********************************************************/3 修改cpu/arm920t/s3c24x0/interrupts.c3.1 在条件编译的宏定义里加入对s3c2440的支持:/* #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) *//*modify,flyriz*/#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)||defined(CONFIG_TRAB)/* #elif defined(CONFIG_S3C2410) *//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)3.2 在get_tbclk函数中,添加对mini2440的支持:#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)tbclk = timer_load_val * 100;#elif defined(CONFIG_SBC2410X) || \defined(CONFIG_SMDK2410) || \defined(CONFIG_MINI2440) || \defined(CONFIG_VCMA9) /*modify,flyriz,add:CONFIG_MINI2440*/tbclk = CFG_HZ; /*get_tbclk函数的作用?CFG_HZ又是什么?*/4 修改cpu/arm920t/s3c24x0/speed.c4.1 在条件编译的宏定义里加入对s3c2440的支持:/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410)|| defined (CONFIG_TRAB)*//*modify,flyriz*/#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)4.2 修改get_PLLCLK函数:m = ((r & 0xFF000) >> 12) + 8;p = ((r & 0x003F0) >> 4) + 2;s = r & 0x3;/*add,flyriz*/#if defined(CONFIG_S3C2440)if(pllreg==MPLL)return ((CONFIG_SYS_CLK_FREQ*m*2)/(p<<s)); /*S3C2440中,UPLL与MPLL的计算公式不同*/ else if(pllreg==UPLL)#endif4.3 修改get_HCLK函数:ulong get_HCLK(void){S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();/*return ((clk_power->CLKDIVN&0x2)?get_FCLK()/2:get_FCLK()); delete,flyriz*//*add,flyriz*/#if defined(CONFIG_S3C2440)if(clk_power->CLKDIVN & 0x6){if((clk_power->CLKDIVN & 0x6)==2)return (get_FCLK()/2);if((clk_power->CLKDIVN & 0x6)==6)return ((clk_power->CAMDIVN&0x100)?get_FCLK()/6:get_FCLK()/3);if((clk_power->CLKDIVN & 0x6)==4)return ((clk_power->CAMDIVN&0x200)?get_FCLK()/8:get_FCLK()/4);return (get_FCLK());}else return (get_FCLK());#elsereturn ((clk_power->CLKDIVN&0x2)?get_FCLK()/2:get_FCLK());#endif}5 修改include/asm-arm/mach-types.h,添加mini2440的机器ID(必须与内核提供的ID保持一致):#define MACH_TYPE_GENEVA 1873#define MACH_TYPE_MINI2440 1999 /*add,flyriz,mini2440机器ID,必须与内核提供的ID相同*/6 修改cpu/arm920t/s3c24x0/serial.c/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)*//*modify,flyriz*/#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)7 修改drivers/rtc/s3c24x0_rtc.c/* #elif defined(CONFIG_S3C2410) */#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) /*modify,flyriz*/8 修改include/s3c24x0.h/*#ifdef CONFIG_S3C2410*/#if defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) /*modify,flyriz*/(所有ifdef CONFIG_S3C2410全部替换)/* CLOCK & POWER MANAGEMENT (see S3C2400 manual chapter 6) *//* (see S3C2410 manual chapter 7) */typedef struct {S3C24X0_REG32 LOCKTIME;S3C24X0_REG32 MPLLCON;S3C24X0_REG32 UPLLCON;S3C24X0_REG32 CLKCON;S3C24X0_REG32 CLKSLOW;S3C24X0_REG32 CLKDIVN;/*add,flyriz*/#if defined(CONFIG_S3C2440)S3C24X0_REG32 CAMDIVN; /*增加CAMDIVN的定义*/#endif} /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;9 为开发板新建一个目录在board目录中新建一个目录mini2440,将board/smdk2410下的所有文件拷贝到board/mini2440中,然后对mini2440中的文件做修改:将smdk2410.c改为mini2440.c;将Makefile中的代码COBJS :=smdk2410.o flash.o 改为COBJS :=mini2440.o flash.o10 修改board/mini2440/mini2440.c10.1 修改PLL的配置/*****************#elif FCLK_SPEED==1 // Fout = 202.8MHz#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#endif#define USB_CLOCK 1*//*modify,flyriz*/#elif FCLK_SPEED==1#if defined(CONFIG_S3C2410)/*Fout=202.8MHz*/#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#endif#if defined(CONFIG_S3C2440)/*Fout=405MHz*/#define M_MDIV 0x7f#define M_PDIV 0x2#define M_SDIV 0x1#endif#endif#define USB_CLOCK 1/*****************/10.2 修改UPLL的配置/***************#if USB_CLOCK==0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK==1#define U_M_MDIV 0x48#define U_M_PDIV 0x3#define U_M_SDIV 0x2#endif*//*modify,flyriz*/#if USB_CLOCK==0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK==1#if defined(CONFIG_S3C2410) #define U_M_MDIV 0x48#define U_M_PDIV 0x3#endif#if defined(CONFIG_S3C2440) #define U_M_MDIV 0x38#define U_M_PDIV 0x2#endif#define U_M_SDIV 0x2#endif/*****************/10.3 修改board_init函数,以引导内核/* arch number of SMDK2410-Board *//* gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; *//*modify,flyriz*/gd->bd->bi_arch_number = MACH_TYPE_MINI2440;11 修改board/mini2440/lowlevel_init.S中REFRESH的刷新周期/* REFRESH parameter */#define REFEN 0x1 /* Refresh enable */#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh *//* #define Trp 0x0 2clk *//*modify,flyriz*/#define Trp 0x2 /* 4clk */#define Trc 0x3 /* 7clk */#define Tchr 0x2 /* 3clk *//* #define REFCNT 1113 period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) *//*modify,flyriz*/#define REFCNT 1012/**************************************/12 添加并修改配置文件为开发板添加新的配置文件,复制include/configs/smdk2410.h,另存为include/configs/mini2440.h,并对其进行修改12.1 添加s3c2440的宏定义#define CONFIG_ARM920T 1 /* This is an ARM920T Core *//* #define CONFIG_S3C2410 1 in a SAMSUNG S3C2410 SoC *//* #define CONFIG_SMDK2410 1 on a SAMSUNG SMDK2410 Board *//*modify,flyriz*/#define CONFIG_S3C2440 1#define CONFIG_MINI2440 112.2 修改命令提示符#defineCFG_LONGHELP /* undef to save memory *//* #define CFG_PROMPT "SMDK2410 # " Monitor Command Prompt *//*modify,flyriz*/#define CFG_PROMPT "Mini2440 # "一个具备基本功能的UBOOT代码修改部分已经完成。