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

发布时间:2024-09-02  

  直接切入主题


  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 更容易。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>