有关文章:《mtd-utils 的 使用

背景:

  关于在公司的生产环境有关。不希望每次都在uboot下面做nand flash 的烧写;也觉得使用U盘升级的方法比较慢,而且有关的驱动不是我写的,不希望受制于人。还是希望在Linux下面比较通用。

要求: 根据本文进行操作时,需要明确清楚各个部分的烧写地址和大小。

host平台   :Ubuntu 16.04
arm平台   : 3531d
 
mtd-utils   :1.4.8
zlib      :1.2.11
lzo       :2.08
e2fsprogs  : 1.41.14
arm-gcc   :4.9.4
 

一个脚本解决所有的事情

##
#    Copyright By Schips, All Rights Reserved
# 自定义变量

OUTPUT_PATH=`pwd`/install
ARM_GCC=arm-hisiv500-linux-gcc
BASE=`pwd`
ZLIB=zlib-
MTD_UTILS=mtd-utils-
LZO=lzo-2.08
E2FSPROGS=e2fsprogs-

make_dirs () {
    #为了方便管理,创建有关的目录
    cd ${BASE} && mkdir compressed install source -p
}

download_package () {
    cd ${BASE}/compressed

    #wget -c https://www.zlib.net/${ZLIB}.tar.gz
    #wget -c http://www.oberhumer.com/opensource/lzo/download/${LZO}.tar.gz
    # 注意下面这行的网址
    #wget -c https://jaist.dl.sourceforge.net/project/e2fsprogs/e2fsprogs/1.41.14/${E2FSPROGS}.tar.gz
    #wget -c ftp://ftp.infradead.org/pub/mtd-utils/${MTD_UTILS}.tar.bz2

}
tar_package () {
    cd ${BASE}/compressed

    #解压下载的包
    tar -C ../source -xf ${ZLIB}.tar.gz
    tar -C ../source -xf ${LZO}.tar.gz
    tar -C ../source -xf ${E2FSPROGS}.tar.gz
    tar -C ../source -xf ${MTD_UTILS}.tar.bz2
}

#编译
# 有些人喜欢把交叉库编译到工具链中以简化编译的操作步骤,本人觉得这样的做法是非常错误的。(会对工具链造成污染)

make_zlib () {
    # 编译安装 zlib
    cd ${BASE}/source/${ZLIB}
    echo "ZLIB ABOUT"
    CC=${ARM_GCC} ./configure --prefix=${OUTPUT_PATH}/${ZLIB}
    make && make install
}

make_lzo () {
    # 编译安装 lzo
    cd ${BASE}/source/${LZO}
    echo "LZO ABOUT"
    CC=${ARM_GCC} ./configure --host=arm-linux  --prefix=${OUTPUT_PATH}/${LZO}
    make && make install
}

make_e2fsprogs () {
    # 编译安装 e2fsprogs
    cd ${BASE}/source/${E2FSPROGS}
    echo "E2FSPROGS ABOUT"
    CC=${ARM_GCC} ./configure --host=arm-linux --enable-elf-shlibs --prefix=${OUTPUT_PATH}/${E2FSPROGS}
    make && make install-libs
    mkdir ${OUTPUT_PATH}/${E2FSPROGS}/include/uuid -p
    cp lib/uuid/uuid.h ${OUTPUT_PATH}/${E2FSPROGS}/include/uuid
}

make_mtd_utils () {   # 编译安装 mtd-utils
    cd ${BASE}/source/${MTD_UTILS}
    echo "MTD ABOUT"
    # 下面4行修复了mtd编译的一些问题
    sed -r -i "/LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid/ s/.*/LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid \$(ZLIBLDFLAGS) \$(LZOLDFLAGS) \$(UUIDLDLIBS)/g" Makefile
    sed -r -i "/#include <uuid\/uuid.h>/ s/.*/#include \"uuid\/uuid.h\"/g" mkfs.ubifs/mkfs.ubifs.h
    mkdir mkfs.ubifs/uuid -p
    cp ${BASE}/source/${E2FSPROGS}/lib/uuid/uuid.h mkfs.ubifs/uuid/uuid.h

    export CROSS=arm-hisiv500-linux-
    export DESTDIR=${OUTPUT_PATH}/mtd-utils
    export ZLIBCPPFLAGS=-I${OUTPUT_PATH}/${ZLIB}/include
    export  LZOCPPFLAGS="-I${OUTPUT_PATH}/${LZO}/include -I{$OUTPUT_PATH}/${E2FSPROGS}/include/"
    export  ZLIBLDFLAGS=-L${OUTPUT_PATH}/${ZLIB}/lib
    export   LZOLDFLAGS=-L${OUTPUT_PATH}/${LZO}/lib
    export   UUIDLDLIBS=-L${OUTPUT_PATH}/${E2FSPROGS}/lib

}

make_dirs#download_packagetar_package
make_zlib
make_lzo
make_e2fsprogs
make_mtd_utils

mtd-utils:

make 后      :mtd-utilsg工具链将会在当前目录下$CROSS目录生成

make install后  :make生成的结果将安装到DESTDIR目录下

* 如果 make install 失败,手动在 $CROSS 文件名的目录下就可以找到编译的结果

拷贝需要的程序和库即可

mtd-utils 2.0版本的编译: https://blog.csdn.net/liyangzmx/article/details/93901411

(注:本人尝试过2.x版本的编译,但是失败了。)

Arm-Linux 移植 mtd-utils 1.x的更多相关文章

  1. arm linux 移植 x265

    背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...

  2. Linux 安装 go 以及 arm linux 移植 go

    背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...

  3. arm linux 移植 MQTT (paho、mosquitto)

    前言 我们在这里做2件事情: 1)编译 paho.mqtt.mosquitto 2个开源项目的c版本库(mosquitto库没有用上) 2)编译好 依赖 paho.mqtt的库编写例程 + mosqu ...

  4. arm linux 移植 ffmpeg 库 + x264

    背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...

  5. arm linux 移植 PHP

    背景: PHP 是世界上最好的语言. host平台 :Ubuntu 16.04 arm平台 : 3531d arm-gcc :4.9.4 php :7.1.30 zlib :1.2.11 libxml ...

  6. arm linux 移植支持 HP打印机

    背景 由于业务需要,需要hi3531d主板上加入对于HP打印机的支持. 通过与产品经理,技术主管的沟通:通用支持是不现实的,只要求彩色打印,先不考虑打印机的价格,只要支持一款打印机即可. 注意: Li ...

  7. arm linux 移植 gdb/gdbserver

    背景 调试工具gdb的使用对于嵌入式Linux开发人员来说是一项不可少的技能. 目前,嵌入式 Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机 ...

  8. arm linux 移植 udhcp 与 使用

    背景 在一些网络环境下,需要静态IP不够现实,需要使用DHCP进行自动获取IP地址. udhcpc是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微μ- DHCP -客户端client(μDH ...

  9. arm linux 移植 rsync

    背景: 在产品开发中可以使用rsync进行大文件的拷贝,断点续传. host平台 :Ubuntu 16.04 arm平台 : 3531d   rsync   :3.1.3 arm-gcc :4.9.4 ...

  10. arm linux 移植 jpeg

    背景: host平台 :Ubuntu 16.04 arm平台 : S5P6818 jpeg :v9c arm-gcc :4.8.1 主机准备: 运行以下脚本: ## # Copyright By Sc ...

随机推荐

  1. Comparison and difference for Default geodatabase,Current workspace,Scratch workspace,Home Folder

    Comparison and difference for Default geodatabase,Current workspace,Scratch workspace,Home Folder 商务 ...

  2. Spring 接口日志 AOP

    接口日志记录AOP实现-LogAspect - 91博客it技术开发者 - 博客园https://www.cnblogs.com/007sx/p/5810818.html Spring AOP(一) ...

  3. 如何在 Linux 中更改 swappiness

    交换空间是 RAM 内存已满时使用的硬盘的一部分.交换空间可以是专用交换分区或交换文件.当 Linux 系统耗尽物理内存时,非活动页面将从 RAM 移动到交换空间.Swappiness 是一个 Lin ...

  4. org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'

    原因:浏览器和驱动版本不匹配 https://npm.taobao.org/mirrors/chromedriver

  5. Python3基础 函数 多值参数 元组与字典形式(键值对分别指出)

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  6. 002-05-RestTemplate 使用常见问题-非200请求捕获

    一.概述 1.1.RestTemplate报错时时获取不到错误信息 捕获异常后 try { result = restTemplate.postForEntity(faceConfig.getApiU ...

  7. 算法习题---5.5集合栈计算机(Uva12096)*****

    一:题目 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果压 ...

  8. window TOMCAT 端口被占用了怎么办?

    查看80端口被哪些程序占用了 netstat -ano|findstr "80" 根据pid(进程id) 查询对应的应用程序 tasklist|findstr "1828 ...

  9. 如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘

    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘  摘自:http://blog.sina.com.cn/s/blog_7525b71f0101d0u8.html ...

  10. 1264 - Out of range value for column

    现象:新建数据库,字段类型是tinyint,然后插入数据,数值为128,报标题错误 原因:如果在新建数据库的时候没有指定为unsigned,那么就是有符号的,所以tinyint的范围是-128~127 ...