uboot版本文件结构
uboot版本文件结构的更新改变

uboot版本文件结构的更新改变分类:ARM2011-09-22 12:57 339人阅读评论(0) 收藏举报本来是开始分析uboot代码的,但是无论是教材还是网上资料都对于我最新下的uboot原码结构不同,对于还是小白的我不容易找到相应的文件,下面是uboot版本中文件组织结构的改变,,,,,u-boot版本情况网站:http://ftp.denx.de/pub/u-boot/1、版本号变化:2008年8月及以前按版本号命名:u-boot-1.3.4.tar.bz2(2008年8月更新)2008年8月以后均按日期命名。
目前最新版本:u-boot-2011.06.tar.bz2(2011年6月更新)2、目录结构变化:u-boot目录结构主要经历过2次变化,u-boot版本第一次从u-boot-1.3.2开始发生变化,主要增加了api的内容;变化最大的是第二次,从2010.6版本开始。
u-boot-2010.03及以前版本├── api存放uboot提供的接口函数├── board根据不同开发板定制的代码,代码也不少├── common通用的代码,涵盖各个方面,已命令行处理为主├── cpu与体系结构相关的代码,uboot的重头戏├── disk磁盘分区相关代码├── doc文档,一堆README开头的文件├── drivers驱动,很丰富,每种类型的设备驱动占用一个子目录├── examples示例程序├── fs文件系统,支持嵌入式开发板常见的文件系统├── include头文件,已通用的头文件为主├── lib_【arch】与体系结构相关的通用库文件├── nand_spl NAND存储器相关代码├── net网络相关代码,小型的协议栈├── onenand_ipl├── post加电自检程序└── tools辅助程序,用于编译和检查uboot目标文件从u-boot-2010.06版本开始把体系结构相关的内容合并,原先的cpu与lib_arch内容全部纳入arch中,并且其中增加inlcude文件夹;分离出通用库文件lib。
uboot 读 文件 解析 字段

uboot 读文件解析字段English: U-Boot is a popular bootloader used in many embedded systems. It provides a flexible and configurable environment for booting an operating system. When it comes to reading files and parsing fields in U-Boot, there are a few steps involved. First, U-Boot needs to have the file system support enabled, either built into the U-Boot binary or as a separate module. Once the file system support is available, U-Boot can use various commands and functions to read files from the file system. These commands typically include 'fatload', 'ext4load', 'tftp', and others, depending on the supported file systems. The 'fatload' command, for example, allows U-Boot to load a file from a FAT filesystem into memory.After reading the file into memory, U-Boot can then parse the file to extract specific fields or data. The exact process of parsing depends on the file's format and structure. U-Boot provides functions and APIs that can be used to parse various file formats such as binary files, configuration files (like ''), and scripts (like ''). These functions help extract specific fields or data from the file and store them in memory variables for later use.To parse a file, one needs to identify the structure of the file and the desired fields to be extracted. This may involve understanding thefile's header, sections, and the format of the fields within those sections. U-Boot provides various functions to help navigate through the file's structure, such as 'fopen', 'fread', and 'fclose' for binary files, or 'env_get' for configuration files. By using these functions, one can read and parse the file step by step, extracting the required fields or data.In summary, reading files and parsing fields in U-Boot involves enabling file system support, using appropriate commands/functions to read files, and then utilizing U-Boot's provided functions and APIs to parse the file's structure and extract desired fields or data. Understanding the file's format and structure is crucial for successful parsing.中文翻译: U-Boot 是许多嵌入式系统中常用的引导加载程序。
u-boot启动分析

背景:Board →ar7240(ap93)Cpu →mips1、首先弄清楚什么是u-bootUboot是德国DENX小组的开发,它用于多种嵌入式CPU的bootloader程序, uboot不仅支持嵌入式linux系统的引导,当前,它还支持其他的很多嵌入式操作系统。
除了PowerPC系列,还支持MIPS,x86,ARM,NIOS,XScale。
2、下载完uboot后解压,在根目录下,有如下重要的信息(目录或者文件):以下为为每个目录的说明:Board:和一些已有开发板有关的文件。
每一个开发板都以一个子目录出现在当前目录中,子目录存放和开发板相关的配置文件。
它的每个子文件夹里都有如下文件(以ar7240/ap93为例):MakefileConfig.mkAp93.c 和板子相关的代码Flash.c Flash操作代码u-boot.lds 对应的链接文件common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。
例如bootm命令对应就是cmd_bootm.ccpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录mips等。
它的每个子文件夹里都有入下文件:MakefileConfig.mkCpu.c 和处理器相关的代码sInterrupts.c 中断处理代码Serial.c 串口初始化代码Start.s 全局开始启动代码Disk:对磁盘的支持Doc:文档目录。
Uboot有非常完善的文档。
Drivers:Uboot支持的设备驱动程序都放在该目录,比如网卡,支持CFI的Flash,串口和USB等。
Fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。
Include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。
该目下configs目录有与开发板相关的配置文件,如ar7240_soc.h。
uboot命令

uboot命令U-boot基础现在为Linux开放源代码Bootloader有很多,blob、redboot 及U-BOOT等,其中U-BOOT是目前用来开发嵌入式系统引导代码使用最为广泛的Bootloader。
它支持POWERPC、ARM、MIPS和 X86等处理器,支持嵌入式操作系统有Linux、Vxworks及NetBSD等。
2.1 U-boot源代码目录结构|-- board 平台依赖,存放电路板相关的目录文件|-- common 通用多功能函数的实现|-- cpu 平台依赖,存放cpu相关的目录文件|-- disk 通用。
硬盘接口程序|-- doc 文档|-- drivers 通用的设备驱动程序,如以太网接口驱动|-- dtt|-- examples 应用例子|-- fs 通用存放文件系统的程序|-- include 头文件和开发板配置文件,所有开发板配置文件放在其configs 里|-- lib_arm 平台依赖,存放arm架构通用文件|-- lib_generic 通用的库函数|-- lib_i386 平台依赖,存放x86架构通用文件|-- lib_m68k 平台依赖|-- lib_microblaze 平台依赖|-- lib_mips 平台依赖|-- lib_nios 平台依赖|-- lib_ppc平台依赖,存放ppc架构通用文件|-- net 存放网络的程序|-- post 存放上电自检程序|-- rtc rtc的驱动程序`-- tools 工具详细实例:board:开发板相关的源码,不同的板子对应一个子目录,内部放着主板相关代码。
Board/at91rm9200dk/at91rm9200.c, config.mk, Makefile, flash.c ,u-boot.lds等都和具体开发板的硬件和地址分配有关。
common:与体系结构无关的代码文件,实现了u-boot所有命令,其中内置了一个shell脚本解释器(hush.c, a prototype Bourne shell grammar parser), busybox中也使用了它。
烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及⽂件系统⼀、sd启动将u-boot镜像写⼊SD卡,将SD卡通过读卡器接上电脑(或直接插⼊笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.(内存卡的节点)。
当有多个交叉编译器是,不⽅便设置环境变量时,可以在编译命令中指定交叉编译器,具体如下:在源码中操作以下步骤:make distcleanmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- mrpropermake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_configmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl编译出tiny210-uboot.bin,注意交叉编译⼯具路径执⾏下⾯的命令$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1把内存卡插⼊开发板,使⽤串⼝⼯具设置环境变量:setenv gatewayip 192.168.1.1(电脑⽹关)setenv ipaddr 192.168.1.102(开发板ip,不要与虚拟机和电脑ip冲突)setenv netmask 255.255.255.0setenv serverip 192.168.1.10(虚拟机ip)saveenv⼆、nand启动烧写Uboot:通过SD卡启动的u-boot for tiny210 将u-boot镜像写⼊nandflash在虚拟机下重启tftp sudo service tftpd-hpa restart开发板终端下执⾏下⾯的命令:[FriendlyLEG-TINY210]# tftp 21000000 tiny210-uboot.bin[FriendlyLEG-TINY210]# nand erase.chip[FriendlyLEG-TINY210]# nand write 21000000 0 3c1f4 (写⼊长度)内核的烧写位置是0x600000开始的区域,⽂件系统烧写位置为0xe00000开始的区域。
UBOOT源码分析

UBOOT源码分析UBOOT是一种开放源码的引导加载程序。
作为嵌入式系统启动的第一阶段,它负责初始化硬件设备、设置系统环境变量、加载内核镜像以及跳转到内核开始执行。
Uboot的源码是开放的,让我们可以深入了解其内部工作机制和自定义一些功能。
Uboot源码的文件组织结构非常清晰,主要分为三个大类:目录、文件和配置。
其中目录包含了一系列相关的文件,文件存放具体的源码实现代码,配置文件包含了针对特定硬件平台的配置选项。
Uboot源码的核心部分是启动代码,位于arch目录下的CPU架构相关目录中。
不同的CPU架构拥有不同的启动代码实现,如arm、x86等。
这些启动代码主要包括以下几个关键功能:1. 初始化硬件设备:Uboot首先需要初始化硬件设备,例如设置时钟、中断控制器、串口等设备。
这些初始化操作是在启动代码中完成的。
通过查看该部分代码,我们可以了解硬件的初始化过程,以及如何配置相关寄存器。
2. 设置启动参数:Uboot启动参数存储在一个称为"bd_info"的数据结构中,它包含了一些关键的设备和内存信息,例如DRAM大小、Flash 大小等。
这些参数是在启动代码中设置的,以便内核启动时能够正确识别硬件情况。
3. 加载内核镜像:Uboot负责加载内核镜像到内存中,以便内核可以正确执行。
在启动代码中,会通过读取Flash设备或者网络等方式,将内核镜像加载到指定的内存地址处。
加载过程中,可能会进行一些校验和修正操作,以确保内核数据的完整性。
4. 启动内核:在内核镜像加载完成后,Uboot会设置一些寄存器的值,并执行一个汇编指令,跳转到内核开始执行。
此时,Uboot的使命即结束,控制权交由内核处理。
除了启动代码,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;。
UBOOT-1.1.6一些文件功能分析_prodigal

141745169S3C2440裸奔讨论群Prodigal UBOOT学习笔记之部分:这是今天下午分析的文件,贴出来希望对大家帮助,分析了文件后对移植理解又更深了一步。
UBOOT移植体会:看下笔记记录时间,UBOOT这环节是从3月10号开始的,其中包括了几个学习环节:UBOOT 启动分析,UBOOT移植,UBOOT常见文件分析。
在移植中感觉最大的收获:倒不是成功的移植几个程序(说实话,在移植过程中,思维一直都是别人的,我们大都做的只是代码搬运,这样学着你是不是觉得很迷茫?),而是对UBOOT文件系统更加熟悉,更加清晰,也学会了一些错误分析的方法。
在UBOOT移植过程中:我不断问自己:要是自己移植的并不是S3C2440,而是一个我不熟悉的开发板,那我又应该怎么修改?也许我不喜欢被动的感觉吧。
01.include/configs/smdk2410.hFUNCTION:一些预定义配置①上层配置信息②Fin=12MHz③MMU IRQ/FIQ④malloc池大小、全局变量池大小⑤硬件设备:网卡我的网卡是DM9000⑥选择串行控制台配置⑦实时时钟RTC⑧波特率设置以及串口overwrite允许⑨预定义命令CONFIG_COMMANDS⑩网络配置*/⑪一些杂乱的配置信息:主要是UBOOT控制台显示设置⑫用PWM定时器4计时10ms(15625),所以1s就应该设置为15625*100⑬可设置的波特率:一般使用115200⑭堆栈大小设置⑮物理内存空间的设置:SDRAM,FLASH⑯FLASH与环境组织⑰擦除与写FLASH的最大时间:02.board/smdk2410/lowlevel_init.SFUNCTION:初始化存储控制器03.board/smdk2410/smdk2410.cFUNCTION:初板子的初始化配置①配置Fout(MPLL)②配置usb输出频率(UPLL)③平台依赖的相关部件的初始化3.1设置系统时钟3.2设置I/O端口3.3读取板子ID3.4UBOOT参数存放位置3.5使能icache与dcache3.5检测内存映射04.include/s3c2410.hFUNCTION:①UART与SPI选用的通道②ECC参数设置③UART的选择④S3C2410芯片上功能部件寄存器的起始地址⑤S3C2410芯片上功能部件寄存器的起始地址的获取函数⑥ISR相关的地址定义⑥这什么玩意??PENDING BIT⑦这什么玩意??清除Pending,这下懂了,就是清除中断挂起寄存器05.include/s3c24x0.hFUNCTION:部件相关的结构体定义06.include/asm-arm/global_data.hFUNCTION:lobal data used for startup functions①定义gd_t(struct global_data)类型的结构体②全局数据标志③宏定义DECLARE_GLOBAL_DATA_PTR07.include/asm-arm/u-boot.hFUNCTION:boot information for Linux kernel 08.include/common.hFUNCTION:目前用到的是:对函数的声明还有几个文件,但目前暂时不想分析只贴这个文件:board/smdk2410/smdk2410.c(并不是说其他的怎么样,而是因为这个文件让我学会了很多东西)/**(C)Copyright2002*Sysgo Real-Time Solutions,GmbH<>*Marius Groeger<mgroeger@sysgo.de>**(C)Copyright2002*David Mueller,ELSOFT AG,<d.mueller@elsoft.ch>**See file CREDITS for list of people who contributed to this*文件CREDITS列出了所有对此做出贡献的人*project.**This program is free software;you can redistribute it and/or一*modify it under the terms of the GNU General Public License as*published by the Free Software Foundation;either version2of些*the License,or(at your option)any later version.**This program is distributed in the hope that it will be useful,*but WITHOUT ANY WARRANTY;without even the implied warranty of说*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the*GNU General Public License for more details.**You should have received a copy of the GNU General Public License明*along with this program;if not,write to the Free Software*Foundation,Inc.,59Temple Place,Suite330,Boston,*MA02111-1307USA*/FUNCTION:初板子的初始化配置①配置Fout(MPLL)②配置usb输出频率(UPLL)③平台依赖的相关部件的初始化3.1设置系统时钟3.2设置I/O端口3.3读取板子ID3.4UBOOT参数存放位置3.5使能icache与dcache3.5检测内存映射/*下面头文件在include/目录下*/#include<common.h>#include<s3c2410.h>DECLARE_GLOBAL_DATA_PTR;/*必须增加这一行才能使用gd变量*//*①配置Fout(MPLL)*/#define FCLK_SPEED1#if FCLK_SPEED==0/*Fout=203MHz,Fin=12MHz for Audio*/#define M_MDIV0xC3#define M_PDIV0x4#define M_SDIV0x1#elif FCLK_SPEED==1/*Fout=202.8MHz*/#define M_MDIV0xA1#define M_PDIV0x3#define M_SDIV0x1#endif/*②配置usb输出频率(UPLL)*/#define USB_CLOCK1#if USB_CLOCK==0#define U_M_MDIV0xA1#define U_M_PDIV0x3#define U_M_SDIV0x1#elif USB_CLOCK==1#define U_M_MDIV0x48#define U_M_PDIV0x3#define U_M_SDIV0x2#endif/**delay函数加上“static inline”是有原因的,*这样可以使得编译*.c时,delay嵌入其他函数中,编译结果中只有其他函数一个函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uboot版本文件结构的更新改变
分类:ARM2011-09-22 12:57 339人阅读评论(0) 收藏举报本来是开始分析uboot代码的,但是无论是教材还是网上资料都对于我最新下的uboot原码结构不同,对于还是小白的我不容易找到相应的文件,下面是uboot版本中文件组织结构的改变,,,,,
u-boot版本情况
网站:http://ftp.denx.de/pub/u-boot/
1、版本号变化:
2008年8月及以前
按版本号命名:u-boot-1.3.4.tar.bz2(2008年8月更新)
2008年8月以后均按日期命名。
目前最新版本:u-boot-2011.06.tar.bz2(2011年6月更新)
2、目录结构变化:
u-boot目录结构主要经历过2次变化,u-boot版本第一次从u-boot-1.3.2开始发生变化,主要增加了api的内容;变化最大的是第二次,从2010.6版本开始。
u-boot-2010.03及以前版本
├── api存放uboot提供的接口函数
├── board根据不同开发板定制的代码,代码也不少
├── common通用的代码,涵盖各个方面,已命令行处理为主
├── cpu与体系结构相关的代码,uboot的重头戏
├── disk磁盘分区相关代码
├── doc文档,一堆README开头的文件
├── drivers驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples示例程序
├── fs文件系统,支持嵌入式开发板常见的文件系统
├── include头文件,已通用的头文件为主
├── lib_【arch】与体系结构相关的通用库文件
├── nand_spl NAND存储器相关代码
├── net网络相关代码,小型的协议栈
├── onenand_ipl
├── post加电自检程序
└── tools辅助程序,用于编译和检查uboot目标文件
从u-boot-2010.06版本开始把体系结构相关的内容合并,原先的cpu与lib_arch内容全部纳入arch中,并且其中增加inlcude文件夹;分离出通用库文件lib。
u-boot-2010.06及以后版本
├── api存放uboot提供的接口函数
├── arch与体系结构相关的代码,uboot的重头戏
├── board根据不同开发板定制的代码,代码也不少
├── common通用的代码,涵盖各个方面,已命令行处理为主
├── disk磁盘分区相关代码
├── doc文档,一堆README开头的文件
├── drivers驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples示例程序
├── fs文件系统,支持嵌入式开发板常见的文件系统
├── include头文件,已通用的头文件为主
├── lib通用库文件
├── nand_spl NAND存储器相关代码
├── net网络相关代码,小型的协议栈
├── onenand_ipl
├── po st 加电自检程序
└── tools辅助程序,用于编译和检查uboot目标文件
3、移植工作涉及的目录情况
从uboot代码根目录,可以看出其已经非常庞大,功能也很丰富。
移植工作最主要的是看对应的处理器和开发板代码,2010.06版本以后处理器相关的代码集中在arch、boar d目录。
(以前版本主要在cpu和board目录)
先看一下arch目录:
arch
├── arm
├── avr32
├── blackfin
├── i386
├── m68k
├── microblaze
├── mips
├── nios2
├── powerpc
├── sh
└── sparc
arch目录内容比以前的版本干净,每个子目录代表一个处理器类型,子目录名称就是处理器的类型名称。
我们移植的是mips的处理器,所以参考一下arch/mips目录:
arch/mips
├── cpu
├── include
└── lib
arch/mips目录下有三个目录,其他的处理器目录下也是这个结构:
cpu子目录对应一种处理器的不同产品型号或者系列;
include子目录是处理器用到的头文件;
lib目录对应用到处理器公用的代码;
下面看看cpu下的内容,arch/mips/cpu目录下的内容:
arch/mips/cpu
├── asc_serial.c
├── asc_serial.h
├── au1x00_eth.c
├── au1x00_serial.c
├── au1x00_usb_ohci.c
├── au1x00_usb_ohci.h
├── cache.S
├── config.mk
├── cpu.c
├── incaip_clock.c
├── i ncaip_wdt.S
├── interrupts.c
├── Makefile
└── start.S整个uboot代码入口点
目前最新版本(2011.6版本开始)中cpu目录中建立mips32目录,把incaip和au1x00也分类放在不同的目录中。
u-boot.lds是ld程序也就是连接器的脚本文件,这个文件描述了如何连接目标文件,ld程序会根据这个文件的指示按照需求把不同的目标文件连接在一起生成供烧写到开发板的程序。
该文件放在board对应的目录中。
4、移植u-boot的版本选择情况
由于u-boot的各版本没有重大变化,各版本移植起来基本相同,也正因为如此,大多数版本均有人移植过,主要是arm体系结构的。
如cortex A8使用u-boot-1.3.4;cortex M3 上u-boot-1.1.6、u-boot-1.2.0等均有人移植过。
考虑到我们目前的编译器较新,编译旧版本u-boot时会出现错误,警告也很多;新版本的u-boot目录结构也较清晰,因此选用较新版本的u-boot。
最新版本(2011.06)Makefile中没有mips的部分,不知道为什么。
(2011.03版本中同样也是)
u-boot-2010.12的Makefile没有问题,编译incaip通过,没有任何警告和错误,因此最终选择u-boot-2010. 12作为我们的移植版本。