全志A64更换2018文件系统

需求:全志A64打印机驱动,更换buildroot2018文件系统

v1.1zsh
buildroot2018.112022-3

由于一些兼容性的问题,在实际项目的开发过程中可能会出现文件系统的一些版本的问题,因此官方的2017版本的文件系统可能需要更改。
因此这个任务目的是把开发板的文件系统版本进行更换。
因为全志的官方是提供脚本进行全部的编译,包括文件系统,内核等等,为了任务的顺利完成,首要任务是弄懂脚本的具体实现流程。
下面我们进行一下脚本的分析:
首先先介绍一个概念: Lichee表示全志科技A10芯片的开发代号
说白了Lichee是一个包含文件系统,内核等等需要编译,打包的文件夹。
在这里插入图片描述
例如这个Lichee下就有 /brandy /buildroot-2017-02.3 等等
那么我们在编译的时候执行的脚本是 ./build.sh 我们进去看一下:

#!/bin/bash

set -e

buildroot-2017.02.3/scripts/mkcommon.sh $@


这很明显就是指定执行的路径,我们跳转mkcommon.sh看看:
//这里的 xconfig xpack …表示的是传入的命令,我们默认最开始是无参数传入。

BR_SCRIPTS_DIR=`dirname $0`
****
# source shflags
. ${BR_SCRIPTS_DIR}/shflags/shflags
[ -f .buildconfig ] && . .buildconfig
. ${BR_SCRIPTS_DIR}/mkcmd.sh

[ -f .buildconfig ] && . .buildconfig

if [ "x$1" = "xconfig" ] ; then
	. ${BR_SCRIPTS_DIR}/mksetup.sh
	exit $?
elif [ "x$1" = "xpack" ] ; then
	if [  "x$2" = "x-d" ] ; then
		init_defconf
		mkpack -d card0
		exit $?
	else
		init_defconf
		mkpack
		exit $?
	fi
elif [ "x$1" = "xpack_debug" ] ; then
	init_defconf
	mkpack -d card0
	exit $?
elif [ "x$1" = "xpack_dump" ] ; then
	init_defconf
	mkpack -m dump
	exit $?
elif [ "x$1" = "xpack_secure" ] ; then
	init_defconf
	mkpack -s secure
	exit $?
elif [ "x$1" = "xpack_prvt" ] ; then
	init_defconf
	mkpack -f prvt
	exit $?
elif [ "x$1" = "xpack_nor" ] ;then
    init_defconf
    if [ "x$2" = "xdebug" ] ; then
        mkpack -f spinor -d card0
    else
        mkpack -f spinor
    fi
	exit $?
elif [ "x$1" = "xpack_erase" ] ; then
    init_defconf
	mkpack -f erase
	exit $?
elif [ $# -eq 0 ] ; then
	init_defconf
	mklichee
	exit $?
fi

也就是当我们执行./build.sh 时 我们执行的是
elif [ $# -eq 0 ] ; then
init_defconf //初始化一些参数
mklichee //开始编译
exit $?
fi
那这两个的命令是在哪里定义的呢?我们跳转同目录下的mkcmd.sh 这里有编译的所有命令。

function init_defconf()
{
	local pattern
	local defconf
	local out_dir="common"

	check_env

	pattern="${LICHEE_CHIP}_${LICHEE_PLATFORM}_${LICHEE_BOARD}"
	defconf=`awk '$1=="'$pattern'" {print $2,$3}' buildroot-2017.02.3/scripts/mkrule`
	if [ -n "${defconf}" ] ; then
		export LICHEE_BR_DEFCONF=`echo ${defconf} | awk '{print $1}'`
		export LICHEE_KERN_DEFCONF=`echo ${defconf} | awk '{print $2}'`
		out_dir="${LICHEE_BOARD}"
	else
		pattern="${LICHEE_CHIP}_${LICHEE_PLATFORM}"
		defconf=`awk '$1=="'$pattern'" {print $2,$3}' buildroot-2017.02.3/scripts/mkrule`
		if [ -n "${defconf}" ] ; then
			export LICHEE_BR_DEFCONF=`echo ${defconf} | awk '{print $1}'`
			export LICHEE_KERN_DEFCONF=`echo ${defconf} | awk '{print $2}'`
			out_dir="common"
		fi
	fi

    export LICHEE_PLAT_OUT="${LICHEE_OUT_DIR}/${LICHEE_CHIP}/${LICHEE_PLATFORM}/${out_dir}"
    export LICHEE_BR_OUT="${LICHEE_PLAT_OUT}/buildroot-2017.02.3"
    mkdir -p ${LICHEE_BR_OUT}
}
function mklichee()
{

	mk_info "----------------------------------------"
    mk_info "build lichee ..."
	mk_info "chip: $LICHEE_CHIP"
	mk_info "platform: $LICHEE_PLATFORM"
	mk_info "kernel: $LICHEE_KERN_VER"
	mk_info "board: $LICHEE_BOARD"
	mk_info "output: out/${LICHEE_CHIP}/${LICHEE_PLATFORM}/${LICHEE_BOARD}"
	mk_info "----------------------------------------"
    
	check_env

    mkbr &&  mkkernel && mkrootfs
    [ $? -ne 0 ] && return 1
    
	mk_info "----------------------------------------"
    mk_info "build lichee OK."
	mk_info "----------------------------------------"
}
function mkbr()
{
    mk_info "build buildroot ..."

    local build_script="scripts/build.sh"
    (cd ${LICHEE_BR_DIR} && [ -x ${build_script} ] && ./${build_script})
    [ $? -ne 0 ] && mk_error "build buildroot Failed" && return 1

    mk_info "build buildroot OK."
}

function mkrootfs()
{
    mk_info "build rootfs ..."
    
    if [ ${LICHEE_PLATFORM} = "linux" ] ; then
  	mkdir -p ${LICHEE_BR_DIR}/output/target/lib/modules
	rm -rf ${LICHEE_BR_DIR}/output/target/lib/modules/*
        cp -rf ${LICHEE_KERN_DIR}/output/lib/modules/* ${LICHEE_BR_DIR}/output/target/lib/modules/
        (cd ${LICHEE_BR_DIR}/target/linux; ./build.sh)
        mv ${LICHEE_BR_DIR}/target/linux/rootfs.ext4 ${LICHEE_PLAT_OUT}
    else
        mk_info "skip make rootfs for ${LICHEE_PLATFORM}"
    fi

    mk_info "build rootfs OK."
}

这里我给大家提炼出了几个关键点的函数,我们可以看到
在mklichee中 调用了3个命令:mkbr mkkernel mkrootfs
内核我们不用管,文件系统,我们有已经编译好的2018的文件系统,所以mkbr不用管,
接着我们需要看rootfs 这个很明显的可以提前知道,肯定是根据已经编译好的文件系统打包成rootfs,这里我们需要把2018打包成rootfs 替换2017.
function mkrootfs()
{
mk_info “build rootfs …”

if [ ${LICHEE_PLATFORM} = "linux" ] ; then
mkdir -p ${LICHEE_BR_DIR}/output/target/lib/modules   //创建文件夹,不重要
rm -rf ${LICHEE_BR_DIR}/output/target/lib/modules/*   //删除,不重要
    cp -rf ${LICHEE_KERN_DIR}/output/lib/modules/*    ${LICHEE_BR_DIR}/output/target/lib/modules/
    **(cd ${LICHEE_BR_DIR}/target/linux; ./build.sh)**   //这里很重要,执行了一个脚本./build.sh 
    mv ${LICHEE_BR_DIR}/target/linux/rootfs.ext4 ${LICHEE_PLAT_OUT}
else
    mk_info "skip make rootfs for ${LICHEE_PLATFORM}"
fi

mk_info "build rootfs OK."

}
我们跳转进去看一下它的脚本:

#!/bin/bash

cd ${LICHEE_TOP_DIR}/lib/
if [ -e "build.sh" ]; then
./build.sh
fi
cd -

echo "generating rootfs..."
BR_ROOT=`(cd ../..; pwd)`
export PATH=$BR_ROOT/target/tools/host/usr/bin
//划重点这里的路径就是我们需要更改的路径
NR_SIZE=`du -sm /home/zsh/buildroot-2018.11/output/target  | awk '{print $1}'`  
NEW_NR_SIZE=$((((6962)/16)*16))
TARGET_IMAGE=rootfs.ext4

echo "blocks: $NR_SIZE"M" -> $NEW_NR_SIZE"M""
//还有这里
make_ext4fs -s -l $NEW_NR_SIZE"M" $TARGET_IMAGE /home/zsh/buildroot-2018.11/output/target 
fsck.ext4 -y $TARGET_IMAGE > /dev/null

if [ -n "$OUT_PATH" ]; then
    cp -v rootfs.ext4 $OUT_PATH/
fi

echo "Build at: `date`"

更改完成后,直接./build.sh 有报错的话在我的其他文章已经有讲过,不再讲。
打包完成后直接烧写就可以。
提醒:
1.不要想着一开始更改目录,直接进行2018的编译,因为配置不同,会出现很多错误,并且你不知道错在哪
2.2018的配置要正确 makemenuconfig 可以参照一下官方的设置。

记得将2017的/target下的init文件拷贝到2018下,否者挂载文件系统将失败。

记得勾选cups cupfilter hplib poppler 打印机才能用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
全志A64 PCB是一款基于全志科技A64芯片的印刷电路板(PCB),用于开发和组装A64系列的电子产品。全志A64芯片是一款高性能、低功耗、多功能的四核处理器,适用于智能设备和嵌入式系统。全志A64 PCB为用户提供了一个平台,可以在其上添加其他元件和附件,定制开发各种类型的电子产品。 全志A64 PCB具有以下主要特点和功能: 1. 高性能处理器:全志A64芯片采用四核ARM Cortex-A53架构,主频可达1.2GHz,运行速度快且能够处理复杂的任务。 2. 强大的图形处理能力:内置Mali-400 MP2图形处理器,支持高清视频播放、3D游戏等多媒体应用。 3. 多种接口:全志A64 PCB上集成了丰富的接口,包括USB、HDMI、以太网、音频输入输出等,可与外部设备进行连接和通信。 4. 支持多种操作系统:全志A64 PCBA64 PCB支持Android、Linux等多种操作系统,用户可以根据自己的需求选择适合的操作系统开发各种应用软件。 5. 低功耗设计:全志A64 PCB采用了先进的电源管理技术,能够实现低功耗运行,延长设备的续航时间。 通过使用全志A64 PCB,用户可以根据自己的需求进行定制开发各种类型的电子产品,如平板电脑、智能机顶盒、教育机器人、工业控制设备等。全志A64 PCB提供了强大的处理能力、丰富的接口和灵活的操作系统选择,为用户开发高性能、多功能的电子产品提供了便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Rangers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值