HackingVGAforFun: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
(+fglrx test results)
Keine Bearbeitungszusammenfassung
Zeile 33: Zeile 33:
  EndSection
  EndSection


=== edid in eeprom ===
=== monitor edid ===
[http://de.wikipedia.org/wiki/EDID EDID]
Every monitor has a eeprom containing the [http://de.wikipedia.org/wiki/EDID EDID].
 
I used EDID 1.3<br>
I used EDID 1.3<br>
'''Windows'''
'''Windows Xp'''
* it accepts:
* ''accepts''
** standart timings
** established timings
*''regrets''
** prefered timings
 
'''Windows Vista and newer'''
* ''accepts''
** standart timings
** standart timings
** established timings
** established timings
* it looks like Windows XP doesn't like "prefered timings"
*''regrets''
** TODO


'''Linux'''
'''Linux'''
Zeile 48: Zeile 57:
** standart timings
** standart timings
** prefered timings
** prefered timings
<br>
''' flash a new edid '''
* Load the kernelmodule i2c-dev
* Get [http://www.lm-sensors.org/wiki/I2CTools 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 [https://github.com/tomka/write-edid write-edid.sh]
* Note the input file is plain/text with hexvalues, spaces and newlines only
<br>
''' create custom edid '''
* use [http://www.tucows.com/preview/329441 Phoenix EDID Designer] to create custom EDIDs
'''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 ===
=== hack the kernel module drm for custom edid ===
Zeile 79: Zeile 72:


* patch ''drm_edid.c'' , it doesn't accept vsync_width OR hsync_width to be 0
* patch ''drm_edid.c'' , it doesn't accept vsync_width OR hsync_width to be 0
== how to flash a new edid into monitor eeprom ==
* Load the kernelmodule i2c-dev
* Get [http://www.lm-sensors.org/wiki/I2CTools 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 [https://github.com/tomka/write-edid write-edid.sh]
* Note the input file is plain/text with hexvalues, spaces and newlines only
== how to build custom edid ==
* download edid from monitor
** Linux: use i2c-get
** Windows: Registry or [http://www.tucows.com/preview/329441 Phoenix EDID Designer]
* use [http://www.tucows.com/preview/329441 Phoenix EDID Designer] to create custom EDIDs
** Note: it runs under WINE
'''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


== Results ==
== Results ==

Version vom 7. Mai 2013, 12:02 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

monitor edid

Every monitor has a eeprom containing the EDID.

I used EDID 1.3
Windows Xp

  • accepts
    • standart timings
    • established timings
  • regrets
    • prefered timings

Windows Vista and newer

  • accepts
    • standart timings
    • established timings
  • regrets
    • TODO

Linux

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

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

how to flash a new edid into monitor eeprom

  • 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

how to build 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

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 Front Blanking = 0 normal graphics
AMD RV710 Front Blanking = 1 normal graphics
AMD RV710 Hsync = 0 normal graphics
AMD RV710 Vtotal = Vactive + 2 random graphics

fglrx 8.92

Label EDID Value Description
AMD RV710 Vsync = 0 no graphics
AMD RV710 Vsync = 1 no graphics
AMD RV710 Front Blanking = 0 no graphics
AMD RV710 Front Blanking = 1 normal graphics
AMD RV710 Hsync = 0 random graphics

Links