在看O'Reilly的《Building Embeded Linux System》的第7章存貯設備操作,看到來家裡Target的MTD utilities,但是根據文檔的介紹在編譯的過程中出現問題,需要補充一些步驟,下面整理一下我的編譯過程。
我正在倒騰moblin,交叉編譯環境使用i586-linux,這個只是為了學習嵌入式操作系統,如果真正在moblin上開發,應當使用moblin.org提供的MIC2工具。
我有一台netbook,安裝了moblin2 beta,在上面沒有發現mtd,我從ubuntu網站那裡獲取ubutun-8.10-mid-lpia,據說是就有moblin1的,MID在moblin2中沒有提供版本,而moblin1(支持mid)的開源代碼已經無法在moblin社區中找到,所有我懷疑Intel已經不再考慮menlow,不會在提供menlow的版本,而將目標鎖定在mooreston上面。我在ubutun8.10的版本中發現有mtd。我去查我的netbook的硬盤配置,還搞不清除是否是固體硬盤,說是以前的使用固體硬盤,後來為了降低成本,使用普通硬盤。
對於host上建立MTD,比較簡單,根據文檔按圖索骥就可以了,具體如下:
$git-clone git://git.infradead.org/mtd-utils
下面是在host上建立MTD工具的步驟:
1、編譯zlib,是一種壓縮算法
在http://www.gzip.org/zlib中獲取源代碼,
$ ${PRJROOT}/build-tools/zlib-1.2.3
我曾經在配置的時候,將LDSHARED寫錯來,結果只生成libzlib.a沒有生成*.so文件。
2、編譯lzo,也是一種壓縮算法
在http://www.oberhumer.com/opensource/lzo中獲取源代碼
$cd ${PRJOOT}/build-tools/lzo-2.03
在文檔中給出的是liblzo.so*需要修正為liblzo2.so*
3、從acl中獲取頭文件acl.h
在http://dir.filewatcher.com/d/Gentoo/distfiles/Other/acl_2.2.47-1.tar.gz.154823.html中獲取源代碼
解壓後,將include/acl.h拷貝到${TARGET_PREFIX}/include/sys
4、安裝e2fsprogs
這個步驟書中沒有,如果不安裝e2fsprogs,將在mtd_utils的編譯中出現錯誤,如下:
i586-linux-gcc -I../include -I../ubi-utils/include -D_FILE_OFFSET_BITS=64 -O2 -g -Wall -Wextra -Wwrite-strings -Wno-sign-compare -c -o /home/wei/workspace/mywork/moblin/sysapps/mtd-utils/i586-linux/mkfs.ubifs/lpt.o lpt.c -g -Wp,-MD,/home/wei/workspace/mywork/moblin/sysapps/mtd-utils/i586-linux/mkfs.ubifs/.lpt.c.dep
在包含自 lpt.c:23 的文件中:
mkfs.ubifs.h:48:23: 錯誤:uuid/uuid.h:沒有那個文件或目錄
這個不能只是copy頭文件,還以來其中的庫,所以需要整個進行編譯。
$git-clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
5、安裝mtd_utils
下載源代碼git-clone git://git.infradead.org/mtd-utils.git
為了避免在編譯的過程中出現找不到lubi,修改mkfs.ubifs/Makefile,將LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid -L../ubi-utils/ -lubi修訂為LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid -L../$(HOST)/ubi-utils/ -lubi
$make CROSS=i586-linux- HOST=i586-linux
這樣將裝載在目標目錄系統中的/usr/sbin中。