当前搜索:

(四) u-boot 启动分析_第二阶段

在第一阶段,清 BSS 段之后,CPU 跳转到 sdram 里的 start_armboot() 函数,本文,分析 uboot 启动流程的第二阶段。 start_armboot函数在lib_arm/board.c中定义,是U-Boot第二阶段代码的入口。第二阶段的主要工作是进行单板级别的初始化,初始化 nandflash 、norflash 、初始化串口、设置环境变量、最终跳转到 main_loop 里,接收串口传递进来的各种命令。...
阅读(319) 评论(0)

(三) u-boot 启动分析_第一阶段

本文重点在于分析 uboot 启动流程以及 uboot 自身的细节,比如栈空间的划分、如何设置 tag 、如何添加一个自定义命令等。但是不涉及基本的硬件驱动的分析,比如内存初始化、时钟初始化、mmu 、nandflash 等等这些详细细节不是我们的重点。 u-boot 版本: uboot 1.1.6 使用的开发板: JZ2440V3...
阅读(434) 评论(0)

【补充】U-boot启动代码指令级分析与启动图解

[start.S代码指令集详细分析点我]Stage1:建立堆栈对应内存布局:上图中U-Boot是Nor Flash。第一阶段没有初始化初始化NandFlash,所以默认 uboot是从norflash启动,不支持 Nandflash 启动。如果修改代码支持Nand Flash启动,那么启动时Nand Flash控制器前4KB的代码复制到SRAM中,这4KB的代码再将整个U-Boot复制到SDRAM中...
阅读(5730) 评论(0)

【补充】uboot makefile 中的unconfig

以JZ2440为例: 在uboot编译中,要先输入单板配置命令:100ask24x0_config_config进入makefile中,看到100ask24x0_config_config的配置规则如下:100ask24x0_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0...
阅读(5548) 评论(0)

(二) u-boot 配置、编译过程分析

由于u-boot比较庞大,所以我们分开来分析,对于一个大型的项目我们想快速的了解其代码架构和内容,最方便的方法就是分析Makefile,所以我用uboot-1.1.6来分析Makefile。通过对u-boot的分析想要得到以下内容: 1. U-boot的入口  2. 链接地址  由顶层Readme文件说明,可以知道如果要使用开发板board/,就先执行make <boa...
阅读(5958) 评论(0)

(一) u-boot 基本介绍

U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。 U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。一、u...
阅读(5877) 评论(0)

(六) 自己写简单的u-boot

前言:想想 uboot 的代码量,我们说自己写一个 bootloader 是不是口出狂言了?然而并没有,bootloader 的唯一目的只有一个,那便是启动内核。内核就是一大段可执行程序,我们只要跳转到它的入口地址去执行不就OK? 所以,写一个简单的 bootloader 并不困难。    现在来思考一下,目的是启动内核,那么内核在哪里?刚上电的时候,内核肯定是位于 nandflash 里的,我们得...
阅读(496) 评论(0)

LCD控制器

[点此回顾上课学习内容](http://blog.csdn.net/pz0605/article/details/53246715) 2440的lcd控制器可以驱动 STN LCD 和 TFT LCD 本文以较为常见的 TFT LCD 来讲解使用方法: 基础知识:首先, 我们来看下2440的 lcd controller 组成框图: REGBANK: LCD控制器的寄存器组, 含有17个寄存器及...
阅读(5814) 评论(0)

uart_stdio实验

目的:在串口0上实现printf、scanf等函数,它使用scanf、sscanf、printf等函数从串口接收一个十进制数字序列,然后将它转化为十六进制输出。 大致内容和uart实验类似,这里只分析两个文件。 stdio.lds SECTIONS { . = 0x00000000; .init : AT(0){ head.o init.o nand.o} /*将上面文件对应的运...
阅读(207) 评论(0)

【补充】常用Makefile格式分析

Makefile格式分析如下: Makefile三大组成:目标、依赖、命令 一、led.bin: led.o #(目标文件的生成依赖于命令行对依赖文件的处理。要将所有能生成的.o文件都写到依赖里面。) #.bin为目标文件(启动文件),可直接烧录到芯片中运行 #.o为依赖文件,其生成源于.s(汇编文件)或.c(C文件),%表示名字,编译时名字要一致。 arm-linux-ld -Tt...
阅读(262) 评论(0)

Uart串口实验

[点此回顾上课学习内容] 目的:在串口上输入一个字符,单板结合接收到后将它的ASCII值+1后,从串口输出。 首先设置MPLL,提高系统时钟,令PCLK=50MHz,Uart选择PCLK为时钟源。然后代码复制到SDRAM中之后,调用main函数。 uart.lds SECTIONS { . = 0x30000000;/*设置当前运行地址为0x30000000*/ .text...
阅读(5693) 评论(0)

C++函数编译原理和成员函数的实现

【学习于C语言中文网,请勿转载】 对象的内存中只保留了成员变量,除此之外没有任何其他信息,程序运行时不知道 stu 的类型为 Student,也不知道它还有四个成员函数 setname()、setage()、setscore()、show(),C++ 究竟是如何通过对象调用成员函数的呢? C++函数的编译 C++和C语言的编译方式不同。C语言中的函数在编译时名字不变,或者只是简单的加...
阅读(563) 评论(0)

C++对象的内存模型

【学习于C语言中文网,请勿转载】 类是创建对象的模板,不占用内存空间,不存在于编译后的可执行文件中;而对象是实实在在的数据,需要内存来存储。对象被创建时会在栈区或者堆区分配内存。 直观的认识是,如果创建了 10 个对象,就要分别为这 10 个对象的成员变量和成员函数分配内存,如下图所示: 不同对象的成员变量的值可能不同,需要单独分配内存来存储。但是不同对象的成员函数的代码是一...
阅读(253) 评论(2)

C++函数重载过程中的二义性和类型转换

【学习于C语言中文网,请勿转载】 发生函数调用时编译器会根据传入的实参的个数、类型、顺序等信息去匹配要调用的函数,这在大部分情况下都能够精确匹配。但当实参的类型和形参的类型不一致时情况就会变得稍微复杂,例如函数形参的类型是int,调用函数时却将short类型的数据交给了它,编译器就需要先将short类型转换为int类型才能匹配成功。 现在有以下几种形式的函数重载(例1): #...
阅读(523) 评论(0)

C++中到底在声明中还是定义中指定默认参数

【学习于C语言中文网,请勿转载】 除了函数定义,你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂,有时候你可以在声明处和定义处同时指定默认参数,有时候你只能在声明处指定,请看下面的例子(示例1): #include using namespace std;void func(int a, int b = 10, int c = 36);int main(){...
阅读(407) 评论(0)
416条 共28页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:339206次
    • 积分:7536
    • 等级:
    • 排名:第3283名
    • 原创:313篇
    • 转载:12篇
    • 译文:89篇
    • 评论:98条
    【目录索引】

    闲适音乐

    博客专栏
    最新评论

    Email: 457086306@qq.com