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、能保证重要任务服务,避免不重要任务服务一直占用系统
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(文件列表)