历史上的今天
返回首页

历史上的今天

今天是:2025年02月23日(星期日)

正在发生

2021年02月23日 | cortex-a8 uboot系列:第十章 uboot启动总结

2021-02-23 来源:eefocus

一、uboot启动第2阶段总结

第二阶段主要是对开发板板级的硬件、软件数据结构进行初始化。

 

第一步:为gd,bd分配内存空间

 

第二步:循环执行init_sequence里的初始化函数

init_sequence:

         cpu_init:   空函数

         board_init: 网卡、机器码、内核传参内存地址

dm9000_pre_init     SOC内部SROM控制器初始化,因为和外部网卡DM9000的通信使用的是SROM接口,所以要对这个SROM控制器进行初始化

         interrupt_init: pwm timer4 定时10ms

         env_init:    

         init_baudrate: gd数据结构中波特率

         serial_init: 空的

         console_init_f:  空的

         display_banner: 打印启动信息

         print_cpuinfo:  打印CPU的时钟设置信息

         checkboard:    打印开发板名字

         dram_init:     gd数据结构中DDR信息

         display_dram_config:  打印DDR配置信息表

 

第三步:初始化uboot堆内存管理器

mem_malloc_init

 

第四步:soc的SD/MMC控制器初始化和外部SD/MMC卡的初始化

mmc_initialize

         INIT_LIST_HEAD:  设置SD/MMC设备链表

         cpu_mmc_init:   对SD/MMC控制器初始化

                   setup_hsmmc_clock:   时钟设置

                   setup_hsmmc_cfg_gpio: GPIO设置

                   smdk_s3c_hsmmc_init: SD/MMC管理的数据结构的设置

smdk_s3c_hsmmc_init:  从SD/MMC设备链表中找到要初始化的SD/MMC设备

mmc_init:  外部SD/MMC卡的初始化,发不同的命令,读取对应的响应,使之从idle状态跳转到工作状态,同时读取卡的信息。

 

第五步:环境变量重定位,将SD卡中的环境变量读到内存中

env_relocate

 

第六步:设定IP地址

gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr");

 

第七步:设定板子的网卡物理地址

gd->bd->bi_enetaddr

 

第八步:其他设备的初始化,之前没有进行过初始化的设备要进行初始化。

devices_init

 

第九步:跳转表设置,uboot中没有使用

jumptable_init

 

第十步:控制台第二阶段初始化

console_init_r

 

第十一步:中断使能,uboot中没有使用中断,所以该函数是空的。

enable_interrupts

 

第十二步:设置两个全局变量load_addr和copy_filename

 

第十三步:开发板最后一级初始化,要在最后时刻初始化的东西在这里进行初始化

board_late_init     x210中该函数为空

 

第十四步:网卡初始化,

eth_initialize, 网卡初始化在之前的board_init已经实现,因此这里函数为空。

 

第十五步:LCD初始化合显示logo

x210_preboot_init

 

第十六步:检查自动更新,实现量产烧录功能

check_menu_update_from_sd

update_all

 

第十七步:uboot主循环

main_loop


二、启动结果特征总结

1.第一阶段为汇编阶段、第二阶段为C阶段

第一阶段首先是start.S, 然后调用lowlevel.S, 最后调用start_armbooot.c,进入第二阶段

2.第一阶段在SRAM中、第二阶段在DRAM中

3.第一阶段注重soc内部、第二阶段注重soc外部board内部


三、移植时的注意点

1.x210_sd.h头文件中的宏定义

宏定义会影响程序编译的走向,因此要对这个头文件要了解,很多时候只需要修改头文件,而不需要修改代码。

 

2.特定硬件的初始化函数位置

要对硬件的初始化函数的位置要了解,这样才能当硬件驱动不正常的时候,才知道去哪里查程序问题。


推荐阅读

史海拾趣

A-BRIGHT公司的发展小趣事

随着技术创新的成功,A-BRIGHT公司开始积极寻求市场拓展。公司首先瞄准了欧洲市场,通过参加国际电子展会和建立销售网络,成功将产品打入欧洲市场。随后,A-BRIGHT又进军北美市场,通过与当地的大型电子分销商合作,进一步扩大了市场份额。这些市场拓展的成功为A-BRIGHT的快速发展奠定了坚实基础。

Erocore Enterprise Co Ltd公司的发展小趣事

随着技术实力的提升,Erocore开始积极拓展市场。公司凭借优质的产品和服务,逐渐在电子行业中树立了良好的品牌形象。通过与国内外知名企业的合作,Erocore的产品逐渐进入更广泛的市场领域。同时,公司也加大了市场营销力度,通过参加展会、举办研讨会等方式,提升品牌知名度和影响力。

General Magnetics Inc公司的发展小趣事
确认负载是否在电子变压器的额定负载范围内,避免过载运行。
Eink公司的发展小趣事
随着电子纸技术的不断发展,其应用领域也逐渐拓宽。在2002年3月的东京国际书展上,第一张彩色电子纸的出现引起了轰动。此后,电子纸开始被广泛应用于电子书阅读器、电子标签、公交站牌等领域。E-Ink公司作为电子纸技术的领军企业,推动了整个电子纸行业的发展。
Aplus Integrated Circuits公司的发展小趣事

随着公司产品的不断优化和升级,Aplus Integrated Circuits开始寻求与国际市场的接轨。公司积极参与国际电子行业的交流与合作,与多家国际知名企业建立了稳定的合作关系。通过引进国外先进的技术和管理经验,公司的产品逐渐走向国际化,市场竞争力得到了进一步提升。

General Instrument公司的发展小趣事
在工业生产中,突然断电可能导致生产线中断,造成经济损失。

问答坊 | AI 解惑

ucc29002

如何用UCC29002均衡两个直流电源,我看过资料 不知道里面的S怎么来的。还有LS端不知接到那里…

查看全部问答>

看了稻花香米,我才知道,我离中国的人才标准远了.

看了稻花香米,我才知道,我离中国的人才标准远了. 100W/天啊,这赚的比我们多的多.…

查看全部问答>

ADS7846

小弟在写一个触摸屏驱动,在ADS上调试遇到了一些问题。 #define X_LOCATION_CMD  0xd0 #define Y_LOCATION_CMD  0x90 ……………………省略若干…………………………………… /****************************************** ...…

查看全部问答>

请问有关wifi,WLAN,802.11的开发包

现在有一台嵌入式系统,只有LAN可以连接到hub上。 初步想法是在hub另一口上接一个AP,由嵌入式设备驱动,怎么做呀? 有没有相应的开发包?纯C语言的。 请大侠推荐一下设备和其它信息,多谢多谢。…

查看全部问答>

求救!在LM3s8962使用LwIP建立TCP连接时遇到的问题

    无操作系统,通过以下程序在keil中建立TCP客户端时,总是会在 tcp_connect()函数里出现问题(FaultISR),但在IAR中式可以的,为什么?lwipopt.h配置是一样的,只不过在IAR中使用的是LwIP1.3.0而在Keil中使用的是LwIP1.3.1.。现 ...…

查看全部问答>

2010参加TI杯电赛的湖北老乡进群啊!!!

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 群号:72132835  …

查看全部问答>

RS485数字压力传感器

                  电话0757-25567864                   手机1 ...…

查看全部问答>

新手想做个信号发生器 求帮助 我从下手啊

电路图  还有代码什么的  到底怎么用FPGA做设计啊…

查看全部问答>