树莓派环境配置,并在Ubuntu18.04上配置交叉编译环境

2022-06-19 11:44:55 浏览数 (2)

树莓派无显示器,无网线配置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);
}

0 人点赞