歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Moblin:建立Host和Target的MTD工具

  在看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

  $cd mtd-utils

  $make //如果編譯中出現文件,可能是因為沒有安裝lzo導致,需要安裝libacl,lao,zlib。如果還有問題,可能需要安裝devel包,例如lzo-devel。

  $make DESTDIR=${PREFIX} install

 

  下面是在host上建立MTD工具的步驟:

  1、編譯zlib,是一種壓縮算法

  在http://www.gzip.org/zlib中獲取源代碼,

  $ ${PRJROOT}/build-tools/zlib-1.2.3

  $CC=i586-linux-gcc LDSHARED="i586-linux-ld -shared" ./configure --share

  $make

  $make prefix=${TARGET_PREFIX} install

  $cp -d ${TARGET_PREFIX}/lib/libz.so* ${PRJROOT}/rootfs/lib

 

  我曾經在配置的時候,將LDSHARED寫錯來,結果只生成libzlib.a沒有生成*.so文件。

  2、編譯lzo,也是一種壓縮算法

  在http://www.oberhumer.com/opensource/lzo中獲取源代碼

  $cd ${PRJOOT}/build-tools/lzo-2.03

  $CC=i586-llinux-gcc ./configure --enable-shared

  $make

  $make prefix=${TARGET_PREFIX} install

  $cp - d{TARGET_PREFIX}/lib/liblzo2.so* ${PRJROOT}/rootfs/lib

 

  在文檔中給出的是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

  $./configure --host=i586-linux --enable-elf-shlibs --with-cc=i586-linux-gcc- -with-linker=i586-linux-ld --prefix=${TARGET_PREFIX}

  $make

  $make install

 

  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

  $make CROSS=i586-linux- HOST=i586-linux DESTDIR=${PRJROOT}/rootfs install

 

  這樣將裝載在目標目錄系統中的/usr/sbin中。

 

Copyright © Linux教程網 All Rights Reserved