arm linux 移植 e2fsprogs

背景

之前在zynq平台下处理系统分区,用到了SPI-FLASH以及EMMC。

根据ZYNQ平台的特性以及产品升级需要,规划了

  • SPI-FLASH放置BootLoader
  • EMMC中分为2个区,一个FAT放置内核、一个EXT4存放文件系统

因为发现默认的文件系统中没有mkfs.ext4的命令,因此需要自己移植,而这个程序连同mkfs.ext2mkfs.ext3被包含在e2fsprogs中。

e2fsprogs     :1.45.6

移植

还是一个脚本搞定的事情。

#/** @file         make.sh
#*  @author       Schips
#*  @date         2020-10-28 23:22:53
#*  @version      v1.0
#*  @copyright    Copyright By Schips, All Rights Reserved
#*
#**********************************************************
#*
#*  @par 修改日志:
#*  <table>
#*  <tr><th>Date       <th>Version   <th>Author    <th>Description
#*  <tr><td>2020-10-28 <td>1.0       <td>Schips    <td>创建初始版本
#*  </table>
#*
#**********************************************************
#*/

#!/bin/sh

BUILD_HOST=arm-linux
BASE=`pwd`
OUTPUT_PATH=${BASE}/install/
## 必要时,填写你的工具链的所在路径
BUILD_HOST_PATH=/opt/gcc-arm-linux-gnueabi/bin
export PATH=${PATH}:${BUILD_HOST_PATH}

require () {
    if [ -z "$1" ];then
        return 
    fi
    command -v $1 >/dev/null 2>&1 || { echo >&2 "Aborted : Require \"$1\" but not found."; exit 1;   }
    echo "Using: $1"
}
make_dirs () {
    #为了方便管理,创建有关的目录
    cd ${BASE} && mkdir compressed install source -p
}
tget () { #try wget
    filename=`basename $1`
    echo "Downloading [${filename}]..."
    if [ ! -f ${filename} ];then
        wget $1 
    fi

    echo "[OK] Downloaded [${filename}] "
}

download_package () {
    cd ${BASE}/compressed
    tget https://udomain.dl.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.45.6/e2fsprogs-1.45.6.tar.gz
}

tar_package () {
    cd ${BASE}/compressed
    ls * > /tmp/list.txt
    for TAR in `cat /tmp/list.txt`
    do
        tar -xf $TAR -C  ../source
    done
    rm -rf /tmp/list.txt
}

make_e2fsprogs () {
    cd ${BASE}/source/e2fsprogs*
    mkdir configure_dir -p
    cd configure_dir
    CC=${BUILD_HOST}-gcc ../configure --host=arm-linux --enable-elf-shlibs \
        --prefix=${OUTPUT_PATH}/e2fsprogs \
        --datadir=${OUTPUT_PATH}/e2fsprogs/doc \
		--with-udev-rules-dir=${OUTPUT_PATH}/e2fsprogs \
		--with-crond-dir=${OUTPUT_PATH}/e2fsprogs \
		--with-systemd-unit-dir=${OUTPUT_PATH}/e2fsprogs
    make && make install
}

require ${BUILD_HOST}-gcc
make_dirs
download_package
tar_package
make_e2fsprogs
exit $?

拷贝

拷贝install/e2fsprogs/sbin到板子/usr/sbin

拷贝install/e2fsprogs/lib到板子/usr/lib

运行即可,例如:

# mkfs.ext4 /dev/mmcblk1p2
posted @ 2020-10-28 23:22  schips  阅读(770)  评论(0编辑  收藏  举报