树莓派4B已于2019年6月24号发布了,感谢树莓派实验室(http://shumeipai.nxez.com/)提供的树莓派4B开发板,可以继续我的树莓派教程。从现在起,后续所有课程将全部使用树莓派4B进行讲解(与时俱进嘛)。本文的目的是,记录我基于树莓派官方系统,定制教程使用的系统镜像过程,为大家提供个参考。
提供的资源:
1、视频教程,已上传B站
《大飞品树莓——自定制树莓派4B系统安装篇》:https://www.bilibili.com/video/av79780312。这是本文制作为镜像后,安装镜像文件视频教程。
《树莓派系统安装说明》:https://www.bilibili.com/video/av71950296
《动手学树莓派——python上篇》:https://www.bilibili.com/video/av71878718
2、教程配套树莓派操作系统镜像
本套课程配套使用系统镜像,是以raspbian为基线,添加了教程需要的软件和课件。
系统镜像下载地址:https://pan.baidu.com/s/1dT-LNp6Sa3IjkhbBxVl52g
当前树莓派4B镜像已上传到百度云盘中。
为什么要定制自己的系统?
1、官方系统已经提供的丰富的软件工具包,但仍可能无法满足自己,所有就要依据自己的需要,安装相应软件。
2、SD卡不是安全可靠地存储固件,使用一段时间,SD卡会损坏(flash的擦写寿命是有限的),所有要将自己的系统定期备份。
3、您的基于树莓派的产品做的很好,要批量生产了,这是通过将定制好的系统进行备份,然后批量烧写到SD卡就可以了。
这就是定制自己树莓派系统的目的,包含安装相应的软件包、定制好的系统备份、定制系统的批量化烧写。
当前使用的树莓派系统蓝本为树莓派的Raspbian系统,版本为“Raspbian Buster with desktop and recommended software”,时间为 2019-09-26,Kernel version: 4.19,SHA-256:
549da0fa9ed52a8d7c2d66cb06afac9fe856638b06d8f23df4e6b72e67ed4cea。
下载镜像后,使用windows下的SD卡烧写工具——win32diskimager-1.0.0-install.exe烧写系统。(百度云盘下:https://pan.baidu.com/s/1dT-LNp6Sa3IjkhbBxVl52g,在树莓派系统安装工具->windows下)
将SD卡插入树莓派中,通过micro hdmi装hdmi线,micro hdmi接口连接树莓派的HDMI0,hdmi接口连接显示屏;连接USB的键盘和鼠标,树莓派上电。
打开终端,输入:sudo raspi-config进行配置。要配置“Interfacing Options”中,使能SSH和VNC选项。(第一次安装系统镜像是不是能SSH的,只有通过显示器的模式,才能使能。使能SSH和VNC后,就可以通过有线连接或者无线连接,以终端或者远程桌面的方式,访问树莓派了,就不用显示器了,把树莓派当做一个服务器即可)。此步可以配置树莓派连接到无线网中。拔掉HDMI线,通过有线连接或者无线方式可以访问树莓派了。
需要的修改配置有python的默认版本,修改对系统分区的描述,修改树莓派更新源为国内源。
树莓派官方python使用2.7.16版本,咱们修改python默认使用3.7.3版本。
cd /usr/bin/ #进入python的安装目录
sudo rm python #删除python默认的链接
sudo ln -s python3.7 python #将python3.7指定为python的默认版本
此时,输入python命令,默认启动python3.7.3版本。
此步非常重要,树莓派官方镜像使用uuid的方式描述SD卡的分区,这是标准的方式。但如果使用uuid的方式,分区信息被数字化成一串序列号,这样在系统备份和批量安装中,肯定对分区的的uuid描述不同,导致内核无法正确挂载rootfs(根文件系统),导致自定制系统启动失败。为了解决这个问题,咱们需要修改下系统配置文件。修改的地方有两处。
1、修改启动中,传递内内核的rootfs的信息
sudo vi /boot/cmdline.txt
修改“root=uudi…”为“root=/dev/mmcblk0p2”。
因为,SD卡的设备名为mmcblk0,根文件系统使用第二个分区,设备号为mmcblk0p2。
2、修改/etc/fstab文件
修改根文件系统挂载后,系统进行自动挂载和自动修复的配置信息。
sudo vi /etc/fstab
修改
“/boot”和“/”的挂载分区描述,由uuid值更改为具体的挂载分区名称。
/boot挂载/dev/mmcblk0p1设备(SD卡的第一个分区,存储内核文件、dtb设备树描述文件等)
/挂载/dev/mmcblk0p2设备(SD卡的第二个分区,存储根文件系统)
!!!注意:本步特别重要。
更换为国内源,这样安装软件的数据会挺高很多。
sudo vi /etc/apt/sources.list.d/raspi.list #修改源配置文件
将第一行修改为:
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
使用中科大的更新源。
输入指令:sudo apt-get update 使用新的源。
mkdir ~/.pip
vim ~/.pip/pip.conf
在pip.conf中输入:
[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = pypi.tuna.tsinghua.edu.cn
即可完成pip3的使用国内更新源。
通过VNC远程桌面(或者SSH终端)登录树莓派,进行软件安装。当前教程安装的软件有jupyter-notebook和vsftpd。
jupyter-notebook为配套教程使用的教程开发环境,可以写python代码的同时,直接运行python。
1.安装jupyter-notebook软件
安装jupyter-notebook。
输入指令:pip3 install jupyter #进行jupyter-notebook的安装。
安装相关配件
sudo apt-get install python-pygments
sudo apt-get install python-ipython
python3 -m pip install ipykernel
安装完毕后,输入sudo init 6指令重新启动树莓派。
2.配置jupter-notebook软件
输入指令:jupyter-notebook --generate-config 生成配置文件。
配置文件存放在/home/pi/.jupyter/jupyter_notebook_config.py下。修改该配置文件。
c.NotebookApp.ip = ‘*’ # 开启所有的IP访问,即可使用远程访问
c.NotebookApp.open_browser = False # 关闭启动后的自动开启浏览器
c.NotebookApp.port = 61580 # 设置端口61580
输入指令:jupyter-notebook password,输入密码,配置jupyter-notebook密码。
3、验证jupyter-notebook的上电启动
重启树莓派,通过有线网连接输入169.254.108.204:61580
vsftpd提供ftp服务器功能,用户PC机与树莓派进行文件交互。
输入指令:sudo apt-get install vsftpd 即可安装
安装完毕后,
输入指令:vi /etc/vsftpd.conf 配置vsftpd
将#write_enable=YES变为write_enable=YES,删除“#”,这样PC机可以将文件写到树莓派中。
重启树莓派,使用filezilla工具登录树莓派,通过有线网络登录。
设备IP为169.254.108.204,用户名:pi,密码:raspberry。即可与树莓派交换文件。
本节按照树莓派实验室的《树莓派安装 Nginx + PHP7.0 + Pi Dashboard》教程搭建。(http://shumeipai.nxez.com/2018/04/25/install-pi-dashboard-with-nginx-php7-on-pi.html)
1.安装 Nginx 和 PHP7
sudo apt-get update
sudo apt-get install nginx php7.0-fpm php7.0-cli php7.0-curl php7.0-gd php7.0-mcrypt php7.0-cgi
sudo service nginx start
sudo service php7.0-fpm restart
2.修改文件
sudo vi /etc/nginx/sites-available/default
将其中的如下内容:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
替换为
location / {
index index.html index.htm index.php default.html default.htm default.php;
}
location ~.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name;
include fastcgi_params;
}
3.下载web网页
cd /var/www/html
sudo git clone https://github.com/spoonysonny/pi-dashboard.git
4、树莓派仪表盘
设备上电后,在浏览器中输入:http://169.254.108.204/pi-dashboard/。即可出现树莓派仪表盘。
1.Python GPIO 的安装
输入指令:
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
2、测试 SAKS 扩展板
touch led_off.py
vi led_off.py
输入如下内容:
#!/usr/bin/env python
#-- coding: utf-8 --
#Copyright © 2016 NXEZ.COM.
#http://www.nxez.com
#Licensed under the GNU General Public License, Version 2.0 (the “License”);
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at
#http://www.gnu.org/licenses/gpl-2.0.html
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an “AS IS” BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#limitations under the License.
#tutorials url: http://shumeipai.nxez.com/2015/03/23/saks-diy-tutorials-water-lights.htm
author = ‘Spoony’
license = ‘Copyright © 2016 NXEZ.COM’
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
DS = 6
SHCP = 19
STCP = 13
def init():
GPIO.setup(DS, GPIO.OUT)
GPIO.setup(SHCP, GPIO.OUT)
GPIO.setup(STCP, GPIO.OUT)
GPIO.output(DS, GPIO.LOW)
GPIO.output(SHCP, GPIO.LOW)
GPIO.output(STCP, GPIO.LOW)
def writeBit(data):
GPIO.output(DS, data)
#写入8位LED的状态
def writeByte(data):
for i in range (0, 8):
writeBit((data >> i) & 0x01)
#状态刷新信号
GPIO.output(STCP, GPIO.LOW)
GPIO.output(STCP, GPIO.HIGH)
try:
init()
writeByte(0xff)
time.sleep(1)
writeByte(0x00)
time.sleep(1)
writeByte(0xff)
time.sleep(1)
writeByte(0x00)
except KeyboardInterrupt:
print (“程序终止”)
本脚本的目的时,SAKA的LED等进行全部的闪烁两次。
3.将led_off.py添加到上电自启动脚本中
vi /home/pi/power_on_autorun/power_on.sh
添加内容:
#run led test
/usr/bin/python /home/pi/power_on_autorun/led_off.py
即可上电运行led测试程序,系统启动后,led组会闪烁两次。
将我的大飞品树莓系统教程,git到树莓派4B上吧。
mkdir /home/pi/Notebooks/ #建立Notebooks目录
cd /home/pi/Notebooks/ #进入该目录
git树莓派系统安装篇:
git clone https://gitee.com/shirf_taste_raspi/raspi_os_setup.git
git树莓派第一期课程
git clone https://gitee.com/shirf_taste_raspi/easy_raspi_python_one.git
git树莓派硬件测试教程
git clone https://gitee.com/shirf_taste_raspi/SAKS_hardware_test.git
通过在/etc/rc.local中添加用户自定义的上电自启动脚本。达到树莓派上电启动后,自动运行/home/pi/power_on_autorun/power_on.sh这个脚本。
1.新建脚本文件
mkdir /home/pi/power_on_autorun/ #新建目录
touch /home/pi/power_on_autorun/power_on.sh #新建自动运行目录
vi /home/pi/power_on_autorun/power_on.sh #编辑脚本,输入如下内容
#!/bin/sh
#run led test
/usr/bin/python /home/pi/power_on_autorun/led_off.py
#run jupyter-notebook
cd /home/pi/
/usr/bin/python3 /home/pi/.local/bin/jupyter-notebook &
上述内容为上电进行SAKS扩展模块LED组闪烁显示,证明设备已启动成功,自动启动jupyter-notebook程序
2.让树莓派运行自定义的脚本
vi /etc/rc.local
在exit 0 之前,添加
/bin/su - pi -c “/home/pi/power_on_autorun/power_on.sh”
表示已pi用户权限运行自定义的power_on.sh脚本。
后续有新的自定义启动程序,只要添加到/home/pi/power_on_autorun/power_on.sh中即可。
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf #编辑无线网络配置信息,删除其中所有network = {***}信息。
1.以root权限挂载sd卡
将SD通过usb读卡器插入计算机中,使用umount命令取消SD卡自动挂接。
su root #切换到root权限
mount /dev/sdb1 /media/shirf/sdb1 #将boot分区挂接到sdb1目录下
mount /dev/sdb2 /media/shirf/sdb2 #将rootfs分区挂接到sdb2目录下
2.进行系统备份
运行指令:sh backup_system.sh
经过20分钟备份生成backup.img文件。
使用工具“Win32DiskImager”。运行该工具。选择映像文件,再点击写入即可。
!!!注意,一定要关闭相关杀毒软件,不然U盘被挂载着,没法写入。
烧写成功后:
将烧写完毕的SD卡插入树莓派中,上电启动。
如果您安装了SAKS树莓派扩展模块的话,会看到LED灯组进行2次闪烁,证明系统启动成功。
如果没有购买SAKS树莓派扩展模块,可以在上电30秒后,访问树莓派仪表盘,计算机的IP需要配置为169.254.108.150(在一个网段的其他值也可以),通过有线网络连接PC机和树莓派。
在浏览器中输入:http://169.254.108.204/pi-dashboard/。即可出现如下界面:
使用有线网络连接PC机和树莓派,配置PC有线网络为:169.254.108.150。
通过VNC登录树莓派,树莓派IP为:169.254.108.204,用户名为:pi,密码为:raspberry。
通过VNC成功登录树莓派:
启动终端,输入:sudo raspi-config,在“Advanced Options”中选择“A1 Expand Filesystem”进行执行。重启树莓派即可。
在浏览器中输入:http://169.254.108.204:61580,密码为:raspberry。即可通过jupyter-notebook进行“大飞品树莓”课程。
大飞品树莓课件在“/Notebooks/easy_raspi_python_one”下。
大飞品树莓视频教程在:https://www.bilibili.com/video/av71878718
所有线上教程和课件全部免费!!!