0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Milk-V Duo开发板免费体验 编译环境搭建

范成功 来源:wakojosin 作者:wakojosin 2023-07-12 09:09 次阅读

整体来说环境搭建还是比较简单的,我用的是wsl的ubuntu 18.04,直接下载了duo-buildroot-sdk-20230616.zip这个基于buildroot的SDK,然后确保安装了cmake、device-tree-compiler、ninja、mtools、genext2fs等工具,原则上就是报错缺什么就装什么。

通过命令unzip duo-buildroot-sdk-20230616.zip -d ~/work/milkv/duo解压duo-buildroot-sdk-20230616.zip到~/work/milkv/duo文件夹里面。

wKgZomStXiWAFXbzAAAcJGw17eQ689.png

然后通过运行build_milkv.sh进行编译和构建镜像,build_milv.sh脚本的内容如下:

#!/bin/bash

MILKV_BOARD_ARRAY=
MILKV_BOARD_ARRAY_LEN=
MILKV_BOARD=
MILKV_BOARD_CONFIG=

MILKV_BOARD_DIR=milkv


function print_info()
{
  printf "e[1;32m%se[0mn" "$1"
}

function print_err()
{
  printf "e[1;31mError: %se[0mn" "$1"
}


# 自动检测并下载工具集
function get_toolchain()
{
  if [ ! -d host-tools ]; then
    print_info "Toolchain does not exist, download it now..."

    toolchain_url="https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz"
    echo "toolchain_url: ${toolchain_url}"
    toolchain_file=${toolchain_url##*/}
    echo "toolchain_file: ${toolchain_file}"

    wget ${toolchain_url} -O ${toolchain_file}
    if [ $? -ne 0 ]; then
      print_err "Failed to download ${toolchain_url} !"
      exit 1
    fi

    if [ ! -f ${toolchain_file} ]; then
      print_err "${toolchain_file} not found!"
      exit 1
    fi

    print_info "Extracting ${toolchain_file}..."
    tar -xf ${toolchain_file}
    if [ $? -ne 0 ]; then
      print_err "Extract ${toolchain_file} failed!"
      exit 1
    fi

    [ -f ${toolchain_file} ] && rm -rf ${toolchain_file}

  fi
}


# 这里得到了支持的板子MILKV_BOARD_ARRAY=milkv-duo
function get_available_board()
{
  MILKV_BOARD_ARRAY=( $(cd ${MILKV_BOARD_DIR}/; ls boardconfig*.sh | sort | awk -F"[-.]" -v OFS='-' '{print $2, $3}') )
  #echo ${MILKV_BOARD_ARRAY[@]}

  MILKV_BOARD_ARRAY_LEN=${#MILKV_BOARD_ARRAY[@]}
  if [ $MILKV_BOARD_ARRAY_LEN -eq 0 ]; then
    echo "No available board config"
    exit 1
  fi

  #echo ${MILKV_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/n/. /"
}

function choose_milkv_board()
{
  # TODO
  echo "choose"
}

function prepare_env()
{
  source ${MILKV_BOARD_CONFIG}

  source build/${MV_BUILD_ENV} > /dev/null 2>&1
  defconfig ${MV_BOARD_LINK} > /dev/null 2>&1

  echo "OUTPUT_DIR: ${OUTPUT_DIR}"  # @build/milkvsetup.sh
}


# 执行编译
function milkv_duo_build()
{
  # clean old img
  old_image_count=`ls ${OUTPUT_DIR}/*.img* | wc -l`
  if [ ${old_image_count} -ge 0 ]; then
    pushd ${OUTPUT_DIR}
    rm -rf *.img*
    popd
  fi


# 不需要重新编译的时候可以把clean_all注释掉,否则每次都会重新编译
  clean_all
  build_all
  if [ $? -eq 0 ]; then
    print_info "Build board ${MILKV_BOARD} success!"
  else
    print_err "Build board ${MILKV_BOARD} failed!"
    exit 1
  fi
}


# 打包镜像
function milkv_duo_pack()
{
  pack_sd_image

  [ ! -d out ] && mkdir out

  image_count=`ls ${OUTPUT_DIR}/*.img | wc -l`
  if [ ${image_count} -ge 0 ]; then
    mv ${OUTPUT_DIR}/*.img out/

    # rename milkv-duo.img file with time
    pushd out
    for img in *.img
    do
      if [ "${img}" == "${MILKV_BOARD}.img" ]; then
        mv $img ${MILKV_BOARD}-`date +%Y%m%d-%H%M`.img
      fi
    done
    popd

    # show latest img
    latest_img=`ls -t out/*.img | head -n1`
    if [ -z "${latest_img// }" ]; then
      print_err "Gen image failed!"
    else
      print_info "Gen image successful: ${latest_img}"
    fi
  else
    print_err "Create sd img failed!"
    exit 1
  fi
}

get_toolchain

get_available_board

if [ $MILKV_BOARD_ARRAY_LEN -eq 1 ]; then
  # Only one board
  print_info "Ready to build: ${MILKV_BOARD_ARRAY[0]}"
  MILKV_BOARD=${MILKV_BOARD_ARRAY[0]}
else
  # no arg
  if [ $# -lt 1 ]; then
    choose_milkv_board || exit 0
  fi

  # with board name
  if [ $# -ge 1 ]; then
    if [[ ${MILKV_BOARD_ARRAY[@]} =~ (^|[[:space:]])"${1}"($|[[:space:]]) ]]; then
      MILKV_BOARD=${1}
      echo "$MILKV_BOARD"
    else
      print_err "${1} not supported!"
      echo "Available boards: [ ${MILKV_BOARD_ARRAY[@]} ]"
      exit 1
    fi
  fi
fi

if [ -z "${MILKV_BOARD// }" ]; then
  print_err "No board specified!"
  exit 1
fi

export MILKV_BOARD="${MILKV_BOARD}"

MILKV_BOARD_CONFIG=${MILKV_BOARD_DIR}/boardconfig-${MILKV_BOARD}.sh

if [ ! -f ${MILKV_BOARD_CONFIG} ]; then
  print_err "${MILKV_BOARD_CONFIG} not found!"
  exit 1
fi

prepare_env

milkv_duo_build
milkv_duo_pack

脚本加了一些简单的注释,大体逻辑就是

  1. 检测并下载工具集;
  2. 选择板子;
  3. 根据板子到处环境;
  4. 执行编译;
  5. 构建镜像;

最后脚本执行完成会输出一个构建img成功的信息,如下图绿色的内容,时间戳会根据构建时间而不一样。

wKgZomStYdyAZh6aAAAhlQYnTNE650.png

内核开发环境可以用了,可以学习内核代码了,可以通过Windows下的vscode进行编辑然后在vscode终端里面进行编译。

如果编译过程遇到类似'Your PATH contains spaces, TABs, and/or newline (n) characters.'的错误,是因为WSL默认会自动添加Windows环境变量到wsl中,可以通过关闭自动添加,或是重新设置PATH来解决。我是选择重新设置环境变量,即将带空格的windows环境变量删除,因为我需要使用windows下的vscode,如果关闭自动添加,就用不了windows下的软件了。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 硬件设计
    +关注

    关注

    18

    文章

    367

    浏览量

    44450
  • 开发板
    +关注

    关注

    25

    文章

    4735

    浏览量

    95957
  • 编译
    +关注

    关注

    0

    文章

    645

    浏览量

    32649
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1002

    浏览量

    45364
  • 环境搭建
    +关注

    关注

    0

    文章

    53

    浏览量

    9027
  • Milk-V Duo
    +关注

    关注

    2

    文章

    28

    浏览量

    154
收藏 人收藏

    评论

    相关推荐

    Milk-V Duo】1、入门篇

    入门milk-V Duo开发板
    的头像 发表于 07-07 11:21 1392次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b>】1、入门篇

    Milk-V Duo开发板免费体验】Milk-V初次使用

    Milk-V Duo开发板免费体验】Milk-V初次使用
    的头像 发表于 08-08 09:03 2248次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b><b class='flag-5'>开发板</b><b class='flag-5'>免费</b>体验】<b class='flag-5'>Milk-V</b>初次使用

    Milk-V Duo 开发板免费体验】 + 系统镜像烧录以及登录

    Milk-V Duo 开发板免费体验】+系统镜像烧录以及登录 一.Milk-V Duo
    发表于 07-11 11:43

    Milk-V Duo 开发板免费体验】Milk-V Duo之开箱初体验

    一,第一印象 外观设计方面,Milk-V Duo以简约而精致的风格为主,采用沉金工艺,给人一种高端大气的感觉。开发板的尺寸小巧,便于携带和使用,在我拿到的所有的开发板中,也只有
    发表于 07-16 01:15

    Milk-V Duo 开发板免费体验】0. duo编译环境搭建

    ://community.milkv.io/ 二、试用信息 试用:【RISC-V 专题】Milk-V Duo 开发板首发免费试用 - 电子技
    发表于 07-22 22:03

    Milk-V Duo 开发板免费体验】Milk-V Duo 开发板学习初体验

    第一次申请成功,心情很是喜悦,经过几天的等待收到了我心心念念的Milk-V Duo 开发小板。 迫不及待的开始了学习初体验,先牺牲下爱车的行车记录仪SD卡贡献下 1、直接下载镜像
    发表于 07-28 15:58

    Milk-V Duo 开发板免费体验】开发板使用3

    接上文 【Milk-V Duo 开发板免费体验】开发板使用1 |和接上文 【Milk-V
    发表于 07-29 08:17

    Milk-V Duo 开发板免费体验】Windows开发环境搭建

    感谢电子发烧友论坛和算能提供的Milk-V Duo 开发板试用机会。 Milk-V Duo的标准开发
    发表于 07-29 09:10

    Milk-V Duo 开发板免费体验】milkv-duo 申请成功体验

    Duo都能为我们提供良好的开发环境和体验。 此外,开源社区的支持和资源也为我们提供了更多的可能性。他们可以通过与其他开发者分享经验和交流想法,共同探索
    发表于 07-29 14:31

    Milk-V Duo 开发板免费体验】初步体验 + 搭建开发环境

    链接依赖过去即可了,后续可以直接修改文件系统去烧录。【Milk-V Duo 开发板免费体验】OpenCV的交叉编译 - RISC-
    发表于 08-01 12:49

    Milk-V Duo 开发板免费体验】Python开发环境搭建

    Milk-V Duo是一款基于算能CV1800B芯片的开发板。 通过参与活动拿到一块试用,开发板身材小巧,大小和树莓派Pico相当,引脚也基本一致,但是功能更强大一些,能够运行基于LI
    发表于 08-06 15:49

    Milk-V Duo 开发板免费体验】(二)ubuntu下烧录linux系统到sd,并在milk开发版运行linux系统

    ([活动] # 【Milk-V Duo 开发板免费体验】(一)ubuntu编译环境
    发表于 08-11 19:55

    Milk-V Duo 开发板免费体验】Milk-V Duo 开发板初体验

    今天收到 ,打开快递的第一感觉就是非常精致小巧,一个黑色的小盒子及一块非常小巧但功能非常完善的开发板Milk-V Duo是一款基于算能 CV1800B芯片的MPU,能够运行基于LINUX
    发表于 08-18 00:26

    Milk-V Duo 开发板免费体验】4-Linux控制小车动作(原创)首发

    接上三篇: [接上两篇:【Milk-V Duo 开发板免费体验】3-Linux控制小车方向https://bbs.elecfans.com/jishu_2371135_1_1.html
    发表于 08-21 02:11

    Milk-V Duo 开发板免费体验】初体验及开箱视频

    刚刚收到开发板,给大家做个视频来初步了解以下Milk-V Duo 开发板Milk-V Duo
    发表于 08-22 23:59