U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。
U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
程序执行流程:
(1)一上电,运行bootloader
(2)读出内核,启动内核--最主要目的
(3)挂接根文件系统,运行里面应用程序
(1)使用 linux-2.6.22.6_jz2440.patch给linux-2.6.22.6.tar.bz2打补丁。
tar xjf u-boot-1.1.6.tar.bz2
patch -p1 < ../u-boot-1.1.6_jz2440.patch (-p1忽略第一个参数)
(2)从linux中拷贝到windows,使用oflash烧写u-boot.bin
(3)回车观察菜单
?或help查看命令;
print查看环境变量;
set bootdelay 10;
?+命令查看说明。
menu返回菜单。
(4)uboot做什么:
最终目的:启动内核(其中需要初始化其他资源来完成这个任务)
a:从flash读出内核
写flash,网卡,USB等
b:拷贝到SDRAM
初始化SDRAM,时钟,串口等
c:启动内核
d:实现上面几部,总结如下:
关键字:S3C2440 u-boot 编译
引用地址:
04-S3C2440u-boot学习之u-boot分析(1)编译体验
推荐阅读最新更新时间:2024-11-04 09:44
2.交叉工具链
一、交叉工具链: 交叉工具链,其实他有两个含义,一个就是交叉工具,所谓的交叉工具就是运行的环境和编译的环境不是在一体的。就像我们现在,编译裸机程序是在pc机上面执行的。可我们运行程序是在开发板。链,就是很多的意思,就是一个工具的集合。在我们前面配置arm-linux-gcc的工具中。在/usr/local/arm/4.3.2/bin的目录下有很多编译工具。例如图1-1: 图1.-1 交叉工具链 下面我们来写一个简单的程序,用这些工具编译。 Hello.c: #include stdio.h void main(){ printf( hello fish!n ); } 这是一个简单的hello程序。首先我们先用我们熟悉的g
[单片机]
S3C2440 cp15协处理器详解
2440的协处理器CP15总共有c0~c15这16个协处理器寄存器,各自具有一定的功能定义。但总的来说,cp15主要跟以下功能有关: 1、获取device id和cache type等一些CPU相关信息。 2、MMU操作。包括MMU的使能和禁止,虚拟地址到物理地址的映射机制建立 3、访问权限控制。主要用来实现安全机制和linux的写时复制(copy on write)。 4、设置时钟模式。init.S中MMU_SetAsyncBusMode和MMU_SetFastBusMode这两个函数 下面我会分别就以上4种应用详细分析,并配合代码进行讲解。 1、获取device id和cache type。这两个信息存在p15的c0寄存器
[单片机]
C51编译器-语言扩展(6)-重载函数
Reentrant Functions可重入函数 可重入函数可以被多个进程同时调用。当一个可重入函数执时,其他的处理可以中断这个函数的执行,而开始执行这同一重入函数。一般情况下,Cx51中的函数不能够被同时多次调用或者是重入。原因是函数的参数和局部变量都放在固定的内存中。函数reentrant属性允许声明可重入的函数,如: int calc (char i, int b) reentrant { int x; x = table ; return (x * b); } 可重入函数可以被多次调用,而且可以同时被两个或两个以上的进程调用。在实时应用或在中断和非中断程序都要调用同一个函数时就需要使用可重入函数。 对于每个可重
[单片机]
C51编译器-语言扩展(5)-中断函数
Interrupt Functions中断函数 8051及其变种提供了一定数量的硬件中中断,这些中断有: Interrupt Number Interrupt Description Address 0 EXTERNAL INT 0 0003h 1 TIMER/COUNTER 0 000Bh 2 EXTERNAL INT 1 0013h 3 TIMER/COUNTER 1 001Bh 4 SERIAL PORT 0023h 随着生产商制出新器件,增加了更多的中断。Cx51支持多达32
[单片机]
S3C2440之IIC裸机驱动
花了两天的时间终于把这个搞定了,其实I2C的原理还是比较简单的,只是几个细节性的东西还是需要特别的注意,主要是需要注意一下几点: 1.rIICCON &= ~0x10; 清中断必须要在rIICDS = slvAddr; 和rIICSTAT = 0xf0; // 主设备,启动 之后 2.延时对于写外部的低速设备来说非常重要,比如while(flag)之后一定要加延时,还有在写数据时发现只能写入基数地址的数据,这也是由于延时导致的 3.开始调试的时候系统总是死在read的函数中,后来发现在数据手册的note中说当读取最后一个数据的时候一定不能返回ACK信号,而我却在程序中使用while(flag)来等待ACK引发中断,这不死才怪呢。。
[单片机]
PIC单片机 的编译环境MPLAB的配置
在讲基于MPLAB X IDE 配置位配置前我先讲讲如何配置配置位。 比如PICLF1823的数据手册 可以再器件配置中找到两个寄存器。一个是配置字1 ,一个是配置字2. 对于初学者来说如此多的配置选项,该如何配置呢?我们要抓主重点。 配置字中最重要的配置选项就是: 看门狗配置 如:WDTE 1;0 ; 一般选择关闭看门狗 MCLRE复位脚的配置 如:MCLRE;一般选择复位脚作I/O 震荡器的选择: 如:FOSC 2:0 ;根据实际情况配置,我这里一般选择用 INTOSC 内部振荡器. 因为如果这三个没有配置好的话程序根本无法运行。其他配置可以看数据手册此不赘述。 MPLAB X IDE和MPLAB IDE 8不同。
[单片机]
s3c2440学习系列6(dma 续)
DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CPU的工作效率。 DMA大容量数据传输中非常重要,比如图像数据传输,SD卡数据传输,USB数据传输等等。 S3C2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同。 那么怎么使用DMA呢,S3C2410内部集成了DMA控制器,我们只需要简单的配置一下寄存器就可以实现DMA的传输了。 步骤与要点: 1.数据从哪里来,到哪里去? 使用DMA当然首先我们要知道数据的流向,DISRCx寄存器是DMA初始源寄存器存放了数据的源地址。DIDSTx是DMA的初始目的寄存器,应该存放数据的目的地址。 2.数据走得什么总线
[单片机]
S3C2440 测试程序(六) LCD显示实验1
利用初始化设置中的void LCD_displayScreen来实现按一键盘全屏显示某种颜色: while(1) { unsigned char color; color = Uart_Getch(); switch(color) { case 'b': case 'B': LCD_displayScreen(0,0,0xff); Uart_Printf( The color is Blue! \n ); break; case 'r&
[单片机]