一、安装Ubuntu 

1、下载镜像

Install Ubuntu on a Raspberry Pi | Ubuntu

树莓派ubuntu python环境 树莓派4 ubuntu_树莓派

2、解压镜像

(1)下载的镜像后缀是.xz,而烧录镜像需要.img格式。这里我们对下面文件执行解压操作:

树莓派ubuntu python环境 树莓派4 ubuntu_ubuntu_02

(2)得到:ubuntu-20.04.3-preinstalled-server-arm64+raspi.img

树莓派ubuntu python环境 树莓派4 ubuntu_ubuntu_03

 3、烧录镜像到SD卡

(1)下载软件:balenaEtcher。balenaEtcher - Flash OS images to SD cards & USB drives

树莓派ubuntu python环境 树莓派4 ubuntu_ubuntu_04

(2)安装balenaEtcher

(3)打开

树莓派ubuntu python环境 树莓派4 ubuntu_树莓派_05

a.选择镜像:点击select image,选择刚刚解压成功的.img文件

树莓派ubuntu python环境 树莓派4 ubuntu_树莓派_06

 b.选择烧录目标:点击select target,这里我选择的是SD卡,图片就不放了。

c.最后开始烧录:点击flash! 稍等几分钟,完成后会有提示(主要不要点击“格式化SD”之类的选项,否则会将刚刚烧录的内容清除),然后关闭窗口。

4、接通树莓派电源(注意:如果Ubuntu系统启动成功的话,绿灯会先常亮,然后闪烁,最后熄灭),将树莓派4B通过有线或者无线接入网络。这里我采取的是有线接入的方式。然后通过路由器管理界面查询到机器所在的IP地址:192.168.X.X

树莓派ubuntu python环境 树莓派4 ubuntu_linux_07

5、通过SSH连接树莓派/通过显示器接入进行操作。我选择了前者。

a.下载远程ssh工具 putty。

树莓派ubuntu python环境 树莓派4 ubuntu_ubuntu_08

b.输入刚刚查询到的IP地址,点击【open】。

树莓派ubuntu python环境 树莓派4 ubuntu_ubuntu_09

 c.进入命令行界面登录Ubuntu。【login as:】后面输入账号名,紧接着输入密码。这里我不熟悉机器踩了坑:一直用【树莓派默认系统】的登录账号和密码在尝试【Ubuntu】的登录账号密码,结果显然是不行的,会一直提示:access is denied。

安装Ubuntu的话输入的账号名和密码都是:ubuntu。下面是登录成功的界面,马上会提示密码已失效,需要修改。

树莓派ubuntu python环境 树莓派4 ubuntu_linux_10

 二、设置SSD启动

前提:有外接SSD和硬盘盒,并将外接SSD与4B通过USB连接。

1、启动SD卡引导的树莓派系统。

2、在树莓派操作系统中打开终端,也可以通过SSH 从另一台计算机执行。

-------------------------------------------------------------------------------------------------------

1、获取root权限

sudo -i

 2、运行以下命令,升级BootLoader

sudo apt update
sudo apt full-upgrade

3、检查 bootloader 的版本,在 20年5月以后就是已经支持 USB 启动的了。

sudo vcgencmd bootloader_version

机器上运行后提示没有vcgencmd命令。

-最后我输入:vcgencmd bootloader_version,还是提示未找到vcgencmd命令,然后根据提示:sudo apt install XX,然后再次执行,成功

三、测试树莓派SD读写性能

测试脚本

#!/bin/bash

# Raspberry Pi microSD card benchmark script.
#
# A script I use to automate the running and reporting of benchmarks I compile
# for: http://www.pidramble.com/wiki/benchmarks/microsd-cards
#
# Usage:
#   # Run it locally.
#   $ sudo ./microsd-benchmarks.sh
#
#   # Run it straight from GitHub.
#   $ curl https://raw.githubusercontent.com/geerlingguy/raspberry-pi-dramble/master/setup/benchmarks/microsd-benchmarks.sh | sudo bash
#
# Another good benchmark:
#   $ curl http://www.nmacleod.com/public/sdbench.sh | sudo bash
#
# Author: Jeff Geerling, 2016

printf "\n"
printf "Raspberry Pi Dramble microSD benchmarks\n"

CLOCK="$(grep "actual clock" /sys/kernel/debug/mmc0/ios 2>/dev/null | awk '{printf("%0.3f MHz", $3/1000000)}')"
if [ -n "$CLOCK" ]; then
  echo "microSD clock: $CLOCK"
fi
printf "\n"

# Fail if $SUDO_USER is empty.
if [ -z "$SUDO_USER" ]; then
  printf "This script must be run with sudo.\n"
  exit 1;
fi

# Variables.
USER_HOME_PATH=$(getent passwd $SUDO_USER | cut -d: -f6)
IOZONE_INSTALL_PATH=$USER_HOME_PATH
IOZONE_VERSION=iozone3_487

cd $IOZONE_INSTALL_PATH

# Install dependencies.
START=$(date +%s)
apt-get -y update
apt-get -y dist-upgrade
apt-get -y upgrade
END=$(date +%s)
DIFF=$(( $END - $START ))
echo '**************************************************************************************************'
echo ' Just a feel test as the amount of updates will always change but likely to be the same on the day'
echo " So if you did a fresh image a full upgrade took $DIFF seconds"
echo '**************************************************************************************************'



if [ ! `which hdparm` ]; then
  printf "Installing hdparm...\n"
  apt-get install -y hdparm
  printf "Install complete!\n\n"
fi
if [ ! `which curl` ]; then
  printf "Installing curl...\n"
  apt-get install -y curl
  printf "Install complete!\n\n"
fi
if [ ! `which make` ]; then
  printf "Installing build tools...\n"
  apt-get install -y build-essential
  printf "Install complete!\n\n"
fi

# Download and build iozone.
if [ ! -f $IOZONE_INSTALL_PATH/$IOZONE_VERSION/src/current/iozone ]; then
  printf "Installing iozone...\n"
  curl "http://www.iozone.org/src/current/$IOZONE_VERSION.tar" | tar -x
  cd $IOZONE_VERSION/src/current
  make --quiet linux-arm
  printf "Install complete!\n\n"
else
  cd $IOZONE_VERSION/src/current
fi

# Run benchmarks.
printf "Running hdparm test...\n"
hdparm -t /dev/mmcblk0
hdparm -T /dev/mmcblk0
printf "\n"

printf "Running dd test...\n\n"
dd if=/dev/zero of=${USER_HOME_PATH}/test bs=8k count=50k conv=fsync; rm -f ${USER_HOME_PATH}/test
printf "\n"

printf "Running iozone test...\n"
./iozone -e -I -a -s 100M -r 4k -i 0 -i 1 -i 2
printf "\n"
printf "microSD card benchmark complete!\n\n"

步骤:

第一步:生成文件
1. cd 到想要存放脚本的目录下

2. touch + (file+name)

第二步:写入脚本
1. gedit 打开文件,个人感觉方便编辑(不太会用vim)

2. 第一行是必有的,剩下的就是平常要在终端里执行的一条一条语句

第三步:脚本执行
1. 脚本执行个人一般选择进入脚本所在文件,用sudo ./file_name执行

2. 上面写的脚本保存以后直接执行,会报一个“找不到命令的错误”----也可使用“chmod 777 XX.sh”指定文件访问权限

3. 打开脚本文件属性,勾选“允许作为程序执行文件”

 4. 脚本执行成功

常用命令
1. 终端touch 表示生成文件

2. cd或cd~ 表示返回home

3. cd ../ 表示返回上一级 cd ../../ 返回上两级

测试结果

树莓派ubuntu python环境 树莓派4 ubuntu_ubuntu_11

树莓派ubuntu python环境 树莓派4 ubuntu_树莓派ubuntu python环境_12

树莓派ubuntu python环境 树莓派4 ubuntu_树莓派_13

踩坑记录

树莓派联网问题

重装树莓派系统至 Ubuntu22.04 server,由于实验室是校园网,无法使用有线连接上网(无法输入认证账号、密码),只能使用无线上网。搜了各种帖子都无法解决问题,后来按照下面的帖子的方法2,完成了树莓派的无线网连接上网:

远程登录

在Windows上用VNC,输入树莓派IP后无法连接,后根据下面帖子内容进行设置,再次连接后成功: