🛠️ Guia Avançado: NVIDIA 390.157 + Bumblebee no Kernel 7.0+
Tutorial completo para compilar o driver NVIDIA Legacy 390.157 no Kernel 7.0+ aplicando patches na API, e configurar o Bumblebee (Optimus) sem a dependência do obsoleto bbswitch.
Passo 1: O Patch Definitivo (Integração DKMS)
Para garantir que o driver sobreviva a atualizações, criaremos um script de correção (hook) que o DKMS executará antes do processo de build.
1. Crie o script de correção (fix-kernel7.sh):
sudo tee /usr/src/nvidia-legacy-390xx-390.157/fix-kernel7.sh << 'EOF'
#!/bin/bash
dir=$1
cd "$dir"
# Correção VMA
sed -i 's/__is_vma_write_locked(vma, &mm_lock_seq)/__is_vma_write_locked(vma)/g' nvidia/nv-mmap.c
sed -i 's/VMA_LOCK_OFFSET/0/g' nvidia/nv-mmap.c
# Correção Screen Info (Injeção forçada no topo)
sed -i '1i #include <linux/screen_info.h>\nstatic struct screen_info screen_info = {0};' nvidia/os-interface.c
# Correção DMA Fence
sed -i 's/return dma_fence_signal(fence);/dma_fence_signal(fence); return 0;/g' nvidia-drm/nvidia-dma-fence-helper.h
EOF
sudo chmod +x /usr/src/nvidia-legacy-390xx-390.157/fix-kernel7.sh
2. Configure o DKMS para executar o script:
Edite o arquivo /usr/src/nvidia-legacy-390xx-390.157/dkms.conf e altere a diretiva PRE_BUILD:
PRE_BUILD="fix-kernel7.sh $dkms_tree/$module/$module_version/build"
3. Reconstrua o módulo via DKMS:
sudo dkms remove -m nvidia-legacy-390xx -v 390.157 --all
sudo rm -rf /var/lib/dkms/nvidia-legacy-390xx/390.157/
sudo dkms add -m nvidia-legacy-390xx -v 390.157
sudo dkms build -m nvidia-legacy-390xx -v 390.157 -k $(uname -r)
sudo dkms install -m nvidia-legacy-390xx -v 390.157 -k $(uname -r)
Passo 2: Compilação Manual e Initramfs (Alternativa)
Se preferir compilar manualmente (via make) em vez de usar o DKMS, aplique os mesmos patches no código-fonte e siga os passos abaixo para compilar e instalar os módulos no Kernel 7.
cd /var/lib/dkms/nvidia-legacy-390xx/390.157/build
# Compilar via make com os headers do kernel atual
sudo make SYSSRC=/usr/src/linux-headers-$(uname -r) -j$(nproc)
# Criar pasta e copiar os módulos
sudo mkdir -p /lib/modules/$(uname -r)/updates/dkms
sudo cp nvidia.ko nvidia-modeset.ko nvidia-drm.ko nvidia-uvm.ko /lib/modules/$(uname -r)/updates/dkms/
# Gerar o novo mapa de módulos e atualizar a imagem de boot
sudo depmod -a $(uname -r)
sudo update-initramfs -u -k $(uname -r)
Passo 3: Domando o Bumblebee no Kernel 7
O Kernel 7 alterou o gerenciamento de energia, tornando o módulo bbswitch obsoleto. Precisamos configurar o Bumblebee para usar o método none (placa sempre ligada) e ajustar as rotas.
1. Exemplo final recomendado para o /etc/bumblebee/bumblebee.conf:
[bumblebeed]
VirtualDisplay=:8
KeepUnusedXServer=false
ServerGroup=bumblebee
TurnCardOffAtExit=false
NoEcoModeOverride=false
Driver=nvidia
XorgConfDir=/etc/bumblebee/xorg.conf.d
XorgBinary=/usr/lib/xorg/Xorg
[optirun]
Bridge=auto
VGLTransport=proxy
PrimusLibraryPath=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus
AllowFallbackToIGC=false
[driver-nvidia]
KernelDriver=nvidia
PMMethod=none
LibraryPath=/usr/lib/x86_64-linux-gnu/nvidia/legacy-390xx:/usr/lib/i386-linux-gnu/nvidia/legacy-390xx
XorgModulePath=/usr/lib/nvidia/legacy-390xx,/usr/lib/xorg/modules
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia
XorgArgs=-config /etc/bumblebee/xorg.conf.nvidia -sharevts -nolisten tcp -noreset -verbose 3 +iglx
[driver-nouveau]
KernelDriver=nouveau
PMMethod=bbswitch
XorgConfFile=/etc/bumblebee/xorg.conf.nouveau
2. Liberação do Modprobe e Permissões:
sudo sed -i 's/alias nvidia off/# alias nvidia off/g' /etc/modprobe.d/bumblebee.conf
sudo sed -i 's/alias nouveau off/# alias nouveau off/g' /etc/modprobe.d/bumblebee.conf
sudo usermod -aG bumblebee $USER
sudo systemctl restart bumblebeed
Passo 4: Validação e Testes
Para verificar se a GPU está sendo acionada corretamente, utilize o optirun. Lembre-se: O Bumblebee e o VirtualGL exigem o protocolo X11. Certifique-se de selecionar Orion OS on Xorg na tela de login.
optirun glxinfo | grep "OpenGL renderer"
# Resultado esperado: OpenGL renderer string: GeForce GT 520M...