树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统

一、目的

树莓派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卡就可以了。

这就是定制自己树莓派系统的目的,包含安装相应的软件包、定制好的系统备份、定制系统的批量化烧写。

三、开始我们的定制流程

3.1 树莓派系统蓝本

当前使用的树莓派系统蓝本为树莓派的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线,通过有线连接或者无线方式可以访问树莓派了。

3.2 修改系统配置

需要的修改配置有python的默认版本,修改对系统分区的描述,修改树莓派更新源为国内源。

3.2.1修改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版本。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第1张图片

3.2.2 修改SD卡的分区描述

此步非常重要,树莓派官方镜像使用uuid的方式描述SD卡的分区,这是标准的方式。但如果使用uuid的方式,分区信息被数字化成一串序列号,这样在系统备份和批量安装中,肯定对分区的的uuid描述不同,导致内核无法正确挂载rootfs(根文件系统),导致自定制系统启动失败。为了解决这个问题,咱们需要修改下系统配置文件。修改的地方有两处。
1、修改启动中,传递内内核的rootfs的信息
sudo vi /boot/cmdline.txt
修改“root=uudi…”为“root=/dev/mmcblk0p2”。
因为,SD卡的设备名为mmcblk0,根文件系统使用第二个分区,设备号为mmcblk0p2。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第2张图片2、修改/etc/fstab文件
修改根文件系统挂载后,系统进行自动挂载和自动修复的配置信息。
sudo vi /etc/fstab
修改
“/boot”和“/”的挂载分区描述,由uuid值更改为具体的挂载分区名称。
/boot挂载/dev/mmcblk0p1设备(SD卡的第一个分区,存储内核文件、dtb设备树描述文件等)
/挂载/dev/mmcblk0p2设备(SD卡的第二个分区,存储根文件系统)
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第3张图片!!!注意:本步特别重要。

3.2.3 修改树莓派更新源为国内源

更换为国内源,这样安装软件的数据会挺高很多。
sudo vi /etc/apt/sources.list.d/raspi.list #修改源配置文件
将第一行修改为:
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
使用中科大的更新源。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第4张图片输入指令:sudo apt-get update 使用新的源。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第5张图片

3.2.4 修改pip3更新源为国内源

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的使用国内更新源。

3.3 安装自己的软件

通过VNC远程桌面(或者SSH终端)登录树莓派,进行软件安装。当前教程安装的软件有jupyter-notebook和vsftpd。

3.3.1 jupyter-notebook软件安装

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

3.3.2 vsftpd软件安装

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。即可与树莓派交换文件。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第6张图片

3.3.3 给树莓派装个仪表盘

本节按照树莓派实验室的《树莓派安装 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/。即可出现树莓派仪表盘。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第7张图片

3.3.4 安装RPi.gpio软件,进行我们在树莓派4B上的教程

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组会闪烁两次。

3.3.5 将大飞品树莓系统课程git到系统中

将我的大飞品树莓系统教程,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

3.3.6 添加树莓派上电自启动脚本

通过在/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中即可。

3.3.7 删除已连接的无线信息

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf #编辑无线网络配置信息,删除其中所有network = {***}信息。

四、备份自定制镜像及安装自定制镜像

4.1 备份自定制镜像

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文件。

4.2 还原自定制镜像到SD卡中

使用工具“Win32DiskImager”。运行该工具。选择映像文件,再点击写入即可。
!!!注意,一定要关闭相关杀毒软件,不然U盘被挂载着,没法写入。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第8张图片
烧写成功后:
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第9张图片

五、烧写镜像后,需要的工作

将烧写完毕的SD卡插入树莓派中,上电启动。

5.1 SAKS扩展模块提出系统启动成功

如果您安装了SAKS树莓派扩展模块的话,会看到LED灯组进行2次闪烁,证明系统启动成功。

5.2 树莓派仪表盘提示系统系统成功

如果没有购买SAKS树莓派扩展模块,可以在上电30秒后,访问树莓派仪表盘,计算机的IP需要配置为169.254.108.150(在一个网段的其他值也可以),通过有线网络连接PC机和树莓派。
在浏览器中输入:http://169.254.108.204/pi-dashboard/。即可出现如下界面:
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第10张图片

5.3 配置树莓派使用所有SD卡容量

使用有线网络连接PC机和树莓派,配置PC有线网络为:169.254.108.150。
通过VNC登录树莓派,树莓派IP为:169.254.108.204,用户名为:pi,密码为:raspberry。
树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第11张图片
通过VNC成功登录树莓派:

树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统_第12张图片启动终端,输入:sudo raspi-config,在“Advanced Options”中选择“A1 Expand Filesystem”进行执行。重启树莓派即可。

5.4 访问jupyter-notebook进行教程的学习

在浏览器中输入:http://169.254.108.204:61580,密码为:raspberry。即可通过jupyter-notebook进行“大飞品树莓”课程。

大飞品树莓课件在“/Notebooks/easy_raspi_python_one”下。
大飞品树莓视频教程在:https://www.bilibili.com/video/av71878718
所有线上教程和课件全部免费!!!

你可能感兴趣的:(品鉴树莓派)