X

Aotom Display Treiber auf Argus Vip

Einklappen
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Ducktrick
    Erfahrene Benutzer
    • 23.08.2010
    • 137

    Aotom Display Treiber auf Argus Vip

    Ich versuch schon seit längeren den aotom treiber beim argus ans laufen zu bekommen, er baut zwar sauber durch jedoch bekomme ich beim laden immer ein "segment fault"

    Hoffe das mir hier jemand einen kleinen tipp geben kann ...
    Wenn ich den treiber lade bekomme ich vor dem segment fault den schriftzug im display Welcome

    das heist doch das er quasi initialisiert wurde und das display ansprechen kann... als debug meldung bekomme ich folgendes

    Code:
    init frontpanel
    Fulan front panel driver
    VfdType = 1
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    pc = 84ad045c
    *pde = 00000000
    Oops: 0001 [#1]
    last sysfs file: 
    Modules linked in: aotom(+)
    
    Pid : 459, Comm: 		insmod
    CPU : 0        		Not tainted  (2.6.32.28_stm24_0207 #1)
    
    PC is at __down_interruptible+0x2c/0xc4
    PR is at down_interruptible+0x30/0x80
    PC  : 84ad045c SP  : 8baa3e34 SR  : 400081f1 TEA : 00000000
    R0  : 84ad0430 R1  : 00000000 R2  : 8baa2000 R3  : 00000000
    R4  : c1060004 R5  : 00000000 R6  : 00000000 R7  : 000000e7
    R8  : 8b819c00 R9  : 8baa3e34 R10 : 84acf7a8 R11 : 84acf2f8
    R12 : ffffff0f R13 : 00000001 R14 : 7fffffff
    MACH: 0000051e MACL: 0000033c GBR : 296c4470 PR  : 84825c54
    
    Call trace:
     [<84825c54>] down_interruptible+0x30/0x80
     [<c105c7ea>] YWPANEL_FP_SendData+0x26/0x124 [aotom]
     [<848027b8>] do_IRQ+0x0/0x5c
     [<84974ec8>] __delay+0x0/0xa
     [<c105d772>] YWPANEL_VFD_WR+0x5e/0x90 [aotom]
     [<c105d772>] YWPANEL_VFD_WR+0x5e/0x90 [aotom]
     [<84974ed2>] __const_udelay+0x0/0x1e
     [<84a28130>] stpio_set_pin+0x0/0x38
     [<c105d082>] YWPANEL_FP_GetVersion+0x2a/0x74 [aotom]
     [<c105e18e>] YWPANEL_VFD_Init+0x116/0x26c [aotom]
     [<c106a034>] aotom_init_module+0x34/0x19c [aotom]
     [<84acece8>] printk+0x0/0x28
     [<8480118c>] do_one_initcall+0x40/0x16c
     [<c106a000>] aotom_init_module+0x0/0x19c [aotom]
     [<8483182c>] sys_init_module+0x40/0x1bc
     [<8483187c>] sys_init_module+0x90/0x1bc
     [<84806920>] syscall_call+0xa/0xe
     [<848317ec>] sys_init_module+0x0/0x1bc
    
    Process: insmod (pid: 459, stack limit = 8baa2001)
    Stack: (0x8baa3e34 to 0x8baa4000)
    3e20:                                              c1060004 00000000 ffffffff 
    3e40: fffe6b3d 84825c54 00000000 00405010 8baa3e80 00496008 8baa3ed8 8baa3f24 
    3e60: 00000000 c105c7ea 8baa3f24 00000000 00000000 848027b8 8baa2000 00000005 
    3e80: 84974ec8 00081000 00000000 c105d772 00000000 c1060468 00000000 c105d772 
    3ea0: 00000000 c1060468 84974ed2 c1060464 00000000 00000000 84a28130 32c38328 
    3ec0: c105d082 00008367 00496008 000000fc 8baa3f24 00000000 00000007 00000000 
    3ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    3f00: 00000000 00000000 32c38328 c105e18e 8baa3f24 00000000 00000028 00490002 
    3f20: 8baa3f2c 00000000 00000000 8baaaaaa c106a034 000000fc 00000000 84acece8 
    3f40: c1055570 c1055544 8480118c 00000000 00405010 00008367 00496008 000000fc 
    3f60: 00000000 c106a000 8483182c 8483187c 00405010 00008367 00496008 000000fc 
    3f80: 00000000 c105fdcc 00000000 84806920 00000594 00000000 00000071 00000100 
    3fa0: 848317ec 00411164 00000044 7bf37df4 00000080 00496018 00008367 00496008 
    3fc0: 00008367 296c4480 00496018 00496008 7bf37cc4 000001a5 00405010 00000000 
    3fe0: 7bf37d00 296576d2 0041140a 00008000 296c4470 4a8568ad ffff8000 0000005c 
    ---[ end trace 3a91f92522eb18a1 ]---
    note: insmod[459] exited with preempt_count 1
    BUG: scheduling while atomic: insmod/459/0x10000002
    Modules linked in: aotom(+)
    Stack: (0x8baa3bd0 to 0x8baa4000)
    3bc0:                                     84acee06 84baf704 8b819c00 000000f0 
    3be0: 84815ade 8b819e08 8b819e0c 00000010 84806766 84bf7919 848027b8 400081f1 
    3c00: 00000000 8480bac8 8baa3c24 84baf30c 00000000 00000001 84858f70 8ba996e0 
    3c20: 10000000 84acf2e4 8baa3c30 00408000 8484ae80 00000000 84bf7919 00483000 
    3c40: 00483000 8ba9c004 8baa3c9c 00000000 fffffff8 0be2f558 8ba9c008 00000000 
    3c60: ffffffff 00000000 00000001 8b861ba0 8484e24a 00000001 8b861ba0 ffffff0f 
    3c80: 00000000 8baa3c60 00000000 8ba996e0 8baa3c98 00000000 00000000 84baf30c 
    3ca0: 8480ee36 00000000 8b861bd4 8b819c00 8b861ba0 84812432 8b861ba0 00000001 
    3cc0: 848137c0 848137f4 8b861ba0 ffffff0f 84acece8 000000bc 0000000b 8b819c00 
    3ce0: 32c38328 84aced02 00000001 8b861ba0 ffffff0f 84acece8 84805192 00000001 
    3d00: 8b861ba0 ffffff0f 84acece8 84b374e4 00000001 8baa3dd8 000000ff 0000000b 
    3d20: 8480a612 00000000 84acece8 8baa3dd8 00000000 8b93a6b4 849f87a6 ab93d5a0 
    3d40: 849f87a6 8b95d280 ffffff8d 8b95c5c0 8baa3d8c 00000001 00000001 8b95c5c0 
    3d60: 8b93a6b4 8b95c5cc 8b95c5cc 0193a67c 8b93a730 8b93a67c ab93d240 8b95c5ea 
    3d80: 849f8fe8 849f89b8 00001fff 849f9056 000000bc 00000001 00000800 0000028b 
    3da0: 000000a9 84bb4c0c 848027e8 0000028b 00000800 0000028b 84806760 7fffffff 
    3dc0: 00000001 ffffff0f 84acf2f8 84acf7a8 848066e4 0000000c 84ad0430 00000000 
    3de0: 8baa2000 00000000 c1060004 00000000 00000000 000000e7 8b819c00 8baa3e34 
    3e00: 84acf7a8 84acf2f8 ffffff0f 00000001 7fffffff 8baa3e34 84ad045c 84825c54 
    3e20: 400081f1 296c4470 0000051e 0000033c ffffffff c1060004 00000000 ffffffff 
    3e40: fffe6b3d 84825c54 00000000 00405010 8baa3e80 00496008 8baa3ed8 8baa3f24 
    3e60: 00000000 c105c7ea 8baa3f24 00000000 00000000 848027b8 8baa2000 00000005 
    3e80: 84974ec8 00081000 00000000 c105d772 00000000 c1060468 00000000 c105d772 
    3ea0: 00000000 c1060468 84974ed2 c1060464 00000000 00000000 84a28130 32c38328 
    3ec0: c105d082 00008367 00496008 000000fc 8baa3f24 00000000 00000007 00000000 
    3ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    3f00: 00000000 00000000 32c38328 c105e18e 8baa3f24 00000000 00000028 00490002 
    3f20: 8baa3f2c 00000000 00000000 8baaaaaa c106a034 000000fc 00000000 84acece8 
    3f40: c1055570 c1055544 8480118c 00000000 00405010 00008367 00496008 000000fc 
    3f60: 00000000 c106a000 8483182c 8483187c 00405010 00008367 00496008 000000fc 
    3f80: 00000000 c105fdcc 00000000 84806920 00000594 00000000 00000071 00000100 
    3fa0: 848317ec 00411164 00000044 7bf37df4 00000080 00496018 00008367 00496008 
    3fc0: 00008367 296c4480 00496018 00496008 7bf37cc4 000001a5 00405010 00000000 
    3fe0: 7bf37d00 296576d2 0041140a 00008000 296c4470 4a8568ad ffff8000 0000005c 
    
    Call trace:
     [<84858f70>] quicklist_trim+0x0/0x134
     [<84815ade>] irq_exit+0x26/0x44
     [<84806766>] ret_from_irq+0x0/0x1a
     [<848027b8>] do_IRQ+0x0/0x5c
     [<8480bac8>] __cond_resched+0x18/0x34
     [<84858f70>] quicklist_trim+0x0/0x134
     [<84acf2e4>] _cond_resched+0x24/0x38
     [<8484ae80>] unmap_vmas+0x37c/0x428
     [<8484e24a>] exit_mmap+0x82/0x15c
     [<8480ee36>] mmput+0x2a/0xe0
     [<84812432>] exit_mm+0xf2/0x124
     [<848137c0>] do_exit+0xf8/0x588
     [<848137f4>] do_exit+0x12c/0x588
     [<84acece8>] printk+0x0/0x28
     [<84aced02>] printk+0x1a/0x28
     [<84acece8>] printk+0x0/0x28
     [<84805192>] die+0x106/0x170
     [<84acece8>] printk+0x0/0x28
     [<8480a612>] do_page_fault+0x1fe/0x2ec
     [<84acece8>] printk+0x0/0x28
     [<849f87a6>] qh_completions+0x2b6/0x338
     [<849f87a6>] qh_completions+0x2b6/0x338
     [<849f8fe8>] ehci_work+0x90/0x6dc
     [<849f89b8>] unlink_async+0x0/0x78
     [<849f9056>] ehci_work+0xfe/0x6dc
     [<848027e8>] do_IRQ+0x30/0x5c
     [<84806760>] ret_from_exception+0x0/0x6
     [<84acf2f8>] preempt_schedule+0x0/0x50
     [<84acf7a8>] schedule_timeout+0x0/0x174
     [<848066e4>] tlb_miss_store+0x0/0x4
     [<84ad0430>] __down_interruptible+0x0/0xc4
     [<84acf7a8>] schedule_timeout+0x0/0x174
     [<84acf2f8>] preempt_schedule+0x0/0x50
     [<84ad045c>] __down_interruptible+0x2c/0xc4
     [<84825c54>] down_interruptible+0x30/0x80
     [<84825c54>] down_interruptible+0x30/0x80
     [<c105c7ea>] YWPANEL_FP_SendData+0x26/0x124 [aotom]
     [<848027b8>] do_IRQ+0x0/0x5c
     [<84974ec8>] __delay+0x0/0xa
     [<c105d772>] YWPANEL_VFD_WR+0x5e/0x90 [aotom]
     [<c105d772>] YWPANEL_VFD_WR+0x5e/0x90 [aotom]
     [<84974ed2>] __const_udelay+0x0/0x1e
     [<84a28130>] stpio_set_pin+0x0/0x38
     [<c105d082>] YWPANEL_FP_GetVersion+0x2a/0x74 [aotom]
     [<c105e18e>] YWPANEL_VFD_Init+0x116/0x26c [aotom]
     [<c106a034>] aotom_init_module+0x34/0x19c [aotom]
     [<84acece8>] printk+0x0/0x28
     [<8480118c>] do_one_initcall+0x40/0x16c
     [<c106a000>] aotom_init_module+0x0/0x19c [aotom]
     [<8483182c>] sys_init_module+0x40/0x1bc
     [<8483187c>] sys_init_module+0x90/0x1bc
     [<84806920>] syscall_call+0xa/0xe
     [<848317ec>] sys_init_module+0x0/0x1bc
    
    Segmentation fault
    Falls irgend jemand eine Idee hat , egal was , ich bin für jede hilfe dankbar :/
    Edison Argus VIP - E2 und oder Neutrino
  • Schischu
    ungeristriert
    • 01.11.2010
    • 716

    #2
    Bau doch mal ein paar printk in die Funktion YWPANEL_FP_SendData.
    Dann Dienste wo genau der in dieser Funktion aussteigt.

    Kommentar

    • Ducktrick
      Erfahrene Benutzer
      • 23.08.2010
      • 137

      #3
      Danke für den Tipp , jetzt wusste ich wenigstens wo ich anfangen musste zu suchen

      also das segment fault ist erstmal entfernt und das modul kann nun auch geladen werden

      Beim Vip1v1 bekomme ich nun nen schriftzug

      der fehler enstand ...

      einmal bei der Versionsabfrage ...
      Code:
      int  YWPANEL_FP_GetVersion(YWPANEL_Version_t *version)
      {
      	YWPANEL_FPData_t   data;
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      	data.dataType = YWPANEL_DATATYPE_GETVERSION;
      
      	//printk("%s:%d\n", __FUNCTION__, __LINE__);
      
      	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}
      	//printk("%s:%d\n", __FUNCTION__, __LINE__);
      	memcpy(version, &(data.data.version), sizeof(YWPANEL_Version_t));
      
      	return true;
      }
      sowie bei der keyzuordnung Blue Key und Standby Key...
      Code:
      u32  YWPANEL_FP_GetStandByKey(u8 index)
      {
      	YWPANEL_FPData_t   data;
      	u8 key;
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      	data.dataType = YWPANEL_DATATYPE_GETSTBYKEY1+index;
      
      	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}
      	key = (u8)(data.data.stbyKey.key>>8);
      
      	return YWPANEL_TranslateKeyCode(key);
      }
      
      int  YWPANEL_FP_SetStandByKey(u8 index,u8 key)
      {
      	YWPANEL_FPData_t   data;
      	u32 value;
      
      	if(!to_primitive_key(key, &value))
      	{
      		ywtrace_print(TRACE_INFO,"to_primitive_key is failed!![%d]\n",__LINE__);
      		return false;
      	}
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      
      	data.dataType = YWPANEL_DATATYPE_SETSTBYKEY1+index;
      	data.data.stbyKey.key = value;
      
      	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}
      	return true;
      }
      
      u32  YWPANEL_FP_GetBlueKey(u8 index)
      {
      	YWPANEL_FPData_t   data;
      	u8 key;
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      	data.dataType = YWPANEL_DATATYPE_GETBLUEKEY1+index;
      
      	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}
      	key = (u8)(data.data.stbyKey.key>>8);
      	return YWPANEL_TranslateKeyCode(key);
      }
      
      int  YWPANEL_FP_SetBlueKey(u8 index,u8 key)
      {
      	YWPANEL_FPData_t   data;
      	u32 value;
      
      	if(!to_primitive_key(key, &value))
      	{
      		ywtrace_print(TRACE_INFO,"to_primitive_key is failed!![%d]\n",__LINE__);
      		return false;
      	}
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      
      	data.dataType = YWPANEL_DATATYPE_SETBLUEKEY1+index;
      	data.data.stbyKey.key = value;
      
      	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}
      	return true;
      }
      Wenn ich das nun so auskommere das nicht gecheckt wird sondern einfach weiter übergeben wird funktionier der Treiber ... also so
      Code:
      int  YWPANEL_FP_GetVersion(YWPANEL_Version_t *version)
      {
      	YWPANEL_FPData_t   data;
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      	data.dataType = YWPANEL_DATATYPE_GETVERSION;
      
      	//printk("%s:%d\n", __FUNCTION__, __LINE__);
      
      	/*if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}*/
      	//printk("%s:%d\n", __FUNCTION__, __LINE__);
      	memcpy(version, &(data.data.version), sizeof(YWPANEL_Version_t));
      
      	return true;
      }
      Code:
      u32  YWPANEL_FP_GetStandByKey(u8 index)
      {
      	YWPANEL_FPData_t   data;
      	u8 key;
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      	data.dataType = YWPANEL_DATATYPE_GETSTBYKEY1+index;
      
      	/*if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}*/
      	key = (u8)(data.data.stbyKey.key>>8);
      
      	return YWPANEL_TranslateKeyCode(key);
      }
      
      int  YWPANEL_FP_SetStandByKey(u8 index,u8 key)
      {
      	YWPANEL_FPData_t   data;
      	u32 value;
      
      	/*if(!to_primitive_key(key, &value))
      	{
      		ywtrace_print(TRACE_INFO,"to_primitive_key is failed!![%d]\n",__LINE__);
      		return false;
      	}*/
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      
      	data.dataType = YWPANEL_DATATYPE_SETSTBYKEY1+index;
      	data.data.stbyKey.key = value;
      
      /*	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}*/
      	return true;
      }
      
      u32  YWPANEL_FP_GetBlueKey(u8 index)
      {
      	YWPANEL_FPData_t   data;
      	u8 key;
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      	data.dataType = YWPANEL_DATATYPE_GETBLUEKEY1+index;
      
      /*	if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}*/
      	key = (u8)(data.data.stbyKey.key>>8);
      	return YWPANEL_TranslateKeyCode(key);
      }
      
      int  YWPANEL_FP_SetBlueKey(u8 index,u8 key)
      {
      	YWPANEL_FPData_t   data;
      	u32 value;
      
      	if(!to_primitive_key(key, &value))
      	{
      		ywtrace_print(TRACE_INFO,"to_primitive_key is failed!![%d]\n",__LINE__);
      		return false;
      	}
      
      	memset(&data, 0, sizeof(YWPANEL_FPData_t));
      
      	data.dataType = YWPANEL_DATATYPE_SETBLUEKEY1+index;
      	data.data.stbyKey.key = value;
      
      	/*if(YWPANEL_FP_SendData(&data) != true)
      	{
      		ywtrace_print(TRACE_ERROR,"YWPANEL_FP_SendData not successfully!![%d]\n",__LINE__);
      		return false;
      	}*/
      	return true;
      }
      Dadurch erhalte ich zwar kein welcome , jedoch jeden anderen Display String ( Sendername)
      Damit das E2 nicht einfriert musste ich noch die gettime und settime funktion genauso auskommern, sonnst wurde die zeit angefragt und es gab dauerspinner weils dann nicht weiter geht...

      So weit so gut ....
      mal sehen was noch zu machen geht Danke dir auf jeden fall erstmal für die doch nützlich info
      Edison Argus VIP - E2 und oder Neutrino

      Kommentar

      • Ducktrick
        Erfahrene Benutzer
        • 23.08.2010
        • 137

        #4
        Noch ne Frage die mir eventuell jemand zum teil beantworten kann oder mir jemand nen tipp geben kann !

        Beim Vip2 und Vip1v2 ist das display ja nun etwas anders gestrickt , deshalb läuft ja auch der proton treiber nicht.
        Nun wurde ja irgend wann mal das vfd.ko für den kernel 123 ins git gepackt und damit ging ja mal das Display , das wurde ja ebenso über aotom angesteuert.

        Jetzt die Frage , ist der source davon noch irgend wo vorhanden ?
        Oder wird das display über eine andere speicheradresse angesprochen ?
        Den mit dem was ich oben geändert hab wird kein String beim Vip2 ausgegeben.
        Muss da vorher der frontpanel cpu initialisiert sein oder woran kann das liegen ?

        Manchmal brauch ich so kleine anstupser um eventuell ne lösung zu finden :/
        Edison Argus VIP - E2 und oder Neutrino

        Kommentar

        • karlchen1963
          Erfahrene Benutzer
          • 05.03.2010
          • 146

          #5
          Schau dir mal den Aotom Bereich für den Pingulux Plus an meine die Displays sind identisch.

          Es gab mal vfd sourcen im Git die hat osaiya glaub ich mit ins aotom eingebaut also sollten die kompletten vfd sachen da jetzt drin sein.

          Kommentar

          • Ducktrick
            Erfahrene Benutzer
            • 23.08.2010
            • 137

            #6
            erstmal danke für deine Antwort , meinst du die spark definirten sachen in der aotom_main.c mit sparks bereich ?

            Oder meinst du im Sparks git ?
            Edison Argus VIP - E2 und oder Neutrino

            Kommentar

            • Ducktrick
              Erfahrene Benutzer
              • 23.08.2010
              • 137

              #7
              Geschaft ...

              ok wir haben es hinbekommen den aotom.ko auf dem Vip1v2 und Vip2 ans laufen zu bekommen , hier der Patch für das aktuelle aotom

              Wir haben das ganze etwas abändern müssen da wir eine anderen i2c bus benötigen , dieser kann nun als Parameter angegeben werden um dort flexibel zu bleiben
              ist kein Parameter angegeben greifen die standart werte


              danke an die Tolle Hilfe von Susis Strolch und all den anderen mit ihren tollen ideen

              EDIT

              noch zu erwähnen , das aotom muss wie folgt in der rcS initialisiert werden

              Code:
              insmod $MODDIR/aotom.ko I2C_bus_num=2 I2C_bus_add=0x28
              Angehängte Dateien
              Zuletzt geändert von Ducktrick; 30.01.2013, 22:24.
              Edison Argus VIP - E2 und oder Neutrino

              Kommentar

              Nicht konfiguriertes PHP-Modul

              Einklappen

              Aotom Display Treiber auf Argus Vip

              Einklappen
              Lädt...
              X