首页 > 其他分享 >buildCentral配置aarch64

buildCentral配置aarch64

时间:2023-05-24 10:12:56浏览次数:43  
标签:aarch64 配置 Wno linux tools VirtualBox buildCentral

一、测试环境

二、基础软件安装

三、aarch64环境配置

四、buildCentral环境配置

五、HelloWorld应用

一、测试环境

虚拟机版本:VirtualBox 7.0
系统版本:Ubuntu 18.04

 

二、基础软件安装

  1. 通用软件安装
    $sudo apt install git
    $sudo apt install openssh-server
    $sudo apt-get install python-networkx
    $sudo apt-get install python-simplejson
  2. 指定软件安装(我用的环境是项目环境,从Docker里面导出的环境,所以有些软件需要安装高版本)

    前往 CMake 官网(https://cmake.org/download/)下载最新版本的 cmake,我下载的是cmake-3.26.3.tar.gz

    l@l-VirtualBox:~/tools$ tar -xvzf cmake-3.26.3.tar.gz
    l@l-VirtualBox:~/tools$ cd cmake-3.26.3/
    l@l-VirtualBox:~/tools/cmake-3.26.3$ ./configure 
    l@l-VirtualBox:~/tools/cmake-3.26.3$ make
    l@l-VirtualBox:~/tools/cmake-3.26.3$ sudo make install

    前往 OpenSSL 官网(https://www.openssl.org/source/)下载最新版本的openssl,我下载的是openssl-3.1.0.tar.gz

    l@l-VirtualBox:~/tools$ tar -xvzf openssl-3.1.0.tar.gz 
    l@l-VirtualBox:~/tools$ cd openssl-3.1.0/
    l@l-VirtualBox:~/tools/openssl-3.1.0$ ./Configure 
    l@l-VirtualBox:~/tools/openssl-3.1.0$ make
    l@l-VirtualBox:~/tools/openssl-3.1.0$ sudo make install
  3. Docker环境安装(我用的环境是项目环境,从Docker里面导出的环境,所以需要安装Docker环境,非必须

    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/dists/bionic/pool/stable/amd64/  通过该网址下载:containerd.io_1.2.5-1_amd64.deb、docker-ce-cli_18.09.6~3-0~ubuntu-bionic_amd64.deb与docker-ce_18.09.6~3-0~ubuntu-bionic_amd64.deb

    l@l-VirtualBox:~/tools$ sudo dpkg -i containerd.io_1.2.5-1_amd64.deb
    l@l-VirtualBox:~/tools$ sudo dpkg -i docker-ce-cli_18.09.6~3-0~ubuntu-bionic_amd64.deb
    l@l-VirtualBox:~/tools$ sudo dpkg -i docker-ce_18.09.6~3-0~ubuntu-bionic_amd64.deb

    https://ubuntu.pkgs.org/18.04/ubuntu-main-amd64/libltdl7_2.4.6-2_amd64.deb.html 通过该网址下载:libltdl7_2.4.6-2_amd64.deb

    l@l-VirtualBox:~/tools$ sudo dpkg -i libltdl7_2.4.6-2_amd64.deb
  4. 如果,没有对应的Docker环境,可以通过网址下载aarch64压缩包(如果没有项目的Docker环境)

    https://releases.linaro.org/components/toolchain/binaries/ 通过该网址,选择合适的aarch64版本,然后将其解压到/opt目录下,剩下的步骤与Docker导出后的操作一样。

三、aarch64环境配置

  1. 将aarch64环境导出到外部环境
    root@3415e46d856d:~# scp -r /opt/aarch64-linux/ l@<本机IP>:/home/l/workspace/
  2. 将环境拷贝到/opt目录
    l@l-VirtualBox:~/workspace$ sudo cp -r aarch64-linux/ /opt/

四、buildCentral环境配置

  1. 源码下载

    https://github.com/jeremyczhen/buildCentral 该网址,如果git clone https://github.com/jeremyczhen/buildCentral不行,请检查一下网络,如果还是不能下载,直接下载压缩包也可以。

    这个地方有个问题:如果代码是在windows下clone的,所有文件的编码都是dos。这种情况下,在Ubuntu下编译,会出现错误:

    mk: /bin/bash^M: bad interpreter: No such file or directory

    如要解决这个问题,需要做如下操作

    l@l-VirtualBox:~/buildCentral$ sudo apt-get install dos2unix
    l@l-VirtualBox:~/buildCentral$ find ./ -type f -exec dos2unix {} \;

    注意:命令中"\;"不是错误输入,是必须的

  2. 配置编译环境 -- 删除多余配置
    l@l-VirtualBox:~/buildCentral$ vim project/build/build_central.cfg

    打开该文件,找到并删除如下软件包,我们只是运行一个helloWorld,其它的软件都不需要

    > protobuf
    > fdbus
    > protobus
    > fdbus.example
    > pb.example
  3. 配置编译环境 -- 增加编译脚本
    l@l-VirtualBox:~/buildCentral$ vim build.sh 
    
    
    #!/bin/bash
    root_dir=$(pwd)
    application_dir=${root_dir}
    out_dir=${root_dir}/output/workspace
    
    function buildApp(){
            cd ${root_dir}
            cd $application_dir
            source /opt/aarch64-linux/environment-setup-aarch64-linux
            export PATH=${root_dir}/tools/buildCentral/install:$PATH
            export LD_LIBRARY_PATH=/opt/aarch64-linux/sysroots/aarch64-linux/lib64:$LD_LIBRARY_PATH
            mk -c
            mk -bcd
            cd ${root_dir}
    
    }
    
    buildApp
    
    
    l@l-VirtualBox:~/buildCentral$ chmod 77 build.sh 
  4. 配置编译环境 -- 配置aarch64编译器

    配置project路径之下的build_central.cfg 

    l@l-VirtualBox:~/buildCentral$ vim project/build/build_central.cfg 
        "DEFAULT_TARGET" : "aarch64-linux",
        "PACKAGES-PER-ARCH" : {
            ......
            "linux" : {
                ......
            },
            "aarch64-linux" : {
                "helloWorld" : {
                    "C_FLAGS" : "-Wno-error",
                    "CXX_FLAGS" : "-Wno-error -g -O0"
                }
            }
        },
        "BUILD_VARIANTS" : {
            .......
            "linux" : {
                ......
            },
            "aarch64-linux" : {
                "DEFAULT_VARIANT" : "default",
                "VARIANTS" : {
                    "default" : {
                        "MACRO" : "PLATFORM_HIGH_LOCAL",
                        "GROUPS" : ["aarch64-linux"]
                    }
                }
            }
        }
        "TARGETS" : {
            ......
            "linux" : {
               ......
            },
            "aarch64-linux" : {
                "DESCRIPTION" : "build for aarch64-linux"
            }
        },
        "GROUPS" : {
            ......
            "common-host" : {
                ......
            },
            "aarch64-linux" : {
                "PACKAGES" : [
                    "helloWorld"
                ]
            }
        },

    配置project路径之下的buildcentralrc

    l@l-VirtualBox:~/buildCentral$ vim project/build/buildcentralrc    
        
    { 
        ......
        "linux" : {
            ......
        },
        "aarch64-linux" : {
            "COMPILER_TYPE"     : "GNU",
            "TARGET_ARCH"       : "aarch64-linux-arm",
            "TARGET_OS"         : "LINUX",
            "C_FLAGS"           : "-fPIC -fms-extensions -Wno-write-strings -Wno-format-security -fno-short-enums -mlittle-endian -Wno-int-to-pointer-cast -Wno-format-truncation -Wno-int-in-bool-context -Wno-array-bounds -Wno-sign-compare -Wno-unused-variable -Wno-cpp -Wno-unused-function -Dlinux -Werror=return-type",
            "CXX_FLAGS"         : "-fPIC -fms-extensions -Wno-write-strings -Wno-format-security -fno-short-enums -mlittle-endian -Wno-int-to-pointer-cast -Wno-format-truncation -Wno-class-memaccess -Wno-int-in-bool-context -Wno-array-bounds -Wno-sign-compare -Wno-unused-variable -Wno-cpp -Wno-unused-function -Wno-format -Dlinux --std=gnu++11 -Wno-narrowing -frtti -fexceptions -Werror=return-type",
            "MACRO_DEF"         : {"__LINUX__" : null},
            "REL_FLAGS"         : "-O1",
            "DBG_FLAGS"         : "-g -O1",
            "SHA_LD_FLAGS"      : "-Wl,--hash-style=gnu",
            "EXE_LD_FLAGS"      : "-Wl,--hash-style=gnu",
            "LD_FLAGS"          : "-Wl,--hash-style=gnu",
            "OTHER_INC_PATH"    : [],
            "OTHER_LIB_PATH"    : [],
            "ENV_VAR" :         {}
        }
    }

     

五、HelloWorld应用

  1. 创建HelloWorld文件
    l@l-VirtualBox:~/buildCentral$ cd workspace/
    l@l-VirtualBox:~/buildCentral/workspace$ mkdir helloWorld
    l@l-VirtualBox:~/buildCentral/workspace$ cd helloWorld/
    l@l-VirtualBox:~/buildCentral/workspace/helloWorld$ vim main.c
    
    #include <stdio.h>
    
    int main(int argc, char ** argvv) {
        printf("Hello, World!\r\n");
        return 0;
    }
  2. 创建CMakeLists.txt,用于编译
    l@l-VirtualBox:~/buildCentral/workspace/helloWorld$ vim CMakeLists.txt 
    
    cmake_minimum_required(VERSION 2.8.4)
    
    project(helloWorld)
    set(BUILD_TYPE "static")
    
    ##########################################################################
    #                  Include buildCentral common rules                     #
    ##########################################################################
    include(${RULE_DIR}/rule_base.cmake)
    
    ##########################################################################
    #                Build rules for executable and library                  #
    # To build executable using:                                             #
    #   add_executable(executable_name, source_file, source_file, ...)       #
    # To build static library using:                                         # 
    #   add_library(library_name STATIC source_file, source_file, ...)       #
    # To build shared library using:                                         # 
    #   add_library(library_name SHARED source_file, source_file, ...)       #  
    ##########################################################################
    set(LIB_BUILD_TYPE "SHARED")
    set(LIB_INSTALL_TYPE "LIBRARY")
    
    IF(${TARGET_ARCH} MATCHES "arm")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -w -fpermissive  -Warray-bounds  -Werror")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -w  -Warray-bounds  -Werror")
    ENDIF()
    
    file(GLOB PRJ_SRC_LIST *.c)
    add_executable(${PROJECT_NAME} ${PRJ_SRC_LIST})
    install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION workspace/)

    其中,变量CMAKE_CXX_FLAGS、CMAKE_C_FLAGS,都是aarch64-linux目录下的环境变量所设置。

将编译生成的helloWorld,push主板,经测试,可以正常输出。

 

标签:aarch64,配置,Wno,linux,tools,VirtualBox,buildCentral
From: https://www.cnblogs.com/liuqiongcn/p/17420070.html

相关文章

  • Discourse 如何配置 MAXMIND 来对 IP 地址反向查询
     【配置MAXMIND,Discourse需要重新构建,这将会导致服务中断。】什么是MAXMIND和为什么我们需要使用这个服务Discourse使用 MAXMIND 来通过IP地址反向查询具体的物理地址。如果Discourse没有配置Maxmind’s数据库,我们看到的配置信息如下:或者在对Discourse容......
  • x32dbg/x64dbg使用配置点滴
    1、忽略异常,在选项->选项->异常中添加区间设置0~FFFFFFFF全忽略;2.查看模块基址 右键-在内存布局中转到3.类似OD的dd命令哪去了  百度大法了解到x64dbg中使用dump指令,效果如下......
  • IDEA配置jdk(或者IDEA代码报错The SDK is not specified for module)
    参考:https://blog.csdn.net/mask_boys/article/details/117385087今天敲代码时,出现一个错误,那就是TheSDKisnotspecifiedfor module,意思是没有为模块添加SDK,所以会出现如下错误 如何解决这个问题呢:首先:file-》projectStructure 然后 点击下划选项,然后就可以添加......
  • linux配置双网卡主备模式
    配置网卡1BOOTPROTO=noneONBOOT=yes新增MASTER=bond0新增SLAVE=yes配置网卡2BOOTPROTO=noneONBOOT=yes新增MASTER=bond0新增SLAVE=yestouch或者cp新虚拟网卡文件touchifcfg-bond0DEVICE=bond0ONBOOT=yesBOOTPROTO=noneIPADDR=NETMASK=GATEWAY=DNS1=DNS2=BONDING_OPTS="mode=1mii......
  • Maven安装与配置
    Maven安装与配置1.下载Mavenhttps://maven.apache.org/download.cgi这里面的第二个:2.配置Maven环境变量此电脑->右键属性->下面点击高级系统设置->点击环境变量设置->用户变量中新建:变量名:M2_HOME 变量值:Maven所在目录(比如:E:\apache-maven-3.9.2-bin\apache-maven-......
  • 小程序配置文件--全局配置文件
    1、pages进行页面的创建以及页面的一对一覆盖即,在pages里面进行路径的保存之后,会自动在文件里面进行相应的文件的创建;即,将路径顺序进行修改,第一个页面会自动成为首页,其余亦如此;2、window主要是关于导航栏样式以及界面样式的编写和设计,下面这张图片:这三条语句,都是导航栏的......
  • 代码混淆及android配置
    1什么是代码混淆百度百科解释:代码混淆(Obfuscatedcode)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。已经存在许多种功能各异的代码......
  • 快速打造图床-阿里云oss配置分享
    快速打造图床-阿里云oss配置分享1创建bucket1、打开oss控制平台,选择对象存储oss;2、点击创建bucket;3、根据提示创建bucket,如果是制作图床,选择将bucket设置为公开;4、进行bucket目录管理,新建目录;2oss秘钥管理点击获取accesskey管理,获取管理bucket的appid和appsecret;建议使用子用户进......
  • 容器时间同步配置
    1容器镜像制作时配置####1ubuntu系统RUNecho"Asia/shanghai">/etc/timezone;####2centos系统RUNcp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime2容器启动后配置####1ubuntu系统dockerexec[容器id]echo"Asia/shanghai">/etc/timezone;####2......
  • prometheus学习笔记-alertmanger告警配置
    以上是prometheus架构图,一个完整的监控流程是数据采集(exporter),采集到数据之后,做数据可视化(grafana),然后是监控告警部分。promethues的角色是数据的采集,存储,定制告警规则,数据的展示是grafna,告警则是借助alertmanger来实现。详细参考官方网站https://prometheus.io/docs/alertin......