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嵌入其他函数中,编译结果中只有其他函数一个函数。
路由器固件文件结构简单分析
一、固件文件结构简单讲解
编程器固件中包含uboot或CFE,fw和art。
uboot就像电脑的bios,是底层的管理系统;
fw就像电脑的操作系统,实现路由器的各种功能;
art就像电脑的无线驱动程序,是无线校验码;
uboot的长度为128KB(0x20000);art为64KB(0x10000);fw有4M和8M的区别,4M的为3840K (0x3c0000),8M的为7936KB(0x7c0000)。
在刷机之前要对要刷入flash的uboot、fw、art的文件长度用ultraedit或winhex进行校验。
尤其是uboot,如果大小不对,千万不要尝试刷入,那是一定会变砖的。
uboot、fw和art在flash中的位置如下:
二、常见修改方式
例如下图:就是固件常见起始位置
修改CFE mac
图片中的划线部分就是mac 注意修改的时候是16进制。
固件可能有多处mac都要一一修改,可以使用菜单栏-搜寻-替换功能进行查找
修改端口
图中红线部分是lan口代表1-4lan口(1-4),蓝线部分代表wan口(0),解释下为什么要到5呢?这个代表终止的意思一共5个口分别是0 1 2 3 4 所以终止是5
以上是个人常见一些修改的简单体会,希望各位大大多多指导小弟!。
bootloader介绍0--u-boot整体介绍
利用norflash上supervivi烧写rootfs.img
拨动挄钮,选择模式从norflash上启动机器。这时候,机器一上电,便会迚入如下界面,选择 y 升级rootfs.img
然后利用dnw烧写rootfs.img到开发板上。
如何挂载rootfs.img?
a. • • b. • 挂载rootfs.img(a和b两种方法都可以) 可以通过如下方式,由u-boot传参给kernel,让kernel在启动的最后阶段,从/dev/mtdblock3上挂 载真实的根文件系统rootfs.img # setenv bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M # saveenv 当然,也可以直接修改u-boot代码,修改include/configs/mini2440.h文件, #define CONFIG_BOOTARGS " noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M "
3. a)
为了不kernel的flash分区配置表保持一致。对u-boot代码修改如下: 修改include/configs/mini2440.h文件,
• • b) •
#define CONFIG_ENV_OFFSET 0X40000 //修改env分区的偏移值,从0x60000改为0x40000 #define CONFIG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */ 修改cpu/arm920t/start.S文件, #define LENGTH_UBOOT 0x40000 //修改u-boot的大小,把0x60000改为0x40000
U-BOOT中文文档
U_BOOT_VERSION
u_boot_logo
IH_OS_U_BOOT
u_boot_hush_start
The "official" name of this project is "Das U-Boot". The spelling
"U-Boot" shall be used in all written text (documentation, comments
u_boot_logo u_boot_hush_start
Versioning: =========== 版本 U-Boot uses a 3 level version number containing a version, a sub-version, and a patchlevel: "U-Boot-2.34.5" means version "2", sub-version "34", and patchlevel "4". uboot的3级版本数字包含一个主版本,子版本,补丁级别:uboot-2.34.5表示主版本2, 子版本34,补丁级别4。
<u-boot-users@>. There is also an archive of previous traffic on the mailing list - please search the archive before asking FAQ's. Please see /lists/listinfo/u-boot-users/ 如果你对U-Boot有疑问,或者想为U-Boot贡献,你应该向U-Boot邮件列表<u-boot-users@lists. >发送消息。在提问前,请搜索邮件列表的历史记录:http://lists.sourceforg /lists/listinfo/u-boot-users/
BOOT详解
1 U-Boot简介U-Boot,全称Universal BootLoader,是遵循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软件工程中心WolfgangDenk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOTLOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
U-BOOT中MAKEFILE详解
U-BOOT详解U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。
U-BOOT的下载地址: /projects/u-boot我下载的是1.1.6版本,一开始在FTP上下载了一个次新版,结果编译失败。
1.1.6是没问题的。
u-boot源码结构解压就可以得到全部u-boot源程序。
在顶层目录下有18个子目录,分别存放和管理不同的源程序。
这些目录中所要存放的文件有其规则,可以分为3类。
第1类目录与处理器体系结构或者开发板硬件直接相关;第2类目录是一些通用的函数或者驱动程序;第3类目录是u-boot的应用程序、工具或者文档。
u-boot的源码顶层目录说明目录特性解释说明board 平台依赖存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目录cpu 平台依赖存放CPU相关的目录文件例如:mpc8xx、ppc4xx、arm720t、arm920t、 xscale、i386等目录lib_ppc 平台依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数lib_arm 平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386 平台依赖存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数include 通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common 通用通用的多功能函数实现lib_generic 通用通用库函数的实现net 通用存放网络的程序fs 通用存放文件系统的程序post 通用存放上电自检程序drivers 通用通用的设备驱动程序,主要有以太网接口的驱动disk 通用硬盘接口程序rtc 通用 RTC的驱动程序dtt 通用数字温度测量器或者传感器的驱动examples 应用例程一些独立运行的应用程序的例子,例如helloworldtools 工具存放制作S-Record或者u-boot格式的映像等工具,例如mkimagedoc 文档开发使用文档u-boot的源代码包含对几十种处理器、数百种开发板的支持。
uboot-配置文件
uboot-配置⽂件uboot配置⽂件⼀般在configs下⾯,但是这⾥的配置⽂件⾥⾯的内容很少,⼀般相关的c和h配置⽂件在:board/freescare(⼚家)/imx6ullevk(扳⼦)/imx6ullevk.c(板⼦c⽂件)头⽂件在:include/configs/mx6ullevk.h(板⼦头⽂件)其中头⽂件引⼊了⼀个很重要的⽂件(mon.h),这⾥⾯存放了这⼀系列的板⼦的所有通⽤配置⽂件,可以修改改⽂件进⾏配置。
DDR在uboot中的board/freescare(⼚家)/imx6ullevk(扳⼦)/imx6ullevk.c(板⼦c⽂件)的统计⽬录下存在⼀个imximage.cfg⽂件,该⽂件⽤于校准DDR,在这⾥进⾏ddr的校准测试。
环境变量如果我们没有配置环境变量,那么在系统启动的时候,他会条⽤⾃⼰的环境变量,这个环境变量的配置⽂件在:include/env_default.h中定义。
⽐如说⾥⾯的:#ifdef CONFIG_BOOTCOMMAND “bootcmd=” CONFIG_BOOTCOMMAND “\0”这⾥的CONFIG_BOOTCOMMAND在之前配置的.h⽂件中有定义(include/configs/mx6ullevk.h(板⼦头⽂件))。
bootcmdbootcmd主要是⽤来启动内核的,⾥⾯存放了⼀些列命令,⽤于uboot启动内核。
可以直接在include/configs/mx6ullevk.h(板⼦头⽂件)的头⽂件中通过修改CONFIG_BOOTCOMMAND直接将bootcmd进⾏写死bootargsbootargs会将其值传递给内核。
在头⽂件中CONFIG_EXTRA_ENV_SETTINGS下⾯运⾏了⼀个"run mmcargs的脚本,在该脚本中定义了bootargs: "mmcargs=setenv console,bootargs console={baudrate} "将其展开:bootargs console = ttymxc0,115200,root=/dev/mmcblk1p2root设置的是根⽂件系统。
Tekkaman Ninja的uboot移植详细文档
u ‐boot 移植详细文档作者:Tekkaman Ninja作者博客:整理:Coolbor Xie一、Boot Loader 的概念和功能1、嵌入式Linux 软件结构与分布在一般情况下嵌入式Linux 系统中的软件主要分为以下及部分:(1)引导加载程序:其中包括内部ROM 中的固化启动代码和Boot Loader 两部分。
而这个内部固化ROM 是厂家在芯片生产时候固化的,作用基本上是引导Boot Loader 。
有的芯片比较复杂,比如Omap3,他在flash 中没有代码的时候有许多启动方式:USB 、UART 或以太网等等。
而S3C24x0则很简单,只有Norboot 和Nandboot 。
(2)Linux kernel 和drivers 。
(3)文件系统。
包括根文件系统和建立于Flash 内存设备之上的文件系统(EXT4、UBI 、CRAMFS 等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。
(4)应用程序。
用户自定义的应用程序,存放于文件系统之中。
在Flash 存储器中,他们的一般分布如下:但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs ,被一起压缩到了内核映像里,或者没有Bootloader 参数区,等等。
2、在嵌入式Linux 中为什么要有BootLoader在linux 内核的启动运行除了内核映像必须在主存的适当位置,CPU 还必须具备一定的条件: 1. CPU 寄存器的设置: R0=0;R1=Machine ID(即Machine Type Number ,定义在linux/arch/arm/tools/mach ‐types);R2=内核启动参数在 RAM 中起始基地址;2. CPU 模式:必须禁止中断(IRQs 和FIQs );CPU 必须 SVC 模式;3. Cache 和 MMU 的设置: MMU 必须关闭;指令 Cache 可以打开也可以关闭;数据 Cache 必须关闭;但是在CPU 刚上电启动的时候,一般连内存控制器都没有配置过,根本无法在内存中运行程序,更不可能处在Linux 内核的启动环境中。
ubifs文件系统的制作详解
ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之一“uboot中添加对UBIFS文件系统的支持”分类:嵌入式2012-04-18 21:34 314人阅读评论(0) 收藏举报为了更好的理解ubifs根文件系统的制作,首先,我们简单的说一下,系统的组成:bootloader(uboot)的作用就是用来加载操作系统;而嵌入式linux系统由linux 内核和根文件系统两部分构成,两者缺一不可。
所以我们要制作一个UBIFS的根文件系统,首先必须让上面系统组成的几个部分都支持UBIFS文件系统,就得在这几个组成部分添加一些“东西”(支持UBI的配置):(打个我自己理解的比喻吧:“娶媳妇”比作--启动系统,娶媳妇是不是要经过老爸、老妈、丈母娘、岳父的同意和支持?bootloader、parames、kernel、root Filesystem便是老爸、老妈、丈母娘、岳父...O(∩_∩)O~,而你叫"UBI")这篇博文主要是详细解析:uboot中添加对UBIFS文件系统的支持一、移植环境§主机:vmware-redhat5§开发板:mini2440--256MB nandflash§kernel:2.6.29 编译器:arm-linux-gcc-4.3.2.tgz§uboot: u-boot-2008.10二.移植步骤本次移植的功能为:支持UBIFS文件系统1.在include/configs/mini2440.h中添加如下配置:(注意:不同的开发板在include/configs/目录下对应的修改的配置文件不同,我的开发板是mini2440所以修改的是mini2440.h)#define CONFIG_MTD_DEVICE#define CONFIG_MTD_PARTITIONS#define CONFIG_CMD_MTDPARTS#define CONFIG_LZO#define CONFIG_RBTREE#define CONFIG_CMD_UBIFS //要支持ubIfs首先得让uboot支持UBIFS的烧写命令#define CONFIG_CMD_UBI //uboo支持的ubifs烧写命令:1.mtdparts: 用来给NAND分区;/*2.nand erase.part:用来擦除指定分区等这些命令在“UBIFS镜像的制作&&烧写”博文理解*///其次要支持MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统#define MTDIDS_DEFAULT "nand0=nandflash0" //同时要给nandlflash建立默认的分区,#define MTDPARTS_DEFAULT"mtdparts=nandflash0:384k(bootloader),"\ //我的分区:"128k(params),"\"5m(kernel),"\"64m(root)"/*还要修改下面几个宏,因为使用UBIFS会占用更多的堆、栈空间*/#define CONFIG_STACKSIZE (512*1024)#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE+1024*1024) #define CONFIG_SYS_GBL_DATA_SIZE 5122.回到uboot的顶层目录下(可能拿到的uboot已被编译过,所以最好要用此命令清理中间文件)执行命令:make clean(uboot是通用的bootloader,支持多种开发板,所以编译之前先选择使用哪种board)执行命令:make mini2440_config注意:我用的是mini2440开发板,所以要编译这个开发板使用的uboot,所以这里的目标为mini2440_config,表示选择的board是mini2440(mini2440_config在Makefile标准术语称为“目标”,可以在uboot顶层Makefile找到该目标)执行命令(开始编译uboot):make CROSS_COMPILE=arm-linux-ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之二“Linux内核中添加对UBIFS文件系统的支持”分类:嵌入式2012-04-19 13:55 156人阅读评论(0) 收藏举报一、移植环境§主机:vmware-redhat5§开发板:mini2440--256MB nandflash§kernel:2.6.29 编译器:arm-linux-gcc-4.3.2.tgz§uboot: u-boot-2008.10二.移植步骤1.在内核顶层目录下使用命令:make menuconfig ,进入内核配置菜单,添加对UBIFS文件系统的支持。
uboot的介绍及体系结构
uboot的介绍及体系结构1.1 uboot的介绍Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot 不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。
1.2 uboot的体系结构目录树|--board|--common|--cpu|--disk|--doc|--drivers|--dtt|--examples|--fs|--include|--lib_arm|--lib_generic|--net|--post|--rtc|--tools2. board:和一些已有开发板有关的文件. 每一个开发板都以一个子目录出现在当前目录中,比如说: leopard2a子目录中存放与我们开发板相关的配置文件.3. common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。
例如bootm命令对应就是cmd_bootm.c。
4. cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm926ejs就是我们开发板上使用的cpu架构目录。
5. disk:对磁盘的支持。
5. doc:文档目录。
Uboot有非常完善的文档,推荐大家参考阅读。
6. drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI 的Flash、串口和USB等。
7. fs: 支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。
8. include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。
4.3.1U-Boot代码结构分析
4.3.1U-Boot代码结构分析4.3 Bootloader之U-BootU-Boot是在PPC-Boot的基础上进化⽽来的⼀个开放源码的嵌⼊式BootROM程序,本⼩节将使⽤1.1.4版本的代码来分析U-Boot的代码结构,以及如何将它移植到基于S3C2410X的开发板上来。
4.3.1 U-Boot代码结构分析U-Boot4-9所⽰。
board:这个⽬录存放了所有U-Boot⽀持的⽬标板的⼦⽬录,如board/smdk2410/*就和我们的开发平台fs2410相类似。
要将U-Boot移植到⾃⼰的S3C2410X⽬标板上,必须参考这个⽬录下的内容,⽐如对Flash 以及Flash宽度和⼤⼩的定制等就要修改其中的flash.c。
cpu:这个⽬录存放了U-Boot⽀持的CPU类型,因为我们的开发平台是S3C2410X,所以只关⼼cpu/arm920t,CPU相关的⽂件主要是初始化⼀个执⾏环境,包括中断的初始化;start.S是整个u-boot.bin ⽬标可执⾏代码的第⼀段代码,它们是从Flash开始运⾏的,其主要⼯作就是对整个U-Boot⽬标代码的重定位,即将U-Boot转移到内存中去运⾏。
common:这个⽬录存放了U-Boot的⼀些公共命令的实现,像那些以cmd_*.c为名字的⽂件就是对应U-Boot的每个命令的实现代码,我们通常关⼼cmd_boot.c和cmd_bootm.c(它们和内核的引导相关)。
drivers:这个⽬录中存放了各种外设接⼝的驱动程序。
fs:这个⽬录中存放了U-Boot⽀持的⽂件系统。
lib_arm:这个⽬录存放了ARM平台公共的接⼝代码。
include:这个⽬录存放头⽂件的公共⽬录,其中的include/configs/smdk2410.h定义了所有和S3C2410X 相关的资源的配置参数,我们往往只需修改这个⽂件就可以配置⽬标板的参数,如波特率、引导参数、物理内存映射等。
uboot二进制结构
uboot二进制结构U-Boot二进制结构U-Boot是一个开源的引导加载程序,常用于嵌入式系统中。
它的二进制结构是由一系列特定格式的数据组成,这些数据用于实现引导加载、初始化硬件和启动操作系统等功能。
本文将详细介绍U-Boot 二进制结构的各个部分。
1. 引导代码段(Boot Code)引导代码段是U-Boot二进制结构中的第一部分,它负责初始化处理器和外设,并加载后续的引导阶段所需的代码和数据。
引导代码段通常由汇编语言编写,它包含了一系列底层的初始化和配置代码。
在引导过程中,处理器会首先执行引导代码段。
2. 配置数据段(Configuration Data)配置数据段是U-Boot二进制结构中的第二部分,它包含了U-Boot 的配置信息,如启动参数、设备树(Device Tree)等。
启动参数是一组用于指定启动参数的字节序列,包括启动命令、内核镜像地址、根文件系统地址等。
设备树是一种描述硬件设备和系统配置的数据结构,它提供了硬件设备的详细信息,如设备类型、中断号、寄存器地址等。
3. 命令解析器(Command Interpreter)命令解析器是U-Boot二进制结构中的第三部分,它负责解析用户输入的命令,并执行相应的操作。
U-Boot提供了丰富的命令集,用户可以通过命令解析器来执行各种操作,如加载内核镜像、启动操作系统、修改配置参数等。
命令解析器使用类似于Shell的语法,用户可以通过命令行交互式地与U-Boot进行操作。
4. 设备驱动程序(Device Drivers)设备驱动程序是U-Boot二进制结构中的第四部分,它负责管理和操作硬件设备。
U-Boot提供了各种设备驱动程序,如串口驱动程序、网络驱动程序等,用于与外部设备进行通信。
设备驱动程序通过与硬件设备的接口交互,实现了对硬件设备的控制和管理。
5. 文件系统支持(Filesystem Support)文件系统支持是U-Boot二进制结构中的第五部分,它提供了对各种文件系统的支持。
- 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作为我们的移植版本。