Uboot启动

(一)uboot 配置编译分析

u-boot源码是通过gcc和Makefile组织编译的,顶层目录下的Makefile可通过boards.cfg来设置开发板的定义
然后递归调用各级子目录下的Makefile,把编译过的程序连接成u-boot

boards.cfg文件:
开发板在Makefile下配置定义,例如:

TargetARCHCPUBoard name(开发版名)Vendor(厂商)SoC(具体系列)Options
tiny4412armarmv7tiny4412samsungexynos

make tiny4412_config 表示在当前目录下的Makefile查找一个tiny4412的目标文件来执行,在Makefile中没有tiny4412
但有%_config::unconfig %表示匹配模式,可以匹配任意字符

2. U-boot操作过程
  1. 将u-boot-1.3.4.tar.gz复制到Linux系统中,然后解压缩该u-boot后,打开u-boot文件夹后,点右键从终端打开。
  2. 在终端中 输入:make clobber (清工程文件,范围大一些,清除原来已经编译的文件)
                   make clean(清除文件)make xyd2440_config(将xyd2440_config文件导入准备编译)make all (编译)
  1. 然后可在文件夹中生成.bin的文件。
  2. 然后通过j-link将生成的.bin文件烧入NORFLASH中。J-LINK的用法详见附录3。
  3. 通过串口就可以看到u-boot运行的相关信息(在开始-附录-通信-超级终端中查看)。

(二) U-boot移植测试过程

  1. 在u-boot添加具体一个开发板,需要添加哪些文件?
    boards.cfg里面添加自己开发板的信息

     	myboard4412     arm    armv7   myboard4412    samsung     exynos编译:  make myboard4412复制board/samsung/tiny4412/ 一份代码,修改名字为myboard4412cp board/samsung/tiny4412/ -r board/samsung/myboard4412  -rf复制include/configs/tiny4412.h 一份代码,修改名字为myboard4412.hcp include/configs/tiny4412.h  include/configs/myboard4412.h
    
  2. 编译

[root@localhost uboot_tiny4412]# make myboard4412_config
Configuring for myboard4412board...
[root@localhost uboot_tiny4412]# make -j8

提示错误:
arm-linux-ld: cannot find board/samsung/tiny4412/libtiny4412.o
make: *** [u-boot] 错误 1

错误说明:arm-linux-ld是编译器的链接工具,也是就是链接时候出错了,根据出错信息,是在寻找board/samsung/tiny4412/libtiny4412.o 文件时候出错了,仔细看一下发现,现在我们的板级文件是xyd4412 ,而不是tiny4412,但是,却去找这个文件,很明显,应答是在链接文件中指定需要这个文件。所以打开board/samsung/myboard4412/u-boot.lds文件,文件中有这样的条语句:

board/samsung/tiny4412/libtiny4412.o (.text)

这个语句正是出错提示的信息,很明显这个位置要做相应修改,修改如下:

board/samsung/xyd4412/libxyd4412.o (.text)

修改后保存,重新编译。
[root@localhost uboot_tiny4412]#make -j8

ers/watchdog/libwatchdog.o fs/cramfs/libcramfs.o fs/ext2/libext2fs.o fs/fat/libfat.o fs/fdos/libfdos.o fs/jffs2/libjffs2.o fs/reiserfs/libreiserfs.o fs/ubifs/libubifs.o fs/yaffs2/libyaffs2.o lib/libfdt/libfdt.o lib/libgeneric.o lib/lzma/liblzma.o lib/lzo/liblzo.o net/libnet.o post/libpost.o board/samsung/xyd4412/libxyd4412.o --end-group /media/sdb1/4412/u-boot/uboot_tiny4412/arch/arm/lib/eabi_compat.o -L /usr/local/arm/4.3.2/bin/…/lib/gcc/arm-none-linux-gnueabi/4.3.2 -lgcc -Map u-boot.map -o u-boot
arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
[root@localhost uboot_tiny4412]#
编译正确,会得到 u-boot.bin文件。

(三)U-boot启动:

程序入口是:arch/arm/cpu/armv7/start.S
由上面的代码跳转到C语言代码,C的入口:arch/arm/lib/board.c

1)从uboot源码顶层目录boards.cfg文件中找到tinny4412配置信息,利用这些信息生成文件
2)根据配置信息在include下创建指向具体架构arm的软件链接,arm芯片是指向arch/arm/include/asm/,
因为后面有文件包含#include<asm/config.h>,编译时找到对应架构
3、根据配置信息创建include/config.mk,这个文件被顶层Makefie包含,内容
ARCH=arm
CPU=armv7

4、在include创建config.h文件 查看内容
增添了一块开发板支持需要添加的文件(当前u-boot已经支持CPU)
boards 厂家名 开发板名
include/config 开发板名.h
以上步骤时候以一个最接近的板子为起点,移植到自己的开发板,开发平台对应的u-boot的第一步,如果自己板子和参考版的最小系统(DDR EMMC CPU )不一样,那就需要修改两个开发平台的硬件参数上的差异,具体的要求知道u-boot启动的流程,从上电执行了哪些文件的代码,然后执行代码,那些是和硬件参数有关,要求相应的修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行列式计算的两种方法

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define N 100 using namespace std; int a[N][N]; double aa[N][N]; int n;/**********************************************************/ //求行列式的值&#xff1…

uboot启动流程分析

Uboot的启动流程分为两个阶段&#xff0c;第一阶段主要是汇编语言编写&#xff0c;第二阶段是C语言编写&#xff0c;每个阶段所做的工作不同&#xff0c;这篇文章分析的是uboot 2010版&#xff0c;以tiny4412的uboot为例。 启动过程涉及的主要文件&#xff1a; arch/arm/cpu/a…

(一)uboot的移植与制作

目录&#xff08;一&#xff09;环境&#xff08;二&#xff09;流程分析&#xff08;三&#xff09;具体步骤在裸机启动流程里涉及到BL1&#xff0c;BL2为系统的加载启动项&#xff0c;全称为BootLoader。 Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程…

jquery ajax(实现单独提交某个form)

function submitTaskScore(formid) {//formid表示的是表单的id$.ajax({type:"post",url:"companyAndDistributeAction!scoreTask",//后台处理程序data:$(formid).serialize(),success:function(){document.getElementById("hjzggContent").inner…

(二)linux内核镜像制作

&#xff08;一&#xff09;目的 在进行嵌入式开发的时候&#xff0c;我们往往会先在电脑上安装交叉编译器&#xff0c;然后编译目标板上的代码&#xff0c;最后把代码下载到电路板中&#xff0c;嵌入式系统组成包括&#xff1a;BootLoaderkernelfilesystemapplication&#x…

js+css实现骰子的随机转动

网上找的例子&#xff0c;然后增添了新的东西&#xff0c;在这里展示一下...... 效果图预览&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html x…

linux安装交叉编译环境

&#xff08;一&#xff09;交叉编译器的简介 &#xff08;1&#xff09;本地编译 在了解交叉编译之前我们首先介绍一下另一个概念&#xff1a;本地编译 之前所做的C开发属于本地编译&#xff0c;即在当前PC下&#xff08;x86的CPU下&#xff09;&#xff0c;直接编译出可以运…

jsp实现邮件的发送

如果程序出现 454 Authentication failed, please open smtp flag first! 错误&#xff0c;那么一般是邮箱没有开通POP3/SMTP服务&#xff0c;登录邮箱&#xff0c;在设置中开启该服务即可 &#xff01; 另外需要的jar包如下: imap.jar, mail.jar, smtp.jar, 可以自己在网上下…

linux的mount和umount指令使用

mount即挂在操作&#xff0c;磁盘或分区创建好文件系统后需要挂载到一个目录&#xff08;一般mount在/mnt下&#xff09;才能使 用&#xff0c;和winsdows不同的是在linux下需要手动挂载。 用法&#xff1a;mount [-t文件系统] [选项] 设备目录注意&#xff1a;[ ]为可选项…

斐波那契的四种求法

首先看一下斐波那契的矩阵表示&#xff1a; 数列的递推公式为&#xff1a;f(1)1&#xff0c;f(2)2&#xff0c;f(n)f(n-1)f(n-2)(n>3) 用矩阵表示为&#xff1a; 进一步&#xff0c;可以得出直接推导公式&#xff1a; #include<iostream> #include<cstring> #i…

利用STM32制作红外测温仪之软件设计(MLX90614)

目录&#xff08;一&#xff09;工程目录如图&#xff1a;&#xff08;二&#xff09;main函数实现&#xff1a;&#xff08;三&#xff09;MLX90614测温代码实现前面介绍了使用 STM32制作红外测温仪硬件设计,今天来说一下软件的实现&#xff0c;具体的程序&#xff0c;完整的k…

Windows下使用Dev-C++开发基于pthread.h的多线程程序

一、下载Windows版本的pthread 目前最新版本是&#xff1a;pthreads-w32-2-9-1-release.zip。 二、解压pthread到指定目录 我选择的目录是&#xff1a;E:\DEV-CPP\Pthread完成后&#xff0c;该目录会多出三个文件夹&#xff1a;Pre-built.2&#xff0c;pthreads.2&#xff0c;Q…

(三)linux之根文件系统的制作

&#xff08;一&#xff09;准备工作 Ubuntu 16.04系统linux-3.5内核:linux-3.5-20190929交叉编译工具arm-linux-gcc-4.5.1-v6-vfp-20120301.rarbusybox源码包&#xff1a;busybox-1.21.1.rar &#xff08;二&#xff09;工具介绍 &#xff08;1&#xff09;交叉编译器 这个…

c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)

银行家算法数据结构 &#xff08;1&#xff09;可利用资源向量Available 是个含有m个元素的数组&#xff0c;其中的每一个元素代表一类可利用的资源数目。如果Available[j]K&#xff0c;则表示系统中现有Rj类资源K个。 &#xff08;2&#xff09;最大需求矩阵Max 这是一个nm的…

(四)Linux内核模块化编程

目录&#xff08;一&#xff09;模块化编程简介&#xff08;二&#xff09;安装卸载模块命令.&#xff08;三&#xff09;将自定义功能添加到内核三种方法&#xff08;1&#xff09;修改Kconfig和Makefile&#xff08;2&#xff09;直接修改功能对应目录下的Makefile文件&#…

基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序

1.字节顺序  字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序&#xff0c;通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处&#xff0c;高字节数据存放在内存高地址处&#xff1b;大端字节序是高字节数据存放在低地址处&#xff0c;低字…

Linux内核空间和用户空间

在Linux系统中存在进程的概念&#xff1a; 进程的分类&#xff1a; 用户进程&#xff1a;运行在用户空间的进程被称为用户进程 内核进程:运行在内核空间的进程被称为内核进程 进程的空间&#xff1a; 系统会为每一个进程分0-4G的虚拟寻址空间&#xff0c;在4G的空间中 0-3G&…

codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. Or Game(暴力,数学)

解题思路&#xff1a;就是求数 n 对应的二进制数中有多少个 1 #include <iostream> #include<cstdio> using namespace std; int main(){int n;cin>>n;int ans 0; // while(n){//这也是一种好的方法 // n n&(n-1); // ans; // }while(n…

(五)Linux之设备驱动模型

目录&#xff08;一&#xff09;Linux内核驱动简介&#xff08;二&#xff09;杂项设备驱动模型&#xff08;1&#xff09;相关接口&#xff08;2&#xff09;杂项设备注册过程&#xff08;三&#xff09;早期经典字符设备驱动模型&#xff08;1&#xff09;相关接口&#xff0…

操作系统页面置换算法(opt,lru,fifo,clock)实现

选择调出页面的算法就称为页面置换算法。好的页面置换算法应有较低的页面更换频率&#xff0c;也就是说&#xff0c;应将以后不会再访问或者以后较长时间内不会再访问的页面先调出。 常见的置换算法有以下四种&#xff08;以下来自操作系统课本&#xff09;。 1. 最佳置换算法(…