大家好,我是极客范的本期栏目编辑小友,现在为大家讲解linux下USB驱动移植问题。
一、代码修改
在这里把包括前面的#给删了,希望有帮助
#包括ASM/arch/regs-时钟. h
#包括asm/arch/usb-control.h
#包括linux/device.h
#包括Linux/延迟. h
/******************由负载频率控制(Load Frequency Control)添加* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
静态结构s3c 2410 _ HCD _信息USB _ SBC 2410 _信息={ 0。端口[0]={ 0。标志=S3C_HCDFLG_USED
}
};
int usb_sbc2410_init(无效)
{
无符号长upl value=(0x 7812)|(0x 024)|(0x 03);
printk('USB Control,(c)2006 SBC 2410 ');
s3c _ device _ USB。戴夫。platform _ data=USB _ SBC 2410 _ info;
while(uplvalue!=_ _ raw _ readl(s3c 2410 _ UPLCON))
{
_ _ raw _ writel(uplvalue,s3c 2410 _ upl con);
mde层(1);
}
返回0;
}
/*************************结尾添加********************
staTIc void _ _ init smdk 2410 _ map _ io(void)
{
s3c 24xx _ init _ io(smdk 2410 _ iodesc,ARRAY _ SIZE(smdk 2410 _ iodesc));
s3c 24xx _ init _ clocks(0);
s3c 24xx _ init _ uarts(smdk 2410 _ UART CFG,ARRAY _ SIZE(smdk 2410 _ UART CFG));
s3c 24xx _ set _ board(smdk 2410 _ board);
/**********************由负载频率控制(Load Frequency Control)添加* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
USB _ SBC 2410 _ init();
/**********************末尾添加* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
}
其实到了这里,要修改的代码已经修改完了,比添加资料储存型闪存的支持修改的地方还要少^_^,不过我一直以为还没修改好,最后发现原来是没配置好~_~
二、内核配置
下面说一下郁闷了我好一阵子的内核配置(支持USB)问题,这个就比资料储存型闪存的配置要复杂多了。
1、让内核支持热插拔
常规设置-
[*]支持热插拔设备
2、USB驱动设置,可能有些不选也行,不过没时间去试,至于为什么要选这些选项的话可以看一下这个贴(Linux下的硬件驱动——USB设备):
设备驱动程序-
基因
ric Driver OpTIons --->│<*> Hotplug firmware loading support│ │ Block devices --->│ │ <*> Low Performance USB Block driver│ │ SCSI device support --->│ │ <*> SCSI generic support│ │ [*] Probe all LUNs on each SCSI device│ │ USB support --->│ │<*> Support for Host-side USB│ │[*] USB device filesystem│ │<*> OHCI HCD support│ │<*> USB Mass Storage support│ │[*] USB Monitor一、代码修改在这里把include前面的#给删了,希望有帮助#include <asm/arch/regs-clock.h>#include <asm/arch/usb-control.h>#include <linux/device.h>#include <linux/delay.h>/**********************add by lfc*************************************/staTIc struct s3c2410_hcd_info usb_sbc2410_info = { .port[0] = { .flags = S3C_HCDFLG_USED }};int usb_sbc2410_init(void){unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03);printk("USB Control, (c) 2006 sbc2410 ");s3c_device_usb.dev.platform_data = &usb_sbc2410_info;while(upllvalue!=__raw_readl(S3C2410_UPLLCON)){__raw_writel(upllvalue,S3C2410_UPLLCON);mdelay(1);}return 0;}/***************************end add**********************/staTIc void __init smdk2410_map_io(void){s3c24xx_init_io(smdk2410_iodesc, ARRAY_SIZE(smdk2410_iodesc));s3c24xx_init_clocks(0);s3c24xx_init_uarts(smdk2410_uartcfgs, ARRAY_SIZE(smdk2410_uartcfgs));s3c24xx_set_board(&smdk2410_board);/*************************add by lfc****************************/ usb_sbc2410_init();/*************************end add*******************************/}其实到了这里,要修改的代码已经修改完了,比添加Nand flash的支持修改的地方还要少^_^,不过我一直以为还没修改好,最后发现原来是没配置好~_~
二、内核配置下面说一下郁闷了我好一阵子的内核配置(支持USB)问题,这个就比Nand flash的配置要复杂多了。1、让内核支持热插拔│ General setup --->│ │[*] Support for hot-pluggable devices
2、USB驱动设置,可能有些不选也行,不过没时间去试,至于为什么要选这些选项的话可以看一下这个贴(Linux下的硬件驱动——USB设备):│ │ Device Drivers --->│ │ Generic Driver OpTIons --->│<*> Hotplug firmware loading support│ │ Block devices --->│ │ <*> Low Performance USB Block driver│ │ SCSI device support --->│ │ <*> SCSI generic support│ │ [*] Probe all LUNs on each SCSI device│ │ USB support --->│ │<*> Support for Host-side USB│ │[*] USB device filesystem│ │<*> OHCI HCD support│ │<*> USB Mass Storage support│ │[*] USB Monitor 技术专区 睿赛德科技喜迁新址 ,RT-Thread进入新的加速发展阶段可靠性高、控制灵活、低功耗可调速风扇散热系统安防监控摄像头LED驱动解决方案如何定制嵌入式Linux发行版基于SoC实现的数据采集系统详解