uboot源码-MMC分析

一、uboot与linux驱动

1、uboot是裸机程序

  • 狭义的驱动的概念:操作系统中用来具体操控硬件的那部分代码叫驱动。
  • 裸机中没有驱动的概念,因为没有操作系统。
  • 裸机程序是直接操控硬件的,而操作系统中则是通过驱动来操控硬件。两者的本质区别是分层。

2、uboot的虚拟地址对硬件操作的影响

(1)操作系统下,MMU是开启的,即linux驱动使用的都是虚拟地址。纯裸机程序不会开启MMU,全部使用物理地址。

 

  • 这是裸机下和驱动中操控硬件的一个重要区别。

 

(2)uboot早期也是纯物理地址工作,但是现在的uboot开启了MMU做了虚拟地址映射。

 

  • 查uboot中的虚拟地址映射表,发现除了0x30000000-0x3FFFFFFF映射到了0xC0000000-0xCFFFFFFF之外,其余的虚拟地址空间全是原样映射的。
  • 我们驱动中主要是操控硬件寄存器,而S5PV210的SFR都在0xExxxxxx地址空间,因此驱动中不必考虑虚拟地址

 

3、uboot移植了linux驱动

(1)linux的驱动是模块化设计。

 

  • linux驱动本身和linux内核不是强耦合的,这是linux驱动可以被uboot移植的关键。

 

(2)uboot移植了linux驱动源代码。

 

  • uboot是从源代码级别去移植linux驱动的,这就是linux系统的开源性。

 

(3)uboot中的硬件驱动比linux简单。

 

  • linux驱动本身有更复杂的框架,需要实现更多的附带功能,而uboot本质上只是个裸机程序,uboot移植linux驱动时只是借用了linux驱动的一部分而已。

 

二、iNand/SD驱动解析

 

1、MMC驱动的初始化,是在start_armboot函数中,调用的是mmc_initialize函数

 

下面看一下mmc_initialize函数

 

(1)函数位于uboot/drivers/mmc/mmc.c。

(2)此函数主要是初始化开发板上MMC系统。

 

  • SoC里的MMC控制器初始化(MMC系统时
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值