基於ARM11的嵌入式Linux NAND FLASH模擬U盤掛載分析與實現

2021-01-09 電子產品世界

摘要:介紹了嵌入式Linux作業系統下基於三星微處理器S3C6410的NAND FLASH模擬U盤的原理與實現方法。作業系統採用Linux 2.6.28版本,平臺為飛凌OK6410-A開發板。採用的方案是通過添加一個512 MB的NAND FLASH分區空間,配置Linux系統USB Gadget功能,實現劃分出的512 MB的NAND FLASH空間以U盤存儲系統與PC機通信。該方案的文獻目前在國內外同等作業系統版本和平臺上並無先例。通過上述方案成功地實現了S3C6410開發板劃分出512 MB的NAND FLASH空間以U盤形式掛載到了PC機上,實現與PC機的信息交換。
關鍵詞:ARM11;模擬U盤;Linux;S3C6410

0 引言
現階段嵌入式產品作為U盤掛載到PC機上在各類電子產品中被越來越多的應用,Linux作業系統在電子產品中的應用也越來越廣泛,但是Linux中模擬U盤掛載到PC機中,與PC機上通用Windows的通信還很好的達到實現。本文基於ARM11體系結構的處理器,實現了Linux系統下NAND FLASH模擬U盤掛載到PC機上與Windows進行通信。並在飛凌的OK6410-A板上得到驗證,實現了該功能。
目前國內嵌入式產品多用ARM9體系結構,ARM11則用於高端電子產品,NAND FLASH模擬U盤的掛載技術雖然在電子產品中廣泛應用,但是對於以新起的Linux作業系統的高端電子產品,這項技術還鮮少以文獻的形式得以系統闡述,國內長春大學張偉等人在這方面做過研究,但是他們是基於ARM9體系,本文基於ARM9在ARM11體系結構的處理器上做了新的研究和應用。
現階段有3類方式可以實現模擬U盤的功能,虛擬vfat.ing模擬U盤掛載,SD卡模擬U盤掛載,NAND FLASH模擬U盤掛載。NAND FLASH由於其大容量和高性價比,往往更加流行。本文是通過NAND FLASH實現模擬U盤的掛載的。

1 NAND FLASH模擬U盤原理分析
嵌入式產品模擬U盤與PC通信是現代嵌入式產品所廣泛應用的一種技術,因此在實現Linux下NAND FLASH模擬U盤之前先要對Linux下NAND
FLASH模擬U盤的原理進行分析。Linux下對模擬U盤存儲設備的支持就是Linux-USB Gadget驅動的加載,該驅動框架實現了USB協議定義的設備端的軟體功能。
1.1 Linux-Gadget框架
Linux系統中Gadget驅動層序框架分為3層:Gadget驅動層;Gadget API層;UDC層。Gadget驅動層實現實現不同的USB功能,例如「USB網卡」、「U盤」、「印表機」等。Gadget API層,為Gadget提供的一套標準API,由底層USB設備控制器(USB Device Controller,UDC)實現這套API,Gadget驅動通過調用這些API實現與UDC通信。UDC是片上系統(SoC)的一部分,不同的UDC需要不同的驅動,同樣的UDC不同板子代碼也不一樣,這一層為平臺相關層,直接訪問訪問硬體,並向上層提供與硬體相關操作的回調函數。Gadget驅動框架原理圖如圖1所示。

本文引用地址:http://www.eepw.com.cn/article/148060.htm


UDC層中usb_gadget和usb_ep為2個描述結構體,分別描述UDC和端點,Gadget API通過這兩個結構實現對UDC的控制。usb_gadget_ops和usb_ep_ops為函數集結構體,其主要功能是實現與硬體的交互並實現返回給上層Gadget API所需信息的功能。usb_gadget_register_driver和usb_gadget_unregister_driver為Gadget框架提供的標準API,是驅動層序的註冊函數,由UDC層提供,之所以不是通過Gadget API層實現的原因是,用於將Gadget驅動程序綁定到UDC。xxx_udc_irq是UDC設備的中斷處理函數,處理設備及其端點的中斷請求。
Gadget API層為Gadget定義的一組標準API接口函數,並向上提供編程接口,這一層的存在實現了將下層UDC驅動和上層Gadget驅動程序的隔離,使得Linux系統中編寫USB設備側驅動程序時能夠把功能的實現和底層通信分離。
Gadget驅動程序使用usb_gadget_driver結構體描述,實現將Gadget驅動與下層設備控制器相關聯,並開啟設備功能。

linux作業系統文章專題:linux作業系統詳解(linux不再難懂)

linux相關文章:linux教程


相關焦點

  • 基於ARM11的Linux平臺網絡通信的設計與實現
    1.4 網絡編程實驗  實現典型的客戶機/伺服器程序。客戶機、伺服器模式要求每個應用程式應由兩部分組成:一個部分負責啟動通信,另一個部分負責對它進行應答。他們通常運行在不同的主機上,分別被稱為客戶機和伺服器。伺服器是指能在網絡上可提供服務的任何程序。
  • ARM在嵌入式linux內核裁剪與移植的應用
    嵌入式linux是大勢所趨,其巨大的市場潛力與醞釀的無限商機必然會吸引眾多的廠商進入這一領域。本文引用地址:http://www.eepw.com.cn/article/149868.htm1 嵌入式linux作業系統Linux是一類Unix計算機作業系統的統稱。Linux作業系統的內核的名字也是Linux.Linux作業系統也是自由軟體和開放原始碼發展中最著名的例子。
  • NAND FLASH驅動程序
    // 參考* drivers\mtd\nand\s3c2410.c* drivers\mtd\nand\at91_nand.c//#include "linux/module.h"#include "linux/types.h
  • ARM與嵌入式linux入門建議
    也許你會注意到,現在做嵌入式的人中,做linux研究的人遠比做WinCE的人多,很多產家提供的資料也是以linux為主。我一直很難理解,其實WinCE的界面比linux的界面好看多了,使用起來也很方便,更為重要的是,WinCE的開發和Windows下的開發基本一樣,學起來簡單得多,但是學linux或者使用linux做嵌入式的人就是遠比WinCE多。
  • OK6410燒寫裸機程序到nandflash
    下面我們介紹怎麼將我們寫好的bin文件燒寫到nandflash的前8KB中去,當開發板啟動後,它會直接拷貝nandflash的前8K到sram中運行。燒寫原理:用Linux的UBOOT命令 nand 燒寫程序到開發板。1,通過SD_Writer.exe將mmc.bin燒寫到SD 卡中,將開發板設置到SD卡啟動。(具體方法參見飛凌開發板linux3.0.1用戶手冊.pdf)
  • 嵌入式linux與ARM開發板的入門建議
    比如說,s3c2410中有AD轉換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來控制,這些寄存器都有一個地址,那麼這些地址是什麼意思?又怎麼通過寄存器來控制這些外圍設備的運轉?還有,norflash內部的每一個單元在這個晶片的內存中都有一個相應的地址單元,那麼這些地址與剛剛說的寄存器地址又有什麼關係?他們是一樣的嗎?
  • EEPROM和FLASH,NAND FLASH和NOR FLASH有什麼區別?
    flash分為nor flash和nand flash。 nor flash: nor flash數據線和地址線分開,可以實現ram一樣的隨機尋址功能,可以讀取任何一個字節。但是擦除仍要按塊來擦。
  • 基於S3C2440的嵌入式Linux根文件系統構建
    例如最終生成的可執行文件為busybox,當為它建立一個符號連結ls的時候,就可以通過執行這個新命令實現列目錄的功能。採用單一執行文件的方式可以最大限度地共享程序代碼,甚至連文件頭、內存中的程序控制塊等其他作業系統資源都可共享,這對於資源比較緊張的系統來說,最合適不過了。
  • 初學嵌入式linux及ARM開發板的五點建議
    比如說,s3c2410中有AD轉換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來控制,這些寄存器都有一個地址,那麼這些地址是什麼意思?又怎麼通過寄存器來控制這些外圍設備的運轉?還有,norflash內部的每一個單元在這個晶片的內存中都有一個相應的地址單元,那麼這些地址與剛剛說的寄存器地址又有什麼關係?他們是一樣的嗎?
  • 專家博客:NAND Flash結構與驅動分析
    Intel於1988年首先開發出NOR flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結構,強調降低每比特的成本,更高的性能,並且象磁碟一樣可以通過接口輕鬆升級。但是經過了十多年之後,仍然有相當多的硬體工程師分不清NOR和NAND快閃記憶體。本文將重點講解NAND Flash結構與驅動分析。
  • 嵌入式linux新手入門手記-搭建基本工作平臺
    從事單片機,DSP開發十多年,但是一直沒有接觸過嵌入式linux。2014年初由於公司的項目需要,決定引入嵌入式linux的平臺進行產品研發,從這個時候開始正式接觸嵌入式linux,並開始在linux上進行工作。到現在差不多1年半,現在將這個過程重新整理出來,和大家一起分享,同時也給自己留一個記錄。
  • 淺談分析Arm linux 內核移植及系統初始化的過程二
    添加Nandflash設備4.6.下面以nandflash設備的描述為例,具體介紹下設備的描述和註冊過程。//resource結構體實例s3c_nand_resource對nandflash控制器描述,包括控制器的起止地址和標誌。
  • 嵌入式ARM11處理器具有怎樣的特點
    打開APP 嵌入式ARM11處理器具有怎樣的特點 朗銳智科 發表於 2019-09-23 09:36:51 蘋果iPhone採用了三星電子生產的
  • Android Linux 內核介紹
    已經有一些的文章介紹Android內核了,本系列篇將從Linux內核的角度來分析Android的內核,希望給初學者提夠有用的信息。本章將簡單的介紹 Android內核的全貌,起到一個拋磚引玉的作用。從下一篇開始將詳細介紹每一個Android內核驅動程序及其作用。
  • 【經驗】nor flash與nand flash啟動過程區別
    二、問答1.什麼是nand,什麼是nor?nand啟動與nor啟動的區別及聯繫。(收集整理)答:1)在NOR FLASH裡面可以直接執行代碼,而在NAND FLASH裡面不可以,在2410裡面,如果選擇NAND啟動方式的話,NAND裡的代碼是被拷貝到RAM裡面去執行的。
  • Linux下如何掛載新磁碟:mount
    前言在linux系統伺服器上插了一個U盤,結果系統顯示不出來,是什麼原因導致了系統不能識別U盤呢?經過一番搜索,發現新的硬體設備插在linux系統上時,如果不能正常顯示,則需要通過掛載讓U盤顯示出來,這裡就用到了我們今天要介紹的命令:mount。
  • 基於嵌入式Linux的MapInfo格式地圖顯示
    而市場上實現這種功能的大部分平臺都是基於WINCE這種作業系統,可以採用EVC開發,開發流程明確,驅動支持較豐富,但總體開發成本較高。由於Linux其免費,可配置,網絡性能,MiniGUI也是輕型、高性能、高可靠性、可配置的GUI,本文採用MiniGUI在ARM-linux平臺上實現了簡單的地圖顯示功能。
  • Linux pstore 實現自動「抓捕」內核崩潰日誌
    根據網上搜尋的資料,在pstore文件系統之前其實有不少類似的實現。apanicAndroid最早的panic信息記錄的方案。在linux 2.6的安卓的內核中找到,卻沒有提交到社區,後來被放棄維護了。
  • ARM晶片基於linux嵌入式作業系統實現的CMU控制器方案
    ARM晶片基於linux嵌入式作業系統實現的CMU控制器方案 佚名 發表於 2017-12-02 07:32:00     zigbee無線通信與linux嵌入式作業系統是電子人都經常接觸的,在這裡我們設計了一種以
  • 嵌入式Linux NFS 根文件系統的構建及研究
    在此基礎上,進一步構建出基於NFS的嵌入式Linux根文件系統,並給出了啟動腳本和配置文件。這種根文件系統可以方便地在線更改、調試程序,降低了嵌入式系統的開發門檻。關鍵詞:NFS;Busybox;根文件系統;S3C2440;Linux 隨著信息技術的發展,嵌入式系統技術已經廣泛應用於國防、通信、工業控制、消費電子等諸多領域。