《Taylor的树莓派》之 树莓派3B+ 安装CentOS 7 for ARM64
程序员文章站
2022-05-07 13:46:49
一、简介 1.1 个人简介 1.2 树莓派简介 树莓派是什么? 谁在玩树莓派? 我们可以用树莓派做什么? 1.3 ARM简介 在学习任何嵌入式开发之前,最先要了解的就是嵌入式终端的CPU架构。 树莓派是典型的嵌入式开发板,其CPU架构自然是ARM,先来看下树莓派3B+的硬件配置: ARM概念 CPU ......
一、简介
1.1 个人简介
Taylor 80后程序员,热爱技术、追求极致,爱玩、爱折腾,10年.NET开发,熟悉.NET、Java、Python等技术。
1.2 树莓派简介
树莓派是什么?
树莓派(Raspberry Pi),是一款只有一张信用卡大小的开源单板计算机, 它由英国的树莓派基金会开发,目的是以低价硬件及*软件刺激在学校的 基本的电脑科学教育,在经历几代版本的更新迭代后,树莓派不仅支持Linux以及Linux的衍生版本系统,还支持Windows 10 IoT Core等全新的系统平台, 并且融入了众多的AI元素,是目前全球应用最广、最受电子爱好者、工程师、学生喜爱的开源单板计算机。
谁在玩树莓派?
通过上文的介绍我们可以了解到,树莓派最初的目的是致力于在校学生的计算机教育,无论是小学生、中学生还是大学生,都可以零基础入门。 随着树莓派的不断迭代、性能提升,其作用也在发生变化,除了计算机教育的应用,还被众多的嵌入式开发工程师、软件开发工程师等用来做各种实验项目。 如果你对树莓派或者编程感兴趣,无论你是否学过计算机编程,都可以零基础入门。 PS:《Taylor的树莓派》系列教程会陆续发布,希望热爱技术的你和我一起学习!
我们可以用树莓派做什么?
Linux系统学习 利用树莓派学习Linux系统的基本操作和命令 Git服务器 利用树莓派搭建局域网/外网的Git服务器,方便个人或小团队的代码管理 FTP服务器 利用树莓派搭建局域网/外网的FTP服务器,建立个人或小团队的FTP站点 消息队列服务器 利用树莓派搭建消息队列服务器,如:部署RPC服务端或消费者端进行消息处理等 爬虫服务器 利用树莓派搭建分布式爬虫服务器,如:Python+RabbitMQ+redis的高并发分布式爬虫等 微服务部署 利用树莓派部署基于Docker的微服务架构API,如.NET Core、Spring Boot等 物联网开发 利用树莓派的串口连接各类传感器(如:温湿度传感器、光照传感器、烟雾传感器等)进行物联网开发
1.3 ARM简介
在学习任何嵌入式开发之前,最先要了解的就是嵌入式终端的CPU架构。
树莓派是典型的嵌入式开发板,其CPU架构自然是ARM,先来看下树莓派3B+的硬件配置:
博通BCM2837B0 SoC,集成四核ARM Cortex-A53(ARMv8)64位@ 1.4GHz CPU,集成博通 Videocore-IV GPU 内存:1GB LPDDR2 SDRAM 有线网络:千兆以太网(通过USB2.0通道,最大吞吐量 300Mbps) 无线网络:2.4GHz和5GHz 双频Wi-Fi,支持802.11b/g/n/ac 蓝牙:蓝牙4.2&低功耗蓝牙(BLE) 存储:Micro-SD 其他接口:HDMI,3.5mm模拟音频视频插孔,4x USB 2.0,以太网,摄像机串行接口(CSI), 显示器串行接口(DSI),MicroSD卡座,40pin扩展双排插针 尺寸:82mmx 56mmx 19.5mm,50克
ARM概念
ARM首先是一个公司,这家公司设计CPU并向各个CPU制造商授权许可,所以ARM公司是一家CPU设计公司。同时,ARM也是ARM公司主导设计的CPU系列的简称。 ARM版本区分 ARM版本号可以分为三类: · 内核版本号,例如ARMv5,ARMv7,ARMv7a,ARMv8a... · Soc版本号,例如Cortex-A8,Cortex-A9... · 芯片型号,例如2410,2440,6410,S5PV210...
CPU设计原理和总线
CPU主要包括运算器,控制器,存储器通过总线与Flash与内存连接。 总线就类似于CPU中的道路,数据通过总线在CPU和外设之间传输,CPU也通过内部总线与SOC中的其他外设连接,例如UART设备,内部总线由于在芯片内部, 抗干扰能力强,运算速度更快。 总线分为两种,地址总线和数据总线: 地址总线用于传输地址,CPU通过地址总线寻址,告诉设备要取的数据在哪个地址中,地址总线的位数决定了寻址范围 数据总线用于传输数据,CPU通过数据总线与外部交换信息,将设备要的数据通过该总线发送给对方,数据总线的位数决定了CPU单次通信能交换的信息数量 总线的速度决定了CPU和外设互换信息的速度 CPU的地址总线和数据总线的位数可以不同,CPU的位数就指的是数据总线的位数 32位CPU的寻址范围是4G所以最多支持4G内存,数据总线是32位的,那么传输一个int和传输一个char的效率是一样的。 在64位系统下运行32位软件,唯一的差别就是32位软件仍然是32寻址机制,所以只有64位系统才能原生支持超过4G内存的寻址。
树莓派3B+使用的CPU为四核ARM Cortex-A53(ARMv8)64位,通过上文我们了解到32位的寻址空间有限,并不能真正发挥64位CPU的性能,有实验证明,64位CPU的树莓派比32位的效率提高近30倍。
支持ARM的系统
了解了树莓派的CPU,再来说下支持树莓派的系统,目前支持树莓派的系统有以下几种: Raspbain Stretch 树莓派官方操作系统(图形界面版) Raspbain Stretch Lite 树莓派官方操作系统(命令行版) Ubuntu Mate Ubuntu标准系统(图形界面版) ...... Ubuntu Server Ubuntu服务器系统 Windows 10 IoT Core Windows 10的物联网核心系统 CentOS-armhfp Centos arm32位版 CentOS-AArch64 Centos arm64位版 说明:Centos系统官方只提供32位版本的img镜像下载,64位版系统提供.iso的镜像下载,树莓派无法烧录.iso镜像 Centos从ARMv8开始使用AArch术语表示,AArch是ARMv8的官方Linux体系结构名称 详见官方说明:https://seven.centos.org/2015/03/building-centos-linux-7-for-armv8/ 官方镜像地址32位:http://mirror.centos.org/altarch/7/isos/armhfp/ 官方镜像地址64位:http://mirror.centos.org/altarch/7/isos/aarch64/
更多系统,详见
二、材料清单
树莓派3B+(2.5V电源 + USB线)x 1 约230-250元 闪迪TF卡(64G)x 1 约80-100元 TF卡读卡器 x 1 约10元 材料总价约300元
三、烧录系统
镜像文件
树莓派的镜像文件为.img,下载的操作系统镜像为.img文件或raw.xz文件 本文使用CentOS for AArch64作为树莓派的操作系统,由于Centos官方未提供64位的img镜像下载,所以本文采用移植版的CentOS for AArch64 镜像下载地址:https://github.com/chainsx/centos64-rpi
使用工具
SDFormatter:TF卡格式化工具,用于格式化TF卡 下载地址:https://www.sdcard.org/chs/downloads/formatter_4/eula_windows/index.html Win32DiskImager:镜像烧录工具,用于烧录img镜像 下载地址:https://sourceforge.net/projects/win32diskimager/ putty:SSH连接工具,用于ssh连接树莓派 下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/
四、基础配置
4.1 扩展磁盘分区
系统烧录完成之后的系统分区为根分区+Linux分区,也就是TF卡的磁盘大小仅为系统镜像的大小,很显然这是不能接受的,我们要对磁盘进行重新分区,找回失去的磁盘空间
关于烧录分区
img镜像是一种可引导的分区文件,系统烧录完成后,磁盘被分为两个区。 一个是FAT16可读写的根分区,用来存放镜像引导文件和系统内核等文件。 一个是Linux的只读分区,用来存放Linux文件系统。 重新分区的目的就是将只读分区的剩余空间扩展出来,最大化磁盘剩余空间,用来存储其他文件
查看磁盘大小
[root@localhost ~]# df -h
进入分区工具
[root@localhost ~]# fdisk /dev/mmcblk0 Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
磁盘分区
#删除分区(命令:d) Command (m for help): d #选择分区(删除默认分区) Partition number (1,2, default 2): 输入2或直接回车 #列出分区表(命令:p) Command (m for help): p Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 2048 131072 64512+ e W95 FAT16 (LBA) #新建分区(命令:n) Command (m for help): n #选择分区类型(选择默认类型,输入p) Select (default p): p #选择分区(选择默认分区) Partition number (2-4, default 2): 输入2或回车 #选择第二分区起始位置(使用默认) First sector (131073-124735487, default 133120): 回车 #选择第二分区结束位置(使用默认) Last sector, +sectors or +size{K,M,G} (133120-124735487, default 124735487): 回车 #列出分区表(命令:p) Command (m for help): p Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 2048 131072 64512+ e W95 FAT16 (LBA) /dev/mmcblk0p2 133120 124735487 62301184 83 Linux #把分区写进分区表,保存并退出(命令:w) Command (m for help): w
重启系统
[root@localhost ~]# reboot
重启后调整分区大小(重要步骤!!!)
#要调整的分区为第二分区 [root@localhost ~]# resize2fs /dev/mmcblk0p2
查看磁盘大小
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 59G 2.3G 54G 5% / devtmpfs 454M 0 454M 0% /dev tmpfs 459M 0 459M 0% /dev/shm tmpfs 459M 12M 448M 3% /run tmpfs 459M 0 459M 0% /sys/fs/cgroup /dev/mmcblk0p1 63M 63M 2.0K 100% /boot tmpfs 92M 0 92M 0% /run/user/0
4.2 升级系统内核
由于移植版本的系统内核未提供无线网络、蓝牙等扩展功能的驱动,所以需要升级系统内核,否则无法开启树莓派的无线网卡
查看内核版本
#查看内核版本 [root@localhost ~]# cat /proc/version Linux version 4.13.16-chainsx-edition-CX-v5 (root@ubuntu) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.6)) #1 SMP PREEMPT Tue Feb 20 18:45:58 CST 2018
配置hosts
#编辑hosts [root@localhost ~]# vi /etc/hosts #输入以下内容(或参考 常见问题及解决 使用DNS检测网站检测最新的IP) 192.30.253.112 github.com 151.101.113.194 github.global.ssl.fastly.net
克隆项目
#从git克隆项目 [root@localhost ~]# git clone https://github.com/chainsx/firmware64-rpi Cloning into 'firmware64-rpi'... remote: Counting objects: 2928, done. remote: Total 2928 (delta 0), reused 0 (delta 0), pack-reused 2928 Receiving objects: 100% (2928/2928), 65.13 MiB | 2.82 MiB/s, done. Resolving deltas: 100% (517/517), done. Checking out files: 100% (2895/2895), done.
进入目录
[root@localhost ~]# cd /root/firmware64-rpi
安装内核
[root@localhost ~]# cd install && sh install.sh Install Image,dtbs cp: cannot overwrite directory ‘/boot/overlays’ with non-directory cp: error writing ‘/boot/vmlinuz-4.16.0-chainsx-edition-chainsx+v7’: No space left on device Remove old modules OK Install modules OK Install firmware OK Install kernel_headers OK Configure files #uncomment to overclock the arm. 700 MHz is the default. arm_freq=700# NOOBS Auto-generated Settings: hdmi_force_hotplug=1 config_hdmi_boost=4 overscan_left=24 overscan_right=24 overscan_top=16 overscan_bottom=16 disable_overscan=0 core_freq=250 sdram_freq=400 over_voltage=0 OK You can reboot to use this new kernel.
重启系统
[root@localhost ~]# reboot
查看内核版本
[root@localhost ~]# cat /proc/version Linux version 4.16.0-chainsx-edition-chainsx+v7 (root@ubuntu) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.6)) #3 SMP PREEMPT Thu Mar 22 02:32:13 CST 2018
4.3 更改系统语言
查看语言配置
[root@localhost ~]# cat /etc/locale.conf LANG="en_US.UTF-8"
查看系统语言包
[root@localhost ~]# locale -a
修改语言配置
[root@localhost ~]# vi /etc/locale.conf #更改为简体中文 LANG="zh_CN.utf8"
重启系统
[root@localhost ~]# reboot
查看语言配置
[root@localhost ~]# cat /etc/locale.conf LANG="zh_CN.utf8"
4.4 配置无线网络
查看IP地址
[root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0 valid_lft 6935sec preferred_lft 6935sec inet6 fe80::ba27:ebff:fee1:2a28/64 scope link valid_lft forever preferred_lft forever 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff #注意:查看wlan0的状态是否为UP,当前wlan0的状态没有UP,说明没有开启,执行下一条命令开启wlan0
开启wlan0
[root@localhost ~]# ip link set wlan0 up
查看IP地址
[root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0 valid_lft 6912sec preferred_lft 6912sec inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever 3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff #注意:查看wlan0的状态是否为UP,当前wlan0的状态为UP,说明已经开启
安装wifi管理工具
[root@localhost ~]# yum -y install NetworkManager-wifi
配置文件设置wifi
[root@localhost ~]# cd /etc/sysconfig/network-scripts
创建配置文件
#ifcfg-后面的名称与下文NAME参数对应 [root@localhost ~]# vi ifcfg-taylor #输入内容如下: HWADDR=xx:xx:xx:xx:xx:xx #无线网卡MAC地址(本例以x号代替,可以使用 ip addr 命令查看 wlan0 的MAC地址) ESSID=xxxxxx #wifi名称(无线网的名称,本例以x号代替) MODE=Managed KEY_MGMT=WPA-PSK SECURITYMODE=open MAC_ADDRESS_RANDOMIZATION=default TYPE=Wireless PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none #启用静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=taylor #网络连接的名称 UUID=ff0af7a2-aac8-45b7-bf21-894d571c9b2a ONBOOT=yes #开机自动启动 IPADDR=192.168.0.110 #静态IP PREFIX=24 #子网掩码24位 GATEWAY=192.168.0.1 #默认网关 DNS1=192.168.1.1 #DSN 1 DNS2=192.168.0.1 #DNS 2
创建密钥文件
#keys-后面的名称与上文NAME参数对应
[root@localhost ~]# vi keys-taylor
#输入内容如下(本例以x号代替) WPA_PSK=xxxxxx #wifi密码
重启系统
[root@localhost ~]# reboot #系统重启后使用ip addr 命令查看wlan0是否正确分配ip,如果正确分配ip,此时可拔掉网线,断开ssh连接。 使用静态ip连接ssh,即使用wifi连接树莓派
4.5 安装基础工具
安装下载工具
[root@localhost ~]# yum -y install wget
安装epel源
#下载(清华大学镜像站地址) [root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm #安装 [root@localhost ~]# rpm -vih epel-release-latest-7.noarch.rpm #查看 [root@localhost ~]# cd /etc/yum.repos.d [root@localhost yum.repos.d]# ls CentOS-Base.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo epel.repo CentOS-Base.repo.rpmnew CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo epel-testing.repo #更新源 [root@localhost ~]# yum clean all && yum makecache
安装开发工具包
[root@localhost ~]# yum groupinstall "Development Tools"
4.6 升级系统版本
查看系统版本
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (AltArch)
备份重要数据
备份过程略(或不备份直接升级)
运行yum命令升级
#清除yum缓存 [root@localhost ~]# yum clean all #更新所有包 [root@localhost ~]# yum -y update
重启系统
[root@localhost ~]# reboot
查看系统版本
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (AltArch)
4.7 设置系统时区
查看时区设置
[root@localhost ~]# timedatectl Local time: Sat 2018-07-07 13:51:00 UTC Universal time: Sat 2018-07-07 13:51:00 UTC RTC time: n/a Time zone: Etc/UTC (UTC, +0000) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
设置时区
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
查看时区设置
[root@localhost ~]# timedatectl Local time: 日 2018-06-24 21:29:14 CST Universal time: 日 2018-06-24 13:29:14 UTC RTC time: n/a Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
4.8 修改系统密码
修改root密码(密码输入无任何回显,摸黑输入)
#若提示 无效的密码: 密码包含用户名在某些地方 请忽略该提示,再次输入密码即可更改成功 #英文版 [root@localhost ~]# passwd root Changing password for user root. New password: BAD PASSWORD: The password contains the user name in some form Retype new password: passwd: all authentication tokens updated successfully. #中文版 [root@localhost ~]# passwd root 更改用户 root 的密码 。 新的 密码: 无效的密码: 密码包含用户名在某些地方 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。
重启系统
[root@localhost ~]# reboot
五、常见问题及解决
5.1 ifconfig命令无效
描述:输入ifconfig命令后显示 -bash: ifconfig: command not found 或 -bash: ifconfig: 未找到命令 原因:缺少net-tools包(net-tools包提供了ifconfig命令) 解决:安装net-tools yum install net-tools 拓展: 1、CentOS 7最小化系统,使用 ip addr 和 ip link 命令来查找网卡详情,要知道统计数据,可以使用 ip -s link 2、如果你不知道在哪里可以找到ifconfig命令,请按照以下简单的步骤来找到它。 首先,让我们找出哪个包提供了ifconfig命令。要完成这项任务,输入以下命令: yum provides ifconfig 或者你也可以使用以下命令 yum whatprovides ifconfig “provides”或者“whatprovides”开关用于找出某个包提供了某些功能或文件
5.2 GitHub访问/下载太慢
使用(站长工具-Dns检测) http://tool.chinaz.com/dns/ 或(IP检测网站) https://www.ipaddress.com/ 分别检测 github.com github.global.ssl.fastly.net-tools codeload.github.com 写入hosts(Windows): C:\Windows\System32\drivers\etc\hosts 192.30.253.113 github.com 151.101.73.194 github.global.ssl.fastly.net cmd 执行 ipconfig /flushdns 命令,刷新 DNS 缓存 写入hosts(Linux): vi /etc/hosts 192.30.253.112 github.com 151.101.113.194 github.global.ssl.fastly.net