基于树莓派4B搭建64位树莓派系统

it2024-01-12  69

一、准备环境

1. 硬件环境

电脑一台(本人用笔记本,WIN7系统)TF卡一张(存储空间32GB以上)和读卡器树莓派4B

2. 软件环境

系统烧入软件:balenaEtcher ,其实树莓派也有自己的烧入软件Pi imagertelnet/ssh软件:putty,或用其他软件代替抓包软件:wireshark树莓派镜像文件,可以从树莓派官网选择下载Lite版镜像文件,也可以下载其他的带桌面的版

二、烧写系统

参考文章《树莓派4B搭建openwrt系统和WEB服务》的烧写流程烧入树莓派的系统。

三、配置config.txt

在配置树莓派之前,先简单介绍一下树莓派的系统架构(查找网络资料和自己和领会,不一定准确)

树莓派系统启动分三个部分:

一:bootloader

bootloader是设备上电最早执行的功能,主要做设备的软硬件环境准备,包括CPU核心部分驱动和部分外围接口驱动,对于树莓派总体来说也分三个阶段:

阶段一:内部ROM阶段

树莓派核心的芯片是博通的BCM2711芯片,4个cortex A72内核,单核最高主频1.5GHz,支持64位。芯片内部应该有固定的ROM(根据网上的资料猜的,没找到芯片手册),代码就是从这个ROM最早启动,也就是所谓的地址0启动的地方。

这个ROM上的代码就是挂载SD卡上FAT32分区,同时加载bootcode.bin文件,对于树莓派4来说,不用bootcode.bin,直接可以通过一个外接的EEPROM执行接下来的代码。既然树莓派4不需要bootcode.bin,所以EEPROM中的固件是可以升级的,升级流程方式可以参考官方的文章《Raspberry Pi 4 boot EEPROM》。文章中也描述了ROM阶段会检查recovery.bin文件,从而替换掉EEPROM的固件执行。

对于boot目录中文件的介绍参考文章《The boot folder》。

对于bootloader的介绍参考文章《Pi 4 Bootloader Configuration》

ROM固件代码目前是不开源的。ROM阶段可能还存在其他功能,可以继续探索。

阶段二:EEPROM阶段

本阶段主要从SD卡中检索GPU固件start.elf,并写入GPU后启动GPU。可能还包含一些读取boot目录下config.txt做一些驱动配置的工作。

对于boot中EEPROM的固件下载可以从github上下载,参考地址如下:

https://github.com/raspberrypi/rpi-eeprom

EEPROM的代码目前是不开源的。EEPROM阶段可能还存在其他功能,可以继续探索。

阶段三:start.elf阶段

本阶段主要在GPU中执行,检索配置文件config.txt和fixup.dat,根据配置设置CPU运行参数和内存分配情况,随后加载内核kernel.img到内存,并启动CPU。

start.elf代码目前也不开源。固件下载地址如下:

https://github.com/raspberrypi/firmware

二:内核启动

树莓派4默认默认使用kernel7l.img启动,该内核为32位arm架构,kernel8.img为64位系统,切换为64位系统需要配置config.txt文件,具体可以参考后续的详细说明。

内核启动部分主要就是做系统的引导,外围器件的驱动,内存管理,进程管理,网络协议栈的建立等工作,最后启动虚拟文件系统,启动用户进程。

内核部分代码是开源的,可以制作自己想要的内核版本。或者在树莓派的内核基础上修改实现自己的功能代码,最后编译出对应的内核镜像。

树莓派内核代码参考github路径:

https://github.com/raspberrypi/linux

后续可以专门输出怎么制作树莓派内核的文章,待续。。。

三:文件系统

不同的系统如Ubuntu、openwrt、树莓派等可能会基于相同的内核版本代码,根据自己系统的定位需求开启不同的内核功能,但文件系统提供的功能会有很大的差异,用户体验也会有不同的风格。

树莓派的文件系统可以开放用户自定义,只要保障boot分区使用FAT32文件系统。系统分区可以通过busybox自定义个性化的文件系统,也可以通过buildroot制作树莓派的整个镜像文件。

配置64位系统

1. 烧写完系统后,对于有外接显示屏的用户来说,可能就不需要再配置SSH,否则得把树莓派的SSH功能打开,通过在boot盘下放入空的SSH文件(文件无后缀无内容),然后把TF卡插入树莓派并启动树莓派。

2. 可以通过PC和树莓派直连,并通过wireshark抓包工具抓包,进而得出树莓派的IP地址。

3. 配置PC的IP地址和树莓派的IP地址保持同一个网段,使用Putty软件连接树莓派,树莓派默认用户:pi,密码为raspberry,可以通过sudo passwd pi修改为简单的密码方便记忆。

pi@raspberrypi:~ $ sudo passwd pi New password: Retype new password: passwd: password updated successfully

4. 通过配置/etc/dhcpcd.conf文件配置网口的IP地址,配置设备为静态IP地址,这样重启设备或重启接口后就可以连通网络

pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf # A list of options to request from the DHCP server. option domain_name_servers, domain_name, domain_search, host_name option classless_static_routes # Respect the network MTU. This is applied to DHCP routes. option interface_mtu # Most distributions have NTP support. #option ntp_servers # A ServerID is required by RFC2131. require dhcp_server_identifier # Generate SLAAC address using the Hardware Address of the interface #slaac hwaddr # OR generate Stable Private IPv6 Addresses based from the DUID slaac private # Example static IP configuration: interface eth0 static ip_address=192.168.100.87/24 static ip6_address=fd51:42f8:caae:d92e::ff/64 static routers=192.168.100.2 static domain_name_servers=114.114.114.114 # It is possible to fall back to a static IP if DHCP fails: # define static profile #profile static_eth0 #static ip_address=192.168.1.23/24 #static routers=192.168.1.1 #static domain_name_servers=192.168.1.1 # fallback to static profile on eth0 #interface eth0 #fallback static_eth0

5. 树莓派默认为32位系统,使用uname -a可以看出CPU架构为armv7l

pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux

6. 修改/boot/config.txt文件,增加arm_64bit=1,保存文件并重启,config.txt文件内容参考文章《Boot options in config.txt》

pi@raspberrypi:~ $ sudo nano /boot/config.txt ...... # Additional overlays and parameters are documented /boot/overlays/README # Enable audio (loads snd_bcm2835) dtparam=audio=on arm_64bit=1 .....

7. 重新启动后,查看系统的架构就变成了64位架构

pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.4.51-v8+ #1333 SMP PREEMPT Mon Aug 10 16:58:35 BST 2020 aarch64 GNU/Linux

 

最新回复(0)