集成构建流程之根文件系统Buidroot

编译流程

单板信息

#---- device/milkv-duos-sd/boardconfig.sh
export MV_BOARD=milkv-duos-sd
export MV_BOARD_CPU=cv1813h
export MV_VENDOR=milkv
export MV_BUILD_ENV=milkvsetup.sh
export MV_BOARD_LINK=cv1813h_milkv_duos_sd 

通用编译脚本:build.sh

#---- build.sh
...
get_available_board              	# 查看device目录下支持的单板
  MILKV_BOARD_ARRAY=( $(find device ... # 收集所有单板到数组MILKV_BOARD_ARRAY中
  ...

if [ $# -ge 1 ]; then
  if [ "$1" = "lunch" ]; then		# 脚本参数为lunch时,执行lunch动作
    choose_board || exit 0			
      ...
      read -p "Which would you like: " index	# 手动选择目标单板
      if [[ -n $index && $index =~ ^[0-9]+$ && $index -ge 1 && $index -le $MILKV_BOARD_ARRAY_LEN ]]; then
        MILKV_BOARD="${MILKV_BOARD_ARRAY[$((index - 1))]}"    	# 确认目标单板
  else
    if [[ ${MILKV_BOARD_ARRAY[@]} =~ (^|[[:space:]])"${1}"($|[[:space:]]) ]]; then	# 检索数据MILKV_BOARD_ARRAY,查找匹配的单板
      MILKV_BOARD=${1}				# 确认目标单板
...									# 其他参数检查

MILKV_BOARD_CONFIG=device/${MILKV_BOARD}/boardconfig.sh	# 单板配置文件

get_toolchain
  if [ ! -d host-tools ]; then    	# 如果不存在host-tools目录,下载相关工具链
    toolchain_url="https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz"
    wget ${toolchain_url} -O ${toolchain_file}

export MILKV_BOARD="${MILKV_BOARD}"

prepare_env
  source ${MILKV_BOARD_CONFIG}							# 加载单板配置脚本,Duo S为:device/milkv-duos-sd/boardconfig.sh
  source build/${MV_BUILD_ENV} > /dev/null 2>&1         # 加载环境变量配置脚本: build/milkvsetup.sh
  defconfig ${MV_BOARD_LINK} > /dev/null 2>&1			# 加载单板配置文件,Duo S为:build/boards/cv181x/cv1813h_milkv_duos_sd/cv1813h_milkv_duos_sd_defconfig
                                                        #   含Buildroot相关信息,文件:build/common_functions.sh
build_info
milkv_build										# 编译过程
  clean_all
  build_all										#   完整编译
milkv_pack

通用shell函数定义脚本

#---- build/common_functions.sh
function defconfig()		# defconfig依据单板配置文件推导出.config文件
  board=$1
  chip_arch=`"${BUILD_PATH}/scripts/boards_scan.py" --get-chip-arch --board_name ${board}`

  # if input is chip series, then list boards by chip series
  if [ "${chip_arch}" != "" ]; then
    _call_kconfig_script "${FUNCNAME[0]}" "${BUILD_PATH}/boards/${chip_arch}/${board}/${board}_defconfig"
      script=$1
      shift    
      cd $BUILD_PATH || return
      ${BUILD_PATH}/scripts/${script}.py $@			# 生成.config文件,对Duo S为:build/scripts/defconfig.py build/.../cv1813h_milkv_duos_sd_defconfig    
      cvi_setup_env || return $?					# Buildroot配置,文件:build/milkvsetup.sh

function pack_rootfs		# 打包根文件系统,含根文件系统Buildroot的编译
  ...
  cd "$BUILD_PATH" || return
  make rootfs										# 执行make操作,编译Buildroot,查看文件:build/Makefile

通用环境变量配置脚本

#---- build/milkvsetup.sh
function cvi_setup_env()		# 环境变量设置,截取Buidroot相关
  ...
  # buildroot config
  export BR_DIR="$TOP_DIR"/buildroot-2021.05
  export BR_BOARD=${MV_BOARD}_${SDK_VER}
  export BR_OVERLAY_DIR=${BR_DIR}/board/${MV_VENDOR}/${MV_BOARD}/overlay
  export BR_DEFCONFIG=${BR_BOARD}_defconfig            	# Buildroot配置文件
  export BR_ROOTFS_DIR="$OUTPUT_DIR"/tmp-rootfs
  export BR_MV_VENDOR_DIR=${BR_DIR}/board/${MV_VENDOR} 

function build_all()			# 完整编译
  build_uboot  || return $?
  build_kernel || return $?
  build_osdrv  || return $?
  build_middleware              || return $?
  pack_access_guard_turnkey_app || return $?
  pack_ipc_turnkey_app          || return $?
  pack_boot   || return $?
  pack_cfg    || return $?
  pack_rootfs || return $?						# 打包根文件系统
  pack_data
  pack_system || return $?
  copy_tools
  pack_upgrade

执行make,Makefile文件为:build/Makefile

#---- build/Makefile
...
br-rootfs-pack: export TARGET_OUTPUT_DIR=$(BR_DIR)/output/$(BR_BOARD)
br-rootfs-pack:
	$(call print_target)
	${Q}$(MAKE) -C $(BR_DIR) $(BR_DEFCONFIG) BR2_TOOLCHAIN_EXTERNAL_PATH=$(CROSS_COMPILE_PATH)	// 配置文件,Duo S为:milkv-duos-sd_musl_riscv64_defconfig
	${Q}$(BR_DIR)/utils/brmake -j${NPROC} -C $(BR_DIR)											// brmake工具执行编译
	...
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值