树莓派无显示器,无网线配置ssh和WIFI
WIFI配置预先写入SD卡,树莓派开机后自动搜索WIFI并连接
创建 wpa_supplicant_conf 文件,写入以下配置:
代码语言:javascript复制country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
scan_ssid=1
ssid="m_ssid"
psk="m_password"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
SSH配置预先写入SD卡
根目录创建名为“ssh”的文件,开机即可自动开启ssh。
使用ssh登陆了树莓派后,可使用sudo raspi-config打开命令行配置菜单,选择Interface Options->VNC ,从而打开VNC。
树莓派用户与权限配置
添加用户 sudo useradd usr1
修改密码 sudo passwd usr1
由于权限问题,此时登录usr1用户后使用sudo命令会提示该用户不在sudoers文件中
代码语言:javascript复制usr1 is not in the sudoers file. This incident will be reported.
给用户添加到sudoer用户,让他能够执行sudo命令
1.sudo passwd root:给root用户授予密码
2.su:登录root用户
3.sudo adduser usr1 sudo:添加到sudoers文件
SCP命令使用
scp命令可用于跨主机传输文件
代码语言:javascript复制scp localPath user@host:/path #复制到远程机器
scp user@host:/path localPath #从远程机器下载到本机
Ubuntu宿主机交叉编译到目标树莓派
使用交叉编译
交叉编译是指从一台宿主机上,编译出其它不同平台的机器上的可执行程序的过程,需要使用到交叉工具链。
根据宿主机平台和树莓派平台的系统架构选择(使用arch命令判断系统架构):https://developer.arm.com/downloads/-/gnu-a
树莓派为aarch64架构,而宿主机Ubuntu18是X86_64架构
解压工具链后,用CMake指定交叉编译链
示例程序:
代码语言:javascript复制cmake_minimum_required(VERSION 3.5)
project(crosspro1)
add_executable(crosspro1
main.cpp
)
代码语言:javascript复制#include "include.h"
int main()
{
std::cout << "Cross compile." << std::endl;
}
system指定Linux,processer指定arm
C和C 分别制定工具链里的/bin/-gcc和-g 工具
最后的Target root指定工具链的根目录
generate,然后configure即可
在指定的build目录下使用make命令即可编译出可执行文件:make
将可执行文件上传到树莓派上,授权并执行
代码语言:javascript复制chmod 777 execfile
./execfile
即可完成交叉编译
断言assert
定义在 assert.h 头文件内,用于在Debug模式下进行诊断程序错误
用法
代码语言:javascript复制assert(真值表达式); // 若表达式为真,则中断程序。
代码语言:javascript复制#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("%sn",str);
}
if(str)
free(str);
fclose(fp);
}