1.本文以mini2440开发板为例:
u-boot属于两阶段的Bootloader,第一阶段文件为CPU/arm920t/start.S和board/mini2440/lowlevel_init.S,前者是平台相关的,后者是开发板相关的;
U-boot第一阶段代码:
1.硬件设备初始化
该部分完成:将CPU的工作模式设置为管理模式;关闭WATCHDOG;
设置FCLK;HCLK;PCLK的比例,关闭MMU;CACHE
参考代码:cpu/arm920t/start.S
2.为加载Bootloader的第二阶段代码准备RAM空间;所谓准备RAM空间,就是初始化内存芯片,参考代码start.S中调用的lowlevel_init.S函数来设置存储控制器,使得外接的SDRAM可用。对于S3C2440可以查看芯片手册,查看SDRAM的参数;
3.复制Bootloader的第二阶段的代码到RAM空间
4.设置好栈:
栈的灵活性很大,只要让sp寄存器指向一段没有使用的内存即可;
关键字:U-boot mini2440 S3C2440 移植
引用地址:
U-boot 在 mini2440-S3C2440 上的移植(3)-第一阶段:探索启动代码
推荐阅读最新更新时间:2024-11-02 16:39
S3C2440之NAND FLASH移植到S3C2410的驱动分析
S3C2440A的NAND FLASH驱动移植到S3C2410还是有些不一样的,最主要的这两个IC的NAND FLASH的寄存器有些不一样,请看下面的两者之间不同: // // Copyright (c) Microsoft Corporation. All rights reserved. // // // Use of this source code is subject to the terms of the Microsoft end-user // license agreement (EULA) under which you licensed this SOFTWARE PRODUC
[单片机]
OK6410A 开发板 (三) 11 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 命令的执行
1.命令的注册 2.命令的调用 3.命令的执行 4.命令的返回 1 命令的注册(以help为例) cmd/help.c 10 static int do_help(struct cmd_tbl *cmdtp, int flag, int argc, 11 char *const argv ) 12 { 13 #ifdef CONFIG_CMDLINE 14 struct cmd_tbl *sta
[单片机]
S3C2440看门狗定时器
看门狗定时器的主要作用是在程序因为干扰而跑飞后,能够使系统复位,不至于使系统永远的死下去。它的原理与一般的定时器没有多大区别,就是先要设置好一段时间,当超过这段时间后,就从当前运行的程序中跳出进入中断处理程序中。但两者的主要差别是,一般的定时器中断是我们希望它发生的,因此我们不会在定时器中断发生前的那个时间段内干预它;而看门狗定时器中断是我们不希望它发生的,因此我们要想方设法地避免其发生。主要的方法就是在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器重新开始计时。 view plain copy #include 2440addr.h #include Option.h #d
[单片机]
S3C2440 clock 工作原理
OSC是用无源晶振,EXT是用有源晶振或外部时钟2440的12M是Oscillator 是有源的呀! 2440的12M是Oscillator Crystal 无源晶体 Oscillator 有源晶体(里面有有源器件) 无源晶振内只有一片按一定轴向切割的石英晶体薄片,供接入运放(或微处理器的XTAL端)以形成振荡.有源晶振内带运放,工作在最佳状态,电源后,可直接输出一定频率的等幅正弦波,一般至少有4引脚,体积稍大. 准备先不跑系统,把S3C2440和周边硬件熟悉一下再说。 对于任何一个单片机,要使用它首先就要弄明白他的时钟系统,MCU的时钟就像人的心脏,跳动的快慢,决定着系统的工作
[单片机]
u-boot移植(十三)---代码修改---裁剪及环境变量 二
一、错误处理 上一节遇到一个错误: print一下: 发现我们在jz2440.h中静态写的网络参数都没有写进去。 dm9000 address not set。 dm9000的地址未设置。 这里对应两个函数: static int eth_pre_unbind(struct udevice *dev) 和 int eth_write_hwaddr(struct eth_device *dev, const char *base_name, int eth_number) 这里两个函数对应着宏 CONFIG_DM_ETH。在文件中查找一下,这个宏定义的是什么: conf
[单片机]
s3c2440触摸屏测试
* 文件名:main.c * 功能:测试TFT屏的驱动函数 * 作者:jianqi * 版本:v1.0 #include 2440addr.h //包含2440相关寄存器的设置 #include TFT.h #include Touch.h #include MMU.h #include UART.h volatile int A,B,C,D,E,F,K; //校正参数 int flagTS=0; //触摸屏转换标志 int xdata,ydata; //触摸屏A/D转换数据 * 名称:Touch_Int * 功能:触摸屏中断程序,读取A/D转换的值 * 入口参数:无 * 出口参数:无 void __irq
[单片机]
基于WINCE S3C2440 的LED驱动程序的编写
在SMDK2440的BSP包里经常看见这两句语句: volatile IOPreg *s2440IOP = (IOPreg *)IOP_BASE; volatile INTreg *s2440INT = (INTreg *)INT_BASE; 这两条语句简单的理解就是把s2440IOP和IOP_BASE等价,把s2440INT和INT_BASE等价。 IOP_BASE和INT_BASE在s244.h头文件中 #define IOP_BASE 0xB1600000 // 0x56000000 typedef struct { unsigned int rGPACON; // 00 unsigned
[单片机]
S3C6410移植apache和php
需要准备的东西: Apache-1.3.39 for linux Php-4.4.8 for linux Ubuntu amd64位 PC机 6410开发板,我用的是友善之臂 交叉编译: 交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码,即使用pc上的arm linuxgcc编译器编译好代码,并安装,然后把整个安装包放到开发板的相应目录。 理论上只需在PC上编译安装arm版的apache和php即可,实际上由于在编译安装过程中需要用到某些文件,而这些文件在x86或amd64平台上无法运行的,所以在编译arm版的apache和php之前,需要先使用gcc编译x86版的apache和php。 Apache
[单片机]