# QNX 开发指南 ## 操作流程 ### 登录开发服务器 ```bash ssh 10.1.130.114 ``` 用户名:uisrc,密码:root ### 登录 LiDAR 开发板 ```bash telnet 10.1.130.151 ``` 用户名:qnxuser,密码:qnxuser ### 配置 QNX 开发环境 ```bash source ~/qnx700/qnxsdp-env.sh ``` 输出 ```bash 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 ``` ### 编译固件 切换到工作目录 ```bash cd ~/workspace_qnx_7.0/pcc/ ``` 编译 ```bash aarch64-unknown-nto-qnx7.0.0-gcc main.c -o main ``` 如果用到某些库函数,需要指定库编译,例如 `-lm -lc -lsocket` ```bash 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`) ```bash $ 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 ```bash 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)中执行下面命令,赋予程序执行权限 ```bash cd /tmp chmod +x pcc ``` 运行 ```bash # ./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` 脚本内容: ```bash #!/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 ```