QNX 开发指南
操作流程
登录开发服务器
ssh 10.1.130.114
用户名:uisrc,密码:root
登录 LiDAR 开发板
telnet 10.1.130.151
用户名:qnxuser,密码:qnxuser
配置 QNX 开发环境
source ~/qnx700/qnxsdp-env.sh
输出
QNX_HOST=/home/uisrc/qnx700/host/linux/x86_64
QNX_TARGET=/home/uisrc/qnx700/target/qnx7
MAKEFLAGS=-I/home/uisrc/qnx700/target/qnx7/usr/include
编译固件
切换到工作目录
cd ~/workspace_qnx_7.0/pcc/
编译
aarch64-unknown-nto-qnx7.0.0-gcc main.c -o main
如果用到某些库函数,需要指定库编译,例如 -lm -lc -lsocket
aarch64-unknown-nto-qnx7.0.0-gcc main.c -lm -lc -lsocket -o main
固件上传
可以使用 FTP 工具将固件上传到 QNX(LiDAR),假设 LiDAR 的 IP 是 192.168.0.2,那么客户端(PC)的操作如下。
连接 FTP 服务器(注:FTP 的用户名和密码都是 qnxuser)
$ ftp 192.168.0.2
Connected to 192.168.0.2.
220 192.168.3.101 FTP server (QNXNTO-ftpd 20081216) ready.
Name (192.168.3.101:rudy): qnxuser
331 User qnxuser accepted, provide password for qnxuser@target_76905000A150.
Password:
230-No directory! Logging in with home=/
230 User qnxuser logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
使用 put 命令将 bin 文件上传到 LiDAR
ftp> put
(local-file) bin/pcc_qnx
(remote-file) /tmp/pcc
local: bin/pcc_qnx remote: /tmp/pcc
200 PORT command successful.
150 Opening BINARY mode data connection for '/tmp/pcc'.
226 Transfer complete.
59032 bytes sent in 0.00 secs (531.1066 MB/s)
这里上传的目录是 /tmp,因为当前的 QNX 只有 tmp 目录可写,其他目录都是只读的。
运行程序
在 QNX(LiDAR)中执行下面命令,赋予程序执行权限
cd /tmp
chmod +x pcc
运行
# ./pcc -i 192.168.0.1 -p 51180
Host IP: 0.0.0.0, Port: 51179
Target IP: 192.168.0.1, Port: 51180
附录
qnxsdp-env.sh
~/qnx700/qnxsdp-env.sh 脚本内容:
#!/bin/bash
# This script is sets environment variables requires to use this version of QNX Software Development Platform 7.0
# from the command line. To use the script, you have to "source" it into your shell,
# source qnxsdp-env.sh
# if source command is not available use "." (dot) command instead
#
test "$BASH_SOURCE" = "" && echo "This script only can be run from bash" && return
SCRIPT_SOURCE=$BASH_SOURCE
test "$SCRIPT_SOURCE" = "$0" && echo "Script is being run, should be sourced" && exit 1
HOST_OS=$(uname -s)
SCRIPT_DIR=$(dirname "${SCRIPT_SOURCE}")
QNX_BASE=$(cd "${SCRIPT_DIR}"; pwd)
case "$HOST_OS" in
Linux)
QNX_HOST=$QNX_BASE/host/linux/x86_64
;;
Darwin)
QNX_HOST=$QNX_BASE/host/darwin/x86_64
;;
*)
QNX_HOST=$QNX_BASE/host/win64/x86_64
;;
esac
QNX_TARGET=$QNX_BASE/target/qnx7
QNX_CONFIGURATION=$HOME/.qnx
MAKEFLAGS=-I$QNX_BASE/target/qnx7/usr/include
PATH=$QNX_HOST/usr/bin:$QNX_CONFIGURATION/bin:$QNX_BASE/jre/bin:$PATH
export QNX_TARGET QNX_HOST QNX_CONFIGURATION MAKEFLAGS PATH
unset PYTHONPATH
echo QNX_HOST=$QNX_HOST
echo QNX_TARGET=$QNX_TARGET
echo MAKEFLAGS=$MAKEFLAGS