一、代码修改
在这里把include前面的#给删了,希望有帮助
/*addbylfc*/
#include<asm/arch/regs-clock.h>
#include<asm/arch/usb-control.h>
#include<linux/device.h>
#include<linux/delay.h>
/*endadd*/
/**********************addbylfc*************************************/
staticstructs3c2410_hcd_infousb_sbc2410_info={
.port[0]={
.flags=S3C_HCDFLG_USED
}
};
intusb_sbc2410_init(void)
{
unsignedlongupllvalue=(0x78<<12)|(0x02<<4)|(0x03);
printk("USBControl,(c)2006sbc2410");
s3c_device_usb.dev.platform_data=&usb_sbc2410_info;
while(upllvalue!=__raw_readl(S3C2410_UPLLCON))
{
__raw_writel(upllvalue,S3C2410_UPLLCON);
mdelay(1);
}
return0;
}
/***************************endadd**********************/
staticvoid__initsmdk2410_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);
/*************************addbylfc****************************/
usb_sbc2410_init();
/*************************endadd*******************************/
}
二、内核配置
下面说一下郁闷了我好一阵子的内核配置(支持USB)问题,这个就比Nandflash的配置要复杂多了。
1、让内核支持热插拔
│Generalsetup--->
││[*]Supportforhot-pluggabledevices
2、USB驱动设置,可能有些不选也行,不过没时间去试,至于为什么要选这些选项的话可以看一下这个贴(Linux下的硬件驱动——USB设备):
││DeviceDrivers--->
││GenericDriverOptions--->
│<*>Hotplugfirmwareloadingsupport
││Blockdevices--->
││<*>LowPerformanceUSBBlockdriver
││SCSIdevicesupport--->
││<*>SCSIgenericsupport
││[*]ProbeallLUNsoneachSCSIdevice
││USBsupport--->
││<*>SupportforHost-sideUSB
││[*]USBdevicefilesystem
││<*>OHCIHCDsupport
││<*>USBMassStoragesupport
││[*]USBMonitor
3、加入了MSDOSfs和VFATfs的支持。
││Filesystems--->
││DOS/FAT/NTFilesystems--->
│┌─────────────────────────────────────────────────────────────────────┐│
││<*>MSDOSfssupport││
││<*>VFAT(Windows-95)fssupport││
││(936)DefaultcodepageforFAT││
││(cp936)DefaultiocharsetforFAT││
││<>NTFSfilesystemsupport
做完这些后,插入u盘后,内核应该可以识别到u盘,出现:
usb1-1:newfullspeedUSBdeviceusings3c2410-ohciandaddress3
ub(1.3):GetMaxLUNreturned0,using1LUNs
但是,还有下面一句出错提示:
/dev/ub/a:unknownpartitiontable
再次查看了贴子上大虾们的讨论,提到:“使能CONFIG_MSDOS_PARTITION选项”,再仔细查找,发现配置选项如下:
││Filesystems--->
││PartitionTypes--->
││[*]PCBIOS(MSDOSpartitiontables)support
加上这个后应该就可以挂载usb上的MSDOS分区了
以下是我的内核插入u盘后的提示信息:
usb1-1:newfullspeedUSBdeviceusings3c2410-ohciand2
ub(1.2):GetMaxLUNreturned0,using1LUNs
/dev/ub/a:p1
表示usb设备已经挂载到/dev/ub/a/part1目录下
4.加入中文字体库
││NativeLanguageSupport--->
││<*>SimplifiedChinesecharset(CP936,GB2312)
││<*>NLSUTF8
以下是挂载usb设备后的显示:
[root@luofuchong/]#mount-tvfat-oiocharset=cp936/dev/ub/a/part1/mnt
[root@luofuchong/]#ls/mnt
cramfs-1.1.tar.gznetkit-base-0.17.tar.gzthttpd-2.25b.tar.gz
lfcsettings.dat..I.....txt
三、一点心得
如果想知道内核有没有识别出u盘的话可以执行命令:cat/proc/partitions,看看插入USB前后分区信息有什么不同就知道了。另外,如果想让内核把它当成SCSI设备来处理的话,只要把上面:
││DeviceDrivers--->
││Blockdevices--->
││<*>LowPerformanceUSBBlockdriver
的LowPerformanceUSBBlockdriver这个选项去掉,然后把:
││DeviceDrivers--->
││SCSIdevicesupport--->
││<*>SCSIdisksupport
的SCSIdisksupport这个选项选上,重新编译内核就行。
注:
个人觉得使用usb设备的话LowPerformanceUSBBlockdriver比SCSIdisk要好,自己看着办吧^_^最后,一般都会新建一个/dev/sda1的链接指向usb设备的挂载点的,可以在启动文件中使用命令ln-sxxxxxx来建立这个链接。