Uboot基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uboot基础相关的知识,希望对你有一定的参考价值。

1、交叉工具链概念

在宿主机上进行预处理、编译、汇编、链接等工作,以生成能在目标机上运行的程序的过程成为交叉编译。在宿主机上执行预处理、编译、汇编、链接等工作的一系列工具称为交叉工具链。

a、tar xzf arm-linux-gcc-4.5.1-v6-vfp.tgz.

b、mkdir /usr/local/arm. mv 4.5.1/ /usr/local/arm/ 将交叉工具链移动到/usr/local/arm目录下。

c、为了能在终端直接输入命令而运行交叉编译器,需要将交叉工具链bin/目录的路径添加到环境变量PATH中:

vim /root/.bashrc;加入export PATH=$PATH:/usr/local/arm/4.5.1/usr/bin。使之生效source /root/.bashrc。

除了这种方法,还可以将这句话添加进/etc/profile中,使系统在启动时就在PATH添加交叉编译工具链的路径。要重新启动系统才会生效。

d、测试终端输入arm-,并按tab键,出现很多命令。

比较:

arm-linux-gcc hello.c -o hello_arm

gcc hello.c -o hello_x86

file hello_arm hello_x86分别查看两个文件的属性,两个文件都是32位ELF格式,可执行文件,前者为arm体系架构,后者为intel 80386。

arm- linux-objdump -D -S hello_arm >log将hello_arm反汇编的结果输出到文件log中。常用来帮助分析oops错误。

arm-linux-readelf -d hello_arm >log,将hello_arm反汇编结果中的dynamic section 输出到文件log中,vim log可以看出它使用了动态库libc.so.6。

嵌入式系统构建之工具链的安装,只有安装好工具链之后才能谈嵌入式的开发,这还需要注意的是,对于不同的版本的uboot或者内核,可能需要选择不同版本的交叉工具链,特别是对于一些老的uboot,较新版本的交叉工具链可能无法编译通过,这是因为老的uboot的makefile中可能使用了一些已经不再使用的编译选项。

 

2、配置编译uboot

a、uboot介绍

uboot是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序,uboot不仅仅支持嵌入式Linux系统的引导,还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOSz嵌入式操作系统。Uboot除了支持PowerPC系列的处理器外,还能支持MIPS,x86,ARM,Nios,XScale等诸多常用系列的处理器。

目录树:

board:和一些已有开发板有关的文件,每一个开发板都以一个子目录出现在当前目录中。

common:实现uboot命令行下支持的命令,每一条命令都对应一个文件,例如bootm命令对应就是cmd_bootm.c

cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录。

disk:对磁盘的支持。

doc:文档目录。

drivers:uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB等。

fs:支持的文件系统,uboot现在支持cramfs,fat,fdos,jffs2和registerfs.

include:uboot使用的头文件,还有各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下configs目录有与开发板相关的配置头文件。

lib_xxx:与体系结构相关的库文件。

net:与网络协议栈相关的代码,bootp协议,TFTP协议,RARP协议和NFS文件系统的实现。

tools:生成uboot的工具,如mkimage,crc等等

a、tar xvzf uboot_tiny6410.tar.gz。b、make distclean,清理可能的中间文件。c、配置make tiny6410_config。d、编译make ARCH=arm CROSS_COMPILE=arm-linux-。e、最后通过SD卡启动烧写到nandflash。

3、设置自启动

a、设置nandflash 自动启动

setenv bootcmd nand read c0008000 400000 0 \; bootm c0008000

b、设置自动下载内核到内存后启动

setenv bootcmd tftp c0008000 uImage.bin \; bootm c0008000. 在"\;"之前和之后都有一个空格。

nand read addr off size 从nandflash的off地址读size大小的数据到内存地址addr处。

nand write addr off size 将内存addr地址size大小的数据写到nandflash地址off处。

整片擦出nandflash,输入命令:nand erase,擦出前先把nandflash的0地址开始0x80000字节的数据读到内存备份,输入命令:nand read.i 50008000 0 80000,i表示跳过坏块。再查看nandflash的0地址开始的一页数据。

将内存开始的0x50008000开始的0x80000字节数据,写回nandflash的0地址处,使用命令:nand wtite.i 0x50008000 0 0x80000。

nand dump off 将一页的内容打印出来。 

以上是关于Uboot基础的主要内容,如果未能解决你的问题,请参考以下文章

uboot基础知识

嵌入式linux核心课程 2.uboot和系统移植-第2部分-2.2.补基础之shell和Makefile

uboot之位置无关代码解析

uboot之初体验

uboot之初体验

嵌入式基础