ARM11的Linux NAND FLASH模擬U盤掛載分析與實現(xiàn)

2013-08-29 10:48 來源:電源網(wǎng) 作者:鈴鐺

現(xiàn)階段嵌入式產品作為U盤掛載到PC機上在各類電子產品中被越來越多的應用,Linux操作系統(tǒng)在電子產品中的應用也越來越廣泛,但是Linux中模擬U盤掛載到PC機中,與PC機上通用Windows的通信還很好的達到實現(xiàn)。本文基于ARM11體系結構的處理器,實現(xiàn)了Linux系統(tǒng)下NAND FLASH模擬U盤掛載到PC機上與Windows進行通信。并在飛凌的OK6410-A板上得到驗證,實現(xiàn)了該功能。

目前國內嵌入式產品多用ARM9體系結構,ARM11則用于高端電子產品,NAND FLASH模擬U盤的掛載技術雖然在電子產品中廣泛應用,但是對于以新起的Linux操作系統(tǒng)的高端電子產品,這項技術還鮮少以文獻的形式得以系統(tǒng)闡述,國內長春大學張偉等人在這方面做過研究,但是他們是基于ARM9體系,本文基于ARM9在ARM11體系結構的處理器上做了新的研究和應用。

現(xiàn)階段有3類方式可以實現(xiàn)模擬U盤的功能,虛擬vfat.ing模擬U盤掛載,SD卡模擬U盤掛載,NAND FLASH模擬U盤掛載。NAND FLASH由于其大容量和高性價比,往往更加流行。本文是通過NAND FLASH實現(xiàn)模擬U盤的掛載的。

1 NAND FLASH模擬U盤原理分析

嵌入式產品模擬U盤與PC通信是現(xiàn)代嵌入式產品所廣泛應用的一種技術,因此在實現(xiàn)Linux下NAND FLASH模擬U盤之前先要對Linux下NAND

FLASH模擬U盤的原理進行分析。Linux下對模擬U盤存儲設備的支持就是Linux-USB Gadget驅動的加載,該驅動框架實現(xiàn)了USB協(xié)議定義的設備端的軟件功能。

1.1 Linux-Gadget框架

Linux系統(tǒng)中Gadget驅動層序框架分為3層:Gadget驅動層;Gadget API層;UDC層。Gadget驅動層實現(xiàn)實現(xiàn)不同的USB功能,例如“USB網(wǎng)卡”、“U盤”、“打印機”等。Gadget API層,為Gadget提供的一套標準API,由底層USB設備控制器(USB Device Controller,UDC)實現(xiàn)這套API,Gadget驅動通過調用這些API實現(xiàn)與UDC通信。UDC是片上系統(tǒng)(SoC)的一部分,不同的UDC需要不同的驅動,同樣的UDC不同板子代碼也不一樣,這一層為平臺相關層,直接訪問訪問硬件,并向上層提供與硬件相關操作的回調函數(shù)。Gadget驅動框架原理圖如圖1所示。

a91d51d2dde6b633ac2bbee1cf104c51

UDC層中usb_gadget和usb_ep為2個描述結構體,分別描述UDC和端點,Gadget API通過這兩個結構實現(xiàn)對UDC的控制。usb_gadget_ops和usb_ep_ops為函數(shù)集結構體,其主要功能是實現(xiàn)與硬件的交互并實現(xiàn)返回給上層Gadget API所需信息的功能。usb_gadget_register_driver和usb_gadget_unregister_driver為Gadget框架提供的標準API,是驅動層序的注冊函數(shù),由UDC層提供,之所以不是通過Gadget API層實現(xiàn)的原因是,用于將Gadget驅動程序綁定到UDC。xxx_udc_irq是UDC設備的中斷處理函數(shù),處理設備及其端點的中斷請求。

Gadget API層為Gadget定義的一組標準API接口函數(shù),并向上提供編程接口,這一層的存在實現(xiàn)了將下層UDC驅動和上層Gadget驅動程序的隔離,使得Linux系統(tǒng)中編寫USB設備側驅動程序時能夠把功能的實現(xiàn)和底層通信分離。

Gadget驅動程序使用usb_gadget_driver結構體描述,實現(xiàn)將Gadget驅動與下層設備控制器相關聯(lián),并開啟設備功能。

1.2 Linux NAND FLASH分區(qū)原理

NAND FLASH作為存儲設備,存儲著嵌入式產品從開機到結束的所有代碼,所以做好存儲設備的分區(qū)是至關重要的問題,LINUX操作系統(tǒng)下,分區(qū)如圖2所示。

02

圖2

Linux2.6內核中,在文件archarmplat-s3cincludeplatPartition.h中定義了分區(qū)信息如下:

03

其中“.name”為分區(qū)的名稱,“.offset”為分區(qū)起始地址,“.size”為分區(qū)大小。這個結構體包涵了NANDFLASH的所有分區(qū)信息。

1 2 > 
ARM NAND Flash 11Linux 模擬U盤

相關閱讀

暫無數(shù)據(jù)

一周熱門