0
点赞
收藏
分享

微信扫一扫

为powerpc编译mtd-utils工具

蛇发女妖 2022-02-23 阅读 71

一、项目概述

近期项目需要在一个老板子上(P2020处理器)支持对norflash的操作和升级内核,内核版本为Linux p2020rdb 3.8.13

二、交叉编译工具

交叉编译工具为:/opt/fls-networking/......./powerpc-fsl_networking-linux-gnuspe-gcc

zlib和lzo编译完后存放路径为: /opt/fsl-networking/......../zlib

这个可以根据自己实际应用场景修改,主要是编译zlib和lzo时需要指定--prefix=....

三、编译依赖包

3.1 zlib

   (1) 获取:zlib Home Site, 我下载版本为1.2.11

(2)./configure --prefix=/opt/fsl-networking/......./zlib/ --shared
(注意:这里的/opt/fsl-networking/......./zlib/ 是zlib库要安装大目录你可以设成自己想要大目录。要记住这个目录哦,不然你会找不到zlib库的)
 (3)  修改生成的Makefile文件的以下几项:
CC=/opt/fls-networking/......./powerpc-fsl_networking-linux-gnuspe-gcc
AR=/opt/fls-networking/......./powerpc-fsl_networking-linux-gnuspe-ar
RANLIB=/opt/fls-networking/......./powerpc-fsl_networking-linux-gnuspe-ranlib
(注意:交叉编译工具链路径要换成你的交叉编译工具路径。)
(4)
make
make install

3.2 LZO编译安装

(1) 下载 http://www.oberhumer.com/opensource/lzo/#download, 我下载版本为lzo-2.10.tar.gz

(2) 编译

CC=/opt/fls-networking/......./powerpc-fsl_networking-linux-gnuspe-gcc   ./configure --host=powerpc-linux --prefix=/opt/fsl-networking/......./zlib/
make
make install

(这里的--prefix采用了和zlib一样的路径,都放在一起了)

3.3 e2fsprogs编译

该工具包主要是为了解决编译mtd-utils时,产生-luuid错误问题的,如果没有这个,则会产生如下错误:

 (1)可以下载版本e2fsprogs-1.45.4.tar.gz:

http://distfiles.macports.org/e2fsprogs/

(2)sudo ./configure  --host=powerpc-linux  CC=/opt/fsl-networking/....../powerpc-fsl_networking-linux-gnuspe-gcc     --prefix=/opt/fsl-networking/...../mtdutils

这里如果不使用sudo,比如会提示configure error: C compile cannot create executables,这基本是当前用户的PATH路径问题,自己修改一下PATH变量即可。

如果上述configure没有错误,则继续

cd  lib/uuid

make

sudo make install  (因为我mtdutils目录创建在opt目录下了)

四、编译mtd-utils

(1) 获取:ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.1.2.tar.bz2

(2) tar jxvf mtd-utils-2.1.2.tar.bz2

(3) 进去之后发现是没有Makefile文件的,需要根据./configure产生Makefile文件,下面描述中我都省略了交叉编译工具路径和库路径

(4)设置必要的环境变量,可以参见configure脚本里面说明

 export   ZLIB_CFLAGS=-I/opt/fsl-networking/...../zlib/include

 export  ZLIB_LIBS=-L/opt/fsl-networking/....../zlib/lib

 export   LZO_CFLAGS=-I/opt/fsl-networking/....../zlib/include

 export  LZO_LIBS=-L/opt/fsl-networking/......./zlib/lib

export UUID_CFLAGS=-I/opt/fsl-networking/...../mtdutils/include/uuid

export UUID_LIBS=-L/opt/fsl-networking/....../mtdutils/lib/pkgconfig

 export   CFLAGS="-O2  -g  $ZLIB_CFLAGS   $LZO_CFLAGS  $UUID_CFLAGS"

 export   LDFLAGS="$ZLIB_LIBS   $LZO_LIBS $UUID_LIBS  -luuid  -lz"

 ./configure  --host=powerpc-linux    CC=/opt/fsl-networking/..../powerpc-fsl_networking-linux-gnuspe-gcc    --without-zstd

 这里后面添加一个--without-zstd 主要是不添加的话,./confiure会报错,提示SZTD library找不断,如下图:

接下来输入:make  WITHOUT_XATTR=1

会报缺少-llud错误,这个是产生一些mkfs工具需要的,我目前还没有研究为什么,估计是需要添加-llud库之类的。如果提示缺少LZO 库,configure时也可以添加--without-lzo

 但是此时已经不影响norflash的一些工具生成了,比如flashcp  flash_erase, mtd_debug 等见下图:

五、flash工具


命令:flashcp
  copy 数据到 flash 中
用法:

usage: flashcp [ -v | --verbose ] <filename> <device>
   flashcp -h | --help
filename:待写入的数据
device: 写入的分区,如/dev/mtd0

eg:  
filename制作:

mkfs.jffs2 -e 0x20000 -d cq8401 -o cq8401.img  -n  //这里的-e 0x20000 必须更你芯片的erasesize 相等

./flashcp cq8401.img /dev/mtd0  // copy cq8401.img文件系统到  /dev/mtd0分区中
这个命令的功能跟 dd if=/tmp/fs.img of=/dev/mtd0差不多

命令:flash_erase
  擦除指定范围内flash的内容;如果不指定,默认擦出起始位置的第一块,使相应flash变为全1
用法:

flash_erase MTD-device [start] [cnt (# erase blocks)] [lock]
MTD-device:待擦出的分区,如/dev/mtd0
start:起始位置设置,这里必须设置为0x20000(128K)的整数倍
cnt: 从start开始计算,要擦出的块数
lock: 写保护                             
eg:  

./flash_erase /dev/mtd0 0x40000 5   //擦出mtd0分区上从0x40000开始的5块数据 ,128K/块

 

为了更详细了解分区信息用mtd_debug命令

mtd_debug info /dev/mtdX #(不能使用mtdblockX, mtdblockX 只是提供用來 mount 而已)


mtd.type = MTD_NORFLASH
mtd.flags =
mtd.size = 12582912 (12M)
mtd.erasesize = 131072 (128K)
mtd.oobblock = 1
mtd.oobsize = 0
mtd.ecctype = (unknown ECC type - new MTD API maybe?)
regions = 0

举报

相关推荐

0 条评论