历史上的今天
返回首页

历史上的今天

今天是:2025年10月18日(星期六)

正在发生

2022年10月18日 | linux2.6.32.2 mini2440平台移植-- 配置 USB 外设、SD卡移植

2022-10-18 来源:csdn

Linux-2.6.32.2 内核对 USB外设的支持是相当丰富的,并且已经包含了 S3C2440 的 USB Host 驱动支持,因此我们只要配置一下内核就可以了,下面是各种 USB外设的详细配置步骤。


1.4.1  配置和测试 USB键盘、扫描器和鼠标


在内核源代码目录的终端输入:make menuconfig,依次选择如下子菜单项:


Device Drivers    --->


[*] HID Devices    --->


按空格键选中"USB Human Interface Device (full HID) support",这样就配置好了 USB键盘和鼠标项。


提示:这里的配置选项对应的内核源代码目录是:linux-2.6.32.2/drivers/hid/usbhid,其中 USB键盘和条码扫描器的原理是一样的,因此它们的代码是相同的。


1.4.2  测试 USB键盘、扫描器和鼠标


在内核源代码根目录下执行:make zImage,把生成的新内核烧写到开发板中,我们这里依然使用友善之臂提供的文件系统 root_qtopia做测试,因为它可以同时支持 USB 键盘、鼠标和触摸屏,并且是支持热插拔,所以使用起来十分方便。在前面的步骤中,我们通过触摸屏点击已经进入了 qtopia图形系统,因此这里直接找个 USB HUB,同时连上 USB鼠标和键盘,甚至是 USB 条码扫描器就可以了,使用鼠标找到一个应用程序,比如 qtopia自带的"便签",点击打开它,这时就可以使用键盘输入各种英文字符了,还可以使用 USB条码扫描器直接扫描条码进行输入。


1.4.3 配置优盘


(1)因为优盘用到了 SCSI命令,所以我们先增加 SCSI 支持。


在 Device Drivers 菜单里面,选择 SCSI device support,再选择SCSI disk support


(2)返回 Device Drivers菜单,再选择  USB support,按回车进入 USB support菜单找到并选中"<*> USB Mass Storage support",


(3)另外,现在的优盘等移动存储器使用的大都是 FAT/FAT32格式的,因此我们还需要添加 FAT32 文件系统的支持,在内核配置主菜单下依次选择如下菜单项:


File systems    --->


DOS/FAT/NT Filesystems    --->


进入 FAT32 文件系统配置子菜单,并选择MSDOS fs support


(4)除此之外,为了支持中英文的编码,在"File systems"菜单下选择"-*- Native language  support    --->"并进入在这里,我们要选择如下几个编码的支持:


Codepage 437 (United States, Canada)


NLS ISO 8859-1    (Latin 1; Western European Languages)


NLS UTF-8


退出保存以上配置。


1.4.3  测试优盘


接上面的步骤,在内核源代码根目录下执行:make  zImage,把生成的新内核烧写到开发板中,先不要插入优盘(这样做是为了看插入时的打印信息),等系统启动后,进入命令行控制台,此时优盘已经被自动挂载到开发板的/udisk 目录。


说明:在 Qtopia中支持优盘自动挂载是通过友善之臂开发的一个 Qtopia  2.2.0插件实现的,目前它只识别 MMC/SD 卡或优盘的第一个分区,并且格式为常见的 VFAT/FAT32/FAT16,如果你的优盘或者 SD卡不能识别,请检查是否为 VFAT/FAT32/FAT16 格式。


1.5  移植 SD卡驱动


1.5.1  在内核中注册 SD设备驱动


Linux-2.6.32.2 已经自带了 S3C2440芯片的 SD 卡驱动,我们只需在初始化代码中加入SD平台设备结构就可以,打arch/arm/mach-s3c2440/mach-mini2440.c,在 nand flash平台结


构后面添加如下红色代码:


;在 mini2440.c的顶部添加 SD 卡设备结构所需的头文件


#include


#include


static struct platform_device mini2440_device_eth = {


.name = "dm9000",


.id = -1,


.num_resources    = ARRAY_SIZE(mini2440_dm9k_resource),


.resource = mini2440_dm9k_resource,


.dev = {


.platform_data    = &mini2440_dm9k_pdata,


};


},


/* MMC/SD    */


// mini2440_mmc_cfg在初始化函数里面


static struct s3c24xx_mci_pdata mini2440_mmc_cfg = {


.gpio_detect      = S3C2410_GPG(8),


.gpio_wprotect = S3C2410_GPH(8),


.set_power = NULL,


.ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34,


};


并把 SD 卡结构设备添加到目标平台设备集中,如图:


static struct platform_device *mini2440_devices[] __initdata = {


&s3c_device_usb,


&s3c_device_rtc,


&s3c_device_lcd,


&s3c_device_wdt,


&s3c_device_i2c0,


&s3c_device_iis,


&mini2440_device_eth,


&s3c24xx_uda134x,


&s3c_device_nand,


&s3c_device_sdi,


};


SD  卡的驱动程序底层操作实际对应源代码  linux-2.6.32.2/drivers/mmc/host/s3cmci.c,


根据测试,当包含内核打印信息时,SD 卡可以被正常识别使用,而没有打印信息时,则表现的不太稳定,因此我们在该程序中添加了一句延时代码,如图:


;延时函数所需的头文件


#include


static void pio_tasklet(unsigned long data)


{


struct s3cmci_host *host = (struct s3cmci_host *) data;


s3cmci_disable_irq(host, true);


udelay(50); //在此处添加了延时函数


if (host->pio_active == XFER_WRITE)


do_pio_write(host);


注意:还要在mach-mini2440.c中的初始化函数里面加入SD信息。


static void __init mini2440_machine_init(void)


{

    s3c24xx_fb_set_platdata(&mini2440_fb_info);


    s3c_i2c0_set_platdata(NULL);


    s3c_device_nand.dev.platform_data = &mini2440_nand_info;


s3c_device_sdi.dev.platform_data = &mini2440_mmc_cfg;


    platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));


    //smdk_machine_init();


}


这样,我们就完成了 SD 卡驱动的初步移植。


注意:添加完这些之后SD卡能自动挂载了,但是还是不能正常的读写。


1.5.2  测试 SD卡


接上面的步骤,在内核源代码目录执行:make  zImage,把生成的内核烧写到开发板中,先不要插入 SD卡(这样做是为了看插入时的打印信息),等系统启动后,进入命令行控制台此时 SD卡已经被自动挂载到开发板的/sdcard 目录。


说明:支持 SD卡或者优盘自动挂载是通过友善之臂开发的一个 Qtopia 2.2.0插件实现的,目前它只识别 MMC/SD 卡或优盘的第一个分区,并且格式为常见的 VFAT/FAT32/FAT16,如果你的优盘或者 SD卡不能识别,请检查是否为 VFAT/FAT32/FAT16 格式。


推荐阅读

史海拾趣

Econais公司的发展小趣事

为了加速产品的市场推广和应用,Econais积极寻求与行业内其他优秀企业的合作。XXXX年,Econais与Xively公司达成战略合作,共同为工业、商业和住宅市场提供一站式的物联网解决方案。通过这次合作,Econais的WiSmart Wi-Fi用户能够无缝连接到Xively云,为各种物联网应用提供强有力的支持。

Akahane Electronics Ind Corp公司的发展小趣事

随着全球市场的不断扩大,Akahane意识到单打独斗难以为继,于是积极寻求与国际同行的合作。通过与欧美知名电子企业建立战略合作关系,Akahane不仅获得了先进的技术支持,还成功打入国际市场,进一步提升了品牌影响力。同时,公司还积极参与国际电子行业的交流活动,学习借鉴先进的管理经验和市场策略,为公司的长远发展奠定了坚实基础。

Daewoo公司的发展小趣事

除了汽车产业外,Daewoo公司在家电领域也取得了不俗的成绩。随着消费者对家电品质要求的不断提高,Daewoo公司不断推出高品质、高性能的家电产品,赢得了消费者的信赖和好评。同时,公司还积极拓展国际市场,将产品出口到世界各地,进一步提升了品牌知名度和影响力。

这些故事共同展现了Daewoo公司在电子行业中的发展历程和取得的成就。虽然公司经历了许多挑战和困难,但凭借其坚定的信念和不懈的努力,最终实现了多元化发展,成为了韩国乃至全球电子行业的佼佼者。

APEM公司的发展小趣事

在20世纪末和21世纪初,APEM通过一系列收购和技术合作,不断增强自身的技术实力和市场竞争力。例如,APEM收购了丹麦的高性能PCB轻触开关制造商MEC,以及美国的开关面板制造商UNIFAB。这些收购不仅使APEM获得了先进的技术和知识产权,也为其在全球市场的竞争中赢得了先机。

通过以上五个故事,我们可以看到APEM公司在电子行业的发展历程中,始终坚持创新、扩张和合作的战略,不断壮大自身实力,成为行业内的佼佼者。

Clever Little Box公司的发展小趣事

Clever Little Box公司成立于1964年,当时正值电子行业的蓬勃发展时期。创始人凭借对音频和电子技术的深厚理解,以及对市场的敏锐洞察,决定成立这家公司,专注于音频和电子组件的分销。创业初期,公司面临着资金短缺、市场竞争激烈等诸多挑战,但创始人凭借坚定的信念和不懈的努力,逐渐在市场中站稳了脚跟。

Anderson Power Products公司的发展小趣事

在市场竞争日益激烈的情况下,Clever Little Box意识到,单打独斗很难取得长久的成功。于是,公司开始积极寻求与其他企业的合作,通过共赢的战略选择,实现资源共享、优势互补。这种合作模式不仅帮助公司扩大了市场份额,还提高了公司的品牌知名度和影响力。

问答坊 | AI 解惑

Wince6.0 创建多语言CreateMui失败问题

定制OS, 选择了 MUI 和 英文和中文字体, 默认语言是中文 可调用 createmui 0409 命令后 输出如下, 输出完成后,提示找不到文件,麻烦大侠们给个提示,谢谢 Multiui.bib文件内容为空, ; ; Copyright (c) Microsoft Corporation.   ...…

查看全部问答>

调查一下支持winCE6.0的CPU及有成熟开发板的公司

我搜了一些做ARM开发板的公司,甚少有支持wince6.0的开发板在卖。立宇泰、友善之臂、扬创、周立功、英蓓特等都没找到一块。优龙也是在最近才出了一款LPC3250的板子有wince6.0,但是驱动还没有做全。搜到有两家卖S3C6410X和S3C6400开发板的公司,海 ...…

查看全部问答>

Can't create hard link ??

BUILDREL: Copying PLATFORMCOMMON binaries from C:\\WINCE600\\platform\\common Can\'t create hard link.  (FAT file system?) Copying files instead of creating hard links. 编译到最后的时候,出现这样几个错误?? 这是什么 ...…

查看全部问答>

求Proteus仿真例子

我现在正在学单片机仿真,希望各位多提供关于这方面的资料,谢谢…

查看全部问答>

急!两道单片机题目!(高分)

急需此两题的解答!小弟多年不碰单片机,两眼一抹黑,请各位大大救命啊! 在线等,解出来立刻双手把分奉上!! 邮箱:[email=darkstarxw@163.com][/email]…

查看全部问答>

DC-DC原理的培训讲义1,2

[local]1[/local][local]2[/local]…

查看全部问答>

S7-200的模拟量编写方法总结

1、模拟量值和A/D转换值的转换假设模拟量的标准电信号是A0—Am(如:4—20mA),A/D转换后数值为D0—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程:   &nb ...…

查看全部问答>

请问:STM32中双ADC快速交替模式如何使用?

最近在学习使用STM32的ADC,单ADC已经调试成功了,LCD可以显示实际波形。 看到有双ADC快速交替模式,可以提高一倍的速度,就改为该模式,用二个ADC采样同一个输入。 但是无论如何都调试不出来,只有ADC1的值,没有ADC2的值。 看了论坛几乎 ...…

查看全部问答>

求助:关于TLV320AIC23的操作

各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = {      0x00000009,    //AXR00=Xmt &nbs ...…

查看全部问答>