S3C6410之uboot回炉再造(5)设置堆栈与跳转至C入口

发布者:清新家园最新更新时间:2024-09-02 来源: cnblogs关键字:S3C6410  uboot  设置堆栈 手机看文章 扫描二维码
随时随地手机看文章

  直接切入主题


  1、设置堆栈


 1 skip_hw_init:

 2     /* Set up the stack                            */

 3 stack_setup:

 4     ldr    r0, =CONFIG_SYS_UBOOT_BASE    /* base of copy in DRAM        */

          //0x57e0_0000

 5     sub    r0, r0, #CONFIG_SYS_MALLOC_LEN    /* malloc area                      */

          //#define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 1024 * 1024)

          //#define CONFIG_ENV_SIZE  0x4000

          //减去环境变量存储区的大小

 6     sub    r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo                        */

          //#define CONFIG_SYS_GBL_DATA_SIZE  128

          //减去全局变量存储区的大小

 7     sub    sp, r0, #12        /* leave 3 words for abort-stack    */

          //留下 12 字节(即 3 个字)的堆栈空间

 8 


  我本人并不信任这段代码、因为我也参考过s3c-uboot1.1.6的代码。


  在s3c-uboot1.1.6的代码中,#ifdef 考虑的内容更全面也更具有逻辑依据一些。


  所以本次仅是分析、制作一套可以成功运行各项基本功能的代码,但在后期实用中不把这套代码当做长期支持使用的代码,以免遇到不可知的bug。


  2、清除BSS(Block Started by Symbol)段


 9 clear_bss:

10     ldr    r0, _bss_start     /* find start of bss segment        */

11     ldr    r1, _bss_end       /* stop here                        */

12     mov     r2, #0            /* clear                            */

                   //注释很清楚了…、就不再解释

13 

14 clbss_l:

15     str    r2, [r0]        /* clear loop...                    */

16     add    r0, r0, #4    //循环清除bss

17     cmp    r0, r1

18     ble    clbss_l

19 

20 #ifndef CONFIG_NAND_SPL

21     ldr    pc, _start_armboot  // C入口函数,选择在IRQ中断处理的代码分析之后说

22 

23 _start_armboot:

24     .word start_armboot

25 #else

26     b    nand_boot

27 /*    .word nand_boot*/

28 #endif


  至此,汇编接口的代码就分析完了,再接着就是C语言 start_armboot 的分析了。


  小总结一下 start.S 中的构架,个人还是觉得原版的代码构架更清晰一些。


  在 uboot2010 中,代码构架偏向将 寻址类操作的几种放在 start.S 中,而其他操作的放到 lowlevel_init 中。


  而 uboot1.1.6 更在意 #ifdef 的运用,将更多的设置项分清楚。


  个人觉得 2010 逻辑更优秀,1.1.6 debug 更容易。


关键字:S3C6410  uboot  设置堆栈 引用地址:S3C6410之uboot回炉再造(5)设置堆栈与跳转至C入口

上一篇:S3C6410之uboot回炉再造(6)异常中断处理
下一篇:S3C6410之uboot回炉再造(4)使能MMU

推荐阅读最新更新时间:2024-11-07 20:09

S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件系统移植)
我个人觉得nandflash上用yaffs2文件系统是很好的方案,但是最新的Linux并不支持yaffs2文件系统,需要你自己给内核打补丁,不过话说在前面,由于内核间差异及兼容问题,在编译时肯定会出现各种编译问题,需要你一一的去解决。 一、准备工作 1. 下载源码 使用git工具下载:$ git clone git://www.aleph1.co.uk/yaffs2 2. 给内核打补丁 下载完成后,在该执行目录下会有yaffs2文件夹,进入该文件夹。 $ ./patch-ker.sh c m ../../kernel/test/linux-3.14.4 Updating ../../kernel/te
[单片机]
<font color='red'>S3C</font>6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件系统移植)
深入理解ARM体系架构(S3C6410)---UART实例
1、 概括OVERVIEW S3C6410提供了4个独立的异步串行口,每个独立的串行口可以工作在中断模式或DMA模式下。也就是说UART能够产生一个中断或DMA请求。UART可以提供最高3Mbps。每个UART包含2个64位的FIFO,分别用于接收,发送缓冲。 S3C6410 UART 包括可编程的波特率,红外发射接收,1或2个停止校验位,5,6,7,8数据位,和奇偶检验。每个UART包含一个波特率发生器,接收发送和控制单元。 波特率可以由PCLK,EXT_UCLK0或EX_UCLK1锁定。发送接收器分别包含了一个64位FIFO和一个数据移位器。通过向FIFO写入数据,再把FIFO中的数据拷贝到数据移位器中,从而通过TxD
[单片机]
深入理解ARM体系架构(<font color='red'>S3C</font>6410)---UART实例
1_5.1.6_U-boot分析与使用_uboot启动内核_P
现在来分析uboot是怎么启动内核的。 我们知道,u-boot启动内核是通过两条指令来实现的。 nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0 读出内核 nand read.jffs2 0x30007FC0 kernel 从kernel分区中读出内核,放到地址0x30007FC0去。 分区:对于windows系统来说,每个硬盘上都有分区表;对于嵌入式Linux来说,Flash没有分区表,但是我们可以人为的将这块Flash分为几个区,这些分区没有分区表,而是在源码中(100ask24x0.h)写死的。需要注意的是,对于这些分区,我们关心的不是分区的名字,而是
[单片机]
1_5.1.6_U-boot分析与使用_<font color='red'>uboot</font>启动内核_P
19.Bootloader框架设计
在前面的uboot代码分析知道,uboot的启动有三个步骤BL0,BL1,BL2。由于BL0是固化程序,厂商提供的,所以不用考虑。所以Bootloader框架就剩下设计BL1和BL2了。 2440开发板: 6410和210:
[单片机]
19.Bootloader框架设计
S3C2440移植uboot之支持DM9000
上一节S3C2440移植uboot之支持NANDFLASH操作移植了uboot 支持了NANDFLASH的操作,这一节修改uboot支持DM9000。 目录 通过Makefile把dm9000x编译进uboot 编译报错 DM9000_DATA 修改内存控制器时序 网卡的初始化的流程 支持DM9000C的初始化 编译测试 TFTP下载测试 通过Makefile把dm9000x编译进uboot cd drivers/net vi Makefile 需要在文件中添加以下宏 在smdk2440.h中修改文件支持DM9000 #if 0 #define CONFIG_CS8900 /* we have a CS8
[单片机]
S3<font color='red'>C</font>2440移植<font color='red'>uboot</font>之支持DM9000
uboot在s3c2440上的移植(2)
一、移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 4)准备进入u-boot的第二阶段(在u-boot中添加对我们开发板上Nor Flash的支持)。 通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认是从Nor Flash启动,再从上一节这个运行结果图中看,还发现几个问题:第一,我开发板的Nor Flash是2M的,而这里显
[单片机]
搭建S3C6410开发板的测试环境
ARM架构的开发板可基于X86架构的PC在CPU指令以及二进制格式上都有所不同。Linux驱动需要访问硬件且这些硬件很难在PC上进行模拟,那么就要在带有这些硬件的开发板上进行调试和测试。 S3C6410是由三星公司推出的一款低功耗,高性价比的RISC处理器,基于ARM11内核,可广泛应用于移动电话和通用处理等领域。其为2.5G和3G通信服务提供了优化的硬件性能,内置强大的硬件加速器,集成了一个MFC,支持MPEG4/H.263/H.264编解码和VC1解码,能提供实时视频会议及NRSC和PAL制式的TV输出。 内置一个采用最先进技术的3D加速器,支持OpenGL ES 1.1/ 2.0和D3DM API 能实现4M triangl
[单片机]
搭建<font color='red'>S3C</font>6410开发板的测试环境
uboot中位置无关代码的程序设计
ARM处理器支持位置无关的程序设计,这种程序加载到存储器的任意地址空间都可以正常运行,其设计方法在嵌入式应用系统开发中具有重要的作用。本文首先 介绍位置无关代码的基本概念和实现原理,然后阐述基于ARM汇编位置无关的程序设计方法和实现过程,最后以嵌入式Bootloader程序设计为例,介绍 位置无关程序设计在Bootloader程序设计中的作用。 引言 基于位置无关代码 PIC(Position Independent Code)的程序设计在嵌入式应用系统开发中具有重要的作用,尤其在裸机状态下开发Bootloader程序及进行内核初始化设计;利用位置无关的程序设 计方法还可以在具体应用中用于构建高效率动态链接库,因而深入理解和
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved