ext4源碼
A. 使用hane NFS和Ubuntu交叉編譯,成功了,但是在編譯安裝源碼時出現: 遺漏分隔符 。 停止等錯誤。
Windows下的日誌文件格式是NTFS,而linux下日誌文件格式大多是ext4,通過掛載NTFS格式在ext4下,然後在NTFS下編譯文件,一般並不推薦這樣做。
本來兩者處理文件的方式方法就不盡相同,平時通過ntfs-3g 掛載下文件還可以,具體編譯軟體的話中間會涉及到比較多次的NTFS和ext4文件的轉化問題。所以不建議掛載在NTFS格式下編譯軟體。
一般編譯的話有個比較好的習慣是源碼包到/tmp或者直接cd 到 /tmp下wget源碼包編譯。tmpfs(也就是/tmp)的一個主要的好處是它閃電般的速度。tmpfs 文件系統會完全駐留在內存中,讀寫幾乎可以是瞬間的。(重啟後文件消失,所以只能放臨時文件)
B. Linux文件系統特點
Linux之所以能在嵌人式系統領域取得如此輝煌的成績,與其自身的優良特性是分不開的。與其他操作系統相比,Linux具有以下一系列顯著的特點。
1.模塊化程度高
Linux的內核設計非常精巧,分成進程調度、內存管理、進程間通信、虛擬文件系統和網路介面五大部分;其獨特的模塊機制可根據用戶的需要,實時地將某些模塊插入或從內核中移走,使得Linux系統內核可以裁剪得非常小巧,很適合於嵌入式系統的需要。
2.源碼公開
由於Linux系統的開發從一開始就與GNU項目緊密地結合起來,所以它的大多數組成部分都直接來自GNU項目。任何人、任何組織只要遵守GPL條款,就可以自由使用Linux 源代碼,為用戶提供了最大限度的自由度。這一點也正投嵌入式系統所好,因為嵌入式系統應用千差萬別,設計者往往需要針對具體的應用對源碼進行修改和優化,所以是否能獲得源代碼 對於嵌入式系統的開發是至關重要的。加之Linux的軟體資源十分豐富,每種通用程序在Linux上幾乎都可以找到,並且數量還在不斷增加。這一切就使設計者在其基礎之上進行二次開發變得非常容易。另外,由於Linux源代碼公開,也使用戶不用擔心有「後閘」等安全隱患。
同時,源碼開放給各教育機構提供極大的方便,從而也促進了Linux的學習、推廣和應用。
3.廣泛的硬體支持
Linux能支持x86、ARM、MIPS、ALPHA和PowerPC等多種體系結構的微處理器。目前已成功地移植到數十種硬體平台,幾乎能運行在所有流行的處理器上。
由於世界范圍內有眾多開發者在為Linux的擴充貢獻力量,所以Linux有著異常豐富的驅動程序資源,支持各種主流硬體設各和最新的硬體技術,甚至可在沒有存儲管理單元MMU 的處理器上運行,這些都進一步促進了Linux在嵌入式系統中的應用。
4.安全性及可靠性好
內核高效穩定。Linux內核的高效和穩定已在各個領域內得到了大量事實的驗證。
Linux中大量網路管理、網路服務等方面的功能,可使用戶很方便地建立高效穩定的防火牆、路由器、工作站、伺服器等。為提高安全性,它還提供了大量的網路管理軟體、網路分析軟體和網路安全軟體等。
5.具有優秀的開發工具
開發嵌入式系統的關鍵是需要有一套完善的開發和調試工具。傳統的嵌入式開發調試工具是在線模擬器(In Circuit Emulator,ICE),它通過取代目標板的微處理器,給目標程序提供一個完整的模擬環境,從而使開發者能非常清楚地了解到程序在目標板上的工作狀態,便於監視和調試程序。在線模擬器的價格非常高,而且只適合做非常底層的調試。如果使用的是嵌人式Linux,一旦軟硬體能支持正常的串口功能,即使不用在線模擬器,也可以很好地進行開發和調試工作,從而節省了一筆不小的開發費用。嵌入式Linux為開發者提供了一套完整的工具鏈(Tool Chain),能夠很方便地實現從操作系統到應用軟體各個級別的調試。
6.有很好的網路支持利文件系統支持
Linux從誕生之日起就與Internet密不可分,支持各種標準的Internet網路協議,並且很容易移植到嵌入式系統當中。目前,Linux幾乎支持所有主流的網路硬體、網路協議和文件系統,因此它是NFS的一個很好的平台。
另一方面,由於Linux有很好的文件系統支持(例如,它支持Ext2、FAT32、romfs等文件系統),是數據各份、同步和復制的良好平台,這些都為開發嵌入式系統應用打下了堅實的基礎。
7.與UNIX完全兼容
目前,在Linux中所包含的工具和實用程序,可以完成UNIX的所有主要功能。
但由於Linux不是為實時而設計的,因而這就成了Linux在實時系統中應用的最大遺憾。不過,目前有眾多的自由軟體愛好者正在為此進行不懈的努力,也取得了諸多成果
C. 如何製作Ext4文件系統鏡像
編譯Android源碼最後是使用make_ext4生成 Ext4鏡像+簽名(更新:合理使用make_ext4參數是不會導致添加簽名的),如果需要純Ext4鏡像,那麼需要再去掉簽名,使用simg2img。這個兩個工具都是在編譯Android源碼時編譯出來的,如果沒有Android源碼編譯環境,當然也可以使用Ubuntu社區已經整理好的工具集android-tools-fsutils,該工具集文件列表如下:(來自android-tools-fsutils/filelist)
/usr/bin/ext2simg
/usr/bin/ext4fixup
/usr/bin/img2simg
/usr/bin/make_ext4fs
/usr/bin/mkuserimg
/usr/bin/simg2img
/usr/bin/simg2simg
/usr/bin/simg_mp
/usr/bin/test_ext4fixup
工具集安裝方法:
sudo apt-get install android-tools-fsutils
1
1
製作Ext4文件系統鏡像:
# 創建測試目錄
mkdir /tmp/ext4 && cd /tmp/ext4 &&
mkdir test test_mount &&
echo "Hello Ext4" > test/HelloExt4.txt &&
# 生成名為test.ext4的Ext4鏡像
make_ext4fs -l 512M test.ext4 test &&
# 掛載test.ext4到test_mount測試
mount -t ext4 -o loop test.ext4 test_mount &&
ls test_mount || echo "Error!"
一、在(yourAndroid code path)/out/ 目錄里查找這個工具
unyaffs: 用於解壓system.img
mkyaffs2image: 用於打包system.img
呵呵,find 命令肯定會吧?find out/ -name mkyaffs2image
找到了後,記住這個目錄. 我的是(codePATH)/out/host/linux-x86/bin/
1.在任意文件夾下面建立一個system文件夾,我的是在home/changjiang/下面建的,這個是用來存放你解壓system.img出來的文件,然後將找到的兩個工具 unyaffs、mkyaffs2image拷貝到/changjiang/home/system
2.將編譯出來的system.img或者下載的system.img復制到system文件夾中。
3.在終端中輸入如下命令操作(/home/changjiang/替換成自己電腦中的路徑,你的不是我的)
cd /home/changjiang/system
./unyaffs /home/changjiang/system/system.img(用unyaffs命令解壓system.img),解壓出來的有各種應用,庫等等,你可以修改或者替換
二、重新打包system.img,雖然我不知道為什麼要這樣做,但是我知道這樣做是可以的.
呵呵,linux沒有不可能的事情.朝鮮的 紅星操作系統就是例子.
具體辦法是
system/ 這個目錄,這個目錄就是用來生成system.img 的.
mkyaffs2image system/ system.img
在Ubuntu中第一次使用mkyaffs2image命令時,會提示
mkyaffs2image:找不到命令
還需要安裝mkyaffs2image
http://code.google.com/p/fatplus/downloads/detail?name=yaffs2-source.tar&can=2&q=
下載yaffs2-source.tar
解壓後,進入utils文件夾,然後make
將make之後生成的mkyaffs2image文件拷貝到/usr/bin目錄下
$ su
# cp mkyaffs2image /usr/bin/
# chmod 777 /usr/bin/mkyaffs2image
之後
$ mkyaffs2image
mkyaffs2image: image building tool for YAFFS2 built Jan 6 2012
usage: mkyaffs2image dir image_file [convert]
dir the directory tree to be converted
image_file the output file to hold the image
'convert' proce a big-endian image from a little-endian machine
表明安裝成功,同時也可以看到該命令的用法
mkyaffs2image dir image_file
例如:
mkyaffs2image am1808-fs am1808-fs.yaffs//創建jffs2文件
搞Android的同學經常會接觸到system.img。但是該文件經常以兩種格式出現:raw和sparse。
一種是raw ext4 image,即經常說的raw image,使用file觀察它: 其特點是完整的ext4分區鏡像(包含很多全零的無效填充區),可以直接使用mount進行掛載,因此比較大(一般1G左右)。
[java] view plain
$ file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
信息非常明確了。
D. 如何把linux的文件系統從ext2無損升級到ext4
基本步驟:
1確認內核版本和系統環境支持ext4 (推薦升至2.6.28以上,lsmod |grep ext4)
2卸載要升級的分區(在線卸不掉則需要進單用戶)
3 tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize來給分區加入ext4的特性
4 e2fsck -fDC0 /dev/sdb1 –y修復分區錯誤
5修改fstab中分區格式為ext4,reboot
關鍵點:
1tune2fs版本要高於1.41 否則不支持ext4的特性
2官方推薦使用2.6.28以上內核才穩定支持ext4
3對在使用的分區如var,一定要先卸載再操作,並且重啟之前一定要挨個執行完tune2fs,e2fsck,和vi /boot/fstab的修改,再重啟,否則掛載就會出問題
網路資料:
一、測試場景
操作系統:CentOS 5.6 x86 64bit(內核2.6.18)
文件系統:ext3
硬碟:2塊(sda1、sdb1),sdb1的掛載點為/Android,專門用來存儲編譯文件,在編譯時報錯。
二、升級前狀態
查看系統內核版本:
# uname -r
2.6.18-238.el5
查看文件系統的情況:
# df -T
文件系統 類型 1K-塊 已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
ext3 13077624 3342968 9059636 27% /
/dev/sda1 ext3 101086 15876 79991 17% /boot
tmpfs tmpfs 257452 0 257452 0% /dev/shm
/dev/sdb1 ext3 8254240 149624 7685324 2% /android
查看ext4特徵是否激活:
# tune2fs -l /dev/sdb1 | grep extent
執行上述命令後無任何信息返回,說明/dev/sdb1的ext4特徵沒有激活,唯一的解決辦法就是升級文件系統到ext4了。
三、軟體下載及安裝
e2fsprogs軟體包下載頁面:http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
接下來是源碼編譯安裝過程:
# wget http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-1.41.14.tar.gz
# tar -zxvf e2fsprogs-1.41.14.tar.gz
# cd e2fsprogs-1.41.14
# ./configure
# make && make install
安裝完畢後暫時不需要重啟系統。第一次安裝完畢時我就重啟系統了,結果系統竟然崩潰了,因此e2fsprogs軟體包安裝完畢後不要立即重啟伺服器。