Adaptive Partitioning

qnx开源代码

GitHub - vocho/openqnx: mirror of git://git.code.sf.net/p/monartis/openqnx

http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.adaptivepartitioning.userguide/topic/about_howtouseguide_.html


ap是对进程和线程集合分配最小的系统资源,目前是对cpu控制,通过thread scheduler
1、能动态配置
2、在系统满载,可以保证对应partion 最小的系统资源;保证最小中断延迟
3、系统空闲时,可以将空闲partion的cpu 给到繁忙的partion
4、能保证重要任务服务,避免不重要任务服务一直占用系统

5、子进程和线程自动运行在父进程所在partion

6、By default, when you use the standard QNX Neutrino send-receive-reply messaging, message receivers automatically run in the partition of the message sender while they're processing that message. This means that all resource managers, such as drivers and filesystems, automatically bill CPU time (except overhead) to the budget of their clients.

aps show 可以查看系统是否运行ap

在QNX中镜像的编译是以build_file_tmpl(也就是以.build.tmpl为后缀的文件)为单元来实现的,且每个镜像对应一个img_name.build.tmpl。

一,QNX镜像编译

QNX的编译同样是由make来执行的,那么make的执行就离不开Makefile。在QNX中,镜像的编译还是从qnx/hlos_dev_qnx/app/qnx_ap/target/hypervisor/host/Makefile开始的,在Makefile中通过“bash create_variant_images.sh",调用执行create_variant_images.sh的执行过程中,会通过下面的语句来build各个镜像。

编译除system分区外的其他所有分区

create_variant_images.sh-> create_images.sh

. ${BSP_ROOT}/tools/build/image-builder.sh     [BSP_ROOT=qnx/hlos_dev_qnx/apps/qnx_ap]


. ${BSP_ROOT}/tools/build/image-builder.sh

VARIANT_NAME=`basename ${SOC_VARIANT} | sed "s/\..*//"`
build_ifs2()
{
    LIST="ifs_coreservices\
          ifs_audio_camera \
          ifs_display\
          ifs_graphics\
          ifs_ethernet\
          ifs_video\
          ifs_camera\
          ifs_disk"
    # build the host component images
    for build_file_tmpl in ${LIST}; do
        build_aifs ${build_file_tmpl} "-qvmhost" "" "${SOC_VARIANT}" "" "${BSP_ROOT}/target/hypervisor/host"
    done
    calc_size "__HOSTIFS2_RUNTIME_SIZE__" "131072" ${LIST}
    MKIFS_PATH=$MKIFS_PATH:./${OUT_DIR}
    build_aifs ifs_startup "" "" "${SOC_VARIANT}" "" "${BSP_ROOT}/target/hypervisor/host"
    build_aifs ifs2 "" "" "${SOC_VARIANT}" "${ext_name}" "${BSP_ROOT}/target/hypervisor/host"
}

build_mifs()
{

 ...

}

${BSP_ROOT}/tools/build/image-builder.sh
build_aifs()
{
    img_name=$1
    vm_variant=$2 # -qvmhost or -qvmguest
    mifs_ext=$3 # base image name extension 
    variant_config=$4 # file which has the multi guest config/single guest config file *_la.txt , *_lv.tx , _multi, etc
    guest_variant=$5 # _la , _lv 
    build_file_path=$6 #customer path , generic reference path

    img_ext=${mifs_ext}${guest_variant}
    build_file_tmpl=${img_name}.build.tmpl
    out_build_file=${img_name}${img_ext}.build;
    imgfile=${img_name}${img_ext}.img

    filepp -imacros ${SOC_CONFIG}  -imacros ${variant_config} -D__IMAGEFS__ -D__VARIANT_hyp__="${vm_variant}" -DVARIANT_${vm_variant:1} -D__SECURE_BOOT_SECPOL__=${SECURE_BOOT_SECPOL} -D__SECURE_BOOT_QTD__=${SECURE_BOOT_QTD} -D__SECURE_BOOT_QVB__=${SECURE_BOOT_QVB} -D__PERF_ENABLE__=${PERF_ENABLE} -D__MERKLE_ENABLE__=${MERKLE_ENABLE} -I${FILESETS} -I${FILESETS_CUST} -I${FILESETS_CUST_COMMON} -I${INSTALL_ROOT_nto}/usr/include -I${BSP_ROOT}/target/hypervisor/host  ${build_file_path}/build_files/${build_file_tmpl} > ./${OUT_DIR}/${out_build_file}
    if [ $? -ne 0 ]; then
        echo "filepp failed for $out_build_file"
        exit 1;
    fi

    mkifs -nn -v ./${OUT_DIR}/${out_build_file} ./${OUT_DIR}/${imgfile} -a "${vm_variant:1}${img_ext}" -o ./${OUT_DIR}
    if [ $? -ne 0 ]; then
        echo "mkifs failed for $out_build_file"
        exit 1;
    fi

    if [ ! -z ${HASHFILE+x} ]; then
        #Inject ifs2 hash into the startup manager application.
        hash=`sha256sum ${OUT_DIR}/${imgfile} | awk '{ print $1}'`
        echo "#define __${img_name}${mifs_ext}__hash__ \"${hash}\"" >> ${HASHFILE}
    fi

}

build_aifs_recovery()
{
    img_name=$1

mifs.build.tmpl

利用QNX的模块性和和可裁剪性,其嵌入过程一般是:

构建Buildfile -> 编译buildfile生成系统映象文件 -> 启动目标系统 ->嵌入式系统软件设计。

其中的关键是构建Buildfile[19]。通常一个嵌入式系统需要一个可启动的操作系统映象文件(OS Image)。对于基于QNX的嵌入式一个应用系统,就是根据所选择的CPU类型以及应用程序所需要的操作系统模块来定制嵌入式系统。构建Buildfile的过程就是配置操作系统映象的过程。简单来说Buildfile是一个产生映象文件所需遵守的一组规则、准则。Buildfile由三部分组成,其结构如下:

l        bootstrap script(启动引导脚本)

l        startup script(启动脚本)

l        file list(文件列表)

QNX 启动时创建aps调试分区

https://www.jianshu.com/p/80fe4e6ccd10

QNX的调度算法_零星调度-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值