RP-PX30平台 编译脚本

2024-04-03 23:32
文章标签 编译 平台 脚本 rp px30

本文主要是介绍RP-PX30平台 编译脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RP-PX30平台编译和原始的原厂编译还是有点不一样的,贴上make.sh

#!/bin/bash

MAKE_THEARD=`cat /proc/cpuinfo | grep "processor" | wc -l`  #获得主机CPU线程数量
MAKE_TOTAL=`cat /proc/meminfo | grep "MemTotal"  |  tr -cd "[0-9]"` #获得内存大小 按KB 算
MAKE_MEM=` expr $MAKE_TOTAL / 1048576` #内存字节数除以1048576 获得多少个G 的内存
#echo $MAKE_MEM


jvm_set_mem()# jvm 设置内存函数  设置 JACK_SERVER_VM_ARGUMENTS 并给出警告,小于8G内存不能编译
{
        if [ $MAKE_MEM -gt 32 ] #如果内存大于32G 
                then
                {
                        export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx32768m"
                }
        elif [ $MAKE_MEM -gt 16 ]
                then
                {
                        export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx16384m"
                }
        elif [ $MAKE_MEM -gt 8 ]
                then
                {
                        export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8192m"
                }
        elif [ $MAKE_MEM -ge 6 ]
                then
                {
                        export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
                }
        else
                echo "/***************************************************/" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "memory less than 7GB, can not compile" 
                echo "/***************************************************/" 
                exit 1
        fi
#./prebuilts/sdk/tools/jack-admin start-server
}

path_set()# 设置JDK路径 的 函数 source 一下编译环境envsetup.sh lunch 为 rk3326_evb-userdebug
{
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
#    export JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

    source build/envsetup.sh
    lunch rk3326_evb-userdebug
}

if [ $1 == "clean" ]#如果第一个参数是 clean, 比如make.sh clean
    then
    {
        if [ $2 == "u-boot"  -o $2 == "u-boot/" -o $2 == "uboot" ]#怕你多打少打,让你兼容一下
            then
            {
                echo make clean u-boot
                pushd u-boot/
                make distclean
                popd
                pushd linux_update/rockdev/
                rm MiniLoaderAll.bin
                popd
                pushd linux_update/rockdev/Image/
                rm trust.img uboot.img
                popd
        }
        elif [ $2 == "kernel" -o $2 == "kernel/" ]#怕你多打少打,让你兼容一下
            then
            {
                    echo make clean kernel
                pushd kernel/
                make clean
                popd
                pushd linux_update/rockdev/Image/
                rm kernel.img resource.img
                popd
        }
        elif [ $2 == "android" -o $2 == "android/" ]#怕你多打少打,让你兼容一下
            then
            {
                    echo make clean android
                path_set
                make clean
                pushd linux_update/rockdev/Image/
                rm misc.img boot.img recovery.img system.img
                popd    
                rm out -rf
            }
        else#如果你执行./make.sh clean 那全干掉
            {
                    echo make clean u-boot
                pushd u-boot/
                make distclean
                popd
                    echo make clean kernel
                pushd kernel/
                make clean
                popd
                    echo make clean android
                path_set
                make clean
                rm out -rf
                pushd rockdev/Image-rk3326_evb/
                rm *.img
                popd
                popd linux_update/rockdev/
                rm MiniLoaderAll.bin update.img
                popd
                pushd linux_update/rockdev/Image/
                rm kernel.img resource.img misc.img boot.img recovery.img system.img update.img trust.img uboot.img
                popd
                echo clean Img oK
            }
        fi
    }
elif [ $1 == "u-boot" -o $1 == "u-boot/"  -o $1 == "uboot" ]#如果是执行uboot编译
    then
    {
        pushd u-boot/
        make mrproper #清配置,清编译文件
        ./make.sh evb-px30 -j8 #编译, 这里怎么把线程加进去了,这如果是4线程的CPU呢
        if [ $? -eq 0 ]; then #如果编译没报错
            echo "Build uboot ok!"
        else
            echo "Build uboot failed!"
            exit 1
        fi
        popd
    }
elif [ $1 == "kernel" -o $1 == "kernel/" ] #如果是执行内核编译
    then
    {
        pushd kernel/

        if [ ! -e .config ]; then #如果没有配置文件,加载默认配置文件
            make ARCH=arm64 rpdzkj_px30_defconfig 
        fi

        make ARCH=arm64 rp-px30.img -j$MAKE_THEARD #多线程编译
        #make ARCH=arm64 px30-evb-ddr3-v10.img -j8
        if [ $? -eq 0 ]; then  #如果编译没报错
            echo "Build kernel ok!"
        else
            echo "Build kernel failed!"
            exit 1
        fi
        popd
        cp kernel/resource.img rockdev/Image-rk3326_evb/
        cp kernel/kernel.img rockdev/Image-rk3326_evb/
        #path_set
        #./mkimage.sh
    }
elif [ $1 == "android" -o $1 == "android/" ] #如果编译安卓
    then
    {
        jvm_set_mem #配置java 参数
        path_set #配置java路径
        make -j $MAKE_THEARD  #多线程编译
        if [ $? -eq 0 ]; then #如果编译没有报错 
            echo "Build android ok!"
        else
            echo "Build android failed!"
            exit 1
        fi
        cp kernel/drivers/net/wireless/rockchip_wlan/rtl8723bu/wlan.ko out/target/product/rk3326_evb/vendor/lib/modules/wifi/8723bu.ko
        ./mkimage.sh 
    }
elif [ $1 == "ota" ] #如果编译OTA
    then
    {
        path_set
        ./mkimage.sh ota
    }
else #如果只执行 ./make.sh 那么全部编译到底
    {
        pushd u-boot/
        make mrproper
        ./make.sh evb-px30 -j8
        if [ $? -eq 0 ]; then
            echo "Build uboot ok!"
        else
            echo "Build uboot failed!"
            exit 1
        fi
        popd
        
        pushd kernel/
        if [ ! -e .config ]; then
            make ARCH=arm64 rpdzkj_px30_defconfig 
        fi
        make ARCH=arm64 rp-px30.img -j $MAKE_THEARD
        #make ARCH=arm64 px30-evb-ddr3-v10.img -j8
        if [ $? -eq 0 ]; then
            echo "Build kernel ok!"
        else
            echo "Build kernel failed!"
            exit 1
        fi
        popd
        jvm_set_mem
        path_set
        make -j $MAKE_THEARD  
        if [ $? -eq 0 ]; then
            echo "Build android ok!"
        else
            echo "Build android failed!"
            exit 1
        fi
        cp kernel/drivers/net/wireless/rockchip_wlan/rtl8723bu/wlan.ko out/target/product/rk3326_evb/vendor/lib/modules/wifi/8723bu.ko
        ./mkimage.sh 
        . rpupdate.sh #生成update.img
    }
fi

 

 

 

 

 

这篇关于RP-PX30平台 编译脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删