FL2440中U-boot框架完整分析

经过一周的努力,终于把U-boot的框架弄清楚了,终于把这几个地址搞清楚了,学习这些我花了很多时间,如果有人跟你讲解的话,你几分钟就能理解过来,自己摸索有点伤不起呀。一下是自己的总结,相信你把这篇文章看了,你会对U-boot的烧写和启动内核,最终的是一些地址空间的了解有深刻的印象,在这里我贴出来是希望大家少走弯路,希望大家懂得珍惜,尊重原创。在现在我U-boot具体的命令分析还没有弄懂,等我弄熟练了在贴以后的代码,如果自己都没有熟练,相信写出来的代码你们写不敢看,有点误人子弟,呵呵!

几个地址的讲解如下:
33F80000:U-boot在SDRAM中的运行地址,是我们在第一阶段把程序从nand flash或者nor flash中复制到sdram中的地址,在链接脚本里面也设置好了的。
30008000:kernel在SDRAM中的运行地址,这个地址讲解有点复杂,这的篇文章讲解的很清楚:http://blog.csdn.net/qq_21792169/article/details/50098749

30800000:用于存储ramdisk(相当于一个临时的硬盘),用来挂着根文件系统的。

CPU:三星S3C2440 主频:400MHZ

NAND Flash : 128M/256 M 字节  K9F2G08R0A 
内存:SDRAM 
start Address:0x30000000  
end Address  : 0x34000000 
size:0x4000000 =64M

从NAND FLASH 启动:SRAM起始地址是0,size=4KB  0x1000
在NAND FLASH 启动模式下内部的 4K Bytes BootSRam 被映射到 nGCS0 片选 的空间 。sdram被映射到 nGCS6 

下面是内核中的分区:

下面这个是U-boot中的分区情况:

在这里我得说明下,u-boot中的分区只是为了方便我们写代码到nand flash中,并没有什么实质的意义,在这里我举例说明下:

nand write 0 0x00020000    我们可以用nand write boot代替,就是这个意思很简单,在u-boot中有个mtdparts命令就是方便你写代码到flash中区,只是我们用了一个boot来代替那段地址。

我们烧写U-boot的方法:

首先下载程序到到初始化SDRAM的代码到内部的 4K Bytes BootSRam ,NAND FLASH是不能直接烧写的,Nor flash是可以直接烧写的,初始化完成后,把程序烧在SDRAM中地址是0x30000000到0x34000000 去,然后再烧写一个临时运行的U-boot.bin文件到0x33F80000(以后重新上电后U-boot程序还是会被复制在这个地址开始运行),这个U-boot.bin文件特殊一点,需要去掉需要在include/configs/开发板配置文件.h(fl2440.h)文件中添加:#define
 CONFIG_SKIP_LOWLEVEL_INIT     1 //用来支持uboot在内存中
直接运行然后再利用U-boot自身的写命令把U-boot写到NAND FLASH,然后断电重启就启动了U-boot,记住启动U-boot还是把NAND FLASH中的程序复制到SDRAM中去运行的。
开发板中那个0x30800000是SDRAM中的地址,用于下载文件,临时放在SDRAM,还有通过命令或者U-boot本身功能把这个程序写到NAND FLASH相应的地址上去。

用ADS烧写U-boot
烧写的是.axf映像文件,利用映像文件来烧写真正U-boot到SDRAM,然后SDRAM借助DNW自动把程序写到NANDFLASH
 
U-boot补丁文件的制作
cd U-boot1.1.6
patch -p1 < ../补丁文件的路径  1代表去掉补丁文件里面路径的第一个"/"
 
 
 编译裸机程序(包括U-boot)
 可以用ADS和Linux两种方法编译,用ADS编译好用U-boot.bin然后用AXD下载带SDRAM
 或者用Linux,就得写链接脚本和Makefile
 
.axf是elf格式的文件它是有格式的,有文件头,里面还有section的信息等,不能直接烧入
需要烧入bin文件或者hex文件等,这些文件是从axf转化而来的

U-boot烧写步骤如下:

第一先烧写SDRAM初始化函数,
第二烧写特殊的u-boot_SDRAM.bin;
第三烧写u-boot.bin
u-boot_SDRAM.bin是特殊u-boot文件需要修改如下一个地方:
需要在include/configs/开发板配置文件.h(fl2440.h)文件中添加:
#define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用来支持uboot在内存中直接运行

需要先安装J-Link驱动,下载Setup_JLinkARM_V408l.exe,并安装。
打开J-Link Commander
speed 12000
loadbin d:\2440init.bin  0       //就是光盘上的初始化内存函数
setpc 0
g

h  
loadbin d:\FL_2440bootV5.bin 0x30000000     //用来临时存放数据
//setpc 0x30000000      //是不能运行的,运行后会出错,相当于初始化两次SDRAM,数据将丢失
//g                     //在这里只是把这个需要烧写的程序放在这个地址空间。
                        //后面这个u-boot.bin(再次强调是个特殊u-boot) 你可以当作一个台阶,用着与烧写真正的u-boot.bin 
 
loadbin d:\u-boot.bin 0x33f80000 //0x33f80000 是把U-boot放在SDRAM内存最上面的512k的空间
setpc 0x33f80000  //u-boot-2010.09\board\fl2440\config.mk文件里面放在把U-boot放在内存的那个地址空间
g                //TEXT_BASE = 0x33F80000

 这时你应该可以在串口看到U-boot的输出信息了,然后我们在U-boot命令行模式输入NAND Flash擦除和写入命令即可:
 我们下载程序是下载到NAND FLASH
 nand erase 0 40000  //

 nand write 30000000 0 40000  //把前面下载到0x3000000的u-boot.bin下载NAND

下面的不用看,是我自己随便记得一些东西。。。。。。。。。。

 FL2440的U-boot移植如下:ln  链接命令

echo "ARCH   = ${arch}"  >  config.mk   //> 创建config.mk 把内容附加到config.mk
echo "CPU    = ${cpu}"   >> config.mk   //>>把内容附加到config.mk
echo "BOARD  = ${board}" >> config.mk   //>>把内容附加到config.mk

#define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用来支持uboot在内存中直接运行  忽略SDRAM的初始化

U-boot根目录下面有一个u-boot.lds链接脚本很重要用的到
框架分析:
stage1:初始化一系列硬件,
_start_armboot: .word start_armboot
    ->for (;;) {main_loop ();}
->getenv("mdm_cmd"
->for (;;) {len = readline (CONFIG_SYS_PROMPT);
rc = run_command (lastcommand, flag);}
->parse_line (finaltoken, argv)) == 0
cmd_tbl_t *cmdtp;
struct cmd_tbl_s {
char *name;/* Command Name*/
int maxargs;/* maximum number of arguments*/
int repeatable;/* autorepeat allowed?*/
/* Implementation function*/
int (*cmd)(struct cmd_tbl_s *, int, int, char * const []);
char *usage;/* Usage message(short)*/
#ifdef
CONFIG_SYS_LONGHELP
char *help;/* Help  message(long)*/
#endif
#ifdef CONFIG_AUTO_COMPLETE
/* do auto completion on the arguments */
int (*complete)(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
#endif
};

       cmdtp = find_cmd(argv[0])) == NULL

时间: 2025-01-07 19:11:45

FL2440中U-boot框架完整分析的相关文章

3-8 Linux系统中防火墙的框架简单分析_网络冲浪

    Netfilter提供了一个抽象.通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统.Netfilter框架包含以下五部分: 1. 为每种网络协议(IPv4.IPv6等)定义一套钩子函数(IPv4定义了5个钩子函数), 这些钩子函数在数据报流过协议栈的几个关键点被调用.在这几个点中,协议栈将把数据报及钩子函数标号作为参数调用netfilter框架. 2. 内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,这样当某个数据包被传递给netfilter框架时,内核能检测是

在Spring Boot项目中使用Spock框架

Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目中使用该框架写优雅.高效以及DSL化的测试用例.Spock通过@RunWith注解与JUnit框架协同使用,另外,Spock也可以和Mockito(Spring Boot应用的测试--Mockito)协同使用. 在这个小节中我们会利用Spock.Mockito一起编写一些测试用例(包括对Controller的测试和对Repository的测试),感受下Spock的使用.

全志平台boot框架中增加设备驱动过程分析

全志平台boot框架中增加设备驱动过程分析          在boot启动阶段,大家都知道他的主要目的就是引导uboot,uboot在引导内核,从而让整个系统运作起来.全志的boot阶段,对应平板这一块,它会驱动LCD,显示一些开机LOGO,这个过程很快,也就1-2秒钟的时间.然而对于车载行业应用来说,可能需要再boot阶段做一些事情.比如,机器冷启动,大家都知道android启动时间还是比较长的,那么怎么使得客户能快速的用上倒车影像的功能呢?这就需要动脑筋了. /**************

JS运动基础框架实例分析

 这篇文章主要介绍了JS运动基础框架,实例分析了javascript定时器及div样式的使用技巧,需要的朋友可以参考下     本文实例讲述了JS运动基础框架.分享给大家供大家参考.具体分析如下: 这里需要注意: 1. 在开始运动时关闭已有的定时器 2. 把运动和停止隔开 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title&g

JavaWeb工程中集成YMP框架快速上手(二)_java

本文将介绍如何在Java Web工程中集成YMP框架,操作过程基于IntelliJ IDEA做为开发环境,工程结构采用Maven构建: IntelliJ IDEA下载地址: https://www.jetbrains.com/idea/download/ Maven下载地址: http://maven.apache.org/ 创建项目 1. 打开IDEA开发环境并点击Create New Project按钮开始创建新项目向导,如下图-1所示: 2. 在New Project窗口中选中左侧Mave

Android中利用Xposed框架实现拦截系统方法_Android

一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xposed框架是免费的而且还是开源的,网上也有很多文章介绍了Xposed框架的原理实现,不了解的同学可以自行查阅即可,本文主要介绍如何通过这个框架来进行系统方法的拦截功能,比如我们开发过程中,对于一些测试环境很难模拟,特别是测试同学有时候像随机改变设备的imei,mcc等信息用来模拟不同测试场景,这时候

Webkit中HTML5 Video的实现分析(五) - WebKit中视频事件的传递

HTML的每个元素都可以让JavaScript在某些事件发生时,进行处理.就比如onclick="clickButton()"之类的属性设定. 像下面这篇博客所讲的一样,在WebKit中每个元素都有其对应的JS绑定的实现: [WebKit]为JavaScript Binding添加新DOM对象的三种方式及实作 对于视频元素,可以对应看看JSHTMLMediaElement.cpp和JSHTMLVideoElement.cpp中的实现. 这里只说一下事件的处理机制.就是在WebKit中有

金山云安全中心首度公布“猫癣”病毒完整分析报告

一.现象描述:◆感染"猫癣下载器"的电脑速度会明显变慢,杀毒软件反复提示发现病毒不能完全清除◆ 非系统盘的可执行文件文件目录发现"usp10.dll"文件◆部分用户的电脑感染猫癣下载器会出现弹出 大量广告页面."QQ医生"扫描功能无法正常使用,迅雷不能正常使用等各种症状,◆部分用户查毒以后将导致输入法无法正常使用◆QQ,网游游戏账号被盗二.行为描述:1.对抗安全软件1) 病毒通过给进程照相对比的方式找到以下软件的进程 然后调用windows Te

Android中利用Xposed框架实现拦截系统方法

一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xposed框架是免费的而且还是开源的,网上也有很多文章介绍了Xposed框架的原理实现,不了解的同学可以自行查阅即可,本文主要介绍如何通过这个框架来进行系统方法的拦截功能,比如我们开发过程中,对于一些测试环境很难模拟,特别是测试同学有时候像随机改变设备的imei,mcc等信息用来模拟不同测试场景,这时候