我是靠谱客的博主 开心毛巾,最近开发中收集的这篇文章主要介绍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.h7、打开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声明,如下:
12、切换到arch/arm/mach-s5pv210 目录,打开mach-smdkv210.c,在smdkv210_devices 的定义中添加ohci 设备,如下:extern struct platform_device s5p_device_ehci; extern struct platform_device s5p_device_ohci;
13、然后在上面定义platform_data 文件,内容如下:#ifdef CONFIG_S5P_DEV_USB_OHCI &s5p_device_ohci, #endif
14、修改 setup-usb-phy.c文件和移植USB-EHCI相同#ifdef CONFIG_S5P_DEV_USB_OHCI static struct s5p_ohci_platdata s5p_ohci_platdata; #endif
至此,代码修改完毕,下面配制内核。
(二)配制内核
执行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 模块下添加如下内容:
3、执行make menuconfig,把USB-OHCI相关模块编译进内核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.
4、重新编充内核。<*> OHCI HCD support [*] OHCI support for Samsung S5PV210 SoC Series
四、小结
OHCI支持USB1.1,速度是慢一些,但是如果应用在嵌入式开发板上还好,因为支持的范围比较广,如鼠标、键盘、U盘都可以支持。
最后
以上就是开心毛巾为你收集整理的s5pv210-Linux驱动之USB-HOST主机控制器之OHCI 一、开发环境三、移植步骤 四、小结的全部内容,希望文章能够帮你解决s5pv210-Linux驱动之USB-HOST主机控制器之OHCI 一、开发环境三、移植步骤 四、小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复