Reconstruir el firmware de Debian para OpenStick Wi-Fi Stick

Notas para reconstruir el firmware y el kernel de Debian para dispositivos Wi-Fi estilo OpenStick.

Preparación del entorno

  1. Instale Ubuntu 22.04.2 LTS.
  2. Instalar dependencias:
1
sudo apt install binfmt-support qemu-user-static gcc-10-aarch64-linux-gnu kernel-package fakeroot simg2img img2simg mkbootimg bison flex gcc-aarch64-linux-gnu pkg-config libncurses-dev libssl-dev unzip git

Descargar fuente

1
git clone https://github.com/OpenStick/linux.git --depth=1

Construcción del núcleo

Ajuste de la tabla de frecuencia de la CPU

Editar: linux/drivers/clk/qcom/a53-pll.c

Ajuste/extienda las entradas de frecuencia con cuidado, equilibrando el rendimiento, la potencia y las térmicas.

Edite la tabla DTS OPP según sea necesario: linux/arch/arm64/boot/dts/qcom/msm8916.dtsi

Pasos de construcción

1
2
3
4
5
cd linux
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
make msm8916_defconfig
make menuconfig

Soporte serie USB (para dispositivos USB tipo Klipper)

Habilite las opciones USB CDC ACM / USB Serial relevantes en menuconfig.

Construir paquetes

1
make -j`nproc` bindeb-pkg

Resultados esperados:

  • archivos del kernel .deb (linux-image, linux-headers)
  • Imagen.gz
  • destino DTB (msm8916-handsome-openstick-*.dtb)

Preparar imagen RootFS

Obtener la imagen base de Debian

1
2
3
4
mkdir ~/rootfs
cd ~/rootfs
wget https://github.com/OpenStick/OpenStick/releases/download/v1/debian.zip && unzip debian.zip
mv ./debian/rootfs.img ~/rootfs

Convertir formato de imagen

1
simg2img rootfs.img root.img

Montar y hacer chroot

1
2
3
4
5
sudo mount root.img /mnt
sudo mount --bind /proc /mnt/proc
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /sys /mnt/sys

Copie los archivos deb del kernel en /mnt, luego:

1
2
3
4
sudo chroot /mnt
dpkg -l | grep -E "linux-headers|linux-image" |awk '{print $2}'|xargs dpkg -P
dpkg -i *.deb
rm linux-*.deb

Habilitar rc.local con systemd

Cree /etc/systemd/system/rc-local.service y /etc/rc.local, luego:

1
systemctl daemon-reload && systemctl enable rc-local

Limpieza de configuración local y fuente adecuada

  • Instalar y configurar configuraciones regionales:
1
2
sudo apt install locales
sudo dpkg-reconfigure locales
  • Elimine las entradas inválidas de la lista de fuentes antiguas si es necesario.

Desmontar

1
2
3
4
5
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/sys
sudo umount /mnt

Volver a convertir a imagen dispersa

1
img2simg root.img rootfs.img

Crear imagen de arranque

Archivos requeridos:

  1. Imagen.gz
  2. Destino DTB (para su variante de hardware)
  3. initrd.img-* de rootfs /boot

Ejemplo (ufi001c):

1
2
3
cat Image.gz msm8916-handsome-openstick-ufi001c.dtb > ufi001c-kernel-dtb
mv initrd.img-* initrd.img
mkbootimg --base 0x80000000 --kernel_offset 0x00080000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 --pagesize 2048 --second_offset 0x00f00000 --ramdisk initrd.img --cmdline "earlycon root=PARTUUID=a7ab80e8-e9d1-e8cd-f157-93f69b1d141e console=ttyMSM0,115200 no_framebuffer=true rw" --kernel ufi001c-kernel-dtb -o ufi001c-boot.img

Reemplace boot.img y rootfs.img en el paquete de actualización con sus archivos generados.

记录并分享
Creado con Hugo
Tema Stack diseñado por Jimmy