历史上的今天
返回首页

历史上的今天

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

正在发生

2021年02月23日 | cortex-a8 uboot系列:第八章 uboot源码分析4-启动第二阶段

2021-02-23 来源:eefocus

一、start_armboot 3解析

1. norflash初始化

没有定义CFG_NO_FLASH宏,所以这里程序是执行的。

clip_image002

虽然Nandflash和norflash都是flash,但是nandflash简称为nand,而不是flash,一般讲flash是指norflash。


所以这里的两行代码是与norflash是相关的。


flash_init是和norflash相关的初始化。board/samsung/x210/flash.c. 返回值是norflash的大小。

clip_image004

display_flash_config是打印norflash的信息。lib_arm/board.c

clip_image006

在uboot中的效果。

clip_image007

 

实际上x210中是没有norflash的,所以这里的代码是可以去掉的。但是不去掉也没有影响,只是会在uboot中会显示Flash:8MB。不能对这8MB的norflash进行使用。

 

clip_image009

和虚拟显示(也就是LCD)有关的,程序中没有定义这个CONFIG_VFD宏,所以这段代码没有执行。


这个是uboot中自带的LCD显示的软件架构,但是九鼎uboot没有使用这个软件架构,而是自己在后面添加了LCD显示的程序部分。

 

clip_image011

这部分和LCD有关系,不过九鼎uboot对于LCD的管理是在其他地方做处理,所以这里的代码没有被执行。

2. 堆初始化

mem_malloc_init函数用来初始化uboot的堆管理器,uboot中维护了一段堆内存,于是就有一套代码来管理这个对内存。有了这些东西,uboot中就可以使用malloc,free这套机制来申请内存的内存释放。


函数的输入参数是DDR中堆的起始地址。

clip_image013

clip_image015

3. MMC初始化

开发板独有初始化:mmc初始化。

开始:

clip_image016

结束:

clip_image018

中间的代码是开发板独有的初始化。意思是三星用一套uboot同时满足了好多个系列型号的开发板,然后在这里把不同开发板自己独有的一些初始化写到这里。用#if条件编译配合CONFIGG_XXX宏来选定特定的开发板。


对于九鼎开发板,该宏为CONFIG_X210,在include/configs/x210_sd.h中有定义。

clip_image019

clip_image021

判断宏CONFIG_GENERIC_MMC是否定义,对于九鼎开发板,有使用eMMC,在通道0,所以该宏有定义,执行以下的代码。


先使用mmc_initialize函数对mmc进行初始化。其实就是初始化soc内部的SD/MMC控制器。函数在drivers/mmc/mmc.c程序中。(uboot中对硬件的操作,如网卡,SD卡……都是借用的linux内核中的驱动实现,程序都是放在drivers文件夹下,里面存放的是从linux中移植过来的源文件)

clip_image023

mmc_initialize是具体硬件架构无关的一个MMC初始化函数,所有的使用了这套结构的代码都调用了这个函数来完成MMC的初始化,mmc_initialize调用board_mmc_init函数或者cpu_mmc_init函数来对MMC进行初始化。如果开发板使用外扩的SD/MMC控制器,那么MMC初始化就要在board_mmc_init中,如果开发板的soc自带SD/MMC控制器,那么就需要在cpu_mmc_init来对MMC进行初始化。对于x210来说,soc内部自带有SD/MMC控制器,因此调用cpu_mmc_init来对MMC初始化。

 

使用双向链表来对MMC设备进行维护。所以首先对MMC设备链表初始化。


cur_dev_num:设备编号,uboot最多可以使用4个MMC。这里设置为0,表示对MMC0操作,也就是开发板上的eMMC。


board_mmc_init是另外一个函数__def_mmc_init的别名函数,函数直接返回-1。因为对于x210开发板,使用的是soc的内置SD/MMC控制器,所以不需要板级的SD/MMC控制器,因此这里代码不做任何事,直接返回。

clip_image025

对于使用weak说明函数时,表示这里函数的实现是一个弱实现,如果其他地方有事先这个函数,那函数就被外部实现的函数所覆盖,如果其他地方没有实现这个函数,那么这个函数实现就是这个弱函数实现。alias属性,给函数取一个别名。


满足if条件,执行cpu_mmc_init函数。这个函数才是真正的执行MMC初始化函数。这个函数在cpu/s5pc11x/cpu.c中。说明这个函数是和使用的soc有关系的。

clip_image027

setup_hsmmc_clock函数(cpu/s5pc11x/setup_hsmmc.c中)设置MMC控制器的时钟,

clip_image029

 

setup_hsmmc_cfg_gpio函数(cpu/s5pc11x/setup_hsmmc.c中)对MMC控制器的gpio进行设置。

clip_image031

 

smdk_s3c_hsmmc_init函数(drivers/mmc/s3c_hsmmc.c中)对SD/MMC进行初始化。这里的初始化是软件层面的初始化,而不是对SD/MMC控制器和外部的SD/MMC卡初始化。这里初始化是指对SD/MMC管理的相关的参数进行设置。

clip_image033

对于MMC卡,使用了一个结构体来进行管理,所以软件需要对这个结构体进行初始化。

 

clip_image035

根据设定的宏,对外部不同的通道的SD/MMC进行初始化。再调用s3c_hsmmc_initialize函数(drivers/mmc/s3c_hsmmc.c中)。该函数对MMC管理的一些变量进行赋值。

clip_image037

clip_image038

最后调用mmc_register函数(drivers/mmc/mmc.c中),还是对MMC管理的一些参数赋值。

clip_image040

 

以上只是对MMC管理的一些参数设置,还没有对外部MMC卡进行初始化

clip_image042

实际上是调用了mmc_init函数(drivers/mmc/mmc.c中)对mmc初始化。然后获取容量,并打印。

clip_image044

通过发送cmd命令,来对SD/MMC进行初始化的。

 

以上的过程,就对SD/MMC控制器和外部MMC卡进行初始化了。初始化完MMC卡后,就将MMC的容量打印出来,对于九鼎uboot,打印的是通道0的MMC卡。

clip_image045

 

clip_image047

         以上两个宏都是没有定义的,所以程序不执行。

 

clip_image049

对于CONFIG_CMD_NAND宏,使用NAND启动的时候,是有定义这个宏的,但是x210使用的是eMMC启动,所以该宏没有定义,代码也不执行。

 

所以,对于这一段独有开发板代码,九鼎uboot只是初始化了MMC控制器,打印外接通道0的MMC的容量。


推荐阅读

史海拾趣

ERP公司的发展小趣事

进入21世纪20年代,电子智链紧跟智能化浪潮,将人工智能(AI)技术引入ERP系统。公司推出了“智链AI”解决方案,通过机器学习算法自动优化生产流程、预测市场需求和降低库存成本。这一创新使得电子智链在竞争激烈的ERP市场中脱颖而出,成为了电子行业数字化转型的领军企业。

Foxboro I C T Inc公司的发展小趣事

进入21世纪20年代,电子智链紧跟智能化浪潮,将人工智能(AI)技术引入ERP系统。公司推出了“智链AI”解决方案,通过机器学习算法自动优化生产流程、预测市场需求和降低库存成本。这一创新使得电子智链在竞争激烈的ERP市场中脱颖而出,成为了电子行业数字化转型的领军企业。

Consolidated Wire公司的发展小趣事

随着业务的不断发展,Consolidated Wire公司开始积极拓展国内外市场。公司加大了市场推广力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。同时,公司还积极开拓海外市场,与国际知名企业建立合作关系,实现了业务的全球化布局。这些举措不仅提升了公司的市场份额,也增强了公司在电子行业的影响力。

乐鑫(espressif)公司的发展小趣事

乐鑫科技深知,物联网的发展离不开一个完善的生态系统。因此,公司积极构建了一个集硬件、软件、开源社区于一体的物联网生态系统。通过提供丰富的软件资源和技术支持,乐鑫科技为购买其硬件的客户实现了更优的使用体验,推动了物联网应用的普及和落地。

Bogen Communications Inc公司的发展小趣事

在追求经济效益的同时,Bogen Communications Inc公司也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,努力降低产品对环境的影响。同时,公司还积极参与公益事业和慈善活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上这些故事都是基于电子行业常见的发展模式而虚构的示例,旨在为您展示一个电子行业公司可能经历的不同发展阶段和挑战。如果您需要更具体、更详细的信息关于Bogen Communications Inc公司的发展故事,建议您查阅相关的行业报告、公司年报或新闻报道。

台湾富致(FUZETEC)公司的发展小趣事

自1983年Futaba的VFD产品被福特汽车公司采用后,其在美国三大汽车厂的市场占有率迅速达到100%。这一成就不仅证明了Futaba VFD产品在汽车行业的卓越性能和广泛应用,还推动了其在全球汽车市场上的快速扩张。VFD的抗震性能、良好的温差适应性以及高可靠性,使其在汽车仪表盘和抬头显示器等关键部件中扮演了重要角色。随着新能源汽车的兴起,Futaba的VFD技术也进一步适应市场需求,为新能源汽车提供了更加先进的显示解决方案。

问答坊 | AI 解惑

Quartus II中文用户教程

Quartus II中文用户教程50页…

查看全部问答>

示波器经典实用技巧

示波器经典实用技巧…

查看全部问答>

纳Mobile/WinCE贤士

纳Mobile/WinCE贤士 公司简介 Nasdaq上市美资公司,地处上海张江高科技园区,主要从事通信芯片设计,2.5G,2.75G,3G手机芯片在市场上占有相当比例的份额. 主要工作内容 Windows Mobile BSP开发 基本要求: 对Windows Mobile/WinCE操作系统有较深刻 ...…

查看全部问答>

DSP

谁能不能传个走马灯程序(汇编语言) 谢了 …

查看全部问答>

下载问题

stm32f103vct     程序用j-flash下到板上怎么都跑不起来??比如IO口实验:程序如下,pa.1还是低电平?为什么?用的是最小板.../******************************************************************************   ...…

查看全部问答>

nRF905的发送地址问题

我有点搞晕了  nRF905里面有一个RF-Configuration-Register,其中里面有32位的RX地址,这个地址到底是我要接收另一个nRF905的地址还是我现在这个nRF905的地址啊?  如果是要接收的另一个nRF905的地址,那我当前的nRF905的地址怎 ...…

查看全部问答>

PC无法接受lwip发送的数据

可以ping得通。可是就PC机做服务器无法接受数据,有没有什么方法可以检测出错误?麻烦各位支个招!谢谢…

查看全部问答>

给你的AM335X Starter kit做个心脏吧-DIY Battery Pack

DIY Battery Pack给你的AM335X Starter kit做个心脏吧。配件可以在Digikey上买的到的。…

查看全部问答>

还想参与MSP430F5529开发板团购的进来顶起!

视频刚出来就想要一套MSP430F5529开发板,无可奈何,前些天网速不给力,视频看不了,今天看完了,也考试通过了,满怀激动的心情去参加团购,没啦!!!原价那么贵,买不起啊,强烈建议管理员与TI相关人员沟通沟通,看看能否多增加几套开发板参与团 ...…

查看全部问答>

转让beaglebone

项目已完成,留着用不到,打算除掉。 板子很新,买来基本没怎么用,现在400出掉,有意请先联系马化腾:694150473…

查看全部问答>