我是靠谱客的博主 开心毛巾,最近开发中收集的这篇文章主要介绍s5pv210-Linux驱动之USB-HOST主机控制器之OHCI 一、开发环境三、移植步骤 四、小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、开发环境

    硬件平台:我用的是TQ210核心板,板载S5PV210芯片,USB扩展接有FE1.1S芯片,是一个4端口的HUB

    软件平台:开发板移植的是Linux3.10.46内核,UBOOT移植的是2014.12版本

二、资源简介

    上一篇移植了USB-EHCI驱动,内核自带ehci-s5p.c源码,移植比较简单。内核没有S5PV210芯片的USB-OHCI驱动源码,但是提供了很多其他平台的ohci 源码,比如三星的 exynos系列芯片,它的USB主机控制器和S5PV210基本相同,所以,我们可以参考ohci-exynos.c 来编写自己的ohci-s5p.c,然后参考ehci-s5p.c 的代码组织方式添加到内核就可以了。

三、移植步骤

(一)代码修改

编写自己的ohci-s5p.c

1、切换到driversusbhost目录,拷贝ohci-exynos.c 为ohci-s5p.c

2、替换所有的exynos 为s5p

3、由于有些地方是exynos4,所以,还需要将s5p4 替换为s5p

修改 drivers/usb/host目录下的相关文件

4、打开ohci-hcd.c 文件,找到ohci-exynos,然后再其后面添加S5P 平台支持,修改后如下:

#ifdef CONFIG_USB_OHCI_EXYNOS
#include "ohci-exynos.c"
#define EXYNOS_PLATFORM_DRIVER	exynos_ohci_driver
#endif

#ifdef CONFIG_USB_OHCI_S5P		// wzs
#include "ohci-s5p.c"
#define S5P_PLATFORM_DRIVER	s5p_ohci_driver
#endif
5、打开Kconfig 文件,在config USB_OHCI_EXYNOS 前面添加S5P 配置支持,修改后如下:

config USB_OHCI_S5P
        boolean "OHCI support for Samsung S5PV210 SoC Series"
        depends on PLAT_S5P
        help
         Enable support for the Samsung S5P SOC's on-chip OHCI controller.

config USB_OHCI_EXYNOS
        boolean "OHCI support for Samsung EXYNOS SoC Series"
        depends on ARCH_EXYNOS
        help
         Enable support for the Samsung Exynos SOC's on-chip OHCI controller.

编写 usb-ohci-s5p.h 头文件

6、切换目录到include/linux/platform_data/,然后拷贝usb-ohci-exynos.h 到usb-ohci-s5p.h

7、打开usb-ohci-s5p.h,将所有的exynos4 替换为s5p,将EXYNOS 替换为S5P

配置平台支持

8、切换到目录arch/arm/plat-samsung,然后打开devs.c 文件

在CONFIG_S5P_DEV_USB_EHCI 模块后面添加如下内容:

#if CONFIG_S5P_DEV_USB_OHCI
static struct resource s5p_ohci_resource[] = {
	[0] = DEFINE_RES_MEM(0xEC300000, SZ_256),
	[1] = DEFINE_RES_IRQ(S5P_IRQ_VIC1(23)),
};

struct platform_device s5p_device_ohci = {
	.name = "s5p-ohci",
	.id = -1,
	.num_resources = ARRAY_SIZE(s5p_ohci_resource),
	.resource = s5p_ohci_resource,
	.dev = {
	.dma_mask = &samsung_device_dma_mask,
	.coherent_dma_mask = DMA_BIT_MASK(32),
	}
};

void __init s5p_ohci_set_platdata(struct s5p_ohci_platdata *pd)
{
	struct s5p_ohci_platdata *npd;

	npd = s3c_set_platdata(pd, sizeof(struct s5p_ohci_platdata), &s5p_device_ohci);
	if (!npd->phy_init)
		npd->phy_init = s5p_usb_phy_init;
	if (!npd->phy_exit)
		npd->phy_exit = s5p_usb_phy_exit;
}
#endif /* CONFIG_S5P_DEV_USB_OHCI */
9、添加ohci 的头文件

#include <linux/platform_data/usb-ohci-s5p.h>

10、打开Kconfig 文件,在S5P_DEV_USB_EHCI 模块前面添加OHCI支持,修改后如下:

config S5P_DEV_USB_OHCI
        bool
        help
          Compile in platform device definition for USB OHCI

config S5P_DEV_USB_EHCI
        bool
        help
          Compile in platform device definition for USB EHCI
11、切换到archarmplat-samsungincludeplat目录,打开devs.h文件,填加s5p_device_ohci声明,如下:
extern struct platform_device s5p_device_ehci;
extern struct platform_device s5p_device_ohci;


12、切换到arch/arm/mach-s5pv210 目录,打开mach-smdkv210.c,在smdkv210_devices 的定义中添加ohci 设备,如下:
#ifdef CONFIG_S5P_DEV_USB_OHCI
	&s5p_device_ohci,
#endif
13、然后在上面定义platform_data 文件,内容如下:

#ifdef CONFIG_S5P_DEV_USB_OHCI
	static struct s5p_ohci_platdata s5p_ohci_platdata;
#endif
14、修改 setup-usb-phy.c文件和移植USB-EHCI相同

    至此,代码修改完毕,下面配制内核。


(二)配制内核

    执行make menuconfig 配置,在Device Drivers --->USB support 下看不到OHCI HCD support,只能看到EHCI HCDsupport,这是因为内核配置存在关联关系,现在解决这个问题。1、切换到目录drivers/usb/,打开Kconfig,在USB_ARCH_HAS_OHCI 模块下添加S5PV210平台支持:

config USB_ARCH_HAS_OHCI
        boolean
        # ARM:
        default y if SA1111
        ...
        default y if ARCH_S5PV210

2、打开宏开关CONFIG_S5P_DEV_USB_OHCI,切换到目录drivers/usb/host 下,打开Kconfig,在USB_OHCI_S5P 模块下添加如下内容:

config USB_OHCI_S5P
        boolean "OHCI support for Samsung S5PV210 SoC Series"
        depends on PLAT_S5P
        select S5P_DEV_USB_OHCI
        help
         Enable support for the Samsung S5P SOC's on-chip OHCI controller.
3、执行make menuconfig,把USB-OHCI相关模块编译进内核

<*>     OHCI HCD support
[*]       OHCI support for Samsung S5PV210 SoC Series
4、重新编充内核。

四、小结

    OHCI支持USB1.1,速度是慢一些,但是如果应用在嵌入式开发板上还好,因为支持的范围比较广,如鼠标、键盘、U盘都可以支持。





















最后

以上就是开心毛巾为你收集整理的s5pv210-Linux驱动之USB-HOST主机控制器之OHCI 一、开发环境三、移植步骤 四、小结的全部内容,希望文章能够帮你解决s5pv210-Linux驱动之USB-HOST主机控制器之OHCI 一、开发环境三、移植步骤 四、小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部