HackingVGAforFun: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
K (+links)
(+doku)
Zeile 5: Zeile 5:
[http://pinouts.ru/all/VGA15_pinout.shtml VGA pinouts]
[http://pinouts.ru/all/VGA15_pinout.shtml VGA pinouts]


== edid ==
== build a fake monitor ==
* Terminate the color lines with 75ohms
* Attach a 24C02 serial eeprom to the specified pins (24c04 - 24c16 is possible to )
* if no eeprom is at hand, connect ID3 to GND
 
== Modesetting ==
 
=== xrandr ===
To do so use xrandr:<br>
xrandr --newmode "MODE1"  64.00  1400 1400 1401 1401 700 700 702 702 -hsync -vsync
xrandr --addmode VGA-0 "MODE1"
xrandr --output VGA-0 --mode "MODE1" --right-of LVDS
 
note: VGA-0 may not apply, it could be VGA1 or VGA too, depending on the driver.<br>
note: the last command assumes LVDS to be your primary active connector, change depending on your system.
 
alternative arandr
 
=== Xorg.conf ===
Add a ModeLine to your Xorg.conf.
Section "Monitor"
        Identifier      "SyncMaster"
        Option          "VGA-0"
        HorizSync      30-96
        VertRefresh    50-160
        ModeLine        "MODE1" 64.00  1400 1400 1401 1401 700 700 702 702
EndSection
 
=== edid in eeprom ===
[http://de.wikipedia.org/wiki/EDID EDID]
[http://de.wikipedia.org/wiki/EDID EDID]
I used EDID 1.3<br>
I used EDID 1.3<br>
Zeile 20: Zeile 48:
** standart timings
** standart timings
** prefered timings
** prefered timings
 
<br>
== build a fake monitor ==
''' flash a new edid '''
* Terminate the color lines with 75ohms
* Attach a 24C02 serial eeprom to the specified pins (24c04 - 24c16 is possible to )
 
== flash a new edid ==
* Load the kernelmodule i2c-dev
* Load the kernelmodule i2c-dev
* Get [http://www.lm-sensors.org/wiki/I2CTools i2c-tools]
* Get [http://www.lm-sensors.org/wiki/I2CTools i2c-tools]
Zeile 34: Zeile 58:
* Flash new EDID with [https://github.com/tomka/write-edid write-edid.sh]
* Flash new EDID with [https://github.com/tomka/write-edid write-edid.sh]
* Note the input file is plain/text with hexvalues, spaces and newlines only
* Note the input file is plain/text with hexvalues, spaces and newlines only
 
<br>
== create custom edid ==
''' create custom edid '''
* use [http://www.tucows.com/preview/329441 Phoenix EDID Designer] to create custom EDIDs
* use [http://www.tucows.com/preview/329441 Phoenix EDID Designer] to create custom EDIDs
'''Note'''
'''Note'''
Zeile 41: Zeile 65:
* you can use the export function to generate .raw files and use hexdump to convert them to plain/text hex
* you can use the export function to generate .raw files and use hexdump to convert them to plain/text hex


=== hack the kernel module drm ===
=== hack the kernel module drm for custom edid ===
This is neccessary if you specify hsync < 1 or vsync < 1 in your edid
 
* install linux-source
* install linux-source
* install linux-kernel-headers
* install linux-kernel-headers
Zeile 73: Zeile 99:
|AMD RV710
|AMD RV710
|Hsync = 0
|Hsync = 0
|normal graphics*
|normal graphics
|-
|-
|AMD RV710
|AMD RV710
Zeile 80: Zeile 106:
|-
|-
|}
|}
* patched drm_edid.c


== Links ==
== Links ==
* http://www.nathandumont.com/node/241
* http://www.nathandumont.com/node/241
[[Category:HowTo]]

Version vom 6. März 2013, 11:38 Uhr

VGA

Video Graphics Adapter

pinouts

VGA pinouts

build a fake monitor

  • Terminate the color lines with 75ohms
  • Attach a 24C02 serial eeprom to the specified pins (24c04 - 24c16 is possible to )
  • if no eeprom is at hand, connect ID3 to GND

Modesetting

xrandr

To do so use xrandr:

xrandr --newmode "MODE1"   64.00  1400 1400 1401 1401 700 700 702 702 -hsync -vsync
xrandr --addmode VGA-0 "MODE1"
xrandr --output VGA-0 --mode "MODE1" --right-of LVDS

note: VGA-0 may not apply, it could be VGA1 or VGA too, depending on the driver.
note: the last command assumes LVDS to be your primary active connector, change depending on your system.

alternative arandr

Xorg.conf

Add a ModeLine to your Xorg.conf.

Section "Monitor"
       Identifier      "SyncMaster"
       Option          "VGA-0"
       HorizSync       30-96
       VertRefresh     50-160
       ModeLine        "MODE1" 64.00  1400 1400 1401 1401 700 700 702 702
EndSection

edid in eeprom

EDID I used EDID 1.3
Windows

  • it accepts:
    • standart timings
    • established timings
  • it looks like Windows XP doesn't like "prefered timings"

Linux

  • The kernel module drm handels all the display stuff
  • it accepts:
    • established timings
    • standart timings
    • prefered timings


flash a new edid

  • Load the kernelmodule i2c-dev
  • Get i2c-tools
  • build the i2c-tools
  • Become root: Sudo -s
  • Add the tools folder to the PATH: PATH=$PATH:< ... >/i2c-tools/tools
  • Run i2cdump to find the correct BUSID (device at 0x50 and 0x51)
  • Flash new EDID with write-edid.sh
  • Note the input file is plain/text with hexvalues, spaces and newlines only


create custom edid

Note

  • the tool outputs .dat-files, that need to be editet by hand, it contains invalid symbols
  • you can use the export function to generate .raw files and use hexdump to convert them to plain/text hex

hack the kernel module drm for custom edid

This is neccessary if you specify hsync < 1 or vsync < 1 in your edid

  • install linux-source
  • install linux-kernel-headers
  • modify the Makefile
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules
	cp drm.ko /lib/modules/`uname -r`/kernel/drivers/gpu/drm
	cp drm_kms_helper.ko /lib/modules/`uname -r`/kernel/drivers/gpu/drm
	chmod 755 /lib/modules/`uname -r`/kernel/drivers/gpu/drm
	update-initramfs -u
  • patch drm_edid.c , it doesn't accept vsync_width OR hsync_width to be 0

Results

Mesa 9.0

Label EDID Value Description
AMD RV710 Vsync = 0 no graphics
AMD RV710 Vsync = 1 random graphics
AMD RV710 Htotal = Hactive no graphics
AMD RV710 Hsync = 0 normal graphics
AMD RV710 Vtotal = Vactive + 2 random graphics

Links