日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

嵌入式開發(fā)環(huán)境介紹,嵌入式文件系統(tǒng)要求分析

出處:維庫電子市場網(wǎng) 發(fā)布于:2023-07-19 17:48:47

  嵌入式開發(fā)環(huán)境介紹

  mClinux特點(diǎn)簡介

  1. 取消了內(nèi)存管理單元MMU,具有完整的網(wǎng)絡(luò)功能。

  2. 完備的文件系統(tǒng)支持,采用了romfs文件系統(tǒng)作為根文件系統(tǒng),相對于一般的ext2文件系統(tǒng)要求更少的空間。

  3. 使用了flat可執(zhí)行文件格式:elf格式有很大的文件頭,flat文件對文件頭和一些段信息做了簡化。

  4. 體積小,可移植性強(qiáng)。

  常見的基于mClinux的嵌入

  式系統(tǒng)開發(fā)環(huán)境的構(gòu)建方法

  在嵌入式系統(tǒng)的開發(fā)過程中,通常都要建立交叉編譯環(huán)境,圖1為常見的嵌入 式系統(tǒng)開發(fā)環(huán)境示意圖,基于以太網(wǎng)下的調(diào)試一般應(yīng)將宿主機(jī)和用戶板接入到局域網(wǎng)中,本文以mClinux +S3C4510B的開發(fā)環(huán)境為例進(jìn)行說明。通常的做法是在宿主機(jī)上安裝RedHat Linux操作系統(tǒng),并同時(shí)安裝針對ARM開發(fā)的工具鏈arm-elf-tools。這樣,在宿主機(jī)上編輯和編譯好的用戶程序,就可以通過以太網(wǎng),將編譯 后的可執(zhí)行文件到用戶板來運(yùn)行。方式主要有以下幾種。

  FTP方式

  首先需要打開一個(gè)超級終端,設(shè)置好相應(yīng)的通訊參數(shù),再給系統(tǒng)上電,就可以在超級終端里看到mClinux的啟動(dòng)信息。這里指明宿主機(jī)的IP地址是:10.5.22.247,用戶板的IP地址是:10.5.22.8,執(zhí)行如下命令來配置用戶板的IP:

  # ifconfig eth0 10.5.22.8

  eth0 指網(wǎng)絡(luò)設(shè)備。需要注意的是,用戶板的IP地址需和宿主機(jī)的IP地址在同一網(wǎng)段,否則難以正常的訪問宿主機(jī)。

  這時(shí)如果可以ping通宿主機(jī),就可以通過FTP方式訪問宿主機(jī)的網(wǎng)絡(luò)資源了。

  接下來選擇用戶程序的存放目錄。應(yīng)注意,如果用戶板用的是romfs文件系統(tǒng),那么只有少數(shù)幾個(gè)目錄可以訪問(如tmp ,var等)。選好存放目錄之后,就可以通過FTP方式訪問宿主機(jī)了,鍵入如下命令:

  # cd /tmp

  # ftp 10.5.22.247

  然后輸入用戶名和密碼以確定是否具有訪問權(quán)限,成功登陸之后,需要確定文件傳送格式。FTP可以用binary和ascii兩種方式來傳送文件,這里選擇的是binary方式。輸入以下指令來獲取文件:

  # binary

  # get filename

  # bye

  執(zhí)行# bye后就可以退出FTP。這時(shí)可以鍵入ls命令來查看文件是否已經(jīng)傳到選定的目錄下。接下來要做的是改變文件的權(quán)限,如果沒有可執(zhí)行權(quán)限,在用戶板中就無法運(yùn)行程序。

  # chmod 755 filename

  這里的參數(shù)“7”表示擁有讀、寫和執(zhí)行的權(quán)限;“5”僅代表擁有讀和執(zhí)行的權(quán)限。完成以上配置后,就可以用如下命令執(zhí)行用戶程序了:

  # 。/filename

  NFS方式

  使 用NFS (NetWork File System)方式可以使嵌入式應(yīng)用程序的開發(fā)和調(diào)試變得更為方便,并在不同的機(jī)器、不同的操作系統(tǒng)間共享文件,因此,NFS在嵌入式開發(fā)中得到了廣泛的 應(yīng)用。目前,在mClinux-2.4-x版本下配置NFS相對比較困難,下面就配置問題進(jìn)行詳細(xì)說明。

  服務(wù)器(Sever)端的設(shè)置

  首先需要設(shè)置 Linux下的/etc/exports文檔,它是NFS的主要設(shè)定文檔。在Linux下的shell終端,進(jìn)行如下操作:

  # vim /etc/exports

  將這個(gè)默認(rèn)的空文件修改為只有如下一行內(nèi)容:

  /home/tmp *(rw,no_root_ squash)

  這就表示在任何情況下,客戶端都可以訪問服務(wù)器端的/home/tmp目錄。

  接下來要在服務(wù)器端開啟如下的兩個(gè)進(jìn)程:

  1.開啟NFS服務(wù)

  # /etc/rc.d/init.d/nfs start

  啟動(dòng)NFS服務(wù): [ OK ]

  StarTIng NFS quotas: [ OK ]

  啟動(dòng)NFS 守護(hù)進(jìn)程: [ OK ]

  啟動(dòng)NFS mounted : [ OK ]

  2.開啟portmap服務(wù)

  # /etc/rc.d/init.d/portmap start

  配置完成后,可用如下辦法簡單測試一下NFS是否配置成功(注意在Linux下要將防火墻關(guān)閉):在宿主機(jī)上自己mount自己,看是否成功。例如,在宿主機(jī)/目錄下執(zhí)行:

  mount 10.5.22.247:/root/ /home/zhang/mount

  然后到/home/zhang/mount/目錄下看是否可以列出/root/目錄下的所有文件和目錄。若可以,則說明NFS在服務(wù)器端的配置成功。

  客戶端(Client)的設(shè)置

  相 對于Sever端的設(shè)置,Client端使用的是 mClinux, 設(shè)置起來相對復(fù)雜一些,需要對mClinux的內(nèi)核重新編譯,并進(jìn)行相關(guān)配置。需要設(shè)置Customize Kernel SetTIngs 和 Customize Vender/User SeTIngs(NEW)兩項(xiàng)。

  1. 對Customize Kernel SetTIngs進(jìn)行配置

 ?。?* ] Customize Kernel Settings

  進(jìn)入File systems的設(shè)置,可以看到Network file systems---,將NFS File system support選中。

  2.設(shè)置Customize Vender/User Setings(NEW)

 ?。?* ] Customize Vender/User Setings(NEW)

  在Customize Vender/User Setings 項(xiàng)目中,選擇Network Applications之后,需要其中的portmap服務(wù),[*] portmap即可。然后選擇mount和umount服務(wù)使mClinux支持mount和umount指令。mClinux-2.4-x的內(nèi)核對 NFS mount的支持不夠,這使得在mClinux上添加NFS服務(wù)存在一些困難,而在較新的mClinux版本mClinux-2.6-x中重寫了對 NTFS文件系統(tǒng)的支持。在BusyBox中選擇mount和umount及mount NFS support三項(xiàng)即可,這樣客戶端的配置完成。重新編譯內(nèi)核,指令如下:

  # make menuconfig ------------- 內(nèi)核配

  # make dep -------------尋找依存關(guān)系

  # make clean------------清除以前構(gòu)造內(nèi)核時(shí)生成的文件

  # make lib_only-----------該命令編譯庫文件

  # make user_only----------編譯用戶應(yīng)用程序文件

  # make romfs ----------生成romfs文件系統(tǒng)

  # make image----------生成romfs.o文件

  # make

  重 新編譯后,會(huì)在。。。/image/目錄下生成image.rom文件,它是壓縮了的內(nèi)核在rom的映像文件,將其燒寫到用戶板的Flash即可。用戶板 重新啟動(dòng)之后,新的內(nèi)核已經(jīng)開始工作,這時(shí)就可以在終端里進(jìn)行NFS mount了(以在minicom為例)。輸入如下指令:

  #mount -t nfs 10.5.22.247:/home/tmp /var/tmp /nfsmount -o nolock

  # mount

  執(zhí)行完兩條指令后,在Linux下的minicom里會(huì)看到如下信息:

  Rootfs on / type rootfs (rw)

  /dev/rom0 on / type rootfs (ro)

  /proc on/proc type proc (rw)

  /dev/ram0 on/var type ext2 (rw)

  /dev/ram1 on /disk type ext2 (rw)

  10.5.22.247:/home/tmp on /var/tmp type nfs (rw,v3,rsize=8192,hard, udp,nolock,addr=10.5.22.2)

  這樣就將宿主機(jī)的/home/tmp目錄掛載到了用戶板的/var/tmp目錄。

  結(jié)語

  通過以上兩種方式的比較,可以看到,就開發(fā)的效率來說,NFS的方式明顯具有優(yōu)勢。畢竟,用戶開發(fā)的程序往往不能就調(diào)試成功,采用 NFS方式使得多人同時(shí)開發(fā)一個(gè)程序成為可能。事實(shí)上,除了文中提到的兩種方式以外,還有其它以太網(wǎng)環(huán)境下的嵌入式開發(fā)手段,如telnet等,限于篇 幅,不再詳細(xì)介紹。

  嵌入式文件系統(tǒng)要求分析

  嵌入式linux下常見的文件系統(tǒng)

   RomFS:只讀文件系統(tǒng),可以放在ROM空間,也可以在系統(tǒng)的RAM中,嵌入式linux中常用來作

  根文件系統(tǒng)

   RamFS:利用VFS自身結(jié)構(gòu)而形成的內(nèi)存文件系統(tǒng),使用系統(tǒng)的RAM空間

   JFFS/JFFS2:為Flash設(shè)計(jì)的日志文件系統(tǒng)

   Yaffs:專門為Nand Flash設(shè)計(jì)

   proc:為內(nèi)核和內(nèi)核模塊將信息發(fā)送給進(jìn)程提供一種機(jī)制,可以查看系統(tǒng)模塊裝載的信息

   devFS:設(shè)備文件系統(tǒng)

  Linux上的Ext2fs

  支持4 TB 存儲(chǔ)、文件名稱長1012 字符

   可選擇邏輯塊

   快速符號鏈接

  Ext2不適合flash設(shè)備

   是為象IDE 設(shè)備那樣的塊設(shè)備設(shè)計(jì)的,邏輯塊大小必須是512 byte、1 KB、2KB等

   沒有提供對基于扇區(qū)的擦除/寫操作的良好管理

  如果在一個(gè)扇區(qū)中擦除單個(gè)字節(jié),必須將整個(gè)扇區(qū)復(fù)制到RAM,然后擦除,再重寫入

   在出現(xiàn)電源故障時(shí),Ext2fs 是不能防止崩潰的

   文件系統(tǒng)不支持損耗平衡,縮短了flash的壽命

  jffs/jffs2文件系統(tǒng)的優(yōu)缺點(diǎn)

   日志文件系統(tǒng)

   提供了更好的崩潰、掉電安全保護(hù)

  jffs2支持對flash的均勻磨損

  在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作要比Ext2文件系統(tǒng)好

  文件系統(tǒng)接近滿時(shí),JFFS2 會(huì)大大放慢運(yùn)行速度——垃圾收集

  Nand上yaffs文件系統(tǒng)的優(yōu)勢

  專門為Nand flash設(shè)計(jì)的日志文件系統(tǒng)

   jffs/jffs2不適合大容量的Nand flash

    jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對于128MB的Nand大概需要4MB的空間來維護(hù)節(jié)點(diǎn)

   啟動(dòng)的時(shí)候需要掃描日志節(jié)點(diǎn),不適合大容量的Nand flash

   FAT系統(tǒng)沒有日志

  編譯yaffs文件系統(tǒng)

   mtd的補(bǔ)丁升級?

   接口更新,適合與yaffs

   與原有的mtd驅(qū)動(dòng)程序不兼容,需要重寫

   如果使用舊mtd驅(qū)動(dòng)需要定義Makefile中MTD_OLD = -DCONFIG_YAFFS_USE_OLD_MTD

  參考文檔: yaffs-rootfs-howto

   版的yaffs網(wǎng)站:https://www.aleph1.co.uk/armlinux/projects/yaffs

  使用yaffs文件系統(tǒng)

  ? 通過cat /proc/yaffs命令可以看到y(tǒng)affs系統(tǒng)的相關(guān)信息

  ? mount -t yaffs /dev/mtdblock/0 /mnt/yaffs

  關(guān)于Linux文件系統(tǒng)

  JFFS 全稱為:The Journalling Flash File System(日志閃存文件系統(tǒng))初由瑞典的 Axis Communications 開發(fā),Red Hat 的 David Woodhouse 對它進(jìn)行了改進(jìn)。作為用于微型嵌入式設(shè)備的原始閃存芯片的實(shí)際文件系統(tǒng)而出現(xiàn)。JFFS文件系統(tǒng)是日志結(jié)構(gòu)化的,這意味著它基本上是一長列節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)包含有關(guān)文件的部分信息 — 可能是文件的名稱、也許是一些數(shù)據(jù)。相對于 Ext2 fs,JFFS 因?yàn)橛幸韵逻@些優(yōu)點(diǎn)而在無盤嵌入式設(shè)備中越來越受歡迎:

  1 JFFS 在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作要比 Ext2 文件系統(tǒng)好。

  2 JFFS 提供了比 Ext2 更好的崩潰/掉電安全保護(hù)。當(dāng)需要更改少量數(shù)據(jù)時(shí),Ext2 文件系統(tǒng)將整個(gè)扇區(qū)復(fù)制到內(nèi)存(DRAM)中,在內(nèi)存中合并新數(shù)據(jù),并寫回整個(gè)扇區(qū)。這意味著為了更改單個(gè)字,必須對整個(gè)扇區(qū)(64 KB)執(zhí)行讀/擦除/寫例程 — 這樣做的效率非常低。要是運(yùn)氣差,當(dāng)正在 DRAM 中合并數(shù)據(jù)時(shí),發(fā)生了電源故障或其它事故,那么將丟失整個(gè)數(shù)據(jù)集合,因?yàn)樵趯?shù)據(jù)讀入 DRAM 后就擦除了閃存扇區(qū)。JFFS 附加文件而不是重寫整個(gè)扇區(qū),并且具有崩潰/掉電安全保護(hù)這一功能。

  3 這可能是重要的一點(diǎn):JFFS 是專門為象閃存芯片那樣的嵌入式設(shè)備創(chuàng)建的,所以它的整個(gè)設(shè)計(jì)提供了更好的閃存管理。

  要構(gòu)建JFFS文件系統(tǒng),首先要有硬件設(shè)備FLASH及支持JFFS文件系統(tǒng)的操作系統(tǒng)。

  摘要:本文主要分析了uclinux 2.4內(nèi)核的jffs文件系統(tǒng)機(jī)制。希望能對基于uclinux開發(fā)產(chǎn)品的廣大工程師有所幫助。

  關(guān)鍵詞:uclinux vfs jffs

  申明:這份文檔是按照自由軟件開放源代碼的精神發(fā)布的,任何人可以獲得、使用和重新發(fā)布,但是你沒有限制別人重新發(fā)布你發(fā)布內(nèi)容的權(quán)利。發(fā)布本文的目的是希望它能對讀者有用,但沒有任何擔(dān)保,甚至沒有適合特定目的的隱含的擔(dān)保。更詳細(xì)的情況請參閱 GNU 通用公共許可證(GPL),以及GNU 自由文檔協(xié)議(GFDL)。

  你應(yīng)該已經(jīng)和文檔一起收到一份GNU 通用公共許可證(GPL)的副本。如果還沒有,寫信給:

  The Free Software Foundation, Inc., 675 Mass Ave, Cambridge,MA02139, USA

  歡迎各位指出文檔中的錯(cuò)誤與疑問

  一、flash讀寫的特殊性

  對于嵌入式系統(tǒng),flash是很常見的一種設(shè)備,而大部分的嵌入式系統(tǒng)都是把文件系統(tǒng)建立在flash之上,由于對flash操作的特殊性,使得在flash上的文件系統(tǒng)和普通磁盤上的文件系統(tǒng)有很大的差別,對flash操作的特殊性包括:

 ?。?) 不能對單個(gè)字節(jié)進(jìn)行擦除,的擦寫單位是一個(gè)block,有時(shí)候也稱為一個(gè)扇區(qū)。典型的一個(gè)block的大小是64k。不同的flash會(huì)有不同,具體參考flash芯片的規(guī)范。

 ?。?) 寫操作只能對一個(gè)原來是空(也就是該地址的內(nèi)容是全f)的位置操作,如果該位置非空,寫操作不起作用,也就是說如果要改寫一個(gè)原來已經(jīng)有內(nèi)容的空間,只能是讀出該sector到ram,在ram中改寫,然后寫整個(gè)sector。

  由于這些特殊寫,所以在flash這樣的設(shè)備上建立文件也有自己獨(dú)特的特點(diǎn),下面我們就以jffs為例進(jìn)行分析。

  二、jffs體系結(jié)構(gòu)介紹

  1、存儲(chǔ)結(jié)構(gòu)

  在jffs中,所有的文件和目錄是一樣對待的,都是用一個(gè)jffs_raw_inode來表示

  整個(gè)flash上就是由一個(gè)一個(gè)的raw inode排列組成,一個(gè)目錄只有一個(gè)raw inode,對于文件則是由一個(gè)或多個(gè)raw inode組成。

  2、文件組成

  在文件系統(tǒng)mount到flash設(shè)備上的時(shí)候,會(huì)掃描flash,從而根據(jù)flash上的所有屬于一個(gè)文件的raw inode建立一個(gè)jffs_file結(jié)構(gòu)以及node list。

  下面的圖顯示了一個(gè)文件的組成

  一個(gè)文件是由若干個(gè)jffs_node組成,每一個(gè)jffs_node是根據(jù)flash上得jffs_raw_inode而建立的,jffs_file主要維護(hù)兩個(gè)鏈表

  版本鏈表:主要是描述該node創(chuàng)建的早晚,就是說version_head指向的是一個(gè)老的node,也就意味著垃圾回收的時(shí)候該回收的就是這個(gè)老的node。

  區(qū)域鏈表:這個(gè)鏈表主要是為讀寫文件創(chuàng)建的,version_head指向的node代表的文件數(shù)據(jù)區(qū)域是0~~~n-1 之后依次的節(jié)點(diǎn)分別是 n~~~m-1 m~~~~o-1 ……。其中n《M《=“” p=“” /》

  3、操作

  對文件的讀操作應(yīng)該是比較簡單,但是寫操作,包括更改文件名等操作都是引起一個(gè)新的jffs_node的誕生,同時(shí)要寫一個(gè)相映的raw inode到flash上,這樣的操作有可能導(dǎo)致前面的某個(gè)jffs_node上面的數(shù)據(jù)完全失效,從而導(dǎo)致對應(yīng)flash上的raw inode的空間成為dirty。

  下面舉一個(gè)例子可能會(huì)更清楚一些。

  一個(gè)文件的range list是由上面的三個(gè)jffs_node組成,當(dāng)我們做如下寫操作的時(shí)候

  lseek( fd, 10, SEEK_SET );

  write( fd, buf,40 );

  個(gè)和一個(gè)node被截短了,第二個(gè)node完全被新數(shù)據(jù)替換,該node會(huì)從鏈表上摘下來,flash上空間變成dirty。如果做如下寫操作的時(shí)候

  lseek( fd, 23, SEEK_SET );

  write( fd, buf,5 );

  此時(shí),第二個(gè)node被分裂成兩個(gè)node,同時(shí)產(chǎn)生一個(gè)新的node,range鏈表的元素變成五個(gè)。

關(guān)鍵詞:arm,單片機(jī),寄存器

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!