Compilación del firmware del sistema Debian para wifi portátil

Registre el proceso de compilación del firmware del sistema Debian para dispositivos WiFi portátiles, incluida la preparación del código fuente, la construcción del kernel y rootfs, la verificación de flash y los problemas comunes.

Preparación del sistema

  1. Instale Ubuntu 22.04.2 LTS
  2. Instale el paquete de software
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 código

Clonar el código del repositorio MANTENER_1

Compilación del núcleo

Overclocking del núcleo

Modifique el archivo linux/drivers/clk/qcom/a53-pll.c MANTENER_2 La primera columna es la frecuencia de funcionamiento y la segunda columna es el voltaje de suministro.

De acuerdo con las reglas anteriores, se puede juzgar aproximadamente que el valor del voltaje aumenta en 10 por cada aumento de 200 MHz. Sin embargo, dado que se excede la frecuencia de diseño del chip, el consumo de energía y la generación de calor deben considerarse al mismo tiempo, por lo que el valor del voltaje debe aumentarse ligeramente cuando se aumente más adelante. Los datos posteriores a 1401600000 se agregan de acuerdo con las reglas anteriores.

Modifique el archivo linux/arch/arm64/boot/dts/qcom/msm8916.dtsi. La frecuencia predeterminada aparece alrededor de la línea 220. Después de eso, aumente la frecuencia. La frecuencia aumentada debe agregarse en el archivo anterior. MANTENER_3

Compilar configuración

MANTENER_4

make msm8916_defconfig importa parámetros de compilación preestablecidos hacer opciones de configuración de menuconfig

Agregar el controlador serie USB Klipper

Aplicable al problema de que se pueden encontrar dispositivos USB, pero el directorio serie y el dispositivo no se pueden encontrar en /dev

  1. Instalar lsub sudo apt-get instalar usbutils
  2. Cambie el puerto USB al modo host (ejecute como root) host de eco > /sys/kernel/debug/usb/ci_hdrc.0/role
  3. Ver dispositivos USB Ejecute el comando lsusb y debería poder ver el dispositivo USB correspondiente. Si no hay un dispositivo USB correspondiente, puede ser un problema de comunicación, un problema de firmware o la placa en sí es anormal.
  4. Una vez resueltos todos los problemas anteriores, agregue el controlador del puerto serie MANTENER_5

Comience a compilar

MANTENER_6 El comando anterior genera directamente el paquete de archivos deb en un solo paso. Ingrese ls ../ para verlo.

El paquete de software correspondiente a make-kpkg no se puede actualizar en Ubuntu 22.04. La declaración oficial es que no se mantuvo por mucho tiempo, por lo que fue eliminado. Por lo tanto, el siguiente comando no se puede ejecutar. Puede que sea posible en algunas versiones anteriores. MANTENER_7

Una vez completada la compilación, se generarán 3 partes del archivo.

  1. Paquete deb del kernel, incluidos encabezados e imágenes linux-headers-5.15.0-handsomekernel+_5.15.0-handsomekernel+-7_arm64.deb y linux-image-5.15.0-handsomekernel+_5.15.0-handsomekernel+-7_arm64.deb están un nivel por encima del directorio de compilación ../

  2. Imagen.gz Linux/arch/arm64/boot/Image.gz

  3. Árbol de dispositivos dtb linux/arch/arm64/boot/dts/qcom/msm8916-handsome-openstick-xxxxxxxx, elige según tu dispositivo MANTENER_8

Procesar rootfs, partición raíz

La modificación se completa en función del paquete de partición raíz publicado por el proyecto openstick original.

Descargue el paquete base original de openstick debian

MANTENER_9 En el paquete debian.zip, rootfs.img es el archivo img de la partición raíz.

Utilice simg2img para convertirlo a un formato que se pueda montar.

1
simg2img rootfs.img root.img

chroot maneja rootfs

montar raíz.img

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

Instale el último kernel compilado

1
2
sudo cp xxx/linux-headers-5.15.0-handsomekernel+_5.15.0-handsomekernel+-7_arm64.deb /mnt
sudo cp xxx/linux-image-5.15.0-handsomekernel+_5.15.0-handsomekernel+-7_arm64.deb /mnt

Utilice chroot para ingresar al sistema montado, elimine el paquete de imagen de Linux original en el sistema e instale el paquete de software deb recién generado. Elimine el archivo deb después de la instalación.

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 

Crear script de arranque rc.local

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
cat>>/etc/systemd/system/rc-local.service<<EOF
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
EOF

cat <<EOF >/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#

exit 0
EOF

systemctl daemon-reload && systemctl enable rc-local

Reconfigurar la configuración regional

Es posible que el Debian utilizado por OpenStick se haya simplificado, por lo que a veces pueden aparecer mensajes de error. advertencia: setlocale: LC_ALL: no se puede cambiar la configuración regional (en_US)

Los siguientes métodos pueden resolver este problema.

1
2
$ sudo apt install locales
$ sudo dpkg-reconfigure locales

Puedes elegir en_US.UTF-8

modificación de fuente apta

/etc/apt/sources.list.d/mobian.list no es válido y se puede eliminar directamente

Extraer los archivos necesarios para las particiones de arranque posteriores

Archivo:/mnt/boot/initrd**.img Simplemente cópielo con anticipación

Finalizar chroot Finalizar desmontaje

Ingrese directamente a la salida para salir

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

Utilice simg2img para volver a convertir

Convierta boot.img al formato rootfs.img para flashear

1
img2simg root.img rootfs.img

rootfs.img es el archivo de imagen de la partición raíz después del procesamiento final.

Procesar la partición de arranque

The following takes the ufi001c device as an example, and other devices can be deduced by analogy.

Lista de archivos requeridos

  1. Image.gz (linux/arch/arm64/boot/Image.gz) generated during compilation
  2. El árbol de dispositivos dtb (linux/arch/arm64/boot/dts/qcom/msm8916-handsome-openstick-ufi001c.dtb) generado durante el proceso de compilación se selecciona según su dispositivo.
  3. /boot/initrd**.img generated after modifying rootfs

Generar arranque

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

ufi001c-boot.img es el archivo de imagen de partición de arranque final generado

En este punto, se ha generado rootfs.img ufi001c-boot.img. Simplemente reemplace rootfs.img boot.img en el paquete flash debian.zip y actualícelo.

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