Debian recién instalado atascado al cargar en MacBook Pro "Core 2 Duo" 2.16

Nov 08 2020

Hice una instalación exitosa de Debian 10.6 32 bits en mi MacBook Pro 2007 "Core Duo" 2.16 GHz (T2600). 2007 MacBook Pro de 15 pulgadas "Core 2 Duo" 2,16 2,16 GHz Core 2 Duo (T7400)

Intro . 24 de octubre de 2006
Disco . 5 de junio de 2007
Pedido MA609LL
Modelo A1211 (EMC 2120)
Family Core 2 Duo /
ID de finales de 2006 MacBookPro2,2
RAM 1 GB (actualizado a 3 GB)
VRAM 128 MB

(El modelo MacBook Pro incluye un procesador gráfico ATI Mobility Radeon X1600 con 256 MB 128 MB de memoria de video GDDR3 y funcionalidad DVI de doble enlace)

La versión de Debian es: i386 / iso-hybrid / debian-live-10.6.0-i386-gnome.iso.

Después de algunas correcciones, como instalar los paquetes firmware-linux-nonfree , ahora inicio y obtengo el siguiente mensaje:

"fb: switching to radeondrmfb from EFI VGA"

Una vez que se muestra este mensaje, el sistema está bloqueado.

¿Qué significa este mensaje? ¿Hay algo que pueda hacer para desbloquear la situación?

Cualquier ayuda es muy apreciada.

Respuestas

1 lx07 Nov 08 2020 at 23:02

También tengo 2007 MacbookPro2,1 y he descubierto que el controlador de Linux Radeon no funciona.

Sin recompilar su kernel, sus opciones son extremadamente limitadas; podría probar un kernel extremadamente antiguo (antes de la introducción de KMS en 2009 ) que sería difícil de encontrar e inseguro o intentar pasar el nomodesetparámetro del kernel (lo que significa que no hay gráficos).

Para que los gráficos funcionen, debe hacer lo siguiente:

  1. arrancar desde el último Live CD de ubuntu (mantenga pulsado alt, oc, en el arranque)
  2. volcar la bios dd if=/dev/mem of=vbios.bin bs=65536 skip=12 count=1
  3. muévalo a /lib/firmware/radeon/vbios.bin de su partición

Basado en este hilo de foros de Archlinux Cargar firmware Radeon personalizado para el hilo de Macbook Pro que guardé vbios.binen /usr/lib/firmware/radeon/vbios.bin.

  • Compruébelo como se describe en el enlace anterior:

b) Puede verificar la corrección con: hexdump -C vbios.bin | head -n 1 00000000 55 aa 7d e9 7f 02 00 00 00 00 00 00 00 00 00 00 | U.} ............. | los primeros dos bytes deben ser 55 aa, también más adelante en el volcado verá algunos avisos de derechos de autor. :-)

  • Parche la fuente radeon_bios.c para leer este archivo y recompilar el kernel.

Este método me ha funcionado durante los últimos años. De vez radeon_bios.cen cuando cambia y el parche en los enlaces de arriba está desactualizado. A partir del mes pasado (octubre de 2020), el siguiente parche funcionará con el kernel de kernel.org . Para otros, es posible que deba ajustarlo manualmente.

--- archlinux-linux/drivers/gpu/drm/radeon/radeon_bios.c.orig   2020-04-08 13:12:37.572725381 +0200
+++ archlinux-linux/drivers/gpu/drm/radeon/radeon_bios.c    2020-04-08 13:26:48.700908967 +0200
@@ -33,6 +33,7 @@
 #include <drm/drm_device.h>

 #include "atom.h"
+#include <linux/firmware.h>
 #include "radeon.h"
 #include "radeon_reg.h"

@@ -60,15 +61,18 @@ static bool igp_read_bios_from_vram(stru
    vram_base = pci_resource_start(rdev->pdev, 0);
    bios = ioremap(vram_base, size);
    if (!bios) {
+       DRM_ERROR("No bios\n");
        return false;
    }

    if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
+       DRM_ERROR("Invalid bios\n");
        iounmap(bios);
        return false;
    }
    rdev->bios = kmalloc(size, GFP_KERNEL);
    if (rdev->bios == NULL) {
+       DRM_ERROR("alloc fail\n");
        iounmap(bios);
        return false;
    }
@@ -77,6 +81,41 @@ static bool igp_read_bios_from_vram(stru
    return true;
 }

+static bool radeon_read_bios_from_firmware(struct radeon_device *rdev)
+{
+   const uint8_t __iomem *bios;
+   resource_size_t size;
+   const struct firmware *fw = NULL;
+
+   request_firmware(&fw, "radeon/vbios.bin", rdev->dev);
+   if (!fw) {
+           DRM_ERROR("No bios\n");
+           return false;
+   }
+   size = fw->size;
+   bios = fw->data;
+
+   if (!bios) {
+           DRM_ERROR("No bios\n");
+           return false;
+   }
+
+   if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
+           DRM_ERROR("wrong sig\n");
+           release_firmware(fw);
+           return false;
+   }
+   rdev->bios = kmalloc(size, GFP_KERNEL);
+   if (rdev->bios == NULL) {
+           DRM_ERROR("alloc fail\n");
+           release_firmware(fw);
+           return false;
+   }
+   memcpy(rdev->bios, bios, size);
+   release_firmware(fw);
+   return true;
+}
+
 static bool radeon_read_bios(struct radeon_device *rdev)
 {
    uint8_t __iomem *bios, val1, val2;
@@ -663,7 +702,9 @@ bool radeon_get_bios(struct radeon_devic
    bool r;
    uint16_t tmp;

-   r = radeon_atrm_get_bios(rdev);
+   r = radeon_read_bios_from_firmware(rdev);
+   if (!r)
+       r = radeon_atrm_get_bios(rdev);
    if (!r)
        r = radeon_acpi_vfct_bios(rdev);
    if (!r)