CSDN_Acanoe 的博客:http://blog.csdn.net/ACanoe
可能不算什么移植了,参考了 CSDN 博友的博客。
硬件环境:OK6410 A板。 主机环境:XP, VMware Ubuntu10.10。 移植内核版本:Linux2.6.36.2。 驱动参考:飞凌提供的内核。
对于USB-HOST功能:
其实2410的OHCI驱动已经相当完善,但是由于OK6410来说,还需要一个48M 的时钟信号产生,才能使能USB-HOST功能
第一步,在mach-ok6410.c里面添加头文件
#include <plat/regs-usb-hsotg-phy.h>
#include <plat/clock.h>
然后在任意一个地方添加
#ifdef CONFIG_USB_SUPPORT
void s3c_hsotg_phy_config(int enable) {
u32 val;
if (enable) {
__raw_writel(0x0, S3C_PHYPWR); /* Power up */
val = __raw_readl(S3C_PHYCLK);
val &= ~S3C_PHYCLK_CLKSEL_MASK;
__raw_writel(val, S3C_PHYCLK);
__raw_writel(0x1, S3C_RSTCON);
udelay(5);
__raw_writel(0x0, S3C_RSTCON); /* Finish the reset */
udelay(5);
} else {
__raw_writel(0x19, S3C_PHYPWR); /* Power down */
}
}
EXPORT_SYMBOL(s3c_hsotg_phy_config);
#endif
这段代码是参靠飞凌的,而这段代码实现的就是一个输出48M时钟信号的开关,当enable=1时,执行enable部分的代码,使能48M时钟信号输出,当enable=0时,执行else部分的代码,就禁止48M时钟信号,最后还需要在ok6410_machine_init(void)单板初始化函数里面添加48M时钟使能信号:
s3c_hsotg_phy_config(1);
以及在硬件初始化函数 *ok6410_devices[] __initdata里面添加&s3c_device_usb_hsotg,默认下*ok6410_devices[] __initdata里面已经添加了&s3c_device_ohci,所以我们不需要再添加了。
而对于这个函数的实现是在/drivers/usb/目录下的相应的驱动函数里定义的,不需要去自己写。
最后就是在MAKE MENUCONFIG时,选中USB选项里面的相关项目就行了:
DEVICE DRIVERS--------->
<*> Support for Host-side USB
[*] USB verbose debug messages
[*] USB announce new devices
*** Miscellaneous USB options ***
[*] USB device filesystem (DEPRECATED)
[*] USB device class-devices (DEPRECATED)
<*> OHCI HCD support
好了,到这里,就完成了 OK6410的LINUX2.6.39.2的USB-OTG功能了,编译,运行,试试,呵呵,如果你们想看相关驱动代码的话,就直接到/linux2.6.39.2/drivers/usb/core以及/linux2.6.39.2/drivers/usb/host里面看看