Jump to content

Comment Patcher AppleHDA.kext


  • Please log in to reply
No replies to this topic

#1
cparm

cparm

    InsanelyMac Legend

  • Retired
  • 997 posts
  • Gender:Male
Commençons par ce dont vous aurez besoins pour débuter:

  • un editeur d'hex tel 0xED
  • Property List Editor (je vous conseille PlistEdit Pro)
  • un dump de votre codec, la méthode la plus simple étant de l'extraire via un livedvd de linux (la distribution la plus récente possible)
  • convert_hex_to_dec.rb, le script de Munky


pour le dump de votre codec, démarrer le livedvd de linux, une fois logger, ouvrez une Konsole, et tapez:

cat /proc/asound/card0/codec#0 > ~/Desktop/CodecDump.txt

si cela ne fonctionne pas, remplacez codec#0 par codec#1 ou codec#2

un fois que le fichier CodecDump.txt apparait sur le bureau, copiez le sur un endroit où vous pourrez le récupérer par la suite, et redémarrer sur OSX




1 patch du fichier binaire

En premier lieux vous devez connaitre l'identifiant du codec audio de votre mobo:

Pour cela ouvrez alors le fichier CodecDump.txt, et cherchez l'occurrence "Vendor Id"
le numéro qui ce trouve a coté est L'identifiant de votre carte, (0x10ec0888 dans mon cas)

copiez le fichier /System/Library/Extensions/AppleHDA.kext sur le bureau

ouvrez le fichier binaire a l'intérieur de applehda (~/AppleHDA.kext/Content/MacOS/AppleHDA) avec 0xED

cherchez 6202EC10 (ce qui correspond a l'Id 0x10ec0262)

verifiez que le type de recherche s'effectue bien en hexadecimal et non texte, pour cela, si vous utilisez la zone de recherche de la fenetre principal, changer "Text search" en "Hex search" :

Posted Image

si vous utilisez la recherche via Pomme+F, changer le type de recherche de "Text" en "Hex":

Posted Image

ensuite, remplacez les tous par le votre, dans mon cas 8808EC10 (qui correspond a mon Id 0x10ec0888) .


2 patcher AppleHDAController

Dans cette partie nous allons définir ce que l'on appel le "codecverb" qui va bien avec votre chipset audio:

Commencez par dupliquer votre fichier codecdump.txt (une copie de l'original sera utile plus tard),
ouvrez ce fichier
chercher l'occurrence Addresses au début du fichier, le numéro qui ce trouve a coté est la valeur de l'adresse de votre chipset (notez-le)

maintenant nous allons passer aux choses sérieuses,
vous avez sans doute remarquez que le mot Node apparait plusieurs fois dans ce fichier, beaucoup nous sont inutile, nous allons donc effacer toutes les Node qui ne nous intéresse pas pour cette partie du tuto,
celle qui sont a effacer sont celle qui ne contienne pas l'entré Pin Default

exemple sur un extrait de mon codecdump:

Node 0x0f [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
Amp-Out vals: [0x00 0x00]
Connection: 2
0x05 0x0b
Node 0x10 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x11 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x12 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x13 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x083e: IN OUT HP Detect Trigger
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26



nous ne garderons que alors la node 0x14, comme suit:

Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x083e: IN OUT HP Detect Trigger
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26



mais nous pouvons nettoyer le fichier un peu plus pour nous faciliter encore plus le travail par la suite,
dans chacune des node que nous gardons, certaines lignes nous sont inutiles, voici les lignes que je vous conseil de garder (si elles sont présentes) pour chaque node valide:


Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green


une fois nettoyé, votre fichier codecdump.txt doit ressembler a ca :

Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x01014410: [Jack] Line Out at Ext RearConn = 1/8, Color = Green Node 0x15 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x01011412: [Jack] Line Out at Ext RearConn = 1/8, Color = Black Node 0x16 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x01016411: [Jack] Line Out at Ext RearConn = 1/8, Color = OrangeNode 0x17 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x01012414: [Jack] Line Out at Ext RearConn = 1/8, Color = GreyNode 0x18 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x01a19c40: [Jack] Mic at Ext RearConn = 1/8, Color = PinkNode 0x19 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x02a19c50: [Jack] Mic at Ext FrontConn = 1/8, Color = Pink Node 0x1a [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x0181344f: [Jack] Line In at Ext RearConn = 1/8, Color = BlueNode 0x1b [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-OutPin Default 0x02214c20: [Jack] HP Out at Ext FrontConn = 1/8, Color = GreenNode 0x1c [Pin Complex] wcaps 0x400001: StereoPin Default 0x593301f0: [N/A] CD at Int ATAPIConn = ATAPI, Color = UnknownNode 0x1d [Pin Complex] wcaps 0x400000: MonoPin Default 0x411111f0: [N/A] Speaker at Ext RearConn = 1/8, Color = BlackNode 0x1e [Pin Complex] wcaps 0x400300: Mono DigitalPin Default 0x014b6130: [Jack] SPDIF Out at Ext RearConn = Comb, Color = OrangeNode 0x1f [Pin Complex] wcaps 0x400200: Mono DigitalPin Default 0x01cb7160: [Jack] SPDIF In at Ext RearConn = Comb, Color = Yellow

créons maintenant notre codecverb pour chaque node:

Ici, nous allons prendre en exemple la node 0x14:

relevez la valeur Pin Default de la node soit 0x01014410, ne retenez que 01014410 pour cette valeur, et inversez cette valeur deux par deux:

c'est a dire que 01 01 44 10 donnera 10 44 01 01 et c'est cette suite de chiffres qui nous intéresse

un codecverb ce structure comme suit:

[adresse][node][71C][premier chiffre] ce qui donnera 21471C10
[adresse][node][71D][deuxieme chiffre] ce qui donnera 21471D44
[adresse][node][71E][troisieme chiffre] ce qui donnera 21471E01
[adresse][node][71F][quatrieme chiffre] ce qui donnera 21471F01


le codecverb complet pour la node 0x14 sera donc: 21471C10 21471D44 21471E01 21471F01

Les plus malins l'auront compris, l'étape d'inversement de la valeur Pin Default n'est pas obligatoire, car on peut très bien inversé la structure du codecverb comme cela:

[adresse][node][71C][quatrieme chiffre]
[adresse][node][71D][troisieme chiffre]
[adresse][node][71E][deuxieme chiffre]
[adresse][node][71F][premier chiffre]

tout dépend si vous préférez lire de gauche a droite ou de droite a gauche



en utilisant la même méthode, j'obtiens mon codecverb complet pour toutes les node:

21471C10 21471D44 21471E01 21471F01
21571C12 21571D14 21571E01 21571F01
21671C11 21671D64 21671E01 21671F01
21771C14 21771D24 21771E01 21771F01
21871C40 21871D9c 21871EA1 21871F01
21971C50 21971D9c 21971EA1 21971F02
21A71C4F 21A71D34 21a71E81 21A71F01 
21B71C20 21B71D4c 21B71E21 21B71F02
21B71CF0 21C71D01 21C71E33 21C71F59
21D71CF0 21D71D11 21D71E11 21D71F41
21E71C30 21E71D61 21E71E4B 21E71F01
21F71C60 21F71D71 21F71ECB 21F71F01


Malheureusement ces valeurs ne fonctionneront pas telle quelle, il nous faudra alors les modifier,

mais avant cela il nous faut comprendre a quoi elles correspondent.

Prenons le codecverb pour la node 0x14: 21471C10 21471D44 21471E01 21471F01

21471C10 le nombre 1 correspond a une valeur que l'on nome Default association, 0 a Sequence
21471D44 4=Color, 0=Misc
21471E01 0=Default Device, 1=Connection Type
21471F01 0=Port Connectivity, 1=Location

quelque règles a savoir:

la valeur Default association ne peut égal qu'a 1,2,3,4,5,6 ou f, elle définie la façon dont le système va géré les différents canaux, c'est pour cela qu'une même valeur ne peut être attribué fois, sauf de le cas des entrées/sorties du panneaux frontal, et des entrées/sortie S/PDIF

la valeur Sequence doit toujours égal a 0

la valeur Color correspond a la valeur inscrite dans la description de la node, vérifiez qu'elle coïncide avec la couleur du port sur la carte, voici toute les valeurs possibles:

Unknown 0 
Black 1 
Grey 2
Blue 3 
Green 4
Red 5
Orange 6
Yellow 7
Purple 8
Pink 9
Reserved A-D
White E
Other F

pour la valeur Misc il est preferable de la laisser telle quelle si elle est egal a 0 ou 1, sinon mettez la a 0

Default Device, indique le type de materiel qui correspond a la node, voici les valeurs possibles:

Line Out 0
Speaker 1
HP Out 2
CD 3
SPDIF Out 4
Digital Other Out 5
Modem Line Side 6
Modem Handset Side 7
Line In 8
AUX 9
Mic In A
Telephony B
SPDIF In C
Digital Other In D
Reserved E
Other F


Connection Type, est le type de port qui correspond au materiel, voici les valeurs possibles:

Unknown 0 
1/8" stereo/mono 1
1/4" stereo/mono 2
ATAPI internal 3
RCA 4
Optical 5
Other Digital 6
Other Analog 7
Multichannel Analog (DIN) 8
XLR/Professional 9
RJ-11 (Modem) A
Combination B 
Other F



la valeur Port Connectivity peut rester telle quelle

la valeur Location, correspond a l'endroit ou ce trouve le port:

0 pour internal Atapi
1 pour le panneau arriere
2 pour le panneau avant

il vous est aussi possible, et meme consseillé de retirer les node dont vous n'avez pas besoin

ex: si votre tours ne dispose pas de panneau avant, vous pouvez sans hésitation retirer de votre codecverb les node 0x1B et 0x19, qui correspondent respectivement aux entrées casque et microphone du panneau avant

une fois ce travail terminer la forme de votre codecverb devra ressembler a cela :

21471c10 21471d40 21471e01 21471f01 21571c20 21571d10 21571e11 21571f01 21671c30 21671d60 21671e21 21671f01 21a71c40 21a71d30 21a71e81 21a71f01 21871c50 21871d90 21871ea1 21871f01 21e71c60 21e71d61 21e71e4b 21e71f01 21f71cf0 21f71d01 21f71ecb 21f71f00

avant d'aller plus loin nous allons convertir notre Codec Id (ou Vendor Id) de Hex a decimal, pour cela il vous faut ouvrir la calculette de Mac OS X, de la metre en mode "Programmeur" (alt+pomme+3), de choisir le mode Hex,

collez ensuite la valeur de votre Codec Id (0x10ec0888 pour moi), et ensuite de basculer en mode décimal, ce qui donne pour moi 283904136

gardez ces deux valeurs (codecverb et Codec Id) bien au chaud vous en aurez besoin plus tard


Félicitation car le plus dure est fait !!!

nous allons maintenant écrire toutes ces données dans AppleHDA.kext:

ouvrez ~/Desktop/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist avec PlistEdit Pro, et trouver les valeurs CodecID et ConfigData

Posted Image

collez  la valeur en décimal de votre Codec Id dans la colonne a droite de CodecID, collez ensuite la valeur de votre codecverb a droite de ConfigData

par ailleurs vérifiez que la valeur LayoutID est bien 12, si ce n'est pas le corrigé cela

vous pouvez enregistrer et fermer ce fichier

3 Patcher AppleHDAPlatformDriver

ouvrez maintenant ~/Desktop/AppleHDA.kext/Contents/PlugIns/AppleHDAPlatformDriver.kext/Contents/Info.plist

Posted Image

dans l'Arrey Layout, cherchez L'Items qui a la valeur LayoutID a 12


ne gardez que l'item qui contient la LayoutID a 12, vous pouvez effacer les autre Items,

dans l'Arrey PathMapRef ouvrez l'Arrey CodecID, dans la colonne de droite remplacez la valeur présente par la valeur en décimal de votre codecID

maintenant dans l'Arrey PathMaps, cherchez l'Items qui contient la valeur PathMapID égal a 9

Posted Image

vous pouvez effacer les autres Items

ouvrez ensuite l'Arrey PathMap, en fonction des nodes que vous avez laisser ou supprimez dans votre codecverb nous allons modifier cette partie,

vous pouvez voir dans ce schéma a quoi correspond chaque Items,

Posted Image

pour définir les valeur nodeID, appliquez le script de Munky, a la copie de l'original de votre CodecDump.txt, comme cela:

placer  d'abord le fichier convert_hex_to_dec.rb sur le bureau

chmod +x ~/Desktop/convert_hex_to_dec.rb

~/Desktop/convert_hex_to_dec.rb ~/Desktop/codecdump.txt > ~/Desktop/ConvertedCodecDump.txt

pour découvrir les nodeID du micro arrière par exemple, explorons d'abord la node 9, a la fin en dessous de connection: 1 nous pouvons voir le chiffre 34, allons ensuite a la node 34 et en dessous de connection: 11 le premier chiffre est 24, allons maintenant a la node 24 et a coté de Pin Default on peut lire [Jack] Mic at Ext Rear, donc c'est la bonne


les nodeID pour le microphone arrière, seront donc 9-34-24

faisons la même chose pour Line IN, allons a la node 8, en dessous de connection: 1 on voit le chiffre 35, et a la node 35 prenons le 3 eme chifre qui est 26 , a la node 26 on voit [Jack] Line In at Ext Rear a coté de Pin Default

les nodeID pour l'entrée Line IN seront 8-35-26

Je l'avoue pour ce qui est des entrées cette methode ressemble un peu a du tatonage, mais pour les sortie c'est beaucoup plus cohérant


voyons la sortie verte du panneau arrière qui s'appelle [Jack] Line Out at Ext Rear, une recherche nous montre quelle appartiens a la node 20, en dessous de connection : ..... un chiffre devrait être étoile, logiquement le 12, c'est la deuxième partie de notre nodeID, allons maintenant a la node 12, en dessous de connection : ....., prenez toujours le premier chiffre pour les sorties, c'est a dire 2

Les nodeID pour la sortie Line Out verte seront, 20-12-2

heureusement c'est chiffre semble être commune a toutes les cartes, contrairement au codecverb, vous devriez donc pouvoir utiliser les valeurs suivante:

 Internal Mic (Frontpanel) 8-35-25
 Mic 9-34-24
 Line in  8-35-26
 Internal Speakers  20-12-2
 Headphones  21-13-3
 Line Out  22-14-4
Side  23-15-5
 Headphones (Frontpanel)  27-38-37
 SPDIF IN 10-31
 SPDIF OUT  30-6


il vous suffit maintenant d'editer chaque Items avec les bonnes valeur en fonctions des entrée/sortie que vous avez gardé,

voila c'est a peu près tout

Bonne chance ..........
A venir le patch pour snow leopard et leopard 10.5.8, et le patch dsdt pour l'audio .......





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy