[i.MX6Q][QNX Neutrino 6.6.0]调试笔记------Buildfile
来源:互联网 发布:淘宝图片转码 编辑:程序博客网 时间:2024/06/05 17:30
构建Buildfile -> 编译buildfile生成系统映象文件 -> 启动目标系统 ->嵌入式系统软件设计。
其中的关键是构建Buildfile。通常一个嵌入式系统需要一个可启动的操作系统映象文件(OS Image)。对于基于QNX的嵌入式一个应用系统,就是根据所选择的CPU类型以及应用程序所需要的操作系统模块来定制嵌入式系统。构建Buildfile的过程就是配置操作系统映象的过程。简单来说Buildfile是一个产生映象文件所需遵守的一组规则、准则。Buildfile由三部分组成,其结构如下:
l bootstrap script(启动引导脚本)
l startup script(启动脚本)
l file list(文件列表)
1.引导脚本
不同的CPU其启动的方式不同,相应的启动引导程序也就不同。启动引导脚本bootstrap script的作用就是配置和CPU相适应的微内核。一个典型的引导脚本如下:
[image=0x10800000][virtual=armle-v7,raw +compress] .bootstrap = { startup-imx6x-smart-device -v -WPATH=/proc/boot procnto-smp-instr -ae }
在这个例子中:
image=0x10800000-------->Imaged的加载地址;
virtual=armle-v7 -------->CPU类型
raw -------->产生Image的格式,我这里最后生成的就是 ifs-mx6q-sabresmart.raw
+compress -------->Image是否压缩
.bootstrap -------->固定名称,说明是一个启动脚本
startup-imx6x-smart-device-------->启动startup程序
PATH=/proc/boot -------->确定了PATH环境变量
procnto-smp-instr -------->微内核和进程管理器,包括QNX 6 微内核,进程管理,内存管理以及路径名管理,每个利用mkifs工具的可启动映象都必须具有procnto。
需要注意的是在bootstrap中,第一个可执行程序必须是startup-*,而最后一个必须是procnto!
2.启动脚本
+script] .script = { # Initialise the console procmgr_symlink ../../proc/bootbc.so.3 /usrb/ldqnx.so.2 TZ=EDT5EST display_msg Welcome to QNX Neutrino 6.6.0 on the i.mx6 Smart-Device (ARM Cortex-A9 MPCore) # Start some common servers pipe & slogger & ####################################################################### ## WatchDog utility ## If startup is given '-W' parameter then the 'wdtkick' utility MUST ## be uncommented below. ####################################################################### display_msg Starting watchdog... wdtkick #UART1 (/devr1) devc-sermx1 -e -F -S -c80000000 0x02020000,58 waitfor /devr1 4 reopen /devr1 display_msg " " # Start the main shell [+session] ksh /proc/boot/.console.sh &}在上面脚本中启动一些服务和驱动,在这里可以加载我们自己的应用程序,最后还启动了一个控制脚本,这控制脚本就是启动更多的服务和进程,例如屏幕,网卡,媒体播放等等
这里就是将所需要的文件打包到Image中,包括共享库,执行文件,图片等,共享库好说,默认的就指定在安装目录中搜索,所以直接在Buildfile中写上所需要的库名称即可,例如所以驱动程序都需要的标准C库(libc.so):
# include the C shared librarylibc.so #直接写一个名字可以了# create a symlink called ldqnx.so.2 to it[type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so #建立一个链接
[search=../install/armle-v7/usrb/graphics/iMX6X] /usrb/graphics/iMX6X/bwfdcfg-imx6x-lvds.so=libwfdcfg-imx6x-lvds.so[search=]指明文件的具体路径
[search=${QNX_TARGET}/usr] #指明具体路径/usr/share/qt530/lib=lib
在PC端通过以下两种方法可以确定一个可执行文件(以ping命令为例)所需要的依赖库:
# ldd `which ping`/usr/bin/ping:libsocket.so.3 => /lib/libsocket.so.3 (0xb8200000)libc.so.3 => /usr/lib/ldqnx.so.2 (0xb0300000)
②objdump utility
# objdump -x `which ping` | grep NEEDEDNEEDED libsocket.so.3NEEDED libc.so.3
[image=0x10800000][virtual=armle-v7,raw +compress] .bootstrap = {startup-imx6x-smart-device -v -WPATH=/proc/boot procnto-smp-instr -ae}[+script] .script = { # Initialise the console procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2 TZ=EDT5EST display_msg Welcome to QNX Neutrino 6.6.0 on the i.mx6 Smart-Device (ARM Cortex-A9 MPCore) # Start some common servers pipe & slogger & display_msg Starting watchdog... wdtkick #UART1 (/dev/ser1) devc-sermx1 -e -F -S -c80000000 0x02020000,58 waitfor /dev/ser1 4 reopen /dev/ser1 ####################################################################### ## SD memory card driver ####################################################################### display_msg Starting SD3 memory card driver... devb-sdmmc-mx6_generic cam pnp,verbose blk rw,cache=2M sdio addr=0x02198000,irq=56,bs=cd_base=0x0209c000:cd_pin=6:cd_irq=98 disk name=sd3 waitfor /dev/sd30 3 # Start the main shell [+session] ksh /proc/boot/.console.sh &}# Redirect console messages[type=link] /bin/sh=/proc/boot/ksh[type=link] /dev/console=/dev/ser1# Shared librarieslibc.solibm.so.2libcpp.so.4libcam.soio-blk.solibpps.so.1libcsm.so.1libtracelog.so.1libdisputil.so.2############################################################################# Graphics support - screen###########################################################################libWFD.so.1libinputevents.so.1libkalman.so.1libGAL-gc320v0.so.1screen-gc320v0.so/usr/lib/graphics/iMX6X/libWFDimx6x.so=graphics/iMX6X/libWFDimx6x.so/usr/lib/graphics/iMX6X/libGalcore-3dvg.so=graphics/iMX6X/libGalcore-3dvg.so/usr/lib/graphics/iMX6X/libimx6xCSCgamma-generic.so=graphics/iMX6X/libimx6xCSCgamma-generic.so[search=../install/armle-v7/usr/lib/graphics/iMX6X] /usr/lib/graphics/iMX6X/libwfdcfg-imx6x-lvds.so=libwfdcfg-imx6x-lvds.so[search=../install/armle-v7/usr/lib/graphics/iMX6X] /usr/lib/graphics/iMX6X/graphics.conf=graphics.conf############################################################################# Graphics support - apps###########################################################################libEGL.so.1libscreen.so.1/usr/lib/graphics/iMX6X/libGLESv1_CM.so.1=libGLESv1_CM.so.1/usr/lib/graphics/iMX6X/libGLESv2.so.1=libGLESv2.so.1/usr/lib/graphics/iMX6X/libEGL_viv.so=graphics/iMX6X/libEGL_viv.so/usr/lib/graphics/iMX6X/libGLES_CM_viv.so=graphics/iMX6X/libGLES_CM_viv.so/usr/lib/graphics/iMX6X/libGLESv2_viv.so=graphics/iMX6X/libGLESv2_viv.so/usr/lib/graphics/iMX6X/libGLSLC.so=graphics/iMX6X/libGLSLC.so# Executables[data=c]devc-sermx1############################################################################# Screen executables###########################################################################/sbin/screen=screen #LCD的启动程序/usr/bin/gles2-gears=gles2-gears #OpenGL测试程序############################################################################# uncomment for WatchDog utility###########################################################################wdtkick############################################################################# Set environment and start the main shell###########################################################################[perms=0744] .console.sh={echo setting env variables.export SYSNAME=ntoexport TERM=qansiexport HOME=/export PATH=:/bin:/usr/bin:/sbin:/usr/sbin:/proc/bootexport LD_LIBRARY_PATH=:/lib:/usr/lib:/usr/lib/graphics/iMX6X:/lib/dll:/proc/bootexport GRAPHICS_ROOT=/usr/lib/graphics/iMX6X#start appsmedia-sample if it existsappsmediaScript=/proc/boot/.start-appsmedia-sampleif [ -e "$appsmediaScript" ]; then #appsmedia-sample uses dhclinet instead of dhcp.client . "$appsmediaScript"else dhcp.client & echo Starting Screen Graphics... screen echo done. gles2-gears& #最后运行OpenGL的测试程序,可以看到屏幕上有三个齿轮在旋转fi}############################################################################# general commands###########################################################################cplscatpipepidinsloggersloginfoslaylnrmmvsleep
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------Buildfile
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------Buildfile
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------初识QNX_Neutrino
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------安装SDP和BSP编译
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------IPL源码分析
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------LVDS显示配置
- i.MX6Q的qnx调试笔记-qnx的IPL源码分析代码流程分析
- i.MX6Q的qnx调试笔记---安装IDE和编写BSP,boot启动板子
- i.MX6Q的qnx调试笔记------调试imx6的LVDS显示配置-imx6的LVDS显示屏调试
- QNX学习笔记二:Neutrino系统启动。
- QNX学习笔记-Neutrino-QNX-boot启动流程分析
- QNX Neutrino 虚拟机
- QNX Neutrino 基本操作
- qnx neutrino 6.5.0 photon程序开机自运行
- i.MX6q Android6.0 移植
- qnx neutrino 6.5.0 开机进入text edit mode(文本编辑模式)
- QNX Neutrino 命令手册,“使用宝典”!
- QNX Neutrino工具版内核 [procnto-instr]
- 浅谈List接口 自己实现ArrayList LinkedList主要方法
- 杨辉三角形
- 过度取悦谷歌不如撰写好的博文
- React 学习 (二)
- android:layout_weight的真实含义
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------Buildfile
- 我的python学习笔记.1
- Flink事件时间处理和水印
- Markdown编辑简洁语法
- 下拉框自动获取数据库字段值代码
- Spring Boot干货系列:常用属性汇总
- the debug of Test.ipdl demo
- 怎么安装Selenium?
- PG的两种集群技术:Pgpool-II与Postgres-XL