目录
树莓派刷机
刷机软件准备
下载 Raspberry Pi Imager(比较省事,不用下载 SD Card Formatter、Win32DiskImager)
Raspberry Pi Image下载网址: Raspberry Pi OS – Raspberry Pi
树莓派官网下载合适的镜像 Operating system images – Raspberry Pi
准备刷机工具:下载 SD Card Formatter、Win32DiskImager
Win32 Disk Imager 下载链接:Win32 Disk Imager - Download Official Site
SD Card Formatter,下载链接:Download SD Card Formatter for Windows and Mac
格式化SD卡
烧录镜像到SD卡
修改树莓派配置文件
- 找到文本文件config.txt,双击打开,把下面的代码输入在文本的最后一行,dtoverlay=pi3-miniuart-bt 是 Raspberry Pi 的 Device Tree 参数,用于配置 Raspberry Pi 3 的串口功能。默认情况下,Raspberry Pi 3 的主串口(ttyAMA0)与蓝牙模块共享引脚,导致无法同时使用串口和蓝牙功能。
通过添加 dtoverlay=pi3-miniuart-bt 到 /boot/config.txt 文件中,可以将蓝牙模块从主串口移动到另一个串口(ttyS0),以便同时使用串口和蓝牙功能。这样一来,你可以在 Raspberry Pi 上连接外部设备并与其进行串口通信,而蓝牙功能仍然可用。
请注意,在使用 dtoverlay=pi3-miniuart-bt 后,你需要相应地更改串口设置,例如在配置文件或代码中将串口从 ttyAMA0 更改为 ttyS0。
dtoverlay=pi3-miniuart-bt//作用接触蓝牙对硬件串口ttysAMA0的占用
2.接着找到文本文件cmdline.txt,复制一个到本地保存备用,然后打开 TF 卡里的文本文件,删除里面全部内容,替换成下面的代码,目的是为了让串口 1 作为远程终端的接口,并且设置了波特率为 115200 bps。
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
这里边普及一下树莓派3系列有两个串口分别是 seria1 和serial0,
默认情况下串口的映射关系是
/dev/serial0 -> ttyS0
/dev/serial1 -> ttyAMA0
在config.txt 文件最后添加 dtoverlay=pi3-miniuart-bt //作用接触蓝牙对硬件串口ttysAMA0的占用,随后映射关系发生对调
/dev/serial0 -> ttyAMA0(硬件)(gpio14 gpio15)
/dev/serial1 -> ttyS0
console=tty1 //tty1是显示设备
console=serial0,115200 serial0 是串口ttyAMAA0
3.然后在根目录下新建一个文件,命名为userconf.txt,在userconf.txt输入如下内容:
pi:$6$/4.VdYgDm7RJ0qM1$FwXCeQgDKkqrOU3RIRuDSKpauAbBvP11msq9X58c8Que2l1Dwq3vdJMgiZlQSbEXGaY5esVHGBNbCxKLVNqZW1
加上这个文件的目的是为了能正常登录树莓派,2022 年 4 月之前的版本都是自带userconf.txt这个文本文件的,可以正常用默认账户和密码登录树莓派。但是在2022 年 4 月之后的版本,官方把这个文件移除(据说是为了安全),如果不加这个文件,只能通过外接 HDMI 的显示器来创建账户来登录树莓派,或者使用树莓派官方的镜像烧录工具,也就是 Raspberry Pi Imager,在烧录镜像前先设置好账户和密码,以及配置好 WiFi 和 SSH 服务器,当系统烧录之后,直接用 SSH 访问树莓派,用设置好的账户和密码登录也能正常使用。
上面那段代码,其实就设置 username 为 pi,password 为 raspberry,那一长串 hash 就是 raspberry。
树莓派串口启动
-
配置Mobxtern
2.然后找个USB-TTL 与树莓派相连,然后USB口插到电脑上,电脑上要装CH340驱动
3.启动 username 为 pi,password 为 raspberry
树莓派网络配置和连接网络
1.网络配置
由于树莓派系统并没有 vim 编辑器,所以只能用 nano 编辑器来配置网络,之后有网络后再安装 vim 编辑器。
在终端输入下面的命令:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
按方向键把光标移到空白行,输入下列内容:
country=CN
network={ ssid="your_wifi_name"
psk="your_wifi_password"
}
"country=CN"的作用是把无线网连接区域设置为中国地区。
把 ssid 后面双引号的内容改成路由器的名称,也就是 WiFi 名,要注意的是,WiFi 名只能是 ASCII 码,也就是说 WiFi 名只能用英文和阿拉伯数字,还有一些英文符号组成,不能有中文。如果家里的 WiFi 名带有中文或者其他语言的字符,可能无法输入或者输入后无法连接,建议先修改路由器名称,再执行此操作。
psk 这是 WiFi 的密码,把 psk 后面双引号的内容改成 WiFi 密码即可。
下图是我的树莓派的修改。
输入完毕后,按组合键 CTRL + o 之后,会提示是否保存文件,可以不管直接按回车,再按组合键 CTRL + x 退出 nano 编辑器。
然后输入 sudo reboot 重启树莓派,树莓派重启登录后,再次输入 ifconfig 就可以看到成功连上 WiFi,并获得 IP 地址了。
可以看到多出了一个 wlan0,这个就是连接上 WiFi 才有的无线局域网接口,当前的无线局域网的 IP 地址是 192.168.31.173。
顺带提一嘴夹在 eth0 和 wlan0 中间的 lo,这是本地回环接口(Local Loopback),一般用于本机内部通信,并不真实地从外界接收和发送数据包。
2.初次 WiFi 连接失败的处理方法
如果在设置 WiFi 连接,重启登录后,查看网络连接情况,出现入下图所示的情况,也就是发现没有出现 wlan 的连接信息,就说明 WiFi 连接失败了。在登录成功之后,会打印一些 WiFi 连接失败的报错信息。
一般在/etc/wpa_supplicant/wpa_supplicant.conf这个文件中加入这句 country=CN都不会出现这个问题。
当然了,报错的同时还贴心地告诉我们怎么去处理,提示我们用 raspi-config 命令进入树莓派的设置界面做一些设置。
终端命令输入:
sudo raspi-config
进入树莓派系统设置界面,选择第五个选项“Localisation Options”,回车。
该选项是用于本地化选项配置语言和区域设置,要把里面的地区改成中国。
然后选择第四个选项“WLAN Country”,回车。
该选项用于设置中国地区为合法的无线信道的 WLAN 国家或地区。
在下面的界面按方向键找到“China”,并回车选中。
再按一次回车表示确定,就会回到最开始的系统设置界面。
按 TAB 键把光标移到Finish上,回车完成设置并退出界面。
这时候再输入 ifconfig 回车,就可以看到 WiFi 成功连上了。
如果失败了尝试手动连接下
nmcli dev wifi connect//显示周边wifi
报错:NetworkManager is not running
1.检查NetworkManager服务的状态:运行以下命令来检查NetworkManager服务的状态:
systemctl status NetworkManager
如果服务当前处于停止状态,你可以继续下一步来启动它。
2.启动NetworkManager服务:运行以下命令来启动NetworkManager服务:
sudo systemctl start NetworkManager
这将启动NetworkManager服务并使其处于运行状态。
3.检查NetworkManager服务的启动状态:再次运行以下命令来检查NetworkManager服务是否已经成功启动:
systemctl status NetworkManager
如果服务显示为运行中,则表示NetworkManager已经成功启动。
4.确保NetworkManager服务开机自启动:运行以下命令以确保NetworkManager服务在系统启动时自动启动:
sudo systemctl enable NetworkManager
再次执行:nmcli dev wifi
连接网络指令
sudo nmcli dev wifi connect [wifi_name] password [ secret]
树莓派ssh远程登陆
树莓派连接网络以及固定ip
sudo vi /etc/rc.loacal
在最后添加 ifconfig wlan0 [your IP]
树莓派SSH服务默认是关闭的要自己打开
打开 SSH 连接的方法
1.根目录下新建 SSH 文件
这种办法最简单,关闭树莓派,取出 TF 卡,装上读卡器后插入电脑,打开 TF 卡的盘符,在根目录下新建一个名为ssh的文件,方法和前面新建userconf.txt一样,只不过ssh文件不需要输入任何内容,也不需要.txt的扩展名。
建好文件之后,把 TF 卡插入树莓派,上电启动就可以打开 SSH 了
2.系统设置界面开启 SSH
和前面处理 WiFi 连接失败问题一样,
输入命令:
sudo raspi-config
进入树莓派系统设置。
选择第三个选项“Interface Options”,回车。
该选项是用于配置与外围设备的连接。
进入到接口选项,选择第二项“SSH”,回车。
接着会提示是否开启 SSH 服务器,按方向键选择Yes回车。
SSH 已经开启,再次按回车回到系统设置界面
最后按 TAB 键选择Finish回车退出即可。
3.命令行开启 SSH
在终端命令行输入:
sudo systemctl enable ssh sudo systemctl start ssh
即可开启 SSH 服务器。
设置 SSH 登录树莓派
同样以 MobaXterm 为例,单击左上的图标Session。
在弹窗中单击SSH选项,然后在SSH的设置界面的Remote host中输入树莓派的 IP 地址,我这里输入的是 eth0 的 IP 地址,也可以输入 wlan0 的 IP 地址,操作都是一样的。然后在Specify username前的复选框打上勾,并在后面输入账户名,也就是 pi。然后单击下面的OK按钮,完成设置。
MobaXterm 会跳转到新建的选项卡窗口,如下图所示,输入登录的密码,再按回车。
成功通过 SSH 服务器登录树莓派。
树莓派换源
查看子自己的版本:
获取源:raspbian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
我的是Raspberry版本 11 代号Bullseye,
备份原有的sources.list源:cp /etc/apt/sources.list sources.list_bak
备份原有的raspi.list源:cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list_bak /etc/apt/sources.list sources
最后更新下:
sudo apt-get update
树莓派内存扩展
我们在更新源的时候可能会报错:No space left on device
解决方法:
sudo raspi-config
然乎重启一下,用df -h指令查看下
树莓派安装wiringPi库
下载链接:https://project-downloads.drogon.net/wiringpi-latest.deb
安装:
sudo dpkg -i wiringpi-latest.deb
gpio -v
gpio readall
树莓派串口通信
将硬件串口释放:
测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
int main()
{
char buf[64] = {0};
int n_read;
wiringPiSetup();
int fd =serialOpen("/dev/ttyAMA0",115200); //打开串口
if(fd == -1){ //如果打开串口失败则退出程序
printf("serialOpen failed!\n");
return 0;
}
if(fork() == 0){
while(1){
memset(buf,0,sizeof(buf));
n_read = read(fd,buf,sizeof(buf)); //子进程一直等待数据接收
if(n_read > 0){
printf("data %dB:%s\n",n_read,buf);
}else{
perror("read failed"); //读取失败,打印错误信息
delay(1000);
}
}
}else{
while(1){
serialPrintf(fd,"hello world!!\n"); //父进程每隔三秒发送一次hello world!!
delay(3000);
}
}
return 0;
}
树莓派上编译运行
另外借助串口助手实现双方通信
树莓派一次最多只能读8个Byte,要想读取更多的话等我学会了再说
虚拟机安装交叉编译环
境搭建
交叉编译工具链安装
1.获取交叉编译工具:GitHub - raspberrypi/tools //需要VPN
2.把下载的压缩包拷贝到Ubuntu里面,然后解压
unzip tools-master.zip
3.添加环境变量:在 .bashrc最后加入 ,交叉编译链所在目录:
pwd
/home/lh/raspberry/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
sudo vi .bashrc
export PATH=$echo:/home/lh/raspberry/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
4.测试:
arm-linux-gnueabihf-gcc -v //
带wirinPi库的交叉编译
1.将wiringPi.h 和wiringPi.so.2.50从树莓派拷贝过来(因为我没找到64位的x86架构的wiringPi库,按照道理来说应该是要对下x86架构的wringPi库进行交叉编译成am架构的,我这里便就直接拷贝树莓派的的wiringPi.so了),
从树莓派上copy 测试文件和wiringPi库以及wiringPi.h
scp pi@172.20.10.2:/lib/libwiringPi.so.2.50 [虚拟机路径]
scp pi@172.20.10.2:/home/pi/hc04.c [虚拟机路径]
scp pi@172.20.10.2:/usr/include /wiringPi.h [虚拟机路径]
2.交叉编译前所有要准备的文件,
3.开始交叉编译,将hc04.c编译成可以运行在arm架构上的可执行程序
4.发送hc04可执行文件给树莓派,并在树莓派上执行
scp hc04 pi@172.20.10.2:/home/pi