码迷,mamicode.com
首页 > 其他好文 > 详细

u-boot硬件驱动——以SD卡为例

时间:2020-02-28 22:53:17      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:spl   rem   不同   any   arm   ble   font   dde   auto   

u-boot硬件驱动——以SD卡为例

u-boot硬件驱动

一、硬件驱动

??目前,我把硬件驱动理解成介于操作系统和硬件之间的层级。主要作用是屏蔽硬件层,并且方便操作系统管理硬件。
??以SD卡为例:
??与SD初始化相关的文件uboot中有三个。分别为./drivers/mmc/mmc.c,./drivers/mmc/s3c_hsmmc.c./cpu/s5pc11x/setup_hsmmc.c
??其中mmc.cs3c_hsmmc.c共同构成了驱动层。

二、函数分析
应做事项

??在start_armboot函数中,对mmc进行了初始化。
??mmc的初始化分为三部分:

技术图片
重要结构体分析
mmc

??该结构体其实类似于class。将data与method分开处理。method采用的方法是函数指针。

struct mmc {
	struct list_head link;
	char name[32];
	void *priv;
	uint voltages;
	uint version;
	uint f_min;
	uint f_max;
	int high_capacity;
	uint bus_width;
	uint clock;
	uint card_caps;
	uint host_caps;
	uint ocr;
	uint scr[2];
	uint csd[4];
	uint cid[4];
	ushort rca;
	uint tran_speed;
	uint read_bl_len;
	uint write_bl_len;
	u32 capacity;
	struct mmc_ext_csd	ext_csd;	/* mmc v4 extended card specific */
	block_dev_desc_t block_dev;
	int (*send_cmd)(struct mmc *mmc,
			struct mmc_cmd *cmd, struct mmc_data *data);
	void (*set_ios)(struct mmc *mmc);
	int (*init)(struct mmc *mmc);
};
mmc_devices

??这是一个全局变量,是一个指针,指向mmc设备的链表。

cpu_mmc_init

??该函数位于./cpu/s5pc11x/cpu.c中,属于CPU初始化。主要做三件事,初始化SoC时钟,设置gpio,向mmc_devices中注册SD卡。

find_device

??从mmc中寻找设备,然后得到该设备的信息。

mmc_init

??主要执行以下步骤:

技术图片

??上述函数全部在./drivers/mmc/mmc.c
??这些函数利用的是mmc_send_cmd函数。该函数利用了存储在MMC设备结构体的函数指针,send_cmd。这些操作的底层函数全部在./drivers/mmc/s3c_hsmmc.c中定义。
??由此可见驱动中的分层。mmc.cs3c_hsmmc.c的功能完全不同。mmc.c是完全可移植的,但是s3c_hsmmc.c就不可移植。

u-boot硬件驱动——以SD卡为例

标签:spl   rem   不同   any   arm   ble   font   dde   auto   

原文地址:https://www.cnblogs.com/0nism/p/12380577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!