历史上的今天
今天是: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 格式。
史海拾趣
|
定制OS, 选择了 MUI 和 英文和中文字体, 默认语言是中文 可调用 createmui 0409 命令后 输出如下, 输出完成后,提示找不到文件,麻烦大侠们给个提示,谢谢 Multiui.bib文件内容为空, ; ; Copyright (c) Microsoft Corporation.   ...… 查看全部问答> |
|
我搜了一些做ARM开发板的公司,甚少有支持wince6.0的开发板在卖。立宇泰、友善之臂、扬创、周立功、英蓓特等都没找到一块。优龙也是在最近才出了一款LPC3250的板子有wince6.0,但是驱动还没有做全。搜到有两家卖S3C6410X和S3C6400开发板的公司,海 ...… 查看全部问答> |
|
BUILDREL: Copying PLATFORMCOMMON binaries from C:\\WINCE600\\platform\\common Can\'t create hard link. (FAT file system?) Copying files instead of creating hard links. 编译到最后的时候,出现这样几个错误?? 这是什么 ...… 查看全部问答> |
|
急需此两题的解答!小弟多年不碰单片机,两眼一抹黑,请各位大大救命啊! 在线等,解出来立刻双手把分奉上!! 邮箱:[email=darkstarxw@163.com][/email]… 查看全部问答> |
|
1、模拟量值和A/D转换值的转换假设模拟量的标准电信号是A0—Am(如:4—20mA),A/D转换后数值为D0—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程: &nb ...… 查看全部问答> |
|
最近在学习使用STM32的ADC,单ADC已经调试成功了,LCD可以显示实际波形。 看到有双ADC快速交替模式,可以提高一倍的速度,就改为该模式,用二个ADC采样同一个输入。 但是无论如何都调试不出来,只有ADC1的值,没有ADC2的值。 看了论坛几乎 ...… 查看全部问答> |
|
各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = { 0x00000009, //AXR00=Xmt &nbs ...… 查看全部问答> |




