嵌入式Linux树莓派环境设置和交叉编译
一、VNC Viewer远程连接树莓派
1. 工具下载
- 树莓派
https://www.raspberrypi.org/downloads/raspbian/ - 格式化
- VNC Viewer
https://www.realvnc.com/en/connect/download/viewer/ - 远程工具putty
https://www.chiark.greenend.org.uk/~sgtatham/putty/
2. SD卡格式化
- SB插入读卡器,读卡器插入电脑
- 格式化SD卡
3. 烧录
- 烧录文件
- choose os -> 选择格式化SD卡,写入
- 完成烧录操作
4. 网络配置
- 启动烧录SD卡
- boot目录创建ssh空文件
- 修改文本文件,添加代码
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="IQ"
psk="qwe18754506381"
key_mgmt=WPA-PSK
priority=1
}
- 添加成功取出SD卡,插入树莓派
- 树莓派接电,查看树莓派ip地址
5. putty远程连接
- putty,Host Name输入ip地址,“open”打开
- 输入用户密码
- 开始树莓派VNC服务,sudo raspi-config配置VNC
- 选择“Interfacing Options” -> “Select”。
- 选择“VNC” -> “Select”。
- “The VNC server is enabled”–>“OK”
- “Advanced Options” -> “Select
- “Resolution” -> “Select”。
- “DMT Mode 16”
- “Finish”
- 树莓派用户与权限设置
- 添加用户 sudo useradd usr1
- 修改密码 sudo passwd usr1
- 给用户添加到sudoer用户,让他能够执行sudo命令
- sudo passwd root:给root用户授予密
- su:登录root用户
- sudo adduser usr1 sudo:添加到sudoers文件
6. VNC Viewer界面显示
- VNC Viewer安装
- 选择英文版本
- 执行默认操作,同意协议
- 完成安装
- 选择英文版本
- VNC Viewer使用
- 首先在最上面输入树莓派的IP地址,接着在弹出的界面中输入Username,Password,点击OK
- 首先在最上面输入树莓派的IP地址,接着在弹出的界面中输入Username,Password,点击OK
二、交叉编译实现
1. 简介
交叉编译是指从一台宿主机上,编译出其它不同平台的机器上的可执行程序的过程,需要使用到交叉工具链。
2. 架构实现
- arch命令判断系统架构
https://developer.arm.com/downloads/-/gnu-a - 树莓派aarch64架构,Ubuntu18 X86_64
- 工具链下载解压
- CMake交叉编译
cmake_minimum_required(VERSION 3.5)
project(crosspro1)
add_executable(crosspro1
main.cpp
)
#include "include.h"
int main()
{
std::cout << "Cross compile." << std::endl;
}
5. 在指定的build目录下使用make命令即可编译出可执行文件:make
6. 授权编译
chmod 777 execfile
./execfile
三、assert(断言)
代码:
#include "include.h"
int main()
{
FILE *fp = fopen("f.txt","r");
assert(fp);
char *str=NULL;
ssize_t read;
size_t len=0;
while( (read=getline(&str,&len,fp)) !=-1)
{
printf("%s\n",str);
}
if(str)
free(str);
fclose(fp);
}
- C 标准库的 assert.h头文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。
已定义的宏 assert 指向另一个宏 NDEBUG,宏 NDEBUG 不是 <assert.h> 的一部分。如果已在引用 <assert.h> 的源文件中定义 NDEBUG 为宏名称 - 树莓派运行.c文件
putty连接树莓派
- 运行效果
- 总结
- 在函数开始处检验传入参数的合法性
如:
- 在函数开始处检验传入参数的合法性
int resetBufferSize(int nNewSize)
{
//功能:改变缓冲区大小,
//参数:nNewSize 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
- 每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
- 不能使用改变环境的语句,因为assert只在DEBUG个生效
- assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
- 部分情况下,assert不能代替条件过滤
参考
树莓派无需显示屏的VNC Viewer方式的远程连接
VNC Viewer方式的远程连接树莓派
树莓派环境配置,并在Ubuntu18.04上配置交叉编译环境
Linux和Windows中的assert断言
assert 断言用法总结