uboot mmc驱动移植

uboot mmc驱动移植

将三星官方uboot的mmc驱动移植到uboot官方的uboot中。

1,相关文件

需要一致的c源文件有如下几个相关文件

2,三星uboot的mmc初始化流程

1,调用mmc_initialize()函数,这个函数在mmc.c中
在这里插入图片描述
2,在mmc_initialize()函数中调用cpu_mmc_init()函数,这个函数在cpu.c中
在这里插入图片描述
3,在cpu_mmc_init()函数中初始化了mmc的gpio,时钟,并调用了smdk_s3c_hsmmc_init()这个函数,在这些函数中通过USE_MMC0,USE_MMC1等宏来决定初始化哪个mmc。(对应的函数在setup_hsmmc.c中)
在这里插入图片描述
4,而smdk_s3c_hsmmc_init()这个函数,通过调用s3c_hsmmc_initialize()这个函数来将对应mmc的参数和初始化函数赋值给对应的mmc结构体中的变量,并将这个mmc的结构体注册到mmc设备列表中。
在这里插入图片描述
在这里插入图片描述
5,调用mmc_initialize()函数,还调用了mmc_init()函数初始化具体的mmc设备,这个函数就是通调用在s3c_hsmmc_initialize()函数中注册的初始化函数来初始化mmc。
在这里插入图片描述

2,修改对应文件夹下的Makefile

修改对应文件夹下的Makefile,使得uboot编译时编译对应的文件

3,浏览对应的.c源文件,并进行修改

从三星移植过来的那些.c源文件中一些没有被定义的函数和宏,需要将这些函数和宏移植过来(其中包括将对应的.h文件拷贝过来)
在这里插入图片描述
修改的内容:
1,在配置头文件中添加#define USE_MMC0,#define USE_MMC2这两个宏
2,uboot官方没有提供get_MPLL_CLK()这个函数,用get_pll_clk(MPLL)来替代。
3,uboot的官方的代码中没有reg.h这个头文件
4,在需要添加clk.h的地方添加这个头文件
在这里插入图片描述

4,移植cmd_mmc.c

uboot的cmd_mmc.c文件中定义了和mmc相关的命令,这些命令是通过调用mmc驱动文件中的函数实现的。
所以,移植完三星的mmc驱动后,还需要用替换成三星uboot的cmd_mmc.c替换uboot官方原有的cmd_mmc.c文件,这样才能调用对应的mmc驱动程序。

5,编译时报错:mmc_write.c文件中有些函数没有定义

mmc_write.c文件依赖于cmd_mmc.c等文件,所以会报错。
我们移植的三星uboot的mmc驱动中没有对应的文件,所以我们不需要编译这个文件,直接把该文件从对应的Makefile中去掉。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值