mini2440之Uboot利用及移植详细手册.docx
- 文档编号:28798788
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:29
- 大小:40.53KB
mini2440之Uboot利用及移植详细手册.docx
《mini2440之Uboot利用及移植详细手册.docx》由会员分享,可在线阅读,更多相关《mini2440之Uboot利用及移植详细手册.docx(29页珍藏版)》请在冰豆网上搜索。
mini2440之Uboot利用及移植详细手册
原文地址第1章BootLoader的概念与功能嵌入式Linux软件结构与分布一般情况下嵌入式Linux系统中的软件主要分为以下几部分:
1)引导加载程序:
其中包括内部ROM中的固化启动代码和BootLoader两部分。
内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。
有的芯片比较复杂,比如Omap3在flash中没有代码的时候有许多启动方式:
USB、UART或以太网等等。
而S3C24x0那么很简单,只有Norboot和Nandboot。
2)Linuxkernel和drivers。
3)文件系统。
包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4、UBI、CRAMFS等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境及载体。
4)应用程序。
用户自定义的应用程序,存放于文件系统之中。
在Flash存储器中,他们的分布一般如下:
BootLoaderBootLoader参数区LinuxKernel根文件系统其他文件系统......(被挂载到根文件系统或者作为但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader参数区,等等。
在嵌入式Linux中BootLoader的必要性Linux内核的启动除了内核映像必须在主存的适当位置,CPU还必须具备一定的条件:
1.CPU寄存器的设置:
2.CPU模式:
3.Cache和MMU的设置:
R0=0;R1=MachineID(即MachineTypeNumber,定义在linux/arch/arm/tools/mach-types);R2=内核启动参数在RAM中起始基地址;必须禁止中断(IRQs和FIQs);CPU必须SVC模式;MMU必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭;但是在CPU刚上电启动的时候,一般连内存控制器都没有初始化过,根本无法在主存中运行程序,更不可能处在Linux内核启动环境中。
为了初始化CPU及其他外设,使得Linux内核可以在系统主存中运行,并让系统符合Linux内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(BootLoader)。
而BootLoader并不是Linux才需要,而是几乎所有运行操作系统的设备都需要。
我们的PC的BOIS就是BootLoader的一部分(只是前期引导,后面一般还有外存中的各种BootLoader),对于LinuxPC来说,BootLoader=BIOS+GRUB/LILO。
BootLoader的功能和选择综上所述:
BootLoader是在操作系统内核启动之前运行的一段小程序。
通过这段程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像到主存并跳到入口地址。
由于BootLoader需要直接操作硬件,所以它严重依赖于硬件,而且依据所引导的操作系统的不同,也有不同的选择。
对于嵌入式世界中更是如此。
就S3C24x0而言,若是是引导Linux,一般选用韩国的mizi公司设计的vivi或者DENX软件工程中心的DasU-boot,如果是引导WinCE,就选用Eboot。
如果是开发StrongARM构架下的LART,就可选用由Jan-DerkBakker和ErikMouw发布的Blob(BootLoaderObject)。
如果是要引导eCos系统,可以选用同是Redhat公司开发的Redboot。
所以在嵌入式世界中建立一个通用的BootLoader几乎是不可能的,而可能的是让一个BootLoader代码支持多种不同的构架和操作系统,并让她有很好的可移植性。
U-boot就是支持多平台多操作系统的一个杰出代表。
这也是U-boot的优势所在,因为如果在开发S3C2440时熟悉了U-boot,再转到别的平台的时候,就能够够专门快地完成那个平台下U-boot的移植。
而且U-boot的代码结构越来越合理,对于新功能的添加也十分容易。
*推荐阅读:
嵌入式系统BootLoader技术内幕第2章U-boot简介Uboot的起源U-Boot是DasU-Boot的简称,其含义是UniversalBootLoader,是遵循GPL条款的开放源码项目。
最早德国DENX软件工程中心的WolfgangDenk基于8xxROM和FADSROM的源码创建了PPCBoot工程项目,此后不断添加处理器的支持。
而后,SysgoGmbh把PPCBoot移植到ARM平台上,创建了ARMBoot工程项目。
最终,以PPCBoot工程和ARMBoot工程为基础,创建了U-Boot工程,2002年12月17日第一个版本U-Boot-发布,同时PPCBoot和ARMBoot停止保护。
而今,U-Boot作为一个主流、通用的BootLoader,成功地被移植到包括PowerPC、ARM、X86、MIPS、NIOS、XScale等主流体系结构上的百种开发板,成为功能最多、灵活性最强,并且开发最积极的开源BootLoader。
目前。
U-Boot仍然由DENX的WolfgangDenk维护。
Uboot的开发情形和资源最早U-boot的版本号是由来表示的,从一直发展到。
之后便开始使用年份加月份的表示方法,从到现在的平均每3个多月出一个新版本。
每次代码的结构和定义都会有一些修正和改进,其代码越来越规整,功能越来越强,但是移植的难度反而越来越小,需要修改的地方越来越少。
U-boot不仅有主线版本,在U-boot的Git代码仓库中还有各个CPU构架的分支版本,这些分支会在一定的时候将修改汇入主线。
下面总结一下关于U-boot源代码的网络资源:
官方链接德国DENX软件工程中心主页U-boot官方主页(注意其中的邮件列表链接)U-boot官方源码FTP下载U-boot官方Git代码仓库针对S3C2440的修改Openmoko手机的U-boot源码Git;a=shortlog;h=refs/heads/stablebuserror的U-boot源码Git(针对mini2440)TekkamanNinja的U-boot源码Git(针对mini2440)openmoko/tekkamanninja第3章开发环境搭建交叉编译工具链的安装编译U-boot给mini2440的时候,必须使用交叉编译工具链。
你可以使用友善之臂提供的交叉编译工具(gcc版本也可以使用或crosstool-ng自己编译一个。
至于如何用工具自己编译交叉编译工具链,请看TekkamanNinja的博客的相关文章:
用建立ARM-Linux交叉编译环境用crosstool-ng建立Linux交叉编译环境(以S3C2440(armv4t)为例)在编译好交叉编译工具链后,要在环境变量的PATH中添加编译工具的路径(也就是arm-*-linux-*-gcc所在的路径),这样在编译时系统才找得到编译器的命令。
在Ubuntu下的修改方法如下:
vi~/.profile,在最后加上:
PATH="<交叉编译工具的路径>:
$PATH"。
网路服务的设置在使用U-boot的时候常常会用到宿主机的TFTP和NFS这两种网络服务,所以最好在开发前设置好。
下面以Ubuntu下使用apt-get安装为例,简单介绍一下安装配置过程:
安装配置TFTP服务安装配置TFTP服务的大致步骤如下:
(1)安装tftp-hpa、tftpd-hpa和openbsd-inetd程序;
(2)修改配置文件/etc/;(3)根据配置文件的路径,建立tftp目录,并修改目录权限;(4)重启tftp服务;(5)本地传输测试。
以下是一个安装和配置主要步骤的脚本,大家参考:
#!
/bin/shTFTPDIR=<你想要的tftp目录路径>echoinstalltftpserver...sudoapt-getinstalltftp-hpatftpd-hpa###tftpif["$?
"="0"]thenecho"installtftp-hpaandtftpd-hpaOK!
!
"elseecho"installtftp-hpaandtftpd-hpaerror!
!
!
"exit1fisudoapt-getinstallopenbsd-inetdif["$?
"="0"]thenecho"installopenbsd-inetdOK!
!
"elseecho"installopenbsd-inetderror!
!
!
"exit1fiechomodify/etc/dgramudpwaitroot/usr/sbin//usr/sbin/-c-s<你想要的tftp目录路径>sudovi/etc/#建立tftp目录,并修改目录权限:
mkdir-p$TFTPDIRif["$?
"="0"]thenecho"maketftpdir$TFTPDIROK!
!
"elseecho"maketftpdir$TFTPDIRerror!
!
!
"#exit1fisudochmod777$TFTPDIR#重启tftpserversudo/etc/openbsd-inetdrestart安装配置NFS服务安装配置NFS服务的大致步骤如下:
(1)安装NFS内核服务;
(2)重新配置portmap服务,修改/etc/和/etc/配置文件,重启portmap服务;(3)修改NFS服务的配置文件/etc/exports,添加服务目录和配置,重新导入配置;(4)重启NFS服务,并检查可挂载的目录;(5)在本地挂载测试。
以下是一个安装和配置主要步骤的脚本,大家参考:
#!
/bin/shechoinstalltftpserver...sudoapt-getinstallnfs-kernel-serverif["$?
"="0"]thenecho"installnfs-kernel-serverOK!
!
"elseecho"installnfs-kernel-servererror!
!
!
"exit1#fisudodpkg-reconfigureportmap#对Shouldportmapbeboundtotheloopbackaddress?
选N.sudovi/etc/#portmap:
ALL#lockd:
ALL#mountd:
ALL#rquotad:
ALL#statd:
ALLsudovi/etc/#portmap:
#lockd:
#rquotad:
#mountd:
#statd:
sudoserviceportmaprestartsudovi/etc/exports#/home/tekkaman/development/share#特别要注意上面的IP的形式,以前是形如现在是IP/掩码为数的形式。
用旧的格式可能会出问题#具体的说明,建议看man手册:
manexportssudoexportfs-rsudo/etc/nfs-kernel-serverrestartshowmount-e串口终端程序的安装配置在使用U-boot的时候,必然会用到串口与开发板进行通信,所以串口终端程序必不可少。
下面简单介绍一下Linux下常用的串口终端:
minicom和C-kermit的安装配置(以Ubuntu下使用apt-get安装为例)。
3.1C的安装配置(推荐安装)在Linux下是通过串口传输文件到开发板,就属C-kermit比较好用。
(1)安装ckermit程序;
(2)编写ckermit的配置文件~/.kermrc。
下面是一个很简单的安装和配置脚本,供大家参考:
#!
/bin/sh#echoinstallC-kermit...sudoapt-getinstallckermitif["$?
"="0"]thenecho"installckermitOK!
!
"elseecho"installckermiterror!
!
!
"exit1fi#如果是USB转串口,就是类似/dev/ttyUSB0的设备,如果是原生的硬件串口,就是类似/dev/ttyS0的设备节点。
#根据你使用的串口,设备节点编号可能有变,你可以ls/dev/tty*看看你用的到底有什么设备节点。
cat>~/.kermrc< (1)安装minicom程序; (2)使用minicom-s命令生成配置文件~/.。 #! /bin/shechoinstallMinicom...sudoapt-getinstallminicomif["$? "="0"]thenecho"installminicomOK! ! "elseecho"installminicomerror! ! ! "#exit1fiminicom-s运行命令minicom-s后,屏幕出现如下界面: +----[配置]----+|文件名和路径|文件传输协议|||串口设置||调制解调器和拨号||屏幕和键盘||设置保存为dfl||设置保存为..||退出||退出Minicom|+------------+1.使用方向键选择“串口设置”,出现具体的配置: +-----------------------------------------------------------------------+|A-串口设备: /dev/ttyUSB0||B-锁文件的位置: /var/lock||C-调入程序: ||D-调出程序: ||E-Bps/Par/Bits: 1152008N1||F-硬件数据流控制: 否||G-软件数据流控制: 否||希望修改哪个设置? |+-----------------------------------------------------------------------+使用相应的字母键配置,比如修改设备节点则输入A,光标转移到“串口设备”选项后,可以对其值进行修改,完成后回车确定。 如果选择了E则出现: +---------------[普通参数]---------------+|||当前: 1152008N1||速度参数数据||A: NoneS: 5||B: EvenT: 6||C: 9600N: OddU: 7||D: 38400O: MarkV: 8||E: 115200P: Space||||停止位||W: 1Q: 8-N-1||X: 2R: 7-E-1||||||退出Mini|选择,或按 |+------------------------------------+选择E和Q,设置好后回车,回到“配置”菜单后再进入“调制解调器和拨号”,清除以下几项的数据: A-初始化字符串......B-重置字符串.......K-停机字符串......清除完后,回车退到“配置”菜单后再进入“设置保存为dfl”,就会保存配置到~/.。 然后选择“退出”退出配置状态,就可以通过串口连接开发板了。 还有一个图形化的串口终端: gtkterm,图形配置,简单易用,但无法传输文件。 第4章熟悉U-boot的使用与烧写要开发和移植U-boot,首先要对U-boot有一定的了解,起码要会使用。 所以这里首先熟悉一下U-boot的使用以及如何将U-boot烧入mini2440。 当然在这之前首先必须保证你的开发板上已经有了U-boot。 如果没有,就请先烧入一个已经编译好的U-boot。 已经针对mini2440编译好的的bin文件在TekkamanNinja的博客中有,可以直接烧入,链接: 把它烧到mini2440的NAND或者NORFlash的起始地址即可,烧入的方法请参考友善之臂官方网提供的《MINI2440用户手册》。 烧写Uboot到mini2440开发板常用Uboot命令详解U-boot发展到现在,其命令行模式已经非常接近Linux下的shell了,在TekkamanNinja编译的中的命令行模式下支持“Tab”键的命令补全和命令的历史记录功能。 而且如果命令的前几个字符和别的命令不重复,那就只需要打出这几个字符即可,比如查看U-boot的版本号命令是“version”,但是在所有其它命令中没有任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [u-boot@MINI2440]#versionU-Boot(4月042010-12: 09: 25)[u-boot@MINI2440]#vU-Boot(4月042010-12: 09: 25)[u-boot@MINI2440]#baseBaseAddress: 0x00000000[u-boot@MINI2440]#baBaseAddress: 0x00000000下面简单介绍常用的命令。 获取帮助命令: help或? 功能: 查看当前U-boot支持的所有命令。 [u-boot@MINI2440]#help? -aliasfor'help'askenv-getenvironmentvariablesfromstdinbase-printorsetaddressoffsetbdinfo-printBoardInfostructurebmp-manipulateBMPimagedataboot-bootdefault,.,run'bootcmd'bootd-bootdefault,.,run'bootcmd'bootelf-BootfromanELFimageinmemorybootm-bootapplicationimagefrommemorybootp-bootimagevianetworkusingBOOTP/TFTPprotocolbootvx-BootvxWorksfromanELFimagecmp-memorycompareconinfo-printconsoledevicesandinformationcp-memorycopycrc32-checksumcalculationdate-get/set/resetdate&timedcache-enableordisabledatacachedhcp-bootimagevianetworkusingDHCP/TFTPprotocolecho-echoargstoconsoleeditenv-editenvironmentvariableeeprom-EEPROMsub-systemerase-eraseFLASHmemoryexit-exitscriptfatinfo-printinformationaboutfilesystemfatload-loadbinaryfilefromadosfilesystemfatls-listfilesinadirectory(default/)flinfo-printFLASHmemoryinformationfsinfo-printinformationaboutfilesystemsfsload-loadbinaryfilefromafilesystemimagego-startapplicationataddress'addr'help-printonlinehelpi2c-I2Csub-systemicache-enableordisableinstructioncacheiminfo-printheaderinformationforapplicationimageimls-listallimagesfoundinflashimxtract-extractapartofamulti-imageitest-returntrue/falseonintegercompareloadb-loadbinaryfileoverserialline(kermitmode)loads-loadS-Recordfileoverseriallineloadx-loadbinaryfileoverserialline(xmodemmode)loady-loadbinaryfileoverserialline(ymodemmode)loop-infinitelooponaddressrangels-listfilesinadirectory(default/)md-memorydisplaymm-memorymodify(auto-incrementingaddress)mmc-MMCsub-systemmtest-simpleRAMread/writetestmw-memorywrite(fill)nand-NANDsub-systemnboot-bootfromNANDdevicenfs-bootimagevianetworkusingNFSprotocolnm-memorymodify(constantaddress)ping-sendICMPECHO_REQUESTtonetworkhostprintenv-printenvironmentvariablesprotect-enableordisableFLASHwriteprotectionrarpboot-bootimagevianetworkusingRARP/TFTPprotocolreginfo-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mini2440 Uboot 利用 移植 详细 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)