linux2.6.32.2 mini2440平台移植-- 配置 USB 外设、SD卡移植

来源:互联网 发布:premiere cs6 mac下载 编辑:程序博客网 时间:2024/05/21 09:10

http://blog.csdn.net/hanxuefan/article/details/7370050

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 <linux/mmc/host.h>

#include <plat/mci.h>

 

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 <linux/delay.h>

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 格式。

 

1.5.3 mini2440  SD卡驱动分析(来自网络)

 

原文出处:

http://www.arm9home.net/read.php?tid-2570.html


原创粉丝点击