建立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中。




你可能感兴趣的:(建立Host和Target的MTD工具)