S5PV210(TQ210)学习笔记——USB HOST移植
Linux内核(以3.8.3为例)默认仅提供了ehci-s5p.c,但是提供了很多其他平台的ohci源码,因此,我们可以参考ohci-exynos.c来编写自己的ohci-s5p.c,然后参考ehci-s5p.c的代码组织方式添加到内核就可以了。下面废话少说,直接进入正题,开始USB HOST的EHCI和OHCI移植。
一 编写自己的ohci-s5p.c
我们以ohci-exynos.c为模板,修改以适合我们的S5P平台。
(1)拷贝ohci-exynos.c为ohci-s5p.c
(2)替换所有的exynos为s5p
(3)由于有些地方是exynos4,所以,还需要将s5p4替换为s5p
(4)如果是3.4版本的内核不需要修改头文件,但是3.8.3内核对文件结构作了调整,还是将ohci-exynos.h头文件改为:
- #include
二 修改drivers/usb/host目录下的相关文件
(1)打开ohci-hcd.c文件,找到ohci-exynos,然后再其前面添加S5P平台支持,修改后如下:
- #ifdefCONFIG_USB_OHCI_S5P
- #include"ohci-s5p.c"
- #definePLATFORM_DRIVERs5p_ohci_driver
- #endif
- #ifdefCONFIG_USB_OHCI_EXYNOS
- #include"ohci-exynos.c"
- #definePLATFORM_DRIVERexynos_ohci_driver
- #endif
- configUSB_OHCI_S5P
- boolean"S5POHCIsupport"
- dependsonUSB_OHCI_HCD&&PLAT_S5P
- help
- EnablesupportfortheS5PSOCson-chipOHCIcontroller.
- configUSB_OHCI_EXYNOS
- boolean"OHCIsupportforSamsungEXYNOSSoCSeries"
- dependsonUSB_OHCI_HCD&&ARCH_EXYNOS
- help
- EnablesupportfortheSamsungExynosSOCson-chipOHCIcontroller.
三 编写usb-ohci-s5p.h头文件
(1)切换目录到include/linux/platform_data/,然后拷贝usb-exynos.h到usb-ohci-s5p.h。
(2)打开usb-ohci-s5p.h,将所有的exynos4替换为s5p。
(3)将EXYNOS替换为S5P。
完成这三步,ohci的驱动就已经做好了,但是还需要添加平台支持。
四 配置平台支持
(1)切换到目录arch/arm/plat-samsung,然后打开devs.c文件
(2)在CONFIG_S5P_DEV_USB_EHCI模块后面添加如下内容:
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- staticstructresources5p_ohci_resource[]={
- [0]=DEFINE_RES_MEM(0xEC300000,SZ_256),
- [1]=DEFINE_RES_IRQ(S5P_IRQ_VIC1(23)),
- };
- structplatform_devices5p_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__inits5p_ohci_set_platdata(structs5p_ohci_platdata*pd)
- {
- structs5p_ohci_platdata*npd;
- npd=s3c_set_platdata(pd,sizeof(structs5p_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*/
- #include
- configS5P_DEV_USB_EHCI
- bool
- help
- CompileinplatformdevicedefinitionforUSBEHCI
- configS5P_DEV_USB_OHCI
- bool
- help
- CompileinplatformdevicedefinitionforUSBOHCI
- #ifdefCONFIG_S5P_DEV_USB_EHCI
- &s5p_device_ehci,
- #endif
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- &s5p_device_ohci,
- #endif
- #ifdefCONFIG_S5P_DEV_USB_EHCI
- staticstructs5p_ehci_platdatas5p_ehci_platdata;
- #endif
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- staticstructs5p_ohci_platdatas5p_ohci_platdata;
- #endif
- #ifdefCONFIG_S5P_DEV_USB_EHCI
- s5p_ehci_set_platdata(&s5p_ehci_platdata);
- #endif
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- s5p_ohci_set_platdata(&s5p_ohci_platdata);
- #endif
五 修改setup-usb-phy.c文件
从3.4版本开始,内核中自带的setup-usb-s5p.c文件就存在问题,需要修改才能支持S5PV210芯片。
切换到目录arch/arm/mach-s5pv210,将s
S5PV210USBHOST移 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)