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

2024-05-24 07:20

本文主要是介绍集成构建流程之根文件系统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 ]; thenif [ "$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 ]]; thenMILKV_BOARD="${MILKV_BOARD_ARRAY[$((index - 1))]}"    	# 确认目标单板elseif [[ ${MILKV_BOARD_ARRAY[@]} =~ (^|[[:space:]])"${1}"($|[[:space:]]) ]]; then	# 检索数据MILKV_BOARD_ARRAY,查找匹配的单板MILKV_BOARD=${1}				# 确认目标单板
...									# 其他参数检查MILKV_BOARD_CONFIG=device/${MILKV_BOARD}/boardconfig.sh	# 单板配置文件get_toolchainif [ ! -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_envsource ${MILKV_BOARD_CONFIG}							# 加载单板配置脚本,Duo S为:device/milkv-duos-sd/boardconfig.shsource build/${MV_BUILD_ENV} > /dev/null 2>&1         # 加载环境变量配置脚本: build/milkvsetup.shdefconfig ${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_allbuild_all										#   完整编译
milkv_pack

通用shell函数定义脚本

#---- build/common_functions.sh
function defconfig()		# defconfig依据单板配置文件推导出.config文件board=$1chip_arch=`"${BUILD_PATH}/scripts/boards_scan.py" --get-chip-arch --board_name ${board}`# if input is chip series, then list boards by chip seriesif [ "${chip_arch}" != "" ]; then_call_kconfig_script "${FUNCNAME[0]}" "${BUILD_PATH}/boards/${chip_arch}/${board}/${board}_defconfig"script=$1shift    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.shfunction pack_rootfs		# 打包根文件系统,含根文件系统Buildroot的编译...cd "$BUILD_PATH" || returnmake rootfs										# 执行make操作,编译Buildroot,查看文件:build/Makefile

通用环境变量配置脚本

#---- build/milkvsetup.sh
function cvi_setup_env()		# 环境变量设置,截取Buidroot相关...# buildroot configexport BR_DIR="$TOP_DIR"/buildroot-2021.05export BR_BOARD=${MV_BOARD}_${SDK_VER}export BR_OVERLAY_DIR=${BR_DIR}/board/${MV_VENDOR}/${MV_BOARD}/overlayexport BR_DEFCONFIG=${BR_BOARD}_defconfig            	# Buildroot配置文件export BR_ROOTFS_DIR="$OUTPUT_DIR"/tmp-rootfsexport 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_datapack_system || return $?copy_toolspack_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工具执行编译...

这篇关于集成构建流程之根文件系统Buidroot的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997749

相关文章

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public