全志lichee的pack命令

2023-05-16

全志lichee目录打包命令流程 pack

将打包命令传进去build.sh脚本里面。查看buildsh里面的脚本命令。

其实里面的脚本还是较为简单地的,仅仅是作为一个过渡,然后就跑进去buildroot/scripts目录下的mkcommon.sh脚本里面。 那么需要转到这个脚本里面做了什么事情。

一、脚本源码分析

#!/bin/bash				
BR_SCRIPTS_DIR=`dirname $0`			// $0就是这个文件名字
# source shflags						
. ${BR_SCRIPTS_DIR}/shflags/shflags		//标志
. ${BR_SCRIPTS_DIR}/mkcmd.sh			//这个脚本有大量的命令函数

[ -f .buildconfig ] && . .buildconfig   
 //以下就是对传进来的$1进行一个判断
if [ "x$1" = "xconfig" ] ; then				/*config命令*/							
	. ${BR_SCRIPTS_DIR}/mksetup.sh								
	exit $?
elif [ "x$1" = "xpack" ] ; then				 /*pack 命令*/
	init_defconf
	mkpack
	exit $?
elif [ "x$1" = "xpack_debug" ] ; then		/*pack_debuf命令*/
	init_defconf
	mkpack -d card0
	exit $?
elif [ "x$1" = "xpack_dump" ] ; then		/*pack_dump命令*/
	init_defconf
	mkpack -m dump
	exit $?
elif [ "x$1" = "xpack_prvt" ] ; then		   /*pack_prvt命令*/	
	init_defconf
	mkpack -f prvt
	exit $?
elif [ $# -eq 0 ] ; then
	init_defconf
	mklichee
	exit $?
fi

在这里单独讲解pack这个参数,其他的参数可以参考我以前的博客。可以看到一旦pack这个参数成立之后就会执行一下两行脚本:

	init_defconf
	mkpack
	exit $?

init_defconf函数命令:

首先说明这个命令函数是在同目录下mkcmd.sh文件里面。也就是上面提及的加载这个脚本进来,就可以调用里面的脚本函数,会频繁提起这个脚本。可以观察到无论上面脚本在哪里成立都会执行这个函数命令。也就是说这个是一个通用的函数命令。里面的东西不外乎通用参数和环境参数等等通用的东西

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

check_env

//check_env参数命令里面主要判断下面标识出来LICHEE_BOARD   =  开发板型号(   0. evb    1. maple    2. redwood   3. vstar)
的路径是否存在

/*由于获取这几个封装的变量名太绕了直接给出
LICHEE_CHIP   =	chip
LICHEE_PLATFORM = ${platform}    //这个平台是在编译 ./build.sh config 时候选择的平台 (linux /android/dragomnoard)
*/
	pattern="${LICHEE_CHIP}_${LICHEE_PLATFORM}_${LICHEE_BOARD}"
	defconf=`awk '$1=="'$pattern'" {print $2,$3}' buildroot/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/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"
    mkdir -p ${LICHEE_BR_OUT}
}

环境设置到到这里就结束,回到主脚本体里面。

Mkpack(重点)

function mkpack()
{
    mk_info "packing firmware ..."   // mk_info为打印函数

	check_env			//判别函数,判断对应的文件路径是否存在的一个函数

    (cd ${LICHEE_TOOLS_DIR}/pack && \
    	./pack -c ${LICHEE_CHIP} -p ${LICHEE_PLATFORM} -b ${LICHEE_BOARD} $@)
}

一下才是pack命令里面的重点。:

  (cd ${LICHEE_TOOLS_DIR}/pack && \
	./pack -c ${LICHEE_CHIP} -p ${LICHEE_PLATFORM} -b ${LICHEE_BOARD} $@)

首先以下这句话就是在重点cd /tools/pack 目录下。

cd ${LICHEE_TOOLS_DIR}/pack       (有关pack目录下的内容)

然后下半段命令:

./pack   -c  ${LICHEE_CHIP}   -p  ${LICHEE_PLATFORM}    -b  ${LICHEE_BOARD} $@)
LICHEE_CHIP       =  (全志版本)
LICHEE_PLATFORM  =  (这个是编译的平台)
LICHEE_BOARD     =   (厂家配置)

以上三个配置就是在在执行 /build.sh config 选择全志版本,平台,具体产家配置。

那么置换回来就可以得到以下命令:
这个命令就是说判断

/*
sun8iw5p1是否存在并且是字特殊文件则为真
linux是否存在并且是一个名字管道
vstar是否存在并且是一个块特殊文件则为真 */

./pack   -c   sun8iw5p1    -p  linxu     -b  vstar  $@

转而分析到这个pack脚本,这个脚本在(tools/pack)

①执行:. …/…/buildroot/scripts/shflags/shflags
(执行这个脚本里面内容做了以下的处理,拿到对应的版本号等操作,定义一些大 判断或者识别的函数)
主线程里面到LICHEE_OUT(lichee/out/sun8iw5p1/dragonboard/common
)目录下

配置对应的环境:

export PATH=${TOOLS_DIR}/mod_update:${TOOLS_DIR}/eDragonEx:${TOOLS_DIR}/fsbuild200:${TOOLS_DIR}/android:$PATH

最后查看PACK脚本保存大量的函数命令,直接可以执行到以下脚本的操作
在这里插入图片描述

然后执行这个函数:

do_prepare  
{
	#判断这个是三个参数要是任意一个为空,即为真。进入 
	#其中的(-o) 是或运算

if [ -z "${PACK_CHIP}" -o -z "${PACK_PLATFORM}" -o -z "${PACK_BOARD}" ] ; then
	pack_error "invalid chip, platform or board."    #打印错误信息 
	show_boards
	exit 1
fi

if [ ! -d chips/${PACK_CHIP}/configs/${PACK_BOARD} ] ; then
	pack_error "board dir or path do not exist."
	show_boards
	exit 1
fi

# cleanup
rm -rf out/       #删除清空out目录,
mkdir -p out/	  #重新创建out目录

printf "copying tools file\n"   			#
for file in ${tools_file_list[@]} ; do #拷贝对应的
	cp -f $file out/ 2> /dev/null
done

if [ "x${PACK_MODE}" = "xdump" ] ; then
    cp -rf common/tools/usbtool_test.fex out/usbtool.fex  #拷贝USB工具文件
fi

printf "copying configs file\n"
for file in ${configs_file_list[@]} ; do
	cp -f $file out/ 2> /dev/null		#拷贝file到输出目录,然后将错误输出从定向到/dev/null空设备文件里面
done

printf "copying boot resource\n"		#复制启动资源
for file in ${boot_resource_list[@]} ; do		
	cp -rf `echo $file | awk -F: '{print $1}'` `echo $file | awk -F: '{print $2}'` 	#拷贝对应里面的首段信息
done

printf "copying boot file\n"		#复制启动文件
for file in ${boot_file_list[@]} ; do
	cp -f `echo $file | awk -F: '{print $1}'` `echo $file | awk -F: '{print $2}'`
done


#	判断平台是否为linux平台
if [ "x${PACK_PLATFORM}" = "xlinux" -a -f out/sys_partition_linux.fex \
	-a "x${PACK_FUNC}" != "xprvt" -a "x${PACK_MODE}" != "xdump" ] ; then
	mv out/image_linux.cfg out/image.cfg
	mv out/sys_partition_linux.fex out/sys_partition.fex
elif [ "x${PACK_PLATFORM}" = "xdragonboard" -a -f out/sys_partition_dragonboard.fex ] ; then
	mv out/sys_partition_dragonboard.fex out/sys_partition.fex
fi

#判断开发板是什么
if [ "x${PACK_DEBUG}" = "xcard0" -a "x${PACK_MODE}" != "xdump" \
	-a "x${PACK_FUNC}" != "xprvt" ] ; then
	cp $TOOLS_DIR/awk_debug_card0 out/awk_debug_card0
	TX=`awk  '$0~"'$PACK_CHIP'"{print $2}' pctools/linux/card_debug_pin`
	RX=`awk  '$0~"'$PACK_CHIP'"{print $3}' pctools/linux/card_debug_pin`
	MS=`awk  '$0~"'$PACK_CHIP'"{print $4}' pctools/linux/card_debug_pin`
	CK=`awk  '$0~"'$PACK_CHIP'"{print $5}' pctools/linux/card_debug_pin`
	DO=`awk  '$0~"'$PACK_CHIP'"{print $6}' pctools/linux/card_debug_pin`
	DI=`awk  '$0~"'$PACK_CHIP'"{print $7}' pctools/linux/card_debug_pin`

	sed -i s'/jtag_ms = /jtag_ms = '$MS'/g' out/awk_debug_card0
	sed -i s'/jtag_ck = /jtag_ck = '$CK'/g' out/awk_debug_card0
	sed -i s'/jtag_do = /jtag_do = '$DO'/g' out/awk_debug_card0
	sed -i s'/jtag_di = /jtag_di = '$DI'/g' out/awk_debug_card0
	sed -i s'/uart_debug_tx =/uart_debug_tx = '$TX'/g' out/awk_debug_card0
	sed -i s'/uart_debug_rx =/uart_debug_rx = '$RX'/g' out/awk_debug_card0
	sed -i s'/uart_tx =/uart_tx = '$TX'/g' out/awk_debug_card0
	sed -i s'/uart_rx =/uart_rx = '$RX'/g' out/awk_debug_card0
	awk -f out/awk_debug_card0 out/sys_config.fex > out/a.fex
	rm out/sys_config.fex
	mv out/a.fex out/sys_config.fex
	echo "uart -> card0"
fi

#判断平台是不是dragonboard
#support dragonboard test emmc when boot from card0, add by liujianqiang 20140704
if [ "x${PACK_PLATFORM}" = "xdragonboard" ] ; then
    cp $TOOLS_DIR/awk_db_emmc out/awk_db_emmc		#拷贝
    awk -f out/awk_db_emmc out/sys_config.fex > out/a.fex	 #awk调用脚本, 然后将sys_config.fex 文件重定向到a.fex文件
    rm out/sys_config.fex									
    mv out/a.fex out/sys_config.fex  #
    echo "support dragonboard test emmc when boot from card0"
    echo "[mmc2_para]-sdc_used: 0 -> 1"
fi

#将\\boot-resource 替换成 (\反义符)boot-resource
sed -i 's/\\boot-resource/\/boot-resource/g' out/boot-resource.ini
sed -i 's/\\\\/\//g' out/image.cfg
sed -i 's/imagename/;imagename/g' out/image.cfg

#PACK_DEBUG = USRT0 
if [ "x${PACK_DEBUG}" = "xcard0" ] ; then
	if [ "x${PACK_SIG}" = "xsig" ] ; then
		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_DEBUG}_${PACK_SIG}.img"
	else
		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_DEBUG}.img"
	fi
else
	if [ "x${PACK_SIG}" = "xsig" ] ; then
		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_SIG}.img"
	else
		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}.img"
	fi
fi

if [ "x${PACK_MODE}" = "xdump" ] ; then
	IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_MODE}.img"
fi
if [ "x${PACK_FUNC}" = "xprvt" ] ; then
	IMG_NAME="${PACK_CHIP}_${PACK_FUNC}.img"
fi

echo "imagename = $IMG_NAME" >> out/image.cfg
echo "" >> out/image.cfg

}

当执行do_prepare函数执行完,执行到以下这个do_common。

function do_common()
{
	cd out/			
	busybox unix2dos sys_config.fex     	#busybox unix2dos 两个是全志闭源二进制脚本文件 处理sys_config.fex	busybox unix2dos 	
	sys_partition.fex	#busybox unix2dos 两个是全志闭源二进制脚本文件 处理 sys_partition.fex

	script sys_config.fex > /dev/null	#批量处理脚本命令
	script sys_partition.fex > /dev/null	#批量处理脚本命令
	cp sys_config.bin config.fex     

if [ "x${PACK_PLATFORM}" = "xdragonboard" ] ; then  #判断平台是否dragonboard
	busybox dos2unix test_config.fex 	
	cp test_config.fex boot-resource/
	busybox unix2dos test_config.fex
	script test_config.fex > /dev/null
	cp test_config.bin boot-resource/
fi

#update_boot0  也是全志闭源命令
	update_boot0 boot0_nand.fex		sys_config.bin NAND > /dev/null  
	update_boot0 boot0_sdcard.fex	sys_config.bin SDMMC_CARD > /dev/null

#update_boot0  也是全志闭源命令
	update_uboot u-boot.fex  		sys_config.bin > /dev/null
	update_fes1  fes1.fex			sys_config.bin > /dev/null
	update_mbr sys_partition.bin 4 > /dev/null

#fsbuild   也是全志闭源命令
		fsbuild boot-resource.ini split_xxxx.fex > /dev/null

	if [ "x${PACK_FUNC}" = "xprvt" ] ; then
		u_boot_env_gen env_burn.cfg env.fex > /dev/null
	else
		u_boot_env_gen env.cfg env.fex > /dev/null
	fi

	ln -s $LICHEE_OUT/arisc arisc.fex

}

#判断实现的那个版本的系统
if [ "x${PACK_MODE}" = "xdump" ] ; then
	do_pack_dump
elif [ "x${PACK_FUNC}" = "xprvt" ] ; then
	do_pack_prvt
else   							
	do_pack_${PACK_PLATFORM}
Fi

这里选择的是dragonboard。

function do_pack_dragonboard()
{
	printf "packing for dragonboard\n"  #打印信息

#建立软连接
ln -s ${LICHEE_OUT}/boot.img boot.fex
ln -s ${LICHEE_OUT}/rootfs.ext4 rootfs.fex

dragon image.cfg sys_partition.fex  #内存分区  
#dragon  这个也是全志闭源的脚本,没办法查看里面的操作
}

最后一个函数就是打印一下和修改一下IMG包
函数到现在的时候已经将 sun8iw5p1_dragonboard_vstar.img生成成功.上面的函数没有什么提示生成IMG文件
因为都是闭源脚本,没有办法探讨更加深刻一步。

	function do_finish()
	{	
		sun8iw5p1_dragonboard_vstar.img
	if [ -e ${IMG_NAME} ]; then
        mv ${IMG_NAME} ../${IMG_NAME}
        echo '----------image is at----------'
        echo -e '\033[0;31;1m'
        echo ${ROOT_DIR}/${IMG_NAME}
        echo -e '\033[0m'
    fi

	cd ..
	printf "pack finish\n"
}

最后也就分析到这个镜像固件生成了,里面的一些听说是闭源的脚本命令都存在这个目录下。(/lichee/tools/pack/pctools/linux)。这里只能期望大神帮忙分析了

关注微信公众号:一起进步
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全志lichee的pack命令 的相关文章

  • git push send-pack: unexpected disconnect while reading sideband packet

    错误信息 span class token function git span push 枚举对象中 span class token number 200 span 完成 对象计数中 span class token number 100
  • Tkinter教程之Pack篇

    39 39 39 Tkinter教程之Pack篇 39 39 39 Pack为一布局管理器 xff0c 可将它视为一个弹性的容器 39 39 39 1 一个空的widget 39 39 39 不使用pack coding cp936 fro
  • keil安装、注册及pack包安装

    keil安装 注册及pack包安装 一 keil安装包下载二 keil安装三 keil注册四 安装pack包方法一 xff1a keil中直接更新方法二 xff1a 官网下载pack包 前言 xff1a 刚开始接触keil时 xff0c 找
  • 全志V40/A40I的lichee 的编译

    首先了解一下全志编译lichee的步骤 回顾编译方式 xff1a 一般来说都是先配置一下芯片所包含的信息 source build sh config 编译 source build sh 摘要 xff1a 正文 上面执行build sh
  • keil5 Device Database 灰色问题

    使用 keil5 安装 GD 软件包后打开工程依然无法搜索到对应的芯片型号 GD32F450 The Project references device files or libraries that are not installed D
  • php.ini 中的 pack()非法十六进制数字警告

    我在 php 中使用 pack 时遇到一些问题 currencypair EUR USD buy sell buy alert device token array a a b message Your currencypair buy s
  • Lua - 打包 IEEE754 单精度浮点数

    我想用纯Lua创建一个函数来生成一个fraction 23位 一个exponent 8位 和一个sign 1 位 来自一个数字 因此该数字约等于math ldexp fraction exponent 127 sign 1 and 1 or
  • pack() 和 unpack() 在 Ruby 中如何工作

    在 Ruby 中为什么我们需要数组Packing 如何directive帮忙做这样的包装吗 我在控制台中运行了一些代码来查看指令在数组中的样子和方式 打包 但是每个指令的输出都非常相同 那么它们的核心有何不同 irb main 003 0
  • C++ 相当于 Perl 中的“pack”

    我如何编写 C 代码来完成以下任务pack NPerl 中的选项有什么作用 我想将整数变量转换为某种二进制形式 以便unpack它的 N 选项返回整数变量 我的整数变量名称是时间戳 我发现它与htonl有关 但htonl timestamp
  • PHP Pack/unpack - 它可以处理可变长度字符串吗

    我一直试图弄清楚 Pack Unpack 的 PHP 实现是否可以做 Perl 版本能够做的事情 我希望能够用 PHP 实现的示例是 http perldoc perl org perlpacktut html String Lengths
  • Python 3 struct.pack() 打印奇怪的字符

    我正在测试 struct 模块 因为我想将带有字节 char 和 unsigned int 参数的简单命令发送到另一个应用程序 然而 在转换为小端无符号整数时 我发现了一些奇怪的事情 这些示例打印了正确的十六进制表示形式 gt gt gt
  • 您可以一次打包多个 Tkinter 小部件而不是单独打包它们吗?

    您创建一个初始根窗口 然后创建多个小部件 例如标签 按钮 事件 你必须将它们中的每一个打包 并且可以通过我所知道的几种方式来完成 Button root text Button1 command something pack or btn1
  • 如何使用 pack 或 grid 实现以下 Tkinter GUI 布局?

    这是我当前的跳棋游戏 GUI 布局 正如您所看到的 它由顶部的菜单 左侧的画布 用于绘制棋盘 右上角的工具栏 框架 其中有各种格式 导航按钮 以及使用的文本小部件组成 来注释动作 目前 我正在为小部件使用网格布局 这是我需要做的 当文本量大
  • 将 Perl 代码转换为 PHP

    我需要将以下 perl 函数转换为 php pack SSA12AC4L id loc name ar split get gt getIP time 60 60 我在 PHP 中使用以下代码 用于测试 echo pack SSA12AC4
  • Node.js 的打包/解包函数 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有类似python的struct模块为nodejs提供pack unpack功能的模块 我还没有找到
  • 基于 C++ 代码在 PHP 中创建字节数据并将其传递到套接字

    如果这个标题没有让你感到困惑 我会看看我能在这里做什么 我有一个 C DLL 的源代码 它将 TCP 流量传递到服务器 我相信所有相关的 C 代码如下 define HRD MSG SANITY1 0x1234ABCD define HRD
  • Python struct.pack() 用于列表中的各个元素?

    我想将列表中的所有数据打包到单个缓冲区中以通过 UDP 套接字发送 该列表相对较长 因此为列表中的每个元素建立索引非常繁琐 这是我到目前为止所拥有的 NumElements len data buf struct pack d NumEle
  • 在网格管理器中使用带有 Tkinter 的输入框?

    我正在尝试使用 Tkinter 制作一个基本的 GUI 并使用网格管理器在标签旁边有一个输入框 但是如果我将 grid 与 Entry 对象一起使用 则当我运行程序时 该窗口不会显示 当我使用 pack 时它确实有效 这很奇怪 因为我听说当
  • php pack:数据类型问题和结果验证

    我是 PHP 初学者 我的任务是构建命令 稍后将通过 UDP 发送到设备 运行 OSX PHP 5 5 3 8 为了创建二进制数据 我使用 pack 这是我的代码的示例
  • C++ 从模板参数中解压参数包

    如何实现下面我想要的 我要解压的参数包不在函数参数列表中 而是在模板参数列表中 include

随机推荐

  • AprilTag的使用、相关问题及解决方法

    使用棋盘格标定相机 安装标定功能包 span class token function sudo span span class token function apt get span span class token function i
  • 对接海康综合安防管理平台经验总结

    前言 xff1a 因业务需要对接海康威视的综合安防管理平台获得下属所管理的摄像头 xff0c 根据摄像头code获得监控视频流信息 1 详情可以浏览海康开放平台 xff0c 在官网上有对应的接入指南以及开放的API接口 前提是本地已部署了海
  • 【环境配置】Visual Studio opencv配置

    需求 在Visual Studio环境中编写C 43 43 代码 xff0c 同时可以调用OpenCV的相关代码 1 安装OpenCV 访问 opencv 官网下载对应平台的库文件 注意 xff1a Visual Studio和OpenCV
  • MySQL常见用法

    文章目录 一 时间类1 1 DATE SUB 函数1 2 NOW CURDATE CURTIME DATE 函数1 3 实战 二 统计类三 字符类3 1 LOCATE 函数3 2 concat 函数3 3 concat ws 函数3 4 g
  • 牢记公式,ardupilot EKF2就是纸老虎(四)!

    版权声明 xff1a 本文为博主原创文章 xff0c 转载请附上博文链接 xff01 四 一睹EKF2芳容 因为篇幅过长 xff0c 写的一些公式会乱码 xff0c 没办法只能把 牢记公式 xff0c ardupilot EKF2就是纸老虎
  • Java Optional使用

    文章目录 Optional一 Optional 简介二 创建 Optional 实例2 1 empty 方法2 2 of 方法2 3 ofNullable 方法 三 Optional的使用3 1 访问 Optional 对象的值3 1 1
  • 正则表达式:基础详解以及在Java中的使用

    文章目录 一 正则表达式1 1 正则表达式中的特殊字符1 2 正则表达式所支持的合法字符1 3 方括号表达式1 4 边界匹配符1 5 三种模式的数量表示符 二 应用2 1 String 类2 2 Pattern 类和 Matcher 类 一
  • Python学习:关键字global和nonlocal的用法说明

    一 global global关键字用来在函数或其他局部作用域中使用全局变量 1 1 如果局部要对全局变量修改 xff0c 而不使用global关键字 count 61 0 def global test count 43 61 1 pri
  • Python:flask框架下前后端的数据交互

    文章目录 前提 一 前端发送数据 xff0c 后端接受数据1 1 路由传参数 数据 1 2 表单提交 二 后端发送数据 xff0c 前端接受数据 前提 后端 xff1a python 的 flask 框架 前端 xff1a html css
  • Python关于None的报错:'NoneType' object is not iterable和cannot unpack non-iterable NoneType object

    文章目录 一 TypeError 39 NoneType 39 object is not iterable xff08 类型错误 xff1a 39 NoneType 39 对象不是可迭代的 xff09 二 TypeError cannot
  • Git:合并分支----git merge命令应用的三种情景

    文章目录 一 git merge 命令应用的三种情景1 1 快进 无冲突 1 2 非 快进 xff0c 修改不同文件 无冲突 1 3 非 快进 xff0c 修改相同文件 有冲突 一 git merge 命令应用的三种情景 1 1 快进 无冲
  • Git:远程分支----git fetch命令的使用

    git fetch 命令的使用 从远程主机克隆 Git 的 clone 命令会为你自动将远程主机命名为 origin xff0c 拉取它的所有数据 xff0c 创建一个指向它的 master 分支的指针 xff0c 并且在本地将其命名为 o
  • Git:移除文件----git rm命令的使用

    文章目录 一 git rm 命令使用1 1 rm 命令1 2 git rm 命令1 3 git rm f 命令1 4 git rm cached 命令 一 git rm 命令使用 Git 本地数据管理 xff0c 大概可以分为三个区 xff
  • 【OpenMv小车】OpenMv追小球的小车之pid调用

    pid py gt gt https github com wagnerc4 flight controller blob master pid py openmv 官网 xff1a http book openmv cc project
  • 【深入理解C++】函数模板作为成员函数

    文章目录 1 普通类的成员函数模板2 类模板的成员函数模板 1 普通类的成员函数模板 不管是普通类还是类模板 xff0c 它们的成员函数都可以是函数模板 xff0c 称为成员函数模板 xff0c 但不可以是虚函数 xff0c 否则编译器报错
  • QGroundControl开发之使用自定义mavlink

    工具 对QGC进行二次开发时 xff0c 常常会遇到想使用自定义mavlink的情况 xff0c 但不像APM那样编译命令会根据xml文件自动生成mavlink协议 QGC似乎不能自动生成mavlink协议 xff08 之前试过似乎不能自动
  • 字符串连接 (c语言)

    题目描述 将给定的字符串连接起来 书中的算法描述如下 xff1a 图 xff1a 字符串连接算法 输入描述 三对字符串 xff0c 每对字符串占一行 xff0c 用空格隔开 每个字符串只包含数字和英文字母大小写且长度不超过100 输出描述
  • STM32—UART中断收发 Day4

    软件 xff1a STM32CubeMX xff0c MDK ARM 硬件 xff1a 蓝桥杯物联网Lora开发板 xff0c 板载芯片STM32L071 一 STM32CubeMX配置 1 先在连接 xff08 Connectivity
  • 虚拟机出现command XXX is available in /bin/ls问题

    问题 xff1a 使用本地的shell命令时候 The command could not be located because 39 usr bin bin 39 is not included in the PATH environme
  • 全志lichee的pack命令

    全志lichee目录打包命令流程 pack 将打包命令传进去build sh脚本里面 查看buildsh里面的脚本命令 其实里面的脚本还是较为简单地的 xff0c 仅仅是作为一个过渡 xff0c 然后就跑进去buildroot script