linux2.6.32.2 mini2440平臺移植-- 配置 USB 外設、SD卡移植

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章