《UBOOT基础知识课件》由会员分享,可在线阅读,更多相关《UBOOT基础知识课件(74页珍藏版)》请在金锄头文库上搜索。
1、UBOOTUBOOT基础知识课件基础知识课件提提 纲纲理论:理论:nBootLoaderBootLoader介绍介绍nUbootUboot介绍介绍nUbootUboot命令命令nUbootUboot工作流程工作流程nUbootUboot移植移植nUbootUboot烧写烧写实验:实验:n移植移植UbootnUboot使用使用第一节第一节BootLoader介绍介绍概念概念什么是什么是BootLoaderBootLoader?软件层次软件层次一个嵌入式系统从软件角度来看分为三个层次:一个嵌入式系统从软件角度来看分为三个层次:1. 1. 引导加载程序引导加载程序 包括固化在固件包括固化在固件( (
2、firmware)firmware)中的中的 boot boot 代码代码( (可选可选) ),和,和 BootLoader BootLoader 两大部分。两大部分。 2. 2. Linux Linux 内核内核 特定于嵌入式平台的定制内核。特定于嵌入式平台的定制内核。 3. 3. 文件系统文件系统 包括了系统命令和应用程序。包括了系统命令和应用程序。 软件层次软件层次一个同时装有一个同时装有 BootLoaderBootLoader、内核的启动内核的启动参数参数、内核映像内核映像和和根文件系统根文件系统映像的固映像的固态存储设备的典型空间分配结构图:态存储设备的典型空间分配结构图:回忆回忆
3、PCPCPC机中的引导加载程序由机中的引导加载程序由BIOSBIOS(其本质是一段固件程序)其本质是一段固件程序)和位和位于于硬盘硬盘MBRMBR中的引导程序中的引导程序( (GRUBGRUB或或LILO)LILO)一起组成。一起组成。BIOSBIOS在完成硬件在完成硬件检测和资源分配后,将硬盘中的检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将引导程序读到系统内存中然后将控制权交给引导程序。引导程序控制权交给引导程序。引导程序的主要任务是的主要任务是将内核从硬盘上读将内核从硬盘上读到内存中到内存中, ,然后跳转到内核的入口然后跳转到内核的入口点去运行,即启动操作系统。点去运行,即启动
4、操作系统。定义定义在嵌入式系统中,在嵌入式系统中,通常通常没有像没有像BIOSBIOS那样的固那样的固件程序,件程序,因此整个系统的加载启动任务就完因此整个系统的加载启动任务就完全由全由BootLoaderBootLoader来完成来完成。比如在一个基于。比如在一个基于ARM7TDMIARM7TDMIcorecore的嵌入式系统中,系统在的嵌入式系统中,系统在上电或复位时都从地址上电或复位时都从地址0 0x00000000x00000000开始执行。开始执行。而在这个地址处安排的通常就是系统的而在这个地址处安排的通常就是系统的BootLoaderBootLoader程序。程序。定义定义简单地说
5、,简单地说,BootLoaderBootLoader就是在操作系统就是在操作系统运行之前运行的运行之前运行的一段小程序一段小程序。通过这段。通过这段小程序,可以初始化硬件设备,从而将小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备以便为最终调用操作系统做好准备。功能功能BootLoader BootLoader 的的主要任务主要任务是是初始化硬件初始化硬件(如:串口,内存)(如:串口,内存),然后将内核映,然后将内核映象从象从 Flash Flash 中读到中读到 RAM RAM 中,然后跳中,然后跳转到内
6、核的入口点去运行,也就是转到内核的入口点去运行,也就是启启动操作系统动操作系统。安装安装系统加电或复位后,所有的系统加电或复位后,所有的CPUCPU通通常都从常都从CPUCPU制造商预先安排地址开制造商预先安排地址开始执行始执行。比如,比如,S3C2410S3C2410在复位后在复位后从地址从地址0 0x00000000x00000000起开始执行起开始执行。而而嵌入式系统则将固态存储设备(比嵌入式系统则将固态存储设备(比如:如:FLASHFLASH)安排在这个地址上)安排在这个地址上,而而bootloaderbootloader程序又安排在固态存程序又安排在固态存储器的最前端储器的最前端,这
7、样就能保证在系这样就能保证在系统加电后,统加电后,CPUCPU首先执行首先执行BootLoaderBootLoader程序。程序。移植移植Q:Q:什么叫什么叫bootloaderbootloader移植?移植?Q:Q:为什么需要移植?为什么需要移植?移植移植每种每种不同的不同的CPUCPU体系结构体系结构都有不同的都有不同的BootLoaderBootLoader。除了依赖于除了依赖于CPUCPU的体系结构外,的体系结构外,BootLoader BootLoader 还依还依赖于赖于具体的嵌入式板级设备的配置具体的嵌入式板级设备的配置,比如板卡的,比如板卡的硬件地址分配,外设芯片的类型等。这也
8、就是说,硬件地址分配,外设芯片的类型等。这也就是说,对于两块不同的开发板而言,对于两块不同的开发板而言,即使它们是基于同即使它们是基于同一种一种CPUCPU而构建的,但如果他们的硬件资源或配置而构建的,但如果他们的硬件资源或配置不一致的话,不一致的话,要想在一块开发板上运行的要想在一块开发板上运行的BootLoaderBootLoader程序也能在另一块板子上运行,还是程序也能在另一块板子上运行,还是需要作修改。需要作修改。流程流程BootLoader BootLoader 的启动过程可分为的启动过程可分为单阶段单阶段(Single-StageSingle-Stage)和和多阶段多阶段(Mul
9、ti-StageMulti-Stage)两种,通常多阶段的两种,通常多阶段的 BootLoader BootLoader 具有更复杂具有更复杂的功能,更好的可移植性。从固态存储设备上的功能,更好的可移植性。从固态存储设备上启动的启动的 BootLoader BootLoader 大多大多采用两阶段采用两阶段,即启动,即启动过程可以分为过程可以分为 stage 1stage 1和和 stage2stage2:stage1stage1完完成初始化硬件,为成初始化硬件,为stage2stage2准备内存空间,并将准备内存空间,并将stage2stage2复制到内存中,设置堆栈,然后跳转到复制到内存中
10、,设置堆栈,然后跳转到stage2stage2。流程流程BootLoader BootLoader 的的 stage1 stage1 通常包括以下步骤:通常包括以下步骤:硬件设备初始化硬件设备初始化为加载为加载 BootLoader BootLoader 的的 stage2 stage2 准备准备 RAM RAM 空间空间拷贝拷贝 BootLoader BootLoader 的的 stage2 stage2 到到 RAM RAM 空间空间中中设置好堆栈(设置好堆栈(why?why?)跳转到跳转到 stage2 stage2 的的 C C 入口点入口点流程流程BootLoader BootLoa
11、der 的的 stage2stage2 通常包括以下步骤:通常包括以下步骤:初始化本阶段要使用到的硬件设备初始化本阶段要使用到的硬件设备将内核映像和根文件系统映像从将内核映像和根文件系统映像从 flash flash 上读上读到到 RAM RAM 中中调用内核调用内核内存分布内存分布第二节第二节UBOOTUBOOT介绍介绍作用作用UbootUboot是德国是德国DENXDENX小组开发的用于小组开发的用于多多种嵌入式种嵌入式CPUCPU( MIPS MIPS、x86x86、ARMARM、XScaleXScale等等)的的bootloaderbootloader程序程序, , UBootUBoo
12、t不仅支持嵌入式不仅支持嵌入式LinuxLinux系统的系统的引导,还支持引导,还支持VxWorks, QNXVxWorks, QNX等等多种多种嵌入式操作系统嵌入式操作系统。下载下载从下面地址可以下载到从下面地址可以下载到ubootuboot的源代码:的源代码:http:/ 目录树目录树进入到进入到UBOOTUBOOT目录,可以得到如下的目录,可以得到如下的目录结构目录结构:|board|common|cpu|disk|doc|drivers|dtt|examples|fs|include目录树目录树|lib_arm|lib_generic|lib_i386|lib_m68k|lib_mic
13、roblaze|lib_mips|lib_nios|lib_nios2|lib_ppc|net|post|rtctools目录结构目录结构(展示展示)BoardBoard和开发板有关的文件。每一个开发板都以一个子目录出现和开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,比如在当前目录中,比如: :SMDK2410,SMDK2410,子目录中存放与开发板相子目录中存放与开发板相关的文件。关的文件。CommonCommon实现实现UbootUboot支持的命令。支持的命令。CpuCpu与特定与特定CPUCPU架构相关的代码,每一款架构相关的代码,每一款UbootUboot下支持的下支
14、持的CPUCPU在该在该目录下对应一个子目录,比如有子目录目录下对应一个子目录,比如有子目录arm920tarm920t等。等。DiskDisk 对磁盘的支持。对磁盘的支持。DocDoc文档目录。文档目录。UbootUboot有非常完善的文档,推荐大家参考阅读。有非常完善的文档,推荐大家参考阅读。 DriversDriversUbootUboot支持的设备驱动程序都放在该目录,比如各种网卡、支持的设备驱动程序都放在该目录,比如各种网卡、支持支持CFICFI的的FlashFlash、串口和串口和USBUSB等。等。目录结构目录结构(展示展示)目录结构目录结构(展示展示)FsFs 文件系统的支持文
15、件系统的支持。IncludeInclude Uboot Uboot使用的头文件。该目录下使用的头文件。该目录下configsconfigs目录目录有与开发板相关的配置头文件,如有与开发板相关的配置头文件,如smdk2410.hsmdk2410.h。该目录下的该目录下的asmasm目录目录有与有与CPUCPU体系结构相关的头体系结构相关的头文件。文件。目录结构目录结构(展示展示)NetNet与网络协议栈相关的代码,例如:与网络协议栈相关的代码,例如:TFTPTFTP协议、协议、RARPRARP协议的实现。协议的实现。ToolsTools生成生成UbootUboot的工具,如:的工具,如:mkim
16、age, crcmkimage, crc等等等。等。编译编译UbootUboot的的MakefileMakefile从从功能上功能上可以分成两可以分成两个部分:个部分:1 1、执行每种、执行每种boardboard相关的配置相关的配置2 2、编译生成、编译生成uboot.binuboot.bin文件文件编译编译(演示演示)Uboot.binUboot.bin的生成也分为两步,以的生成也分为两步,以smdk2410smdk2410为为例来说明,如下:例来说明,如下:1.1. 对于对于boardboard进行配置:进行配置:$ $make smdk2410_configmake smdk2410_
17、config2.2. 进行编译生成进行编译生成u-boot.binu-boot.bin:$make CROSS_COMPILE=arm-linux-$make CROSS_COMPILE=arm-linux- 第三节第三节UBOOT命令命令常用命令常用命令(演示演示)尽管尽管UBOOTUBOOT提供了丰富的命令集,但不同的单板所提供了丰富的命令集,但不同的单板所支持的命令并不一定一样(支持的命令并不一定一样(可配置,可配置,How?How?后面章后面章节节),),help help 命令可用于察看当前单板所支持的命命令可用于察看当前单板所支持的命令。令。2410 # 2410 # helphe
18、lpautoscrrunscriptfrommemorybaseprintorsetaddressoffsetbdinfoprintBoardInfostructurebootbootdefault,i.e.,runbootcmdbootmbootapplicationimagefrommemorybootpbootimagevianetworkusingBootP/TFTPprotocol环境变量相关环境变量相关(演示演示)Printenv Printenv 打印环境变量打印环境变量usage:usage:printenvprintenv - print values of all envi
19、ronment variables - print values of all environment variablesprintenv name .printenv name . - print value of environment variable name - print value of environment variable nameUboot printenvUboot printenvbaudrate=115200baudrate=115200ipaddr=192.168.1.1ipaddr=192.168.1.1ethaddr=12:34:56:78:9A:BCetha
20、ddr=12:34:56:78:9A:BCserverip=192.168.1.5serverip=192.168.1.5环境变量相关环境变量相关(演示演示)Setenv Setenv 设置新的变量设置新的变量( (修改已有变量修改已有变量) )setenv name value .setenv name value . - - setset environment variable name to value . environment variable name to value .setenv namesetenv name - - deletedelete environment va
21、riable name environment variable nameUboot setenv myboard AT91RM9200DKUboot setenv myboard AT91RM9200DKUboot printenvUboot printenv ethaddr=12:34:56:78:9A:BC ethaddr=12:34:56:78:9A:BCserverip=192.168.1.5serverip=192.168.1.5myboard=AT91RM9200DKmyboard=AT91RM9200DK环境变量相关环境变量相关(演示演示)Saveenv Saveenv 保存变
22、量保存变量将当前定义的所有变量及其值存入将当前定义的所有变量及其值存入flashflash中。中。文件下载文件下载(演示演示)Tftp Tftp 通过网络下载文件通过网络下载文件 * *使用使用tftptftp,需要先配置好网络需要先配置好网络Uboot setenv ethaddr 12:34:56:78:9A:BCUboot setenv ethaddr 12:34:56:78:9A:BCUboot setenv ipaddr 192.168.1.1Uboot setenv ipaddr 192.168.1.1Uboot setenv serverip 192.168.1.254Uboot
23、 setenv serverip 192.168.1.254(tftptftp服务器的服务器的地址)地址)例:例:Uboot tftp 32000000 vmlinuxUboot tftp 32000000 vmlinux把把serverserver(IP=IP=环境变量中设置的环境变量中设置的serveripserverip)中服务目录中服务目录 下的下的vmlinuxvmlinux通过通过TFTPTFTP读入到读入到0 0x32000000x32000000处。处。内存操作命令内存操作命令(演示演示)Md Md 显示内存区的内容。显示内存区的内容。mdmd采用十六进制和采用十六进制和ASC
24、IIASCII码两种形式来显示存储单元的内容。码两种形式来显示存储单元的内容。这条命令还可以采用长度标识符这条命令还可以采用长度标识符 . .l, .wl, .w和和. .b b :md .b, .w, .l addressmd .b, .w, .l addressmd.w 100000md.w 10000000100000: 2705 1956 5050 4342 6f6f 7420 312e 312e 00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e .VPPCBoot 1.1.VPPCBoot 1.1.00100010: 3520 284
25、d 6172 2032 3120 3230 3032 202d 5 00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 -(Mar 21 2002 -00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 19:55:04).19:55:04).内存操作命令内存操作命令(演示演示)Mm Mm 修改内存,地址自动递增。修改内存,地址自动递增。mm.b,.w,.laddressM
26、m提供了一种互动修改存储器内容的方法。它会显示地址和提供了一种互动修改存储器内容的方法。它会显示地址和当前值,然后提示用户输入。如果你输入了一个合法的十当前值,然后提示用户输入。如果你输入了一个合法的十六进制数,这个新的值将会被写入该地址。然后提示下一六进制数,这个新的值将会被写入该地址。然后提示下一个地址。如果你没有输入任何值,只是按了一下回车,那个地址。如果你没有输入任何值,只是按了一下回车,那么该地址的内容保持不变。如果想么该地址的内容保持不变。如果想结束输入结束输入,则,则输入空格,输入空格,然后回车然后回车。=mm10000000100000:27051956?000100004:5
27、0504342?AABBCCDD00100008:6f6f7420?01234567Flash操作命令操作命令(演示演示)FlinfoFlinfo 查看查看FlashFlash扇区信息扇区信息UsageUsage:Uboot FlinfoUboot Flinfo Flash操作命令操作命令(演示演示)ProtectFlashFlash写保护写保护 打开或关闭扇区写保护打开或关闭扇区写保护用法:用法:protect off allprotect off all 关闭所有扇区的写保护关闭所有扇区的写保护protect on allprotect on all 打开所有扇区的写保护打开所有扇区的写保
28、护protect off start endprotect off start end 关闭从关闭从start start 到到 end end 扇区的写保护扇区的写保护( (startstart为要关闭的第为要关闭的第1 1个扇个扇区的起始地址,区的起始地址,endend为要关闭的最后一个扇区的结束地址为要关闭的最后一个扇区的结束地址) )protect on start endprotect on start end 打开从打开从start start 到到 end end 扇区的写保护扇区的写保护Flash操作命令操作命令(演示演示)Erase Erase 擦除擦除flashflash扇
29、区扇区用法:用法: erase start enderase start end 擦除从擦除从startstart 到到 end end 的扇区,的扇区,start start 为要擦为要擦除的第除的第1 1个扇区的起始地址,个扇区的起始地址,end end 为要擦除的为要擦除的最后一个扇区的结束地址最后一个扇区的结束地址( (在使用在使用cpcp命令向命令向NorNor型型FlashFlash写入数据之前必须先使用写入数据之前必须先使用erase erase 命令命令擦除擦除flashflash,因为因为nor flash nor flash 按字节写入时,按字节写入时,无法写入无法写入1
30、1,所以必须通过擦除来写入,所以必须通过擦除来写入1 1) )。例:例:erase 30000 1efffferase 30000 1effff。Flash操作命令操作命令(演示演示)Cp Cp 数据拷贝数据拷贝。Cp.b,.w,.lsaddressdaddresslenCp提供了一种内存与内存,内存与提供了一种内存与内存,内存与FlashFlash之间数据拷贝之间数据拷贝的方法。的方法。例:例:cp.b3000800020000100000 将内存地址将内存地址0 0x30008000x30008000处的数据(长度为处的数据(长度为0 0x100000x100000)拷贝到拷贝到 地址地址
31、0 0x20000x20000处(处(FlashFlash中)中)cp.b3080000013000070000 将内存地址将内存地址0 0x x30800000处的数据(长度为处的数据(长度为0 0x70000x70000)拷贝到拷贝到 地址地址0 0x130000x130000处(处(FlashFlash中)中)程序执行指令程序执行指令(演示演示)Go Go 执行内存中的二进制代码,一个简单执行内存中的二进制代码,一个简单的跳转到指定地址的跳转到指定地址go addr arg .go addr arg . - start application at address - start app
32、lication at address addraddr,passing arg as argumentspassing arg as arguments程序执行指令程序执行指令Bootm Bootm 执行内存中的二进制代码执行内存中的二进制代码bootm addr arg .bootm addr arg . - boot application image stored in - boot application image stored in memorymemorypassing arguments arg .; when booting passing arguments arg .;
33、 when booting a Linux kernel,a Linux kernel, arg can be the address arg can be the address of an initrd imageof an initrd image要求二进制代码为要求二进制代码为制定格式制定格式的。通常为的。通常为mkimagemkimage处理过的二进制文件。处理过的二进制文件。信息类指令信息类指令bdinfo bdinfo 显示开发板信息显示开发板信息 bdinfobdinfo命令(简写为命令(简写为bdibdi)将在终端将在终端显示诸如显示诸如内存地址内存地址和和大小、时钟频率、大
34、小、时钟频率、MACMAC地址地址等信息。这些信息在传递给等信息。这些信息在传递给LinuxLinux内核一些参数时可能会用到。内核一些参数时可能会用到。技巧技巧(演示演示)1.设置自动启动设置自动启动 sbc2410=setenv bootcmd tftp 30008000 zImage ; go 30080000 sbc2410=saveenv第四节第四节Uboot工作流程工作流程工作模式工作模式大多数大多数BootLoaderBootLoader都包含两种不同的操都包含两种不同的操作模式:作模式:“启动模式启动模式” 和和“下载模式下载模式”, ,这种区别这种区别仅对于开发人员才有意义仅
35、对于开发人员才有意义, ,但从但从最终用户的角度看最终用户的角度看, ,BootLoaderBootLoader的作用就的作用就是用来加载操作系统是用来加载操作系统, ,而不存在所谓的启而不存在所谓的启动模式与下载模式。动模式与下载模式。启动模式启动模式这种模式也称为这种模式也称为“自主自主” 模式,是指模式,是指 BootLoader BootLoader 从目标机上的某个固态存储从目标机上的某个固态存储设备上将操作系统自动加载到设备上将操作系统自动加载到 RAM RAM 中运中运行,整个过程并没有用户的介入行,整个过程并没有用户的介入。这种。这种模式是模式是 BootLoader Boot
36、Loader 的正常工作模式,的正常工作模式,因此在嵌入式产品发布的时侯,因此在嵌入式产品发布的时侯,BootLoader BootLoader 显然必须工作在这种模式下。显然必须工作在这种模式下。下载模式下载模式在这种模式下,目标机上的在这种模式下,目标机上的 BootLoader BootLoader 将通过串口或网络等通将通过串口或网络等通信手段从主机(信手段从主机(HostHost)下载文件下载文件 ,然后控制启动流程然后控制启动流程。流程流程参考文档参考文档ubootuboot启动流程启动流程第五节第五节Uboot移植移植单板配置单板配置Q Q:为什么需要对为什么需要对UbootUb
37、oot做移植?做移植?A: A: BootLoader BootLoader 依赖于依赖于具体的嵌入式板级设备的配具体的嵌入式板级设备的配置置Q:Q:具体的板级设备的配置在哪里?具体的板级设备的配置在哪里?A:A:单板的配置文件位于单板的配置文件位于include/configs/include/configs/.h.h 用相应的用相应的BOARDBOARD定义代替(例:定义代替(例:smdk2410.hsmdk2410.h)单板配置单板配置Q:UbootQ:Uboot移植都需要做些什么?移植都需要做些什么?A:A:根据开发板硬件特性根据开发板硬件特性修改配置文件是其中最重修改配置文件是其中最
38、重要的一项工作要的一项工作Q:Q:配置文件中都有些什么信息?配置文件中都有些什么信息?A:A:请看下页范例请看下页范例 ( (smdk2410.h)smdk2410.h)Smdk2410.h#define CONFIG_ARM920T#define CONFIG_ARM920T1 1/* CPU /* CPU 类型类型 */*/#define#define CONFIG_S3C2410 1 CONFIG_S3C2410 1/* MCU/* MCU类型类型 */ */#define CONFIG_SMDK2410#define CONFIG_SMDK24101 1/* /* 开发板型号开发板型号
39、 */ */Smdk2410.h#define USE_920T_MMU 1#define USE_920T_MMU 1/* /* 使用使用MMU */MMU */#undef CONFIG_USE_IRQ#undef CONFIG_USE_IRQ/* /* 不使用不使用 IRQ/FIQ */IRQ/FIQ */* malloc /* malloc 池大小池大小*/*/#define CFG_MALLOC_LEN (CFG_ENV_SIZE + #define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)128*1024)#define CFG_GBL_DA
40、TA_SIZE#define CFG_GBL_DATA_SIZE128128/* /* 数据段大小数据段大小 128 128字节字节 */ */Smdk2410.h#define CONFIG_DRIVER_CS8900#define CONFIG_DRIVER_CS89001 1/* /* 一个一个 CS8900 CS8900 网卡网卡 */ */#define CS8900_BASE#define CS8900_BASE0x190003000x19000300/* CS8900A /* CS8900A 基地址基地址 */*/#define CONFIG_SERIAL1 1#define C
41、ONFIG_SERIAL1 1/* /* 使用串口使用串口1 1 */ */#define CONFIG_BAUDRATE#define CONFIG_BAUDRATE 115200115200/* /* 波特率波特率 */ */Smdk2410.h#define CONFIG_COMMANDS #define CONFIG_COMMANDS (CONFIG_CMD_DFL(CONFIG_CMD_DFL | | CFG_CMD_CACHECFG_CMD_CACHE | | /*CFG_CMD_NAND/*CFG_CMD_NAND |*/ |*/ /*CFG_CMD_EEPROM |*/ /*C
42、FG_CMD_EEPROM |*/ /*CFG_CMD_I2C/*CFG_CMD_I2C |*/ |*/ /*CFG_CMD_USB/*CFG_CMD_USB |*/ |*/ CFG_CMD_REGINFO | CFG_CMD_REGINFO | CFG_CMD_DATECFG_CMD_DATE | | CFG_CMD_ELF)CFG_CMD_ELF)/*/*定义使用的命令定义使用的命令, ,可添加额外命令可添加额外命令, ,如如PING*/PING*/Smdk2410.h#define CONFIG_BOOTDELAY 3#define CONFIG_BOOTDELAY 3/* /* 启动等
43、待时间启动等待时间 */*/#define CONFIG_BOOTARGS #define CONFIG_BOOTARGS root=ramfs devfs=mount console=ttySA0,9600root=ramfs devfs=mount console=ttySA0,9600“/* /* 内核启动参数内核启动参数 */*/#define CONFIG_ETHADDR#define CONFIG_ETHADDR08:00:3e:26:0a:5b08:00:3e:26:0a:5b#define CONFIG_NETMASK 255.255.255.0#define CONFIG_N
44、ETMASK 255.255.255.0#define CONFIG_IPADDR 10.0.0.110#define CONFIG_IPADDR 10.0.0.110#define CONFIG_SERVERIP#define CONFIG_SERVERIP 10.0.0.110.0.0.1Smdk2410.h#define CONFIG_BOOTCOMMAND#define CONFIG_BOOTCOMMANDtftp; bootmtftp; bootm#define#defineCFG_PROMPTCFG_PROMPTSMDK2410 # SMDK2410 # #define PHYS_
45、SDRAM_1 0x30000000 /* SDRAM Bank #1 */#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */#define PHYS_SDRAM_1_SIZE#define PHYS_SDRAM_1_SIZE0x04000000 /* 64 MB */0x04000000 /* 64 MB */#define#defineCFG_LOAD_ADDR 0x33000000 CFG_LOAD_ADDR 0x33000000 /* /* 默认的加载地址默认的加载地址 */*/#define CFG_BAUDRATE_TABLE#d
46、efine CFG_BAUDRATE_TABLE 9600, 19200, 38400, 57600, 9600, 19200, 38400, 57600, 115200 /*115200 /*可用的波特率可用的波特率*/*/Smdk2410.h#define CONFIG_NR_DRAM_BANKS#define CONFIG_NR_DRAM_BANKS1 1 /* /* 有一片有一片SDRAM */SDRAM */#define PHYS_FLASH_1#define PHYS_FLASH_1 0x00000000 0x00000000 /* FLASH 1/* FLASH 1的基地址的基
47、地址 */ */#define CFG_FLASH_BASE#define CFG_FLASH_BASEPHYS_FLASH_1PHYS_FLASH_1/*FLASH /*FLASH 的基地址的基地址*/*/移植移植Q: Q: 怎么做怎么做UbootUboot的移植呢的移植呢? ?移植方法移植方法 移植移植U-BootU-Boot工作包括工作包括添加开添加开发板硬件相关的文件发板硬件相关的文件、配置选项配置选项,然后然后配置编译配置编译。 移植方法移植方法 开始移植之前,首先要开始移植之前,首先要分析分析U-BootU-Boot已已经支持的开发板,选择出硬件配置最接经支持的开发板,选择出硬件配
48、置最接近的开发板。近的开发板。选择的原则是,首先选择的原则是,首先处理处理器相同器相同,其次,其次处理器体系结构相同处理器体系结构相同,然,然后是以太网接口等后是以太网接口等外围接口相同外围接口相同。 还要验证一下这个参考开发板的还要验证一下这个参考开发板的U-U-BootBoot,至少能够配置编译通过。至少能够配置编译通过。移植范例移植范例 以以SBC2410SBC2410开发板为例,该开发板开发板为例,该开发板采用采用S3c2410S3c2410芯片。而芯片。而UBoot-1.1.4UBoot-1.1.4版本支持版本支持SMDK2410SMDK2410开发板开发板, ,并且并且SMDK24
49、10SMDK2410同样采用同样采用S3c2410S3c2410芯片,因芯片,因此选取此选取SMDK2410SMDK2410作为移植参考。作为移植参考。移植步骤移植步骤移植移植U-BootU-Boot的基本步骤如下的基本步骤如下: :1.1.在顶层在顶层MakefileMakefile中为开发板添加新的配置选项,使用已有中为开发板添加新的配置选项,使用已有的配置项目为例的配置项目为例smdk2410_configsmdk2410_config : : unconfig unconfig ./mkconfig $(:_config=) arm arm920t smdk2410 ./mkconfi
50、g $(:_config=) arm arm920t smdk2410 NULL s3c24x0NULL s3c24x0参考上面参考上面2 2行,添加下面行,添加下面2 2行行: :sbc2410_configsbc2410_config : : unconfig unconfig ./mkconfig $(:_config=) arm arm920t sbc2410 NULL ./mkconfig $(:_config=) arm arm920t sbc2410 NULL s3c24x0s3c24x0移植步骤移植步骤arm:arm:CPU CPU 架构架构arm920t:arm920t:CP
51、U CPU 类型,类型,对应对应cpu/arm920tcpu/arm920t目录目录sbc2410:sbc2410:开发板型号,开发板型号,对应对应board/sbc2410board/sbc2410目目录录NULL:NULL:开发者开发者s3c24x0:s3c24x0:片上系统片上系统( (SOC)SOC)移植步骤移植步骤2. 2. 创建一个新目录存放开发板相关的代码,创建一个新目录存放开发板相关的代码,并且添加文件(并且添加文件(如果以上文件从其他目如果以上文件从其他目录录copycopy来的,注意修改来的,注意修改MakefileMakefile)。)。board/sbc2410/con
52、fig.mkboard/sbc2410/config.mkboard/sbc2410/flash.cboard/sbc2410/flash.cboard/sbc2410/sbc2410.cboard/sbc2410/sbc2410.cboard/sbc2410/Makefile board/sbc2410/Makefile board/sbc2410/u-boot.ldsboard/sbc2410/u-boot.lds移植步骤移植步骤3.3.为开发板添加新的配置文件为开发板添加新的配置文件 先复制参考开发板的配置文件,先复制参考开发板的配置文件,再修改再修改。例如:。例如:$ $cp incl
53、ude/configs/smdk2410.hcp include/configs/smdk2410.h include/configs/sbc2410.h include/configs/sbc2410.h4.4.配置开发板配置开发板$ $ make sbc2410_configmake sbc2410_config5.5.编译编译U-BootU-Boot执行执行make make CROSS_COMPILE=arm-linux- CROSS_COMPILE=arm-linux- 命令,命令,编译成功可以得到编译成功可以得到U-BootU-Boot映像。映像。移植步骤移植步骤6.6.烧写烧写U
54、bootUboot 参考手册参考手册sjf2410_v4.pdfsjf2410_v4.pdf 大功告成,启动开发板!大功告成,启动开发板!常见问题常见问题编译时出现编译时出现 “invalid option abi=apcs-invalid option abi=apcs-gnugnu”错误错误 解决办法:解决办法:makemake时指定时指定CROSS_COMPILE=arm-CROSS_COMPILE=arm-linux-linux-实验一实验一移植移植UbootUboot移植移植UbootUboot到到SBC2410SBC2410板板具备具备PingPing命令命令实验二实验二UbootUboot命令命令使用使用UbootUboot提供的命令提供的命令人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。结束结束