1、嵌入式系統:是一種"完全嵌入受控器件內部,為特定應用而設計的專用計算機系統",根據英國電氣工程師協會的定義,嵌入式系統為控制、監視或輔助設備、機器或用於工廠運作的設備。與個人計算機這樣的通用計算機系統不同,嵌入式系統通常執行的是帶有特定要求的預先定義的任務。由於嵌入式系統只針對一項特殊的任務,設計人員能夠對它進行優化,減小尺寸降低成本。嵌入式系統通常進行大量生產,所以單個的成本節約,能夠隨著產量進行成百上千的放大。
2、
可以這么理解嵌入式系統的定義:
嵌入式系統是用來控制或者監視機器、裝置、工廠等大規模設備的系統。國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。
3、(1)嵌入式系統是面向用戶、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統是與應用緊密結合的,它具有很強的專用性,必須結合實際系統需求進行合理的裁減利用。
(2)嵌入式系統是將先進的計算機技術、半導體技術和電子技術和各個行業的具體應用相結合後的產物,這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創新的知識集成系統。所以,介入嵌入式系統行業,必須有一個正確的定位。例如palm之所以在pda領域佔有70%以上的市場,就是因為其立足於個人電子消費品,著重發展圖形界面和多任務管理;而風河的vxworks之所以在火星車上得以應用,則是因為其高實時性和高可靠性。
(3)嵌入式系統必須根據應用需求對軟硬體進行裁剪,滿足應用系統的功能、可靠性、成本、體積等要求。所以,如果能建立相對通用的軟硬體基礎,然後在其上開發出適應各種需要的系統,是一個比較好的發展模式。目前的嵌入式系統的核心往往是一個只有幾k到幾十k微內核,需要根據實際的使用進行功能擴展或者裁減,但是由於微內核的存在,使得這種擴展能夠非常順利的進行。
實際上,嵌入式系統本身是一個外延極廣的名詞,凡是與產品結合在一起的具有嵌入式特點的控制系統都可以叫嵌入式系統,而且有時很難以給它下一個准確的定義。現在人們講嵌入式系統時,某種程度上指近些年比較熱的具有操作系統的嵌入式系統,本文在進行分析和展望時,也沿用這一觀點。
『貳』 如何製作嵌入式linux文件系統
步驟方法:
1、用 busybox 解壓縮後 運行 make menuconfig 進入配置項 。
2、設置參數 如需要是那種文件系統。
3、保存退出 make&&make install 生成文件系統 保存在當前目錄下_install下。
為了支持某些運算 需要添加某些庫文件 最簡單的方法 把 arm-linux-gcc lib目錄下的
庫文件 全部 到 文件系統下 lib目錄。
『叄』 嵌入式linux文件系統有哪些
Linux 系統核心支持十多種文件系統類型:jfs,ReiserFS,ext,ext2,ext3,iso9660,xfs,minx,msdos,umsdos,Vfat,NTFS,Hpfs,Nfs,smb,sysv,proc 等. 下面是主要分類: 一, ext ext 是第一個專門為 Linux 的文件系統類型,叫做擴展文件系統. 二, ext2 ext2 是為解決 ext 文件系統的缺陷而設計的可擴展的高性能的文件系統.又被稱為 二級擴展文件系統 三, ext3 ext3 是由開放資源社區開發的日誌文件系統,. ext3 被設計成是 ext2 的升級版本。 四, jsf jsf 提供了基於日誌的位元組級文件系統,該文件系統是為面向事務的高性能系統而開發的。 五,ReiserFS ReiserFS 基於平 衡樹結構的 、ReiserFS 文件系統在網上公布.ReiserFS 3.6.x(作為 Linux 2.4 一部分 的版本),設計成員相信最好的文件系統是那些能夠有助於創建獨立的共享環境或者命名空間的文件系統。 六,Xfs xfs 是一種非常優秀的日誌文件系統,它是 SGI 公司設計的.xfs 被稱為業界最先進 的,最具可升級性的文件系統技術.它是一個全 64 位,快速,穩固的日誌文件系統, 其他文件系統簡介: Minix:Llnux 支持的第一個文件系統,對用戶有很多限制而且性能低下 Xia:Minix 文件系統修正後的版本.在一定程度上解決了文件名和文件系統大小的 Msdos:msdos 是在 Dos,Windows 和某些 OS/2 操作系統上使用的一種文件系 統,其名稱採用"8+3"的形式,即 8 個字元的文件名加上 3 個字元的擴展名. umsdos:Linux 下的擴展 msdos 文件系統驅動,支持長文件名,所有者,允許 許可權,連接和設備文件.允許一個普通的 msdo s 文件系統用於 Linux,而且無須為它建 立單獨的分區. iso9660:名. 標准 CDROM 文件系統,通用的 Rock Ridge 增強系統,允許長文件 Vfat:vfat 是 Windows9x 和 Windows NT/2000 下使用的一種 Dos 文件系統, 其在 Dos 文件系統的基礎上增加了對長文件名的支持. Nfs:Sun 公司推出的網路文件系統,允許多台計算機之間共享同一文件系統,易 於從所有這些計算機上存取文件. Hpfs: High Performance File System(HPFS) 高性能文件系統(HPFS) HPFS 是 Microsoft 的 LAN Manager 中的文件系統,同時也是 IBM 的 LAN Server 和 OS/2 的文件系統.HPFS 能訪問較大的硬碟驅動器,提供更多的組織特性並改善了文件 系統的安全特性. Smb:smb 是一種支持 Windows for workgroups,Windows NT 和 Lan Man ager 的基於 SMB 協議的網路操作系統. Sysv:sysv 文件系統實際上是 System V/Coherent 在 Linux 平台上的文件系統. Ncpfs:ncpfs 是一種 Novell NetWare 使用的 NCP 協議的網路操作系統. Proc:proc 是 Linux 系統中作為一種偽文件系統出現的,它用來作為連接內核數據 結構的界面. NTFS:微軟 Windows NT 內核的系列操作系統支持的,一個特別為網路和磁碟配 額,文件加密等管理安全特性設計的磁碟格式.
『肆』 一、嵌入式之FAT32文件系統(1)
參考文件
FAT32文件系統有幾個基本的幾個概念:
先拿一個真實的4G SD卡分析數據:
使用winhex物理方式查看,截一部分圖:
全稱Master Boot Record,即主引導記錄。
主引導記錄分為兩個部分,一個部分是前446位元組,另外一個部分是後64位元組。
前446個位元組,一般取值為0,不過有的時候也會有其他的設置值。
這部分也叫DPT,全稱Disk Partition Table,即磁碟分區表。
磁碟分區表有4個區,每個區有16位元組,總體是64位元組。因此,MBR位元組數為512位元組,剛好是一個扇區的數量。
DPT的4個部分,每一個部分的16位元組含義如下表:
00 82 03 00 0B E6 DC CA 00 20 00 00 00 E0 ED 00(16進制)
這里,就貼出來上面截圖的數據內容。(我們使用的是小位元組序)
0x00 :
通常的取值。
0x82 :
開始磁頭。
0x03 0x00 :
實際為0x0003,按照2進制編碼為0000 0000 0000 0011。
那麼開始扇區為:0。
開始柱面為:3。
0x0B :
分區類型,為Win95 FAT32類型。
0xE6 :
結束磁頭為230。
0xDC 0xCA:
實際為0xCADC,按照2進制編碼為1101 1100 1100 1010。
那麼結束扇區為:55。
結束柱面為:220。
0x00 0x20 0x00 0x00 :
實際為:0x00002000,也就是8192,為分區的開始扇區地址。那麼我們後面就可以從這里去找DBR。
0x00 0xE0 0xED 0x00 :
實際為:0x00EDE000,也就是15589376,為分區的總扇區數。
從這里其實可以算出SD卡的容量。
也就是:
分區大小:15589376x512 = 7981760512。這個值大約是7.612G。
從物理0地址到起始地址:8192*512 = 4194304
那麼總容量為:7981760512+4194304 = 7985954816。
該部分包括一個叫BPB的內容。
先截出DBR部分的實際SD卡上的內容:
在WinHex下使用邏輯磁碟打開FAT32文件系統的存儲介質來看,偏移位置與表示的含義有如下表所示:
25位元組的分區塊(BPB):
擴展分區BPB:
按照定義,將實際的圖 MBR.png分析如下:
從偏移為0x0BH地址開始:
00 02 10 96 04 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 20 00 00 00 E0 ED 00 B5 1D 00 00
00 02 :
即0x0200,表示扇區位元組數,也就是512位元組。
10:
即0x10,每簇扇區數為16。也就是16 512=8 1024=8K。
96 04:
即0x0496,保留扇區數為1174。
02:
即0x02,FAT表份數為2。
00 00:
即0x0000,為保留。
00 00:
即0x0000,為保留。
F8:
即為本地硬碟。
00 00:
即0x0000,為保留。
3F 00:
即0x003F,即每磁軌扇區數為63。
FF 00:
即0x00FF,即磁頭數為255。
00 20 00 00:
即0x00002000,即隱藏扇區數為8192。
00 E0 ED 00:
即0x00EDE000,即磁碟總扇區數為15589376。
B5 1D 00 00 :
即0x001DB5,即FAT表佔用扇區數為7605。
好了,根據這些內容,可以計算出兩個參數:
FAT1的開始扇區 = 分區開始扇區+ 保留扇區=8192+1174 = 9366。
FAT2的開始扇區 = FAT1的開始扇區+FAT表佔用的大小 = 9366 + 7605 = 16971。
首目錄簇 = FAT1的開始扇區+FAT的表份數 x FAT表佔用的大小=9366+2*7605 = 24576。
繼續追蹤,找到首目錄簇中的已經新建的文件。
現在,先解析粘貼出來的每個部分的內容的含義。
具體內容下面的FAT中會說。
a.txt部分的解析:
41 20 20 20 20 20 20 20 54 58 54 20 18 8B 2A 90
96 4A A1 4A 00 00 0F 8C A1 4A 03 00 10 00 00 00
41 20 20 20 20 20 20 20:
表示文件名:「A TXT」
20 :
表示的是文件的屬性。歸檔。
18:
為系統保留。
8B:
創建時間的10ms位。也就是1390ms。
2A 90:
也就是0x902A,換成2進制為1001 0000 0010 1010 。表示的是創建時間。
細分如下:
則時間值為:
時:0x12 = 18,
分:0x1 = 1,
秒:0xAx 2s + 1390ms= 10x 2s + (1390ms) = 21s,
所以創建時間為18:01:21。
96 4A:
也就是0x4A96,換成2進制為0100 1010 1001 0110,表示的是創建日期。
細分如下:
則日期值為:
年:1980+0x25 = 2017,
月:0x4 = 4,
日:0x16= 22,
所以,創建日期為2017年4月22日。
A1 4A:
也就是0x4AA1,換成2進制為0100 1010 1010 0001,表示的是最後訪問日期。
則日期為:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最後訪問日期為2017年5月1日。
00 00:
起始簇高16位。
0F 8C:
也就是0x8C0F,換成2進制為1000 1100 0000 1111,表示的是最近修改時間。
時:0x11 = 17,
分:0x20 = 32,
秒:0xf x 2 = 30s,
所以最近修改時間為17:32:30。
A1 4A:
也就是0x4AA1,換成2進制為0100 1010 1010 0001,表示的是最近修改日期。
則日期為:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最近修改日期為2017年5月1日。
03 00:
即0x0003,表示起始簇低16位,也就是說,起始簇高位與起始簇低位相或,得到0x00000003,起始簇為3。
10 00 00 00:
即0x00000010,表示文件數據長度,也就是16位元組。
分析完a.txt,b.txt也一樣分析即可。
從而可以得到的是,a.txt的內容位置在:(3-2)*16+24576 = 24592上。
後使用winhex進行驗證,確認是正確的。
文件分配表(FAT),是FAT文件系統中用於磁碟數據索引和定位而引進的一種鏈式結構。在FAT文件系統中,文件的存儲依照FAT表制定的簇鏈式數據結構來進行。同時,FAT文件系統將組織數據時使用的目錄也抽象為文件,以簡化對數據的管理。
如DBR所述,偏移0EH處存儲了保留扇區的個數,而保留扇區數指的就是當前分區內DBR到FAT表之間的所有扇區的個數(包括DBR但不包括FAT表)。據此,可以定位FAT表所在的起始偏移位置了。
如DBR所述,偏移24H處存儲了保留扇區的個數,知道FAT2是緊鄰FAT1的。那麼FAT2表的位置為:FAT1的起始偏移地址+FAT1的大小。
FAT表由一系列大小相等的FAT表項組成,它有如下特性:
在FAT32文件系統中,根目錄的位置不再硬性地固定,可以存儲在分區內可定址的任意簇內,不過通常根目錄是最早建立的(格式化就生成了)目錄表。所以,我們看到的情況基本上都是根目錄首簇緊鄰FAT2,占簇區順序上的第1個簇(即2號簇)。同時,FAT32文件系統將根目錄當做普通的數據文件來看,所有沒有了目錄項數的限制,在需要的時候可以分配空簇,存儲更多的目錄項。
對於短文件名格式的目錄項:
注意:*表示此欄位在段文件目錄項中,不可取值0FH。若取值為0FH,目錄段為長文件名目錄段。
0BH欄位取值如下:
FAT32的一個重要的特點是完全支持長文件名。長文件名依然是記錄在目錄項中的。為了低版本的OS或程序能正確讀取長文件名文件,系統自動為所有長文件名文件創建了一個對應的短文件名,使對應數據既可以用長文件名定址,也可以用短文件名定址。不支持長文件名的OS或程序會忽略它認為不合法的長文件名欄位,而支持長文件名的OS或程序則會以長文件名為顯式項來記錄和編輯,並隱藏起短文件名。
長文件名的實現有賴於目錄項第12位元組屬性位元組,當此位元組的值為0FH時,支持長文件名的系統會將其當做長文件名的依據,而只支持短文件名的系統會認為是異常而忽略掉。系統將長文件名以13個字元為單位進行切割,每一組占據一個目錄項。所以可能一個文件需要多個目錄項,這時長文件名的各個目錄項按倒序排列在目錄表中,以防與其他文件名混淆。
長文件名中的字元採用unicode形式編碼,每個字元占據2位元組的空間。其目錄項定義如:
『伍』 典型嵌入式linux軟體部分由哪些模塊組成他們的功能及相互聯系 Bootloader分為哪兩階段分
從軟體硬體設計特點簡單描述嵌入式產品開發設計流程。
項目論證階段:項目的可行性分析並形成可行性研究報告。
系統方案階段:對產品需求加以分析、細化,並抽象出需要完成的功能列表,明確定義所要完成的任務。
系統設計階段:軟體開發部分完成軟體需求分析,形成軟體總體設計方案,軟體開發介面規范等;硬體部分完成硬體總體設計方案,介面定義及說明等。
產品詳細設計階段:完成軟/硬體的詳細設計,編制代碼,形成軟體各模塊的設計說明;硬體部分各單板的原理圖,PCB和料單,同時完成產品的結構設計。
製造聯試階段:完成產品的系統調試和可靠性測試,並形成相應的系統調試報告和可靠性測試報告。
典型嵌入式Linux軟體部分由哪些模塊組成?它的功能和相互關系是什麼?
Bootloader、嵌入式Linux內核、嵌入式文件系統組成。Bootloader完成硬體設備的初始化以及引導內核載入,內核通過文件系統來管理對整個系統中的所有的數據和文件。
BootLoader分為哪兩個階段?分別實現了哪些功能?
stage1和stage2兩個階段。
完成的工作:
硬體設備初始化。
為載入Bootloader的stage2准備RAM空間。
拷貝Bootloader的stage2到RAM空間中。
設置堆棧。
跳轉到stage2的C入口點。
stage2完成的工作:
初始化本階段要使用到的硬體設備。
監測系統內存映射。
將內核映像和根文件系統映像從Flash設備上復制到RAM空間中。
設置內核啟動參數。
調用啟動內核。
簡述嵌入式文件系統的種類和管理機制。
Ext2fs文件系統 2.基於Flash的文件系統 3.基於RAM的文件系統 4.網路文件系統。
Linux引入了虛擬文件系統vfs(virtual file system),為各類文件系統提供一個統一的應用編程介面。
如何理解消費類電子產品開發的可裁剪性和可移植性,並以Linux系統為例進行說明。
Linux來說,假如我們用不到乙太網設備,我們可以將該設備的驅動程序以及相關庫文件等都去掉以縮小體積。
Linux可以在不同架構的CPU平台上運行。
詳細描述嵌入式Linux軟體開發的編譯開發環境和編譯開發工具。
開發環境:首先宿主機上需要安裝Linux操作系統。需要為這個Linux系統安裝以下三個部分:
函數庫(glibc):是Linux下C語言的主要函數庫。
編譯器(gcc):可以將C,C++,匯編源程序和目標程序編譯、鏈接成可執行文件。
系統頭文件(glibc_header):系統相關功能的頭文件集合。
編譯開發工具:編輯器有Vi和Emacs;編譯器為GCC,是GUN推出的功能強大、性能優越的多平台編譯器;調試器為GDB,可以方便的設置斷點、單步跟蹤等調試功能;項目管理器「make」,用來控制編譯或者重復編譯,自動管理軟體編譯內容、方式和時機。
基於S3C2410嵌入式Linux的開發的邏輯空間和物理空間如何對應?詳細描述之。
在支持MMU的32位處理器平台上,Linux系統中的物理存儲空間和虛擬存儲空間的地址范圍分別都是從0x00000000到0xFFFFFFFF,共4GB,但物理存儲空間與虛擬存儲空間布局完全不同。Linux運行在虛擬存儲空間,並負責把系統中實際存在的遠小於4GB的物理內存根據不同需求映射到整個4GB的虛擬存儲空間中。
n 物理存儲空間布局
Linux的物理存儲空間布局與處理器相關,詳細情況可以從處理器用戶手冊的存儲空間分布表(memory map)相關章節中查到,我們這里只列出嵌入式處理器平台Linux物理內存空間的一般布局,如圖18-4所示。
圖18-4 Linux物理內存空間一般布局示意圖
說明:
1)最大node號n不能大於MAX_NUMNODES-1。
2)MAX_NUMNODES表示系統支持的最多node數。在ARM系統中,Sharp晶元最多支持16個nodes,其他晶元最多支持4個nodes。
3)numnodes是當前系統中實際的內存node數。
4)在不支持CONFIG_DISCONTIGMEM選項的系統中,只有一個內存node。
5)最大bank號m不能大於NR_BANKS-1。
6)NR_BANKS表示系統中支持的最大內存bank數,一般等於處理器的RAM片選數。在ARM系統中,Sharp晶元最多支持16個banks,其他晶元最多支持8個banks。
7)mem_init()函數會將所有節點的頁幀位碼表所佔空間、孔洞頁描述符空間及空閑內存頁都釋放掉。
n虛擬存儲空間布局
在支持MMU的系統中,當系統做完硬體初始化後就使能MMU功能,這樣整個系統就運行在虛擬存儲空間中,實現虛擬存儲空間到物理存儲空間映射功能的是處理器的MMU,而虛擬存儲空間與5路存儲空間的映射關系則是由Linux內核來管理的。32位系統中物理存儲空間佔4GB空間,虛擬存儲空間同樣佔4GB空間,Linux把物理空間中實際存在的遠遠小於4GB的內存空間映射到整個4GB虛擬存儲空間中除映射I/O空間之外的全部空間,所以虛擬內存空間遠遠大於物理內存空間,這就說同一塊物理內存可能映射到多處虛擬內存地址空間上,這正是Linux內存管理職責所在。圖18-5列出了Linux內核中虛擬內存空間的一般布局(其實I/O空間也在其中,通常佔用高端內存空間,在此未標出)。
圖18-5 Linux系統虛擬內存空間一般布局示意圖
說明:
1)線性地址空間:是指Linux系統中從0x00000000到0xFFFFFFFF整個4GB虛擬存儲空間。
2)內核空間:內核空間表示運行在處理器最高級別的超級用戶模式(supervisor mode)下的代碼或數據,內核空間佔用從0xC0000000到0xFFFFFFFF的1GB線性地址空間,內核線性地址空間由所有進程共享,但只有運行在內核態的進程才能訪問,用戶進程可以通過系統調用切換到內核態訪問內核空間,進程運行在內核態時所產生的地址都屬於內核空間。
3)用戶空間:用戶空間佔用從0x00000000到0xBFFFFFFF共3GB的線性地址空間,每個進程都有一個獨立的3GB用戶空間,所以用戶空間由每個進程獨有,但是內核線程沒有用戶空間,因為它不產生用戶空間地址。另外子進程共享(繼承)父進程的用戶空間只是使用與父進程相同的用戶線性地址到物理內存地址的映射關系,而不是共享父進程用戶空間。運行在用戶態和內核態的進程都可以訪問用戶空間。
4)內核邏輯地址空間:是指從PAGE_OFFSET(3G)到high_memory(物理內存的大小,最大896)之間的線性地址空間,是系統物理內存映射區,它映射了全部或部分(如果系統包含高端內存)物理內存。內核邏輯地址空間與圖18-4中的系統RAM內存物理地址空間是一一對應的(包括內存孔洞也是一一對應的),內核邏輯地址空間中的地址與RAM內存物理地址空間中對應的地址只差一個固定偏移量(3G),如果RAM內存物理地址空間從0x00000000地址編址,那麼這個偏移量就是PAGE_OFFSET。
5)低端內存:內核邏輯地址空間所映射物理內存就是低端內存(實際物理內存的大小,但是小於896),低端內存在Linux線性地址空間中始終有永久的一一對應的內核邏輯地址,系統初始化過程中將低端內存永久映射到了內核邏輯地址空間,為低端內存建立了虛擬映射頁表。低端內存內物理內存的物理地址與線性地址之間的轉換可以通過__pa(x)和__va(x)兩個宏來進行,#define __pa(x) ((unsignedlong)(x)-PAGE_OFFSET) __pa(x)將內核邏輯地址空間的地址x轉換成對應的物理地址,相當於__virt_to_phys((unsigned long)(x)),__va(x)則相反,把低端物理內存空間的地址轉換成對應的內核邏輯地址,相當於((void *)__phys_to_virt((unsigned long)(x)))。
6)高端內存:低端內存地址之上的物理內存是高端內存(物理內存896之上),高端內存在Linux線性地址空間中沒有沒有固定的一一對應的內核邏輯地址,系統初始化過程中不會為這些內存建立映射頁表將其固定映射到Linux線性地址空間,而是需要使用高端內存的時候才為分配的高端物理內存建立映射頁表,使其能夠被內核使用,否則不能被使用。高端內存的物理地址於現行地址之間的轉換不能使用上面的__pa(x)和__va(x)宏。
7)高端內存概念的由來:如上所述,Linux將4GB的線性地址空間劃分成兩部分,從0x00000000到0xBFFFFFFF共3GB空間作為用戶空間由用戶進程獨占,這部分線性地址空間並沒有固定映射到物理內存空間上;從0xC0000000到0xFFFFFFFF的第4GB線性地址空間作為內核空間,在嵌入式系統中,這部分線性地址空間除了映射物理內存空間之外還要映射處理器內部外設寄存器空間等I/O空間。0xC0000000~high_memory之間的內核邏輯地址空間專用來固定映射系統中的物理內存,也就是說0xC0000000~high_memory之間空間大小與系統的物理內存空間大小是相同的(當然在配置了CONFIG_DISCONTIGMEMD選項的非連續內存系統中,內核邏輯地址空間和物理內存空間一樣可能存在內存孔洞),如果系統中的物理內存容量遠小於1GB,那麼內核現行地址空間中內核邏輯地址空間之上的high_memory~0xFFFFFFFF之間還有足夠的空間來固定映射一些I/O空間。可是,如果系統中的物理內存容量(包括內存孔洞)大於1GB,那麼就沒有足夠的內核線性地址空間來固定映射系統全部物理內存以及一些I/O空間了,為了解決這個問題,在x86處理器平台設置了一個經驗值:896MB,就是說,如果系統中的物理內存(包括內存孔洞)大於896MB,那麼將前896MB物理內存固定映射到內核邏輯地址空間0xC0000000~0xC0000000+896MB(=high_memory)上,而896MB之後的物理內存則不建立到內核線性地址空間的固定映射,這部分內存就叫高端物理內存。此時內核線性地址空間high_memory~0xFFFFFFFF之間的128MB空間就稱為高端內存線性地址空間,用來映射高端物理內存和I/O空間。896MB是x86處理器平台的經驗值,留了128MB線性地址空間來映射高端內存以及I/O地址空間,我們在嵌入式系統中可以根據具體情況修改這個閾值,比如,MIPS中將這個值設置為0x20000000B(512MB),那麼只有當系統中的物理內存空間容量大於0x20000000B時,內核才需要配置CONFIG_HIGHMEM選項,使能內核對高端內存的分配和映射功能。什麼情況需要劃分出高端物理內存以及高端物理內存閾值的設置原則見上面的內存頁區(zone)概念說明。
8)高端線性地址空間:從high_memory到0xFFFFFFFF之間的線性地址空間屬於高端線性地址空間,其中VMALLOC_START~VMALLOC_END之間線性地址被vmalloc()函數用來分配物理上不連續但線性地址空間連續的高端物理內存,或者被vmap()函數用來映射高端或低端物理內存,或者由ioremap()函數來重新映射I/O物理空間。PKMAP_BASE開始的LAST_PKMAP(一般等於1024)頁線性地址空間被kmap()函數用來永久映射高端物理內存。FIXADDR_START開始的KM_TYPE_NR*NR_CPUS頁線性地址空間被kmap_atomic()函數用來臨時映射高端物理內存,其他未用高端線性地址空間可以用來在系統初始化期間永久映射I/O地址空間。
http://blog.21ic.com/user1/8499/archives/2012/90535.html
『陸』 如何製作嵌入式Linux文件系統
簡單的說:
先配置文件系統的基本目錄,
包含/bin /sbin /etc /usr /tmp /root 等基本目錄,
把應用程序放到這些目錄中,
再用mkcamfs等工具來打包文件系統即可。
細節上的話要說的就多了
『柒』 嵌入式開發一般採用什麼方式,其中宿主機一般是指
你應當指的是有操作系統的嵌入式開發吧,下面就拿運行嵌入式Linux系統的硬體開發舉例說明。
假設已經有了嵌入式系統硬體,並且工作正常,嵌入式硬體平台包含一款核心CPU比如是一款ARM,有自己的隨機存儲器(內存),有掉電不丟失的存儲器(Flash、SD卡、硬碟),有常用的介面(串口、USB、網路),總之,硬體平台已經沒有錯誤,可以開發嵌入式軟體平台了。
調試軟體平台的環境一般是這樣的:
-硬體平台通過標准介面,比如串口,與你的PC機連接,實現控制台輸入和輸出,PC端啟動串口通訊軟體(串口終端程序),軟體平台運行的字元提示可以顯示在終端,你的鍵盤輸入可以通過終端以串口數據形式傳送給硬體平台,實現人機交互;
-由於串口速度慢,無法實現大量數據的吞吐,一般還需要藉助網路介面,也就是需要通過網路連接線連接硬體平台和PC機;
-PC機上安裝開發環境,一般是虛擬機中安裝Linux操作系統,再在其中安裝交叉編譯程序,並且組建一套硬體平台使用的文件系統;
-先給硬體平台通過串口燒寫少量的啟動程序到Flash,這個啟動程序負責初始化串口、網口,然後將網口傳送來的Linux系統內核調入內存執行,並且使用網口上掛載的位於PC機上的文件系統,這樣硬體平台上先不存放大量的程序,程序都在你的PC機上通過網口虛擬給硬體平台,你的PC機上的Linux虛擬機就叫宿主機;
-所有軟體調試完成後,可以通過網路介面,將虛擬機中的內核和文件系統等燒寫到硬體平台的Flash、SD卡或硬碟這些設備中,修改啟動參數,讓硬體平台啟動時用自己的存儲程序運行,這時就可以脫離宿主機完成調試開發工作了。
『捌』 嵌入式系統如何開發的
嵌入式系統開發就是對於除了電腦之外的所有電子設備上操作系統的開發,開發對象有手機,掌上電腦,機電系統等。
嵌入式系統開發流程:
第一步:建立開發環境
操作系統一般使用Redhat Linux,選擇定製安裝或全部安裝,通過網路下載相應的GCC交叉編譯器進行安裝(比如,arm-linux-gcc、arm-uclibc-gcc),或者安裝產品廠家提供的相關交叉編譯器;
第二步:配置開發主機
配置MINICOM,一般的參數為波特率115200 Baud/s,數據位8位,停止位為1,9,無奇偶校驗,軟體硬體流控設為無。在Windows下的超級終端的配置也是這樣。MINICOM軟體的作用是作為調試嵌入式開發板的信息輸出的監視器和鍵盤輸入的工具。配置網路主要是配置NFS網路文件系統,需要關閉防火牆,簡化嵌入式網路調試環境設置過程。
第三步:建立引導裝載程序BOOTLOADER
從網路上下載一些公開源代碼的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據具體晶元進行移植修改。有些晶元沒有內置引導裝載程序,比如,三星的ARV17、ARM9系列晶元,這樣就需要編寫開發板上FLASH的燒寫程序,可以在網上下載相應的燒寫程序,也有Linux下的公開源代碼的J-FLASH程序。如果不能燒寫自己的開發板,就需要根據自己的具體電路進行源代碼修改。這是讓系統可以正常運行的第一步。如果用戶購買了廠家的模擬器比較容易燒寫FLASH,雖然無法了解其中的核心技術,但對於需要迅速開發自己的應用的人來說可以極大提高開發速度。
第四步:下載已經移植好的Linux操作系統
如MCLiunx、ARM-Linux、PPC-Linux等,如果有專門針對所使用的CPU移植好的Linux操作系統那是再好不過,下載後再添加特定硬體的驅動程序,然後進行調試修改,對於帶MMU的CPU可以使用模塊方式調試驅動,而對於MCLiunx這樣的系統只能編譯內核進行調試。
第五步:建立根文件系統
下載使用BUSYBOX軟體進行功能裁減,產生一個最基本的根文件系統,再根據自己的應用需要添加其他的程序。由於默認的啟動腳本一般都不會符合應用的需要,所以就要修改根文件系統中的啟動腳本,它的存放位置位於/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自動掛裝文件系統的配置文件/etc/fstab,具體情況會隨系統不同而不同。根文件系統在嵌入式系統中一般設為只讀,需要使用mkcramfs genromfs等工具產生燒寫映像文件。
第六步:建立應用程序的FLASH磁碟分區
一般使用JFFS2或YAFFS文件系統,這需要在內核中提供這些文件系統的驅動,有的系統使用一個線性FLASH(NOR型)512KB~32MB,有的系統使用非線性FLASH(NAND型)8MB~512MB,有的兩個同時使用,需要根據應用規劃FLASH的分區方案。
第七步:開發應用程序
可以放入根文件系統中,也可以放入YAFFS、JFFS2文件系統中,有的應用不使用根文件系統,直接將應用程序和內核設計在一起,這有點類似於μC/OS-II的方式。
第八步:燒寫內核
根文件系統和應用程序,發布產品。
....................................................................................................................................................
................................................................
還有怎麼學習嵌入式呢,我剛才看到一篇很不錯的文章,是一個專科生介紹自己如何自學嵌入式,並找到嵌入式的工作,裡面介紹了他的學習方法和學習過程,希望對你有幫助。
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不到希望,我就退學了。
退學後我也迷茫,大專都沒有畢業,我真的不知道我能幹什麼,我在糾結著我能做什麼。所以輟學後我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘做技術的,可是處處碰壁。
一次偶然的機會,我才聽到嵌入式這個行業。那天我去新華書店,在計算機分類那邊想找本書學習。後來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習嵌入式,然後給我介紹了一下嵌入式現在的火熱情況,告訴我學嵌入式多麼的有前景,給我了一份傳單,嵌入式培訓的廣告。聽了她的介紹,我心裡癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家後,我就上網查了下嵌入式,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相對比較高。我就下決心想學嵌入式了。於是我去找嵌入式培訓的相關信息,說真的,我也很迷茫,我不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
後來,我在網路知道看到一篇讓我很鼓舞的文章,是一個嵌入式高手介紹沒有基礎的朋友怎麼自學入門學嵌入式,文章寫的很好,包含了如何學習,該怎麼學習。他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什麼別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會我再去培訓。
主意一定,我就去搜索嵌入式的視頻,雖然零星找到一些嵌入式的視頻,但是都不系統,我是想找一個能夠告訴我該怎麼學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教,不懂可以請教的。
後來我又找到一份很好的視頻,是在IT學習聯盟網站推出的一份視頻《零基礎嵌入式就業班》(喜歡《零基礎嵌入式就業班》的可以復制 sina.lt/qKh 粘貼瀏覽器地址欄按回車鍵即打開)。裡面的教程還不錯,很完整,可以讓我從基礎的開始學起。視頻比較便宜。
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
收到他們寄過來的光碟後,我就開始學習了,由於我沒有什麼基礎,我就從最簡單的C語言視頻教程學起,話說簡單,其實我還是很多不懂的,我只好請教他們,他們還是很熱心的,都幫我解決了。C語言我差不多學了一個禮拜,接下來我就學了linux的基本命令,我在他們提供linux虛擬機上都有做練習,敲linux的基本命令,寫簡單的C語言代碼,差不多也就三個禮拜。我每天都在不停的寫一些簡單的代碼,這樣一月後我基本掌握了C和linux的基本操作。
接下來我就去學習了人家的視頻的培訓教程,是整套的,和去參加培訓沒有多大的區別,這一看就是兩個月,學習了ARM的基本原理,學習嵌入式系統的概念,也掌握了嵌入式的環境的一些搭建,對linux也有更深層次的理解了,明白了嵌入式應用到底是怎麼做的,但是驅動我只是有一點點的了解,這個相對難一點,我想以後再慢慢啃。
這兩個月,除了吃飯睡覺,我幾乎都在學習。因為我知道幾乎沒有基礎,比別人差勁,我只能堅持努力著,我不能放棄,我必要要靠自己來養活自己,必須學好這門技術,然後我就把不懂的問題總結記下來,這樣慢慢積累了一段時間,我發現自己真的有點入門了。
最後的一個月,我就去看關於實踐部分的內容,了解嵌入式項目具體的開發流程,需要什麼樣的知識,我就開始准備這方面的知識,也就是學習這方面的視頻,同時他們建議我去找了找一些嵌入式面試的題目,為自己以後找工作做准備。我就到網上找了很多嵌入式的題目,把他們理解的記下來,這樣差不多准備了20天左右
我覺得自己差不多入門了,會做一些簡單的東西了。我就想去找工作看看,於是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過後,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了准備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
後來陸續面試了幾家公司,終於功夫不負有心人。我終於面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是嵌入式linux應用開發,做安防產品的應用的。我想我也比較幸運,經理很看重我的努力,就決定錄用我,開的工資是3500一個月,雖然我知道在上海3500隻能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。
假如你喜歡嵌入式的話就努力學習吧。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
『玖』 嵌入式系統中的存儲器映射是怎麼回事,為什麼要映射
進入ARM狀態:當操作數寄存器的狀態位為,0時,可以採用執行BX指令的方法,使微處理器從THUMB切換到ARM。此外,在處理器進行異常處理時,把PC指針放入異常模式的鏈接寄存器中,並從異常向量地址開始執行程序,也可以使處理器切換到ARM狀態。
3.R14也稱作子程序連接寄存器SLR或連接寄存器LR,用來保存R15的返回值,可用R14保存子程序的返回地址。
寄存器R14常用在如下情況:
在每一種運行模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值復制給R14,執行完子程序後,又將R14的值復制回PC,即可完成子程序的調用返回。
4.程序計數器PC(R15)對其的使用有一些限制。
5.寄存器R16,用作當前程序狀態寄存器CPSR,可在任何運行模式下被訪問。
6.條件碼標志:N,Z,C,V均為條件碼標志位,他們的內容可被算術或邏輯運算的結果鎖改變,並且可以決定某條指令是否被執行。
7.控制位:PSR的低八位為控制位,當發生異常時,這些位可以被修改,如果處理器運行在特權模式,這些位也可以由程序修改。
8.ARM體系所支持的異常類型:
1)復位(Reset):當處理器的復位電平有效時,產生復位異常,程序跳轉到復位異常處理程序處執行。
2)未定義指令(Undefined):當ARM處理器或協處理器遇到不能處理的指令時,產生未定義指令異常。可使用該異常機制進行軟體模擬。3)軟體中斷(SWT):該異常由執行SWT指令產生,可用於用戶模式下的程序調用特權操作指令。可使用該異常機制實現系統功能調用。4)指令預取終止(Prefetch Abort):若處理器預取指令的地址不存在,或該地址不允許當前指令訪問,存儲器會向處理器發出終止信號,但當預取的指令被執行時,才會產生指令預取終止異常。5)數據終止(Data Abort):若處理器數據訪問指令的地址不存在,或該地址不允許當前指令訪問時,產生數據終止異常。6)外部中斷請求(IRQ):當處理器的外部中斷請求引腳有效,且CPSR中的I位為0時,產生IRQ異常。系統的外設可通過該異常請求中斷服務。7)快速中斷請求(FIQ):當處理器的快速中斷請求引腳有效,且CPSR中的F位為0時,產生FIQ異常。
9.ARM體系結構可以用兩種方法存儲字數據,稱之為大端模式和小端模式。
大端模式下,字數據的高地址是存儲在低地址中。
小端模式下,字數據的低地址是存儲在低地址中。
10.MMU(內存管理單元)通過硬體實現對內存管理,是ARM中最常見的協處理器,一般為CP15. MMU 內存管理單元 Memory Management Unit 在處理器中實現內存管理功能,完成物理地址到虛擬地址的映射
11.AMBA為先進控制器匯流排體系,它為ARM內核和外設提供了標准化介面。
12.內核後綴的含義:
E:代表支持增強DSP指令 T:代表支持Thumb指令集
J:代表支持Jazzlle技術 S:代表為可綜合的內核(與其對應為贏家宏單元)
13.TDMI的基本含義:
T:支持16位指令集Thumb
D:支持片上調式Debug
M:內嵌硬體乘法器(Multiplier)
I:嵌入式ICE,支持片上斷點和調試點。
14.ARM的定址模式:
立即定址:操作數本身就在指令中給出,只要取出指令也得到了操作數。這個操作數叫做立即數ADD R0,R0,#1; R0←R0+1 ADD R0,R0,#0x3f;R0←R0+0x3f
寄存器定址:利用寄存器的數值作為操作數,是各類微處理器經常採用的一種方式
寄存器間接定址:以寄存器中的值作為操作數的地址,而操作數本身存放在存儲器中
基址變址定址:就是將寄存器的內容和指令中給出的地址偏移量相加,從而得到的一個操作數的有效地址
多寄存器定址:一條指令可以完成多個寄存器值的傳送。這種定址方式可以用一條指令傳送最多16個通用寄存器的值。
跳轉定址:相對定址以程序計數器PC的當前值為基地址,指令中的地址標號作為偏移量,將兩者相加之後得到的操作數的有效地址。
堆棧定址: 滿堆棧:當堆棧指針指向最後壓入的堆棧的數據時。空堆棧:當堆棧指針指向下一個將要放入數據的空位置。 遞增堆棧:堆棧由低地址向高地址生成時 遞減堆棧:堆棧由高地址向低地址生成
滿遞增堆棧: 堆棧指針指向最後壓入的數據,且低地址向高地址生成
慢遞減堆棧: 堆棧指針指向最後壓入的數據,且高地址向低地址生成
空遞增堆棧: 堆棧指針指向下一個將要放入的數據的空位置,且低地址向高地址生成
空遞減推展: 堆棧指針指向下一個將要放入的數據的空位置,且高地址向低地址生成
15.ARM指令集分為:
數據處理指令:CMP比較指令(CMP R1,RO 將R0、R1的值減,並根據結果設置CPSR標志位)ADD加法指令
載入/存儲指令:LDR字數據載入指令(LDR R0,[R1]),LDRB位元組數據載入指令。
乘法指令:MUL32位乘法指令(MUL R0,R1,R2;R0=R1*R2),MLA32位乘加指令 (MLA R0,R1,R2,R3;R0=R1*R2+R3)
狀態寄存器訪問指令:MRS程序狀態寄存器到通用寄存器的數據傳送指令MRS R0,CPSR (傳送CPSR的內容到R0),MSR通用寄存器到程序狀態寄存器的數據傳送指令。MSR SPSR,R0(傳送R0的內容到SPSR)
跳轉指令:B跳轉指令,BL帶返回的跳轉指令 B LABEL(程序無條件跳轉到標號LABEL處執行)
協處理器指令:CDP協處理器數操作指令CDP P3,2,C12,C10,C3,4(該指令完成協處理器P3的初始化,)LDC協處理器數據載入指令LDC P3,C4,[R0],STC協處理器數據存儲指令.
處理器數據手冊 包含以下內容:處理器特點概述,處理器的功能結構及其框架圖,處理器的封裝形式和引腳排列,處理器各個功能模塊介紹,處理器的電氣特性,處理器的機械特性
ARM處理器的常用模塊:內存控制單元,中斷控制單元,GPIO,定時器,UART。
PWM 定時器:包括6個16位基於中斷或者DMA的定時器,可編程工作周期、頻率和極性,其中5個定時器帶有 脈寬調制 Pulse Width Molation,另外一個無外部引腳,只能內部使用。
IIC 匯流排介面:IIC是一種串列匯流排 ,S3C44B0X的IIC是一個基於中斷操作的多主IIC。
IIS 匯流排介面:IIS是一種音頻介面,S3C44B0X的IIS是一個基於DMA操作的IIS。
GPIO 控制器:通用輸入輸出埠,是處理器上可編程的引腳。S3C44B0X的一共有7個通用埠,共71位:
S3C44B0X採用ARM7TDMI內核,最大速度可以達66MHZ。
S3C44B0X 地址空間:256MB 可訪問區域 特殊功能寄存器 4MB,每個BANK32MBYTES,共有8個BANK256MB。
BANKCON0~BANKCON5是前6個固化區域的BANK的寄存器,後兩個BANK支持SDRAM,由BANKCON6 和BANKCON7控制
S3C44B0X 的中斷控制器有30個中斷源,實際上的中斷源共有26個。外部中斷 4/5/6/7 共用一個中斷源
7個通用埠,共71位:
A:10位輸出埠 B: 11位輸出埠 C:16位輸入/輸出埠 D: 8位輸入/輸出埠
E: 9位輸入/輸出埠 F: 9位輸入/輸出埠 G: 8位輸入/輸出埠
定時器:6個基於中斷或DMA方式的PWM定時器 ,有6個PWM定時器,都可以工作在中斷或者DMA方式。
1、嵌入式系統的硬體擴展包括三種類型:
內部模塊擴展:通過增加外部電路,完成處理器內部模塊提供的功能
匯流排擴展:利用處理器的外部匯流排控制器(又稱內部控制器),擴展內存類晶元 地址匯流排、數據匯流排、控制信號、片選信號
GPIO擴展:GPIO是每個處理器都具有的功能部件,GPIO擴展非常靈活,因為每一個引腳都是可以編程的,理論上這種引腳可以通過程序完成任何一種功能。
2、S3C44B0X系統: 內存空間分為8個BANK 每個Bank的空間32M 地址空間總共256M
1、嵌入式軟體的開發流程:
編譯 Compile 是指從高級語言轉換成匯編語言的過程。本質上編譯是一個文本轉換的過程 從一個文本文件到另一個文本文件
匯編 Assemble 是指從匯編語言程序生成目標系統的二進制代碼(機器代碼)的過程
鏈接 Link 將匯編成的多個機器代碼組合成一個可執行的程序
載入程序 在嵌入式系統的開發初期,生成的二進制代碼需要燒寫到系統的只讀存儲器中,然後跳轉到代碼所在的地址才可以運行。將BootLoader的代碼燒寫到嵌入式系統中,然後使用BootLoader將Linux內核和文件系統燒入
2、嵌入式開發的常用調試方式
目標機 到 主機 列印調試信息 目標機向主機列印調試信息的調試方法,不需要對目標機的執行程序作出改動,但是需要一條主機到目標機的通信信道
JTAG 調試
遠程 gdb 調試 調試是運行在主機(host,桌面電腦)的應用程序,被調試的程序運行在目標機(target)上
堆和棧的區別:
堆和棧都是系統管理的動態內存,在常見的體系結構和編譯系統中,堆一般從低地址向高地址增長,棧一般從高地址向低地址增長。術語的「堆棧」則專指棧。
1、Binutils 工具集合
as GNU匯編器。用來以將處理器的匯編代碼轉換成可執行的代碼,並存儲到目標文件.o文件中
ld GNU鏈接器。用於將一個或多個目標文件.0、庫組合成一個可執行程序;或者生成靜態庫和動態庫
ar 歸檔工具,可以將多個文件組合成一個大文件,並且可以讀取原始文件的內容
strip 去除文件中的符號
nm 用以顯示目標文件中的符號
obj 轉換二進制代碼的工具
objmp 顯示目標文件中的反匯編工具
readelf 顯示ELF文件中的各種信息 string 顯示文件中的可列印字元
ranlib 產生歸檔文件的索引,並將其保存到歸檔文件中,索引同時列出歸檔文件個成員所定義的可重分目標文件
addr2line 可以將一個可執行的程序地址映射到源文件的對應行
gprof 顯示程序調用段的各種數據
2、執行編譯分成4步:
預處理:生成.i的文件(預處理器 cpp) 編譯:將預處理後的文件轉換成匯編語言,生成文件.s(編譯器 gcc) 匯編:由匯編代碼生成的目標代碼,即機器代碼,生成.o(匯編器 as)
鏈接:由各個文件的目標代碼,生成可執行程序(鏈接器 ld)
3、ELF 文件格式 可執行文件(應用程序) 可重定向文件(*.o)共享object文件(*.so)
4、GDB 調試基礎 是一個強大的命令行調試工具(在嵌入式開發系統中的作用),GDB調試可以直接在嵌入式系統中使用,這與PC上一般LINUX的程序調試的區別僅僅是調試的宿主機是目標機,調試的結果可以通過串口等方式在主機上獲取,此時主機在調試系統中的作用僅僅是顯示的終端。
1、嵌入式linux的引導方式: 啟動載入 Bootloader 模式 發布後內核已燒寫到目標機中,可以脫離主機運行 下載 Downloading 模式 沒有燒寫到目標機中,調試操作系統用到,要先下載到目標機。
2、嵌入式linux的文件系統介紹:
EXT2/3 擴展文件系統2/3
ROMFS Read Only Memory File System,只讀文件系統
CRAMFS Compress Read Access Memory File System 壓縮只讀文件系統
JFFS2 Jounaling FlashFilesystem 2 日誌文件系統2
NFS Net File System 網路文件系統
YAFFS Yet Another FlashFile System 另一種FLASH文件系統
1、典型的Bootloader程序框架結構
Bootloader的stage1(一般用匯編語言實現) 1、硬體設備初始化 2、為載入Bootloader的stage2准備RAM空間 3、復制Bootloader的stage2到RAM空間中 4、設置好堆棧5、跳轉到stage2的C入口點
Bootloader的stage2(一般用C實現)1、初始化本階段要使用到的硬體設備2、檢測系統內存映射3、將kernel影響和跟文件系統映像從flash上讀到RAM空間中4、為內核社會資啟動參數5、調用內核
2、Linux的內核組成 1、進程調度 2、進程間的通信 IPC 3、內存管理 MM 4、虛擬文件系統 VFS 5、網路
3、Clinux使用與各種無內存管理單元的處理器,包括無MMU的ARM處理器。
與標准linux的區別 1、虛擬內存 2、Flat扁平 3、位置無關的代碼PIC 4、多進程管理
4、Clinux:是MICRO-CONTROL-LINUX的縮寫,字面上的意思是針對微控制領域而設計的LINUX系統,適用於各種無內存管理單元的處理器,包括無MMU的ARM處理器。
1、嵌入式系統和PC機的區別和聯系有哪些,從應用場合、系統結構、知識背景、開發方式等方面考慮。
從本質上看,嵌入式系統屬於計算機系統的一種具體體現。但是它與通用的計算機系統存在差異。相比通用的計算機系統,嵌入式系統和主要具有一下一些特點。
特定設計、各學科結合的產物、高校的設計、與具體應用相結合、存儲特性、交叉開發。
2、描述嵌入式系統的幾個組成部分的層次結構,並總結他們與開發過程的關系。
嵌入式系統的組成:微處理器、外圍硬體、嵌入式操作系統、應用程序、開發環境
嵌入式系統開發分為軟體開發部分和硬體開發部分。嵌入式系統在開發過程一般都採用如「宿主機/目標板」開發模式,即利用宿主機(PC機)上豐富的軟硬體資源及良好的開發環境和調試工具來開發目標板上的軟體,然後通過交叉編譯環境生成目標代碼和可執行文件,通過串口/USB/乙太網等方式下載到目標板上,利用交叉調試器在監控程序運行,實時分析,最後,將程序下載固化到目標機上,完成整個開發過程。
3、說出S3C44BOX內存控制器、中斷控制器、GPIO、UART、定時器、LCD控制器、在系統中的作用。結合數據手冊,了解處理器各個部件的作用
(1)內存控制器:S3C44B0X處理器無內部的RAM和FLASH,必須在外部增加。內存控制器完成功能包括:大小模式選擇、匯流排寬度選擇、內存刷新控制設置等功能。
(2)中斷控制器:S3C44B0X的中斷控制器主要功能是連接ARM7內核中斷與S3C44B0X內部各個部件的中斷,其特點是使用2級中斷模式。
(3)GPIO控制器:S3C44B0X處理器I/O埠可以用於與外部連接,通用的埠可以根據程序完成相應的功能。
(4)UART:S3C44B0X的UART提供了2個獨立通道的非同步串口,每個通道均可以工作在DMA模式,也就是說UART能產生內部中斷請求或者DMA請求,在CPU和串列I/O之間傳送數據。
(5)定時器:S3C44B0X PWM定時器包括定時器和PWM2個方面的功能。一方面可以作為簡單的定時器,可以通過中斷或者DMA方式作為晶元內部使用的「定時時鍾」;另一方面可以通過引腳輸出,這些輸出是占空比可調的方波
(6)LCD控制器:LCD控制器使用基於時間的抖動演算法和幀速率FRC控制方法,同樣也可作為每像素8位的彩色LCD顯示屏的介面
另外,虛機團上產品團購,超級便宜
『拾』 嵌入式的文件系統是什麼意思 NFS和yaffs的區別、
嵌入式的文件系統是所有嵌入式系統所應用的文件系統。
大多數嵌入式系統採用了Linux。
嵌入式系統對文件系統的要求
要求文件系統在頻繁的文件操作(例如,新建,刪除,截斷)下能夠保持較高的讀寫性能,要求低碎片化。
日誌文件系統(XFS,ReiserFS,Ext3等)能保持數據的完整性,但消耗過多系統資源的弱點使之不能成為嵌入式系統中的主流應用。並且這些都是專門為硬碟這類的存儲設備優化,對於flash這類的存儲介質並不適用。
嵌入式文件系統的載體是以Flash為主的存儲介質,Flash的擦除次數是有限的,所以為了延長Flash的使用壽命,應該盡量減少對Flash的寫入操作。
嵌入式文件系統的載體是以Flash為主的存儲介質,Flash的擦除次數是有限的,所以為了延長Flash的使用壽命,應該盡量使對Flash的寫入操作均勻分布在整個Flash上。
NFS是Net File System的簡寫,即網路文件系統。網路文件系統是FreeBSD支持的文件系統中的一種,它允許一個系統在網路上與它人共享目錄和文件。通過使用NFS,用戶和程序可以象訪問本地文件一樣訪問遠端系統上的文件。
YAFFS(Yet Another Flash File System)是第一個專門為NAND Flash存儲器設計的嵌入式文件系統,適用於大容量的存儲設備;並且是在GPL(General Public License)協議下發布的,可在其網站免費獲得源代碼。