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 将一页的内容打印出来。

时间: 2024-11-13 15:57:50

Uboot基础的相关文章

【嵌入式4412开发板学习教程】Uboot教程之uboot基础概念和框架

[4412开发板教程]Uboot教程之uboot基础概念和框架 正在学习uboot,教程讲解的很详细,先上个笔记,视频上传到网盘后再补上...... 知识点: 1.操作系统分层的概念 Windows:bios→内核模式→用户模式→用户程序 linux:bootloader→内核→文件系统→用户程序 2.bootboader种类介绍 U-boot是最通用的bootboader.(210,4412等等) vivi 针对三星的ARM来定制2440上有用到 3.4412休眠问题 它可以直接跳过uboot

mini2440 u-boot禁止蜂鸣器

mini2440的u-boot版本启动之后马上就会开启蜂鸣器,在办公环境下有可能会影响同事的工作,所以我考虑将其禁止掉. 我使用的mini2440使用的光盘是2013年10月的版本,我在该光盘下的u-boot基础上进行修改. 我仍然使用我最喜欢的vim+cscope来查看u-boot源代码,然后在u-boot源代码下执行make cscope即可得到cscope.out这个文件来用于辅助cscope来进行查询 由于蜂鸣器由GPB0来进行控制,那么只需要考虑GPBDAT寄存器相关代码即可. 在u-

嵌入式linux如何学习

俗话说万事开头难(然后中间难,最后难?),刚开始的时候,你是否根本就不知如何开始,上网查资料被一堆堆新名词搞的找不到北,去图书馆看书也是找不到方向?又是arm,又是linux,又是uboot头都大了.不知道自己究竟从哪里开始? 简单说,从arm基础知识到裸机编程,从uCOSII到linux,从linux基础的命令到shell编程,从u-boot到文件系统,最后到现在的linux驱动程序.从简单到复杂,从基础到高级基本是按照这个来的. 第一阶段:嵌入式硬件基础以及裸机程序开发 1.知识点: (1)

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

uboot移植之start_armboot()函数分析

/******************************** uboot的第二阶段就是初始化剩下的还没在第一阶段初始化的硬件.主要是SoC外部硬件(譬如 iNand 网卡芯片....... )uboot本身的一些东西(uboot的命令 环境变量等.....).然后最终初始化完必要的东西后进入到uboot的命令行准备接受命令. ***********************************/ void start_armboot (void)       //这个函数构成了uboot

S5P210-uboot源码分析-uboot如何启动内核

uboot如何启动内核 7.1.uboot和内核到底是什么? 1.uboot是一个裸机程序 (1)uboot的本质就是一个复杂点的裸机程序,和我们arm裸机中写的程序没有什么本质上的区别. (2)uboot最像我们在arm裸机中的最后写的那个shell,它其实就是一个迷你型的uboot. 2.linux内核本身也是一个"裸机程序" (1)操作系统内核本身就是一个裸机程序,和uboot并没有本质区别. (2)区别在于,操作系统运行起来后在软件层次上可以分为内核层和应用层,分层后两层的权限

uboot.2016.03 在mini2440上norfalsh启动

本人有点懒惰,直接在smdk2410的基础上进行修改 (note :红色字体表示修改内容,蓝色字体表示增加内容) 1. 顶层的makefile 在247行 添加如下两条语句 :   ARCH :=arm     CROSS_COMPILE :=arm-linux- 2 修改始终频率 打开 u-boot-2016.03/arch/arm/cpu/arm920t/start.S 第77行 #if defined(CONFIG_S3C2410) #if defined(CONFIG_S3C2440)

Linux内核工程导论——基础架构

基础功能元素 workqueue linux下的工作队列时一种将工作推后执行的方式,其可以被睡眠.调度,与内核线程表现基本一致,但又比内核线程使用简单,一般用来处理任务内容比较动态的任务链.workqueue有个特点是自动的根据CPU不同生成不同数目的队列.每个workqueue都可以添加多个work(使用queue_work函数). 模块支持 模块概述 可访问地址空间,可使用资源, 模块参数 用户空间通过"echo-n ${value} > /sys/module/${modulenam

u-boot学习(两):u-boot简要分析

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 看到不错的文章.不要加入收藏夹,想着以后有时间再看.由于非常有可能你以后再也不会看它们了. 想写总结的文章.不要想着等到以后有时间了再总结,由于非常有可能你以后更没有时间总结它们了. --送给自己 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++