s5pv210-Linux驱动之USB-HOST主机控制器之OHCI
来源:互联网 发布:唇语学习软件 编辑:程序博客网 时间:2024/05/16 16:07
一、开发环境
硬件平台:我用的是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、切换到drivers\usb\host目录,拷贝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_DRIVERexynos_ohci_driver#endif#ifdef CONFIG_USB_OHCI_S5P// wzs#include "ohci-s5p.c"#define S5P_PLATFORM_DRIVERs5p_ohci_driver#endif5、打开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_OHCIstatic 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 OHCIconfig S5P_DEV_USB_EHCI bool help Compile in platform device definition for USB EHCI
11、切换到arch\arm\plat-samsung\include\plat目录,打开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,#endif13、然后在上面定义platform_data 文件,内容如下:#ifdef CONFIG_S5P_DEV_USB_OHCIstatic struct s5p_ohci_platdata s5p_ohci_platdata;#endif14、修改 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 Series4、重新编充内核。四、小结
OHCI支持USB1.1,速度是慢一些,但是如果应用在嵌入式开发板上还好,因为支持的范围比较广,如鼠标、键盘、U盘都可以支持。
阅读全文
0 0
- s5pv210-Linux驱动之USB-HOST主机控制器之OHCI
- s5pv210-Linux驱动之USB-HOST主机控制器之EHCI
- linux USB HOST之EHCI和OHCI
- s5pv210-Linux驱动之SD卡主机控制器
- linux设备驱动之USB主机控制器驱动分析
- linux设备驱动之USB主机控制器驱动分析
- linux设备驱动之USB主机控制器驱动分析
- linux设备驱动之USB主机控制器驱动分析
- linux设备驱动之USB主机控制器驱动分析
- Linux eMMC子系统之主机控制器驱动(host conntroller driver)
- USB驱动之主机控制器驱动
- USB主机控制器驱动——OHCI分析
- s5pv210-Linux驱动之USB鼠标
- s5pv210-Linux驱动之USB键盘
- linux设备驱动之USB主机控制器驱动分析 (一)
- linux设备驱动之USB主机控制器驱动分析(二)
- USB主机控制器的OHCI寄存器
- USB驱动程序(一)————USB主机控制器驱动——OHCI分析
- 第四周项目 1 建立单链表
- An error occurred while filtering resources weChatPay 错误解决
- 设计模式(五)桥接模式(转)
- 设计模式简介
- oracle记录被另一个用户锁住的解决方案
- s5pv210-Linux驱动之USB-HOST主机控制器之OHCI
- 拦截器和过滤器的区别
- jvm系列(八):jvm知识点总览
- Java web项目打包成war包的方法
- ImageView设置图片的几种方式
- 这些Markdown编辑器,使你写作更加便捷
- Qt绘图——QPixmap的使用
- 第四周 猴子选大王
- 设计模式(六)装饰模式(转)