在U-Boot-2009-03移植笔记的最后,我们找到了U-boot的启动代码在cpu/arm920t/start.S中,这是一段汇编代码,我们的移植工作从这里开始。
我们定位到reset标签
1 reset:
2 /*
3 * set the cpu to SVC32 mode
4 */
5 mrs r0,cpsr
6 bic r0,r0,#0x1f
7 orr r0,r0,#0xd3
8 msr cpsr,r0
上面的注释很明白,设置CPU工作模式,不需要修改。
接下来,我们关掉看门狗,并关闭中断
1 ldr r0, =pWTCON
2 mov r1, #0x0
3 str r1, [r0]
4
5 /*
6 * mask all IRQs by setting all bits in the INTMR - default
7 */
8 mov r1, #0xffffffff
9 ldr r0, =INTMSK
10 str r1, [r0]
11
12
13 /*modify by xinna*/
14 ldr r1, =0x7fff
15 ldr r0, =INTSUBMSK
16 str r1, [r0]
我这里直接略过了原有U-boot的宏定义,因为我们只需要支持一款芯片即可,注意第14行,这是因为S3C2440于S3C2410中断控制器不同而修改的,具体原理请参见S3C2440的datasheet。在上面的代码里,我们完成了两件事情,关看门狗,关中断,接下来我们继续看代码,到了这里:
1 /*
2 * we do sys-critical inits only at reboot,
3 * not when booting from ram!
4 */
5 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
6 bl cpu_init_crit
7 #endif
子过程cpu_init_crit主要工作就是关闭Cache,并且调用lowlevel_init,我们要注意的是lowlevel_init,这里放了初始化SDRAM的代码。
这个low_levelinit位于board/xinna2440/lowlevel_init.S文件中,这里会初始化好你的内存(xinna2440用的是两片16位的SDRAM并联组成32位的SDRAM),我们需要针对不同的芯片,连接方式修改以下这个文件中的寄存器配置。
然后还有很重要的一点,你需要修改board/xinna2440/u-boot.lds文件,将lowlevel_init这段代码放在整个u-boot.bin的前4k代码中,所以我们需要这样修改
1 . = 0x00000000;
2
3 . = ALIGN(4);
4 .text :
5 {
6 cpu/arm920t/start.o (.text)
7 board/xinna2440/lowlevel_init.o (.text)
8 *(.text)
9 }
然后我们在start.S的 bl cpu_init_crit后面增加以下代码,点亮第一盏灯。
1 ldr r4,=0x56000010
2 ldr r5,=( 1 << 10)
3 str r5,[r4]
4
5 ldr r4,=0x56000014
6 ldr r5,=~( 1 << 5)
7 str r5,[r4]
8 loo:
9 b loo
通过openjtag烧到nandflash上,第一盏LED灯被点亮。
关键字:U-Boot 移植 点亮
引用地址:
U-Boot-2009-03移植笔记(点亮第一展灯)
推荐阅读最新更新时间:2024-11-11 12:14
Micro-LED点亮显示技术未来
近日,又一家科技巨头涉足Micro-LED:瑞典媒体Rapidus透露,谷歌已向Glo公司投资了1500万美元,而Glo是一家从瑞典隆德大学孵化出来的公司,正致力于为手机、智能手表以及VR/AR提供基于纳米线的LED显示屏。 此前,索尼、苹果、Facebook等科技巨头或通过自研或通过投资、收购等方式切入Micro-LED领域,让Micro-LED概念持续火热,成为显示产业的新亮点。 友达光电董事长彭双浪认为,Micro-LED是非常好的技术,因为它是TFT背板和LED固态发光体的结合,而这两个技术现在非常成熟,成本也在大幅降低。而且最近有消息指出,苹果和PlayNitride今年年底将有可能小批量量产Micro-LED。面对Mi
[手机便携]
基于3c2410的linux2.6.22移植(4)
二、NAND flash 分区管理 这块2410板自带了vivi,启动之后可以进到vivi的提示符下: vivi 查看分区情况: vivi part show mtdpart info. (6 partitions) name offset size flag vivi :0x00000000 0x00020000 0 128k param
[单片机]
arm9(TQ2440)移植小结---环境搭建
从拿到板子开始移植至今已有一个月了,现在回头小结一下,以备后用吧。 第一阶段:搭建环境(vmware + redhat linux 9) 1.安装虚拟机没有什么问题。下面是在虚拟机上安装linux的过程: 虚拟机的设置按照默认也差不多了,内存给了256M,硬盘给了8G,从后面的使用来看, 硬盘还是越大越好,这个东东随时间的增长越来越大。 linux安装完成后就开始安装虚拟机工具(vmware Tools),这个东西安装的很不顺利, 具体方法前面一篇转载的已经说得很完整了,但是至今有个问题没有解决----安装并没有完全成功。 从效果来看,一个是分
[单片机]
Win用户有福了!锤子手机重磅功能将移植PC平台
“大爆炸(BigBang)”、OneStep,“闪念胶囊”(ideapills)是锤子Smartisan OS最有特色的三个功能,大大提升了智能手机的工作效率,深得锤粉喜爱。 有没有一种可能,将这些功能转移到PC平台呢? 今日,有锤粉@罗永浩称:“肯定将big bang、one step、闪念胶囊扩展到PC平台,用惯了坚果手机 ,在电脑上操作,真心一点都不习惯,工作效率都降低了。 ” 罗永浩的回答直截了当:“我们正在做一些比你希望的这个还要好的多的东西。” 事实上,今年6月份,罗永浩就曾在微博上证实,PC版和Mac版“闪念胶囊”正在开发中。 该功能可让用户通过语音输入,将语音以便签的形式即时生成保存,同时还能
[手机便携]
PIC16F877A 外部中断RB0 ,RA0点亮LED
PORTB的功能基本就是普通IO,但它在其他方面有其他引脚不具备的特点,PORTB的每一个引脚在作为输入时,内部都有一个弱上拉可用。 PORTB的RB0可以作为一个外部中断信号输入,可以对输入信号的上升沿或下降沿跳变产生一个中断响应。 要实现RB0/INT中断源,软件初始化设定步骤如下: 1,RB0/INT引脚为输入模式,TRISB0 = 1; 2,INTEDG = 1,RB0上输入信号上升沿产生中断;INTEDG = 0,下降沿中断 3,清除INTF = 0,确识有效中断发生前中断标志为0; 4,INTE = 1,允许RB0/INT中断响应。 5,GIE = 1,打开总中断使能 6,中断发生后,查询INTF位;
[单片机]
s3c2440之ADS移植keil
最近把ADS1.2工程转到MDK4.03出现一些error,罗列了可能出现的error,并给予相关的办法,让大家在以后的转换中尽快搞定 1:error : No section matches selector no section to be FIRST/LAST. 把原来的Init 代码段名修改成RESET: ; AREA Init,CODE,READONLY AREA RESET,CODE,READONLY 2:error Undefined symbol Main (referred from 2440
[单片机]
通过TX2440A移植文档总结出移植驱动的方法
第一种情况:(内核已存在要移植的驱动) 假如要移植A驱动,而且源码中已存在该驱动源码,那么移植的一般方法如下: 1、在arch/arm/mach-s3c2440/mach-smdk2440.c的Platform_device结构体中加上A这项,如果存在就不用添加。 2、然后做相应的修改,如在arch/arm/plat-s3c24xx/devs.c添加相应的结构体、修改源码,有些不用做出相应的修改,如RTC就不用修改。 3、最后配置内核(make menuconfig)。 第二种情况:(内核不存在要移植的驱动) 假如要移植B驱动,而且源码中不存在该驱动源码,那么移植的通用方法如下: 将写好的B驱动源代码拷贝到相应的源代码目录,
[单片机]
STM32入门学习笔记之uCOS-II系统移植2
23.2 uCos-II移植 我们将下载好的uCOS-II的源代码解压出来如下图所示。 23.2.1 在工程中添加相应的文件 (1)在工程目录下建立UCOSII文件夹,并在该文件夹内新建三个文件夹CONFIG,CORE和PORT (2)将除了os_cfg_r.h和os_dbg_r.c这两个文件以外的所有文件全部复制到CORE文件夹下 (3)在CONFIG文件夹中新建includes.h文件和os_cfg.h文件 (4)在PORT文件夹中新建os_cpu.h,os_cpu_a.asm,os_cpu_c.c这3个文件 (5)在工程中添加这三个目录下的文件,如下图所示。 注:不要把ucos-ii.c文件添加到UCOS-CORE分
[单片机]