BCM95880X (PS410、PS225、PS250、PS1100)阴间使用

简介

https://datasheet.octopart.com/PS225---DUAL-PORT-25GBE-PCIE-ETHERNET-SMARTNIC-Avago-datasheet-116220963.pdf

这个卡有几个版本。总的来说,就是8核A72@3.0,可选的4-8-16G内存。这卡是用DPDK或者ovs降低host网络负载压力的玩意儿,在我手里,我只能说浪费。但是我尽我所能去折腾他。

电源和连接

电源使用pcie供电,也就是插到host上就可以。或者是用pcie单独供电。

使用USB UART 转3.5mm。官方推荐使用RS232串口芯片,其他芯片试了不行。使用115200波特率。

固件

使用非标准的EFI引导。目前只探索到了,使用内核+dtb就可以efi启动,但是据大佬说,可以不用dtb,暂时不知道怎么实现。

系统

编译好内核后,基本不限制系统,包括openwrt

启动

网卡启动之后,会自动执行efi shell的startup指令,进行系统引导。非正常的UEFI引导。

磁盘分区

按照博通的说法,64G的磁盘,一般是5个分区

  • mmcblk0p1 512M--存放内核和dtb的分区。startup.nsh选择启动内核就是读取的这个分区,PARTLABEL="ESP"。最好别动!
  • mmcblk0p2 768M--这个是恢复系统的分区。可以使用startup选择进入恢复模式,比如删除系统原来的密码,或者重新创建系统都可以。PARTLABEL="LinuxRoot"  最好别动!
  • mmcblk0p3 16G--Linux root分区1。PARTLABEL="LinuxRoot.1"
  • mmcblk0p4 16G--Linux root分区2。PARTLABEL="LinuxRoot.2"
  • mmcblk0p5 --自定义分区

综上,他预装了3个分区,一个是恢复分区,建议别动!

另外两个是root分区,可以装不同的系统。比如一个centos,一个debian。自定义分区也可以装系统。

你可以保持前2个分区不动,其他分区自定义。注意在格式分区的时候,为了保证正确引导,需要PARTLABLE。否则startup不认你这个分区。

内核和dtb

他们都位于第一个分区。Image是内核,dt-blob就是dtb。如果你要引导其他内核,你就吧内核的vmlinuz复制到这个分区,改名为Image后面加上序号,如Image.3,dtb建议别动。

dtb和Image做多1-3。4号不识别。但是,这个是startup.nsh控制的,所以?你可以自己修改startup.nsh。

启动流程

这个efi无法将某个分区作为引导,只能使用efishell的startup自动启动,所以关键流程就在这个startup上了。如果要切换系统,切换内核就用startup.nsh去设置。当然也可以在系统里配置efi变量。这个参考下文

这里参考一下bmc的pdf教程

手动引导就是,select 要启动的分区,启动的内核,dtb。最后使用startup boot启动。

其他启动选项

在efishell输入 set extraarg ""

系统

进入机器自带的系统。如果需要密码,就进recovery,chroot之后更改密码

使用fdisk创建一个ext4的分区,并且格式化。使用gdisk进行修改partlabel

用blkid在验证,已经有LinuxRoot.2了

将分区挂载,放置rootfs。

这里以debian为例

下载bookworm的lxc镜像来试试

wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/debian/bookworm/arm64/default/20230309_05%3A24/rootfs.tar.xz
mount /dev/mmcblk0p5 /media/
tar -xvf rootfs.tar.xz -C /media
#复制模块
mkdir /media/lib/modules 
cp -r /lib/modules/`uname -r` /media/lib/modules 
umount /media

此时重启机器。

按任意键中断自动启动,进入efishell

选择新的rootfs

等会就会重启,不过我这个是lxc的,严格来说应该用debootstrap来制作rootfs。

内核

从上面的系统部分,我们可以看到,系统主要有2方面完成,1.内核 2.rootfs。只要有内核以及其模块,就可以启动不同的linux。

那么此节就是将如何编译这个内核。因为笔者对这个也了解不深,编译的内核或多或少有些问题。请不要介意。

最好使用博通的内核https://github.com/Broadcom/arm64-linux

官方内核重启似乎会卡住。

平台选择Broadcom iProc SoC Family

Device Drivers > Mailbox Hardware Support里面取消Broadcom FlexRM Mailbox 。发现这个东西,会导致开机卡死。

网卡为Broadcom NetXtreme-C/E support

笔者编译了5.11内核。下载地址为:https://github.com/jiangcuo/pve-arm64-kernel/releases/tag/v5.11-bcm95880

Tftp和NFS boot

安装软件

在linux上安装Tftp和nfs server

apt install tftpd-hpa nfs-kernel-server -y

下载套件

下载我整理好的套件

root@ubuntu-jammy:/data# mkdir /data 
root@ubuntu-jammy:/data# wget https://mirrors.apqa.cn/d/foxi/Broadcom/broadcom_ps225.tar.gz

解压套件

root@ubuntu-jammy:/data#  tar -xf broadcom_ps225.tar.gz 
root@ubuntu-jammy:/data#  ls
broadcom_ps225.tar.gz kernel nfs op tftp

修改tftpd配置文件

指定/data/tftp为根目录

nano /etc/default/tftpd-hpa 
将/srv/tftp 替换成/data/tftp

重启服务systemctl restart tftpd-hpa.service

修改nfs配置

cat >> /etc/exports << EOF
/data/nfs/bullseye  *(rw,async,no_root_squash,no_subtree_check)
/data/nfs/jammy  *(rw,async,no_root_squash,no_subtree_check)
/data/nfs/centos  *(rw,async,no_root_squash,no_subtree_check)
EOF

重新加载nfs

exportfs -rav

使用showmount 验证是否生效,有列表就代表生效。