# uvesafb broke on new install, worked on old install

## dman777

I added a second hard drive to my system and on that second hard drive I am installing a new Gentoo system. 

With my other hard drive, which has a working Gentoo with kernel 3.14.14-gentoo, I have uvesafb which works great. Here is the info when it boots up:

[

```
    0.000000] Command line: BOOT_IMAGE=/kernel1 root=/dev/sdd3 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

[    0.000000] Kernel command line: BOOT_IMAGE=/kernel1 root=/dev/sdd3 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

[    1.149438] uvesafb: NVIDIA Corporation, GK104 Board - 20040010, Chip Rev   , OEM: NVIDIA, VBE v3.0

[    1.213998] uvesafb: VBIOS/hardware doesn't support DDC transfers

[    1.214097] uvesafb: no monitor limits have been set, default refresh rate will be used

[    1.214510] uvesafb: scrolling: redraw

[    1.404850] uvesafb: framebuffer at 0xdf000000, mapped to 0xffffc90010e80000, using 14336k, total 14336k

[    1.404897] fb0: VESA VGA frame buffer device
```

```
[IP-] [  ] dev-libs/klibc-1.5.25:0

[IP-] [  ] sys-apps/v86d-0.1.10:0

```

Here is the kernel .config for 3.14.14: http://dpaste.com/3M5JNXC

However, on my second hard drive where I am install my new Gentoo system on the exact same PC, I can not get uvesafb to work. I am using the new kernel linux-4.4.6-gentoo with the same options enabled for uvesafb as the previous mentioned kernel above. 

```
[    0.000000] Command line: BOOT_IMAGE=/kernel1 root=/dev/sdc2 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

[    0.000000] Kernel command line: BOOT_IMAGE=/kernel1 root=/dev/sdc2 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

[    0.946502] uvesafb: failed to execute /sbin/v86d

[    0.946661] uvesafb: make sure that the v86d helper is installed and executable

[    0.946935] uvesafb: Getting VBE info block failed (eax=0x4f00, err=-2)

[    0.947096] uvesafb: vbe_init() failed with -22

[    0.947274] uvesafb: probe of uvesafb.0 failed with error -22

```

```
[IP-] [  ] dev-libs/klibc-1.5.25:0

[IP-] [  ] sys-apps/v86d-0.1.10:0
```

Here is the kernel .config for 4.4.6: http://dpaste.com/1YT8W2N

Any ideas what is going on? Oh also, I do not use a initramfs. Never had to for uveasfb, not sure why the docs imply you have to.

----------

## chithanh

```
 [    0.946502] uvesafb: failed to execute /sbin/v86d 
```

There is your problem. uvesafb needs to access v86d, either in initramfs or otherwise built into your kernel, or uvesafb must be a module.

----------

## dman777

It shows as built into the kernel:

```
 Symbol: FB_UVESA [=y]                                                                                                                                    │  

  │ Type  : tristate                                                                                                                                         │  

  │ Prompt: Userspace VESA VGA graphics support                                                                                                              │  

  │   Location:                                                                                                                                              │  

  │     -> Device Drivers                                                                                                                                    │  

  │       -> Graphics support                                                                                                                                │  

  │ (1)     -> Frame buffer Devices                                                                                                                          │  

  │   Defined at drivers/video/fbdev/Kconfig:727                                                                                                             │  

  │   Depends on: HAS_IOMEM [=y] && FB [=y] && CONNECTOR [=y]                                                                                                │  

  │   Selects: FB_CFB_FILLRECT [=y] && FB_CFB_COPYAREA [=y] && FB_CFB_IMAGEBLIT [=y] && FB_MODE_HELPERS [=y]              
```

and

```
CONFIG_FB_VGA16=y

CONFIG_FB_UVESA=y

CONFIG_FB_VESA=y
```

----------

## chithanh

You built uvesafb into the kernel.

This means you need to build v86d into the kernel too, or specify an initramfs which contains v86d.

It is all explained in the wiki.

----------

## dman777

https://wiki.gentoo.org/wiki/Uvesafb

All I see from the wiki is the below, nothing about the v86d being built into the kernel:

Device Drivers  --->

   <*> Connector - unified userspace <-> kernelspace linker  --->

   Graphics support  --->

      Frame buffer Devices  --->

         [*] Support for frame buffer devices --->

            [*] Enable firmware EDID

            <*> Userspace VESA VGA graphics support

I have 'Userspace VESA VGA graphics support' enabled. 

I do not have  'Enable firmware EDID' enabled. I didn't have that enabled in 3.14.14-gentoo and uvesafb worked without a initramfs. In addition, for troubleshooting purposes I enabled 'Enable firmware EDID' and it did not make a difference.

----------

## chithanh

I mean this part:

Initramfs inclusion

Once the installation is finished, you need to activate the following kernel options and then rebuild the initramfs:

```
General setup  --->

    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

    (/usr/share/v86d/initramfs) Initramfs source file(s)

```

(contrary to what the wiki suggests, you don't need a separate initramfs generator)

Also:

```
Note that the v86d userspace helper has to be available at all times in

order for uvesafb to work properly.  If you want to use uvesafb during

early boot, you will have to include v86d into an initramfs image, and

either compile it into the kernel or use it as an initrd.

```

----------

## dman777

With my old root partition that has 3.14.14-gentoo there is no initramfs image:

```

menuentry "Vector Drive" --class gentoo --class gnu-linux --class gnu --class os {

        insmod ext2

        set root='(hd0,1)'

        echo    Loading Gentoo system...

        linux   /kernel1 root=/dev/sdd3 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

}

```

```
localhost four # dmesg | grep -i uvesa

[    0.000000] Command line: BOOT_IMAGE=/kernel1 root=/dev/sdd3 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

[    0.000000] Kernel command line: BOOT_IMAGE=/kernel1 root=/dev/sdd3 rootfstype=ext4 video=uvesafb:mtrr:3,ywrap,1024x768-32

[    1.151484] uvesafb: NVIDIA Corporation, GK104 Board - 20040010, Chip Rev   , OEM: NVIDIA, VBE v3.0

[    1.216296] uvesafb: VBIOS/hardware doesn't support DDC transfers

[    1.216395] uvesafb: no monitor limits have been set, default refresh rate will be used

[    1.216801] uvesafb: scrolling: redraw

[    1.404472] uvesafb: framebuffer at 0xdf000000, mapped to 0xffffc90010e80000, using 14336k, total 14336k

localhost four # 
```

Are you saying that I need the initrd enabled in the kernel but do not need to use any images?

----------

## chithanh

Whatever the reason why it works on your old kernel, the solution to

```
[    0.946502] uvesafb: failed to execute /sbin/v86d 
```

is

```
CONFIG_BLK_DEV_INITRD=y

CONFIG_INITRAMFS_SOURCE="/usr/share/v86d/initramfs"
```

The initramfs already comes with sys-apps/v86d, no need to build an extra one.

----------

