Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - keremet

Страницы: 1 [2] 3 4 ... 31
16
Забыл  написать: чтобы собралось dmenu, надо изменить CFLAGS в config.mk - убрать опцию -D_POSIX_C_SOURCE=2

17
OpenIndiana / Замечательный оконный менеджер DWM
« : Январь 17, 2015, 02:48:42 am »
http://dwm.suckless.org/
http://www.calculate-linux.org/blogs/ru/212/show

Компиляция и установка:
wget http://dl.suckless.org/dwm/dwm-6.0.tar.gz
tar xf dwm-6.0.tar.gz
cd dwm-6.0
make
sudo cp dwm /usr/bin

$ cat ~/.xinitrc
exec dwm

Запуск: startx


Указать шрифты из /usr/X11/lib/X11/fonts , чтобы отображались русские буквы на верхней панели

Меню:
wget http://dl.suckless.org/tools/dmenu-4.5.tar.gz
tar xf dmenu-4.5.tar.gz
cd dmenu-4.5
make
sudo cp dmenu /usr/bin/dmenu_run

Изменения в исходники dmenu:
   case XK_KP_Enter:   
      if (vfork() == 0){                // child 
         if(execlp((sel && !(ev->state & ShiftMask)) ? sel->text : text, 0)<0){
            //cerr<< "failed to execvp\n";
            //return -1;
         }
      //}else if (pID < 0){            // failed to fork
      }else{
      }
      /*puts*///system((sel && !(ev->state & ShiftMask)) ? sel->text : text);
      exit(EXIT_SUCCESS);
.....
static Item items[] ={{"firefox", 0, 0}, {"gedit", 0, 0}, {"gajim", 0, 0}, {"gnome-commander", 0, 0}, {"gimp", 0, 0}, {"soffice", 0, 0}, {0,0,0}};
....

void
readstdin(void) {
   char buf[sizeof text], *p, *maxstr = NULL;
   size_t i, max = 0, size = 0;

   /* read each line from stdin and add it to the item list */
/*   for(i = 0; fgets(buf, sizeof buf, stdin); i++) {
      if(i+1 >= size / sizeof *items)
         if(!(items = realloc(items, (size += BUFSIZ))))
            eprintf("cannot realloc %u bytes:", size);
      if((p = strchr(buf, '\n')))
         *p = '\0';
      if(!(items.text = strdup(buf)))
         eprintf("cannot strdup %u bytes:", strlen(buf)+1);
      if(strlen(items.text) > max)
         max = strlen(maxstr = items.text);
   }
   if(items)
      items.text = NULL;*/
   inputw = maxstr ? textw(dc, maxstr) : 0;
   lines = MIN(lines, i);
}

18
Прослушиваемые порты видны через
netstat -a|grep LISTEN
Командой
pfiles `pgrep gnome-session`|grep AF_INET
        sockname: AF_INET6 ::  port: 33500
        sockname: AF_INET 0.0.0.0  port: 45246
        sockname: AF_INET 127.0.0.1  port: 56080
убедился, что они открыты процессом gnome-session

Название системного вызова открытия сокета тут: http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/sockfs/socksyscalls.c#101

Посмотрим, какие сокеты открывает процесс gnome-session и в каком месте в коде.
dtrace -n 'syscall::so_socket:entry/execname=="gnome-session"/{ ustack(); printf("family = %d, type_w_flags = %d, protocol = %d\n", arg0, arg1, arg2); }'

svcadm restart gdm

__________________

  0  10008                  so_socket:entry
              libc.so.1`_so_socket+0x7
              libsocket.so.1`socket+0x23
              libICE.so.6`_IceTransSocketOpen+0x52
              libICE.so.6`_IceTransSocketOpenCOTSServer+0x4f
              libICE.so.6`_IceTransOpen+0x89
              libICE.so.6`_IceTransOpenCOTSServer+0x10
              libICE.so.6`_IceTransMakeAllCOTSServerListeners+0x11f
              libICE.so.6`IceListenForConnections+0x2d
              gnome-session`setup_listener+0x9c
              gnome-session`gsm_xsmp_server_constructor+0x42
              libgobject-2.0.so.0.2800.8`g_object_newv+0x3ce
              libgobject-2.0.so.0.2800.8`g_object_new_valist+0x59e
              libgobject-2.0.so.0.2800.8`g_object_new+0x3a
              gnome-session`gsm_xsmp_server_new+0x32
              gnome-session`main+0x173
              gnome-session`_start+0x67
family = 2, type_w_flags = 2, protocol = 0 (TCP IPv4)

              libc.so.1`_so_socket+0x7
              libsocket.so.1`socket+0x23
              libORBit-2.so.0.1.0`link_server_setup+0x96
              libORBit-2.so.0.1.0`giop_server_new+0x57
              libORBit-2.so.0.1.0`ORBit_ORB_start_servers+0x2a9
              libORBit-2.so.0.1.0`IOP_generate_profiles+0x68
              libORBit-2.so.0.1.0`ORBit_marshal_object+0x7f
              libORBit-2.so.0.1.0`ORBit_marshal_value+0x39f
              libORBit-2.so.0.1.0`orbit_small_marshal+0xef
              libORBit-2.so.0.1.0`ORBit_small_invoke_stub+0x124
              libORBit-2.so.0.1.0`ORBit_small_invoke_stub_n+0x40
              libORBit-2.so.0.1.0`ORBit_c_stub_invoke+0x73
              libgconf-2.so.4.1.5`ConfigServer_add_client+0x4b
              libgconf-2.so.4.1.5`try_to_contact_server+0x63
              libgconf-2.so.4.1.5`gconf_get_config_server+0x2f
              libgconf-2.so.4.1.5`gconf_engine_connect+0x56
              libgconf-2.so.4.1.5`gconf_engine_get_database+0x14
              libgconf-2.so.4.1.5`gconf_engine_notify_add+0xbe
              libgconf-2.so.4.1.5`gconf_client_add_dir+0xbc
              gnome-session`gsm_manager_init+0xc7
family = 2, type_w_flags = 2, protocol = 6 (TCP IPv6)

По файлу /etc/sock2path.d/system%2Fkernel определяем названия протоколов

19
$ grep sppp /etc/name_to_major
sppp 265
sppptun 266

/etc/ppp/peers# cp myisp.tmpl mts


root@SS:/etc/ppp/peers# sppptun plumb pppoed rge0
rge0:pppoed
root@SS:/etc/ppp/peers# sppptun plumb pppoe rge0
rge0:pppoe

vi /etc/ppp/pppoe.if
rge0


/etc/init.d/pppd start



root@SS:/etc/ppp/peers# sppptun query
rge0:pppoed
rge0:pppoe

root@SS:/etc/ppp/peers# /usr/lib/inet/pppoec -i rge0
0:30:88:1f:65:96 Uniq:00000001 Name:"MTS-BR4" Svc:""



pppd debug updetach call mts




$ cat /etc/ppp/peers/mts
#ident   "%Z%%M%   %I%   %E% SMI"
#
# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License").  You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# This is an example configuration for dialing into a typical ISP from a
# single node.  To use this example, uncomment the last line of the
# pap-secrets file and rename the template files:
#
#   mv /etc/ppp/options.tmpl /etc/ppp/options
#   mv /etc/ppp/options.ttya.tmpl /etc/ppp/options.ttya
#   mv /etc/ppp/myisp-chat.tmpl /etc/ppp/myisp-chat
#   mv /etc/ppp/peers/myisp.tmpl /etc/ppp/peers/myisp
#
# and invoke with:
#
#   pppd ttya call myisp
#
# Options in this file, /etc/ppp/options, /etc/ppp//options.<tty>,
# /etc/ppp/pap-secrets, and /etc/ppp/chap-secrets are all considered
# privileged.  Those from ~/.ppprc and the command line are privileged
# if the invoker is root, and unprivileged otherwise.
#
sppptun
plugin pppoe.so
connect "/usr/lib/inet/pppoec rge0"
user "yyyy"   # my account name at my ISP
password "xxxxxx"
#persist                  # if the connection dies, bring it back up
noauth                  # Do not make the other side authenticate itself
noipdefault               # Let them give you what IP they want to give you
noccp                  # No compression
#novj                  # No compression
#noaccomp               # No compression
#nopcomp                  # No compression
defaultroute               # add an appropriate default route
#remotename myisp   # name of the ISP; for pap-secrets

$ cat /etc/ppp/chap-secrets
yyyy * xxxx



20
OpenIndiana / Загрузка OpenIndiana через GRUB2
« : Январь 07, 2015, 11:53:17 pm »
Если после установки OpenIndiana поставлена еще и например Ubuntu, а fdisk показывает вот такую конфигурацию
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1       Active    Solaris2          1  26108    26108     67
          2                 Linux native   26108  32186    6079     16

Можно добавить в Ubuntu в /boot/grub/grub.cfg вот такую секцию
menuentry "OpenIndiana" {
    set root=(hd0,1)
    chainloader +1
}

При выборе этого пункта меню будет загружаться меню граба OpenIndiana

21
OpenSolaris / Свежий gajim
« : Январь 07, 2015, 08:36:48 pm »
gajim-0.16.tar.bz2
./cofigure --prefix=/data/compilation/gajim-0.16_bin
make
make install

nbxmpp-0.5.2.tar.gz
pfexec python2.6 setup.py install

keremet@os200906:/data/compilation/gajim-0.16_bin/bin$ ./gajim
===============================================================================
PyOpenSSL not found, falling back to Python builtin SSL objects (insecure).
===============================================================================
Traceback (most recent call last):
  File "gajim.py", line 230, in <module>
    gobject.set_prgname('gajim')
  File "/data/compilation/gajim-0.16_bin/share/gajim/src/./common/demandimport.py", line 86, in __getattribute__
    self._load()
  File "/data/compilation/gajim-0.16_bin/share/gajim/src/./common/demandimport.py", line 58, in _load
    mod = _origimport(head, globals, locals)
ImportError: No module named gobject


22
OpenIndiana / Re: ATI Radeon HD 6310
« : Январь 06, 2015, 10:34:53 pm »
keremet@openindiana:~/compilation/libdrm-2.4.58$ vi xf86drmMode.c
в функции drmCheckModesettingSupported
-#elif defined(__DragonFly__)
+#elif (defined(__sun) && defined(__SVR4)) || defined(__DragonFly__)
        return 0;
#endif

root@openindiana:~# Xorg
....
(II) [KMS] Kernel modesetting enabled.

keremet@openindiana:~/compilation$ tar xf xserver-xorg-video-modesetting_0.9.0.orig.tar.gz
keremet@openindiana:~/compilation$ cd xf86-video-modesetting-0.9.0/
keremet@openindiana:~/compilation/xf86-video-modesetting-0.9.0$ PKG_CONFIG_PATH=/home/keremet/compilation/ati_bin/lib/pkgconfig/ CFLAGS="-m64" ./configure --prefix=/home/keremet/compilation/ati_bin/
make
make install
root@openindiana:~# cp /home/keremet/compilation/ati_bin/lib/xorg/modules/drivers/modesetting_drv.so /usr/lib/xorg/modules/drivers/amd64
root@openindiana:~# vi /etc/X11/xorg.conf

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "ShadowFB"                  # [<bool>]
        #Option     "DefaultRefresh"            # [<bool>]
        #Option     "ModeSetClearScreen"        # [<bool>]
        Identifier  "Card0"
        Driver      "modesetting"
        VendorName  "Advanced Micro Devices, Inc. [AMD/ATI]"
        BoardName   "Wrestler [Radeon HD 6310]"
        BusID       "PCI:0:1:0"
EndSection

Трассировка modesetting_drv.so

CPU FUNCTION                                 
  0  -> Setup                                 
  0  <- Setup                                 
  0  -> Identify                             
  0  <- Identify                             
  0  -> ms_driver_func                       
  0  <- ms_driver_func                       
  0  -> ms_driver_func                       
  0  <- ms_driver_func                       
  0  -> ms_pci_probe                         
  0    -> probe_hw_pci                       
  0      -> open_hw                           
  0      <- open_hw                           
  0    <- probe_hw_pci                       
  0  <- ms_pci_probe                         
  0  -> Probe                                 
  0  <- Probe

open_hw нормально открывает /dev/dri/card0 (сейчас подгружен измененный модуль radeon, в список поддерживаемых  устройств которого добавлена моя видеокарта)
         display, instance #0 (driver name: radeon)
....
           Device Minor Nodes:
                dev=(290,0)
                    dev_path=/pci@0,0/display@1:gfx0
                        spectype=chr type=minor
                        dev_link=/dev/fbs/gfx0
                        dev_link=/dev/fb2
                        dev_link=/dev/vt00
                        dev_link=/dev/fb
                    Minor properties:
                        name='ddi-kernel-ioctl' type=boolean dev=(290,0)
                dev=(290,2)
                    dev_path=/pci@0,0/display@1:drm0
                        spectype=chr type=minor
                        dev_link=/dev/dri/card0

Падает тут:
    if (drmSetInterfaceVersion(fd, &sv)) {
        close(fd);
        return FALSE;
    }

Скриптом
$ cat radeon.d
#!/usr/sbin/dtrace -s
#pragma D option flowindent
fbt:drm::entry,
fbt:drm::return,
fbt:radeon::entry,
fbt:radeon::return
{
}

выявлено, что падает потому что drmSetInterfaceVersion запрашивает версию 1.4, а ядро отвечает отказом, потому что поддерживает только 1.2 (функция в ядре drm_setversion)

Версия 1.4 доступна в исходниках FreeBSD http://src.illumos.org/source/xref/freebsd-head/sys/dev/drm2/drm_core.h#34
Попробуем запросить версию 1.2 и определить, чего не хватает.
keremet@openindiana:~/compilation/xf86-video-modesetting-0.9.0$ vi src/driver.c

static Bool probe_hw_pci(const char *dev, struct pci_device *pdev)
{
    int ret = FALSE, fd = open_hw(dev);
    char *id, *devid;
    drmSetVersion sv;

    if (fd == -1)
   return FALSE;

    sv.drm_di_major = 1;
-    sv.drm_di_minor = 4;
+    sv.drm_di_minor = 2;


CPU FUNCTION                                 
  1  -> Setup                                 
  1  <- Setup                                 
  1  -> Identify                             
  1  <- Identify                             
  1  -> ms_driver_func                       
  1  <- ms_driver_func                       
  1  -> ms_driver_func                       
  1  <- ms_driver_func                       
  1  -> ms_pci_probe                         
  1    -> probe_hw_pci                       
  1      -> open_hw                           
  1      <- open_hw                           
  1      -> ms_DRICreatePCIBusID             
  1      <- ms_DRICreatePCIBusID             
  1      -> check_outputs                     
  1      <- check_outputs                     
  0    <- probe_hw_pci                       
  0  <- ms_pci_probe                         
  0  -> Probe                                 
  0  <- Probe                 


Оказалось, что в модуле drm не реализован DRM_IOCTL_MODE_GETRESOURCES и выполнение останавливается на check_outputs. Во FreeBSD DRM_IOCTL_MODE_GETRESOURCES реализован. Надо перенести.

23
OpenIndiana / Re: ATI Radeon HD 6310
« : Январь 06, 2015, 08:16:11 pm »
Реализация KMS в illumos
https://github.com/raichoo/illumos-gate/commits/kms

24
OpenIndiana / Re: ATI Radeon HD 6310
« : Январь 06, 2015, 03:52:51 pm »
scanpci
pci bus 0x0000 cardnum 0x01 function 0x00: vendor 0x1002 device 0x9802
 Advanced Micro Devices, Inc. [AMD/ATI] Wrestler [Radeon HD 6310]


Прописал в /etc/X11/xorg.conf драйвер ati.
В /usr/lib/xorg/modules/drivers/amd64/ati_drv.so определяется, какой драйвер соответствует видеокарте. В нашем случае radeon_drv.so

Вызовы функций в radeon_drv.so
  1  -> RADEONSetup                           
  1  <- RADEONSetup                           
  1  -> RADEONIdentify                       
  1  <- RADEONIdentify                       
  1  -> RADEONDriverFunc                     
  1  <- RADEONDriverFunc                     
  1  -> RADEONDriverFunc                     
  1  <- RADEONDriverFunc                     
  1  -> radeon_pci_probe                     
  1  <- radeon_pci_probe

Выполнение прерывается на этой функции (radeon_probe.c)
static Bool radeon_kernel_mode_enabled(ScrnInfoPtr pScrn, struct pci_device *pci_dev)
{
    char *busIdString;
    int ret;

    if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
         "[KMS] No DRICreatePCIBusID symbol, no kernel modesetting.\n");
   return FALSE;
    }

    busIdString = DRICreatePCIBusID(pci_dev);//"pci:0000:00:01.0"
    ret = drmCheckModesettingSupported(busIdString); //%rax = 0x00000000ffffffa7
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
    if (ret) {
      if (xf86LoadKernelModule("radeonkms"))   //Может быть портировать этот модуль?
        ret = drmCheckModesettingSupported(busIdString);
    }
#endif
    free(busIdString);
    if (ret) {
      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
         "[KMS] drm report modesetting isn't supported.\n"); //Это сообщение выводится
   return FALSE;   //Выход тут
    }

    xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
         "[KMS] Kernel modesetting enabled.\n");
    return TRUE;
}

Пропытка обмануть драйвер, что KMS есть.


root@openindiana:/home/keremet# mdb /usr/bin/amd64/Xorg
Loading modules: [ Xorg ]
> ::bp radeon_drv.so`radeon_pci_probe
> :c

X.Org X Server 1.7.7
Release Date: 2010-05-04
X Protocol Version 11, Revision 0
Build Operating System: SunOS 5.11 i86pc
Current Operating System: SunOS openindiana 5.11 oi_151a8 i86pc
Build Date: 18 February 2013  09:58:49PM
Solaris ABI: 64-bit
Current version of pixman: 0.18.4
        Before reporting problems, check http://openindiana.org/consolidation/xnv
        to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Tue Jan  6 13:44:28 2015
(==) Using config file: "/etc/X11/xorg.conf"
(EE) Failed to load module "xtsol" (module does not exist, 0)
mdb: stop at radeon_drv.so`radeon_pci_probe
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe: pushq  %rbp
mdb: You've got symbols!
Loading modules: [ ld.so.1 libc.so.1 ]
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+1:       leaq   +0x570b8(%rip),%rcx      <radeon_drv.so`RADEONPciChipsets>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+8:       xorl   %r9d,%r9d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb:     xorl   %r8d,%r8d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xe:     xorl   %edi,%edi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x10:    movq   %rsp,%rbp
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x13:    movq   %rbx,-0x20(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x17:    movq   %r13,-0x10(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x1b:    movq   %rdx,%rbx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x1e:    movq   %r14,-0x8(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x22:    movq   %r12,-0x18(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x26:    subq   $0x40,%rsp
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x2a:    movl   %esi,%edx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x2c:    movl   %esi,%r14d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x2f:    movq   $0x0,0x10(%rsp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x38:    xorl   %esi,%esi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x3a:    movq   $0x0,0x8(%rsp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x43:    movq   $0x0,(%rsp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x4b:    call   -0x4958  <PLT:xf86ConfigPciEntity>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x50:    movq   %rax,%r13
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x53:    xorl   %eax,%eax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x55:    testq  %r13,%r13
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x58:    je     +0x32    <radeon_drv.so`radeon_pci_probe+0x8c>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x5a:    testq  %rbx,%rbx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x5d:    je     +0x96    <radeon_drv.so`radeon_pci_probe+0xf9>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x63:    leaq   +0x45c9d(%rip),%rdi      <0xfffffd7ffe88c4e7>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x6a:    call   -0x4967  <PLT:xf86LoaderCheckSymbol>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x6f:    testl  %eax,%eax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x71:    jne    +0x2d    <radeon_drv.so`radeon_pci_probe+0xa0>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xa0:    movq   %rbx,%rdi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xa3:    call   -0x4980  <PLT:DRICreatePCIBusID>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xa8:    movq   %rax,%rbx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xab:    movq   %rax,%rdi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xae:    call   -0x497b  <PLT:drmCheckModesettingSupported>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb3:    movq   %rbx,%rdi
> ::regs
%rax = 0x00000000ffffffa7       %r8  = 0x000000007fffffff
%rbx = 0x00000000006e4130       %r9  = 0x0000000000000030
%rcx = 0x00000000006e4140       %r10 = 0x00000000000005c8
%rdx = 0xfffffd7fffdfeb95       %r11 = 0x0000000000000258
%rsi = 0xfffffd7fffdfeb94       %r12 = 0x0000000000000000
%rdi = 0x00000000006e4130       %r13 = 0x00000000006cfe50
                                %r14 = 0x0000000000000000
                                %r15 = 0x0000000000009802

%cs = 0x0053    %fs = 0x0000    %gs = 0x0000
%ds = 0x0000    %es = 0x0000    %ss = 0x004b

%rip = 0xfffffd7ffe846893 radeon_drv.so`radeon_pci_probe+0xb3
%rbp = 0xfffffd7fffdffa00
%rsp = 0xfffffd7fffdff9c0

%rflags = 0x00000292
  id=0 vip=0 vif=0 ac=0 vm=0 rf=0 nt=0 iopl=0x0
  status=<of,df,IF,tf,SF,zf,AF,pf,cf>

%gsbase = 0x0000000000000000
%fsbase = 0xfffffd7fff162a40
%trapno = 0x3
   %err = 0x0
> 0>rax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb6:    movl   %eax,%r12d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb9:    call   -0x4a16  <PLT:free>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xbe:    testl  %r12d,%r12d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xc1:    je     +0x1d    <radeon_drv.so`radeon_pci_probe+0xe0>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xe0:    movl   0x18(%r13),%edi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xe4:    leaq   +0x43e15(%rip),%rcx      <0xfffffd7ffe88a6e0>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xeb:    xorl   %edx,%edx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xed:    movl   $0x7,%esi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xf2:    xorl   %eax,%eax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xf4:    call   -0x49e1  <PLT:xf86DrvMsgVerb>
> ::step over
(II) [KMS] Kernel modesetting enabled.
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xf9:    movq   +0x564e0(%rip),%r10      <0xfffffd7ffe89cdc0>
> :c
(EE) RADEON(0): [drm] Failed to open DRM device for pci:0000:00:01.0: No such device or address
(EE) RADEON(0): Kernel modesetting setup failed
(EE) Screen(s) found, but none have a usable configuration.

Fatal server error:
no screens found

Please consult the OpenIndiana, based on X.Org Foundation & OpenSolaris sources support
         at http://openindiana.org/consolidation/xnv
 for help.
Please also check the log file at "/var/log/Xorg.0.log" for additional information.

mdb: target has terminated
>


25
OpenIndiana / ATI Radeon HD 6310
« : Декабрь 14, 2014, 08:10:05 pm »
Требуется установить разрешение экрана 1366x768 вместо устанавливаемого по умолчанию 1024x768
Похоже, что любая видеокарта позволяет выставить любое разрешение
http://frolov-lib.ru/books/bsp/v21/ch4_8.htm
http://pcabc.ru/to/to23.html
https://ru.wikipedia.org/wiki/WXGA

http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/io/vgasubr.c
http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/intel/io/vgatext/vgatext.c



После сообщения "Searching for matching VESA mode(s):" вызывается в драйвере Xorg vesa
функция VBEGetModePool


http://www.macbreaker.com/2012/06/how-to-set-your-hackintosh-bootscreen.html

Как задать требуемую ширину экрана:
http://freespace.virgin.net/hugo.elias/graphics/x_vapp05.htm

В vesa:
/* Set a graphics mode */
static Bool
VESASetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode){
....
    if (data->data->XResolution != pScrn->displayWidth)
   VBESetLogicalScanline(pVesa->pVbe, pScrn->displayWidth);

}


keremet@openindiana:~$ cvt 1366 768
# 1368x768 59.88 Hz (CVT) hsync: 47.79 kHz; pclk: 85.25 MHz
Modeline "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync

Последняя команда завершилась ошибкой "xrandr: Configure crtc 0 failed"
xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
xrandr --addmode default 1368x768_60.00
xrandr --output default --mode 1368x768_60.00

http://myit-solutions.blogspot.ru/2010/09/how-to-add-and-set-custom-display.html



Драйвер vgatext отвечает исключительно за текстовый режим. Графический режим по всей видимости устанавливается в xorg.
  0  -> vgatext_ioctl                         
  0    -> do_gfx_ioctl                       
  0      -> vgatext_kdsetmode                 
  0        -> vgatext_kdsetgraphics           
  0          -> vgatext_progressbar_stop     
  0          <- vgatext_progressbar_stop     
  0          -> vgatext_save_text             
  0          <- vgatext_save_text             
  0        <- vgatext_kdsetgraphics           
  0      <- vgatext_kdsetmode                 
  0    <- do_gfx_ioctl                       
  0  <- vgatext_ioctl                         
  0  -> vgatext_open                         
  0  <- vgatext_open                         
  0  -> vgatext_ioctl                         
  0    -> do_gfx_ioctl                       
  0    <- do_gfx_ioctl                       
  0  <- vgatext_ioctl

Из пользовательного режима запускаю
   movw   $0x03D4, %dx
   movb   $4, %al
   outb   (%dx) //Тут  коредамп


Проверить: в VBEGetModePool (вызывается в vesa_drv) ищутся только стандартные или еще и нестандартные режимы (см. Зубков с 158)
xorg-server-1.7.7$ ggrep -Rn --color VBEGetModePool ./
./hw/xfree86/vbe/vbeModes.h:72:extern _X_EXPORT DisplayModePtr VBEGetModePool(ScrnInfoPtr pScrn, vbeInfoPtr pVbe,
./hw/xfree86/vbe/vbeModes.c:273:VBEGetModePool(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe,


#!/usr/sbin/dtrace -s
#pragma D option flowindent
pid$target:::entry,
pid$target:::return
/probemod=="libvbe.so"/
{
}

./X.sh -c X

CPU FUNCTION                                 
  0  -> vbeSetup                             
  0  <- vbeSetup                             
  0  -> VBEExtendedInit                       
  0  <- VBEExtendedInit                       
  0  -> VBEGetVBEInfo                         
  0  <- VBEGetVBEInfo                         
  0  -> VBEFindSupportedDepths               
  0    -> GetDepthFlag                       
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- GetDepthFlag                       
....                   
  1    -> GetDepthFlag                       
  1      -> VBEGetModeInfo                   
  1      <- VBEGetModeInfo                   
  1      -> VBEFreeModeInfo                   
  1      <- VBEFreeModeInfo                   
  1    <- GetDepthFlag                       
  1  <- VBEFindSupportedDepths               
  1  -> vbeDoEDID                             
  1    -> vbeReadEDID                         
  0    <- vbeReadEDID                         
  0  <- vbeDoEDID                             
  0  -> VBEGetModePool                       
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  1      <- VBEGetModeInfo                   
  1      -> VBEFreeModeInfo                   
  1      <- VBEFreeModeInfo                   
  1    <- CheckMode                           
  1    -> CheckMode                           
  1      -> VBEGetModeInfo                   
  1      <- VBEGetModeInfo                   
  1      -> VBEFreeModeInfo                   
  1      <- VBEFreeModeInfo                   
  1    <- CheckMode                           
....
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  1      <- VBEGetModeInfo                   
  1    <- CheckMode                           
  1    -> CheckMode                           
  1      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
......                       
  0    -> CheckMode                           
  0      -> VBEGetModeInfo                   
  0      <- VBEGetModeInfo                   
  0      -> VBEFreeModeInfo                   
  0      <- VBEFreeModeInfo                   
  0    <- CheckMode                           
  0  <- VBEGetModePool                       
  0  -> VBESetModeNames                       
  0  <- VBESetModeNames                       
  0  -> VBEValidateModes                     
  0  <- VBEValidateModes                     
  0  -> VBEValidateModes                     
  0  <- VBEValidateModes                     
  0  -> VBEPrintModes                         
  0  <- VBEPrintModes                         
  0  -> VBESetModeParameters                 
  0  <- VBESetModeParameters                 
  0  -> vbeFree                               
  0  <- vbeFree                               
  0  -> VBEExtendedInit                       
  0  <- VBEExtendedInit                       
  0  -> VBEGetVBEMode                         
  1  <- VBEGetVBEMode                         
  1  -> VBESaveRestore                       
  0  <- VBESaveRestore                       
  0  -> VBESaveRestore                       
  0  <- VBESaveRestore                       
  0  -> VBESetGetPaletteData                 
  0  <- VBESetGetPaletteData                 
  0  -> VBESetVBEMode                         
  1  <- VBESetVBEMode                         
  1  -> VBESetDisplayStart                   
  1  <- VBESetDisplayStart                   



В VbeInfoBlock * VBEGetVBEInfo(vbeInfoPtr pVbe) происходит обращение к биос за списком режимов, в предыдущей функции этот список просто используется. Посмотрим в отладчике, выдается ли список нестандартных режимов.

root@openindiana:/home/keremet# mdb /usr/bin/Xorg
Loading modules: [ Xorg ]
> :c
mdb: execve detected: (f)ollow new program or (s)top? f
mdb: lost control of PID 1972 due to exec of 64-bit executable
mdb: restarting debugger to follow PID 1972 ...
mdb: target performed exec of /usr/bin/amd64/Xorg
Loading modules: [ Xorg ld.so.1 ]
> ::bp libvbe.so`VBEGetVBEInfo
> :c

X.Org X Server 1.7.7
Release Date: 2010-05-04
X Protocol Version 11, Revision 0
Build Operating System: SunOS 5.11 i86pc
Current Operating System: SunOS openindiana 5.11 oi_151a8 i86pc
Build Date: 18 February 2013  09:58:49PM
Solaris ABI: 64-bit
Current version of pixman: 0.18.4
        Before reporting problems, check http://openindiana.org/consolidation/xnv
        to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Wed Dec 31 18:13:22 2014
(==) Using default built-in configuration (30 lines)
(EE) Failed to load module "xtsol" (module does not exist, 0)
(EE) Failed to load module "fbdev" (module does not exist, 0)
(II) [KMS] drm report modesetting isn't supported.
mdb: stop at libvbe.so`VBEGetVBEInfo
mdb: target stopped at:
libvbe.so`VBEGetVBEInfo:pushq  %rbp
mdb: You've got symbols!
Loading modules: [ libc.so.1 ]
> :e
...
> :e
mdb: target stopped at:
libvbe.so`VBEGetVBEInfo+0x129:  call   -0xae6   <PLT:strdup>
> ::regs
%rax = 0x00000000006d6dd0
...
> 0x00000000006d6dd0 ::dump
         \/ 1 2 3  4 5 6 7  8 9 a b  c d e f  v123456789abcdef
6d6dd0:  414d4420 41544f4d 42494f53 00000000  AMD ATOMBIOS....


> :e
mdb: target stopped at:
libvbe.so`VBEGetVBEInfo+0x18b:  call   -0xc08   <PLT=libint10.so`xf86int10Addr>

Функция возвращает 0x00000000006f8684. Смотрим что по этому адресу:

> 0x00000000006f8684 ::dump -g 2 -w 2
          0 1  2 3 \/ 5  6 7  8 9  a b  c d  e f  0 1  2 3  4 5  6 7  8 9  a b  c d  e f  0123v56789abcdef0123456789abcdef
6f8680:  0000 0000 0001 0101 0301 0501 0701 1001 1101 1301 1401 1601 1701 1901 1a01 0d01  ................................
> 0x00000000006f8684 ::dump -g 2 -w 2 -r
    0 1  2 3  4 5  6 7  8 9  a b  c d  e f  0 1  2 3  4 5  6 7  8 9  a b  c d  e f  0123456789abcdef0123456789abcdef
0:  0001 0101 0301 0501 0701 1001 1101 1301 1401 1601 1701 1901 1a01 0d01 0e01 2001  .............................. .
> 0x00000000006f8684 ::dump -g 2  -r
    0 1  2 3  4 5  6 7  8 9  a b  c d  e f  0123456789abcdef
0:  0001 0101 0301 0501 0701 1001 1101 1301  ................
> 0x00000000006f86ee ::dump -g 2  -r
    0 1  2 3  4 5  6 7  8 9  a b  c d  e f  0123456789abcdef
0:  ffff 0000 0000 0000 0000 0000 0000 0000  ................
> 0x00000000006f86e0 ::dump -g 2  -r
    0 1  2 3  4 5  6 7  8 9  a b  c d  e f  0123456789abcdef
0:  8601 d301 d501 d601 e301 e501 e601 ffff  ................


Действительно номера режимов - сравним с
grep "Mode:" Xorg.0.log

После ffff идут нули - значит номера нестандарных режимов не передаются сюда

vesa.c:
static void
VESASetModeParameters(vbeInfoPtr pVbe, DisplayModePtr vbemode,
            DisplayModePtr ddcmode)
Тут заполняется структура VbeCRTCInfoBlock, которую можно передавать в функцию установки режима. Через mdb выявлено, что сейчас структура не передается.
http://www.arachnoid.com/modelines/

26
Мне подарили ноут с частично работающей клавиатурой. Все неработающие клавиши я поделил на 2 группы

1. Пусть не работают, потому что есть дублирующие клавиши или комбинации
доп Delete - обычный Delete
правый ALT - левый ALT
влево   - доп_4
вниз           - доп_2
вправо   - доп_6
доп_умножение   - shift+8
доп_3   - 3

2. У этих клавиш нет дублирующих клавиш или комбинаций, но для них можно задействовать избыточные:
пробел   - доп_5
B   - доп_9
N   - доп_1
русская_точка=лат_слеш   - доп_7

Решение - внести изменения в драйвер клавиатуры, чтобы в момент определения, какая клавиша нажата, этот считанный код клавиши изменялся.
Сначала определим, как называется этот драйвер:
prtconf -D
...
            i8042, instance #0 (driver name: i8042)
                keyboard, instance #0 (driver name: kb8042)
                mouse, instance #0 (driver name: mouse8042)
....

keremet@openindiana:~$ modinfo |grep kb8042
100 fffffffff7da0000   3570  53   1  kb8042 (PS/2 keyboard driver)


Поисследуем, что происходит при нажатии клавиши
root@openindiana:~# dtrace -n 'fbt:kb8042::entry{} fbt:kb8042::return{}'
dtrace: description 'fbt:kb8042::entry' matched 62 probes
CPU     ID                    FUNCTION:NAME
  1  61088                kb8042_intr:entry
  1  61108       kb8042_received_byte:entry
  1  61120        KeyboardConvertScan:entry
  1  61062   KeyboardConvertScan_set1:entry
  1  61063  KeyboardConvertScan_set1:return
  1  61121       KeyboardConvertScan:return
  1  61110   kb8042_autorepeat_detect:entry
  1  61111  kb8042_autorepeat_detect:return
  1  61112         kb8042_process_key:entry
  1  61113        kb8042_process_key:return
  1  61109      kb8042_received_byte:return
  1  61089               kb8042_intr:return
  1  61088                kb8042_intr:entry
  1  61108       kb8042_received_byte:entry
  1  61120        KeyboardConvertScan:entry
  1  61062   KeyboardConvertScan_set1:entry
  1  61063  KeyboardConvertScan_set1:return
  1  61121       KeyboardConvertScan:return
  1  61110   kb8042_autorepeat_detect:entry
  1  61111  kb8042_autorepeat_detect:return
  1  61112         kb8042_process_key:entry
  1  61113        kb8042_process_key:return
  1  61109      kb8042_received_byte:return
  1  61089               kb8042_intr:return


root@openindiana:~# cat 1.d
#!/usr/sbin/dtrace -s
#pragma D option flowindent
fbt:kb8042::entry,
fbt:kb8042::return
{
}

root@openindiana:~# ./1.d
dtrace: script './1.d' matched 62 probes
CPU FUNCTION                                 
  1  -> kb8042_intr                           
  1    -> kb8042_received_byte               
  1      -> KeyboardConvertScan               
  1        -> KeyboardConvertScan_set1       
  1        <- KeyboardConvertScan_set1       
  1      <- KeyboardConvertScan               
  1      -> kb8042_autorepeat_detect         
  1      <- kb8042_autorepeat_detect         
  1      -> kb8042_process_key               
  1      <- kb8042_process_key               
  1    <- kb8042_received_byte               
  1  <- kb8042_intr                           
  1  -> kb8042_intr                           
  1    -> kb8042_received_byte               
  1      -> KeyboardConvertScan               
  1        -> KeyboardConvertScan_set1       
  1        <- KeyboardConvertScan_set1       
  1      <- KeyboardConvertScan               
  1      -> kb8042_autorepeat_detect         
  1      <- kb8042_autorepeat_detect         
  1      -> kb8042_process_key               
  1      <- kb8042_process_key               
  1    <- kb8042_received_byte               
  1  <- kb8042_intr         

Функция kb8042_intr  вызывается дважды: на нажатие и на отпускание.

Получение скан-кодов
sudo dtrace -n 'fbt:kb8042:kb8042_received_byte:entry{printf("scancode: %d", arg1);}'
5  0  45904       kb8042_received_byte:entry scancode: 76
  0  45904       kb8042_received_byte:entry scancode: 204
   0  45904       kb8042_received_byte:entry scancode: 57
  0  45904       kb8042_received_byte:entry scancode: 185

1  0  45904       kb8042_received_byte:entry scancode: 79
  0  45904       kb8042_received_byte:entry scancode: 207
n  0  45904       kb8042_received_byte:entry scancode: 49
  0  45904       kb8042_received_byte:entry scancode: 177

9  0  45904       kb8042_received_byte:entry scancode: 73
  0  45904       kb8042_received_byte:entry scancode: 201
b  0  45904       kb8042_received_byte:entry scancode: 48
  0  45904       kb8042_received_byte:entry scancode: 176

7  0  45904       kb8042_received_byte:entry scancode: 71
  0  45904       kb8042_received_byte:entry scancode: 199
/  0  45904       kb8042_received_byte:entry scancode: 53
  0  45904       kb8042_received_byte:entry scancode: 181






На сайте http://src.illumos.org/ нашел, где находятся исходники модуля

keremet@openindiana:/code1/illumos-gate/usr/src/uts$ gedit ./common/io/kb8042/kb8042.c


Изменения в функцию kb8042_intr: преобразуем scancode перед отправкой в kb8042_received_byte

static uint_t
kb8042_intr(caddr_t arg)
{
   uchar_t scancode;   /* raw scan code */
   int rc;
   struct kb8042 *kb8042 = (struct kb8042 *)arg;

   rc = DDI_INTR_UNCLAIMED;

   if (kb8042->init_state == KB8042_UNINITIALIZED)
      return (DDI_INTR_UNCLAIMED);

   /* don't care if drv_setparm succeeds */
   (void) drv_setparm(SYSRINT, 1);

   while (ddi_get8(kb8042->handle, kb8042->addr + I8042_INT_INPUT_AVAIL)
       != 0) {
      rc = DDI_INTR_CLAIMED;

      scancode = ddi_get8(kb8042->handle,
          kb8042->addr + I8042_INT_INPUT_DATA);

+      switch (scancode & 0x7F){
+         case 76: scancode = (scancode & 0x80)|57; break;
+         case 79: scancode = (scancode & 0x80)|49; break;
+         case 73: scancode = (scancode & 0x80)|48; break;
+         case 71: scancode = (scancode & 0x80)|53; break;
+      }

      kb8042_received_byte(kb8042, scancode);
   }

   return (rc);
}

Команды компиляции возьму из .make.state, который создается при сборке illumos:
/code1/illumos-gate/usr/src/uts/intel/kb8042/.make.state

/code1/illumos-gate/usr/src/tools/proto/root_i386-nd/opt/onbld/bin/i386/cw -_gcc -m64 -Ui386 -U__i386 -xO3 ../../intel/amd64/ml/amd64.il -D_ASM_INLINES -Xa -xspace  -xmodel=kernel -_gcc=-mno-mmx -_gcc=-mno-sse -Wu,-save_args -v -xildoff  -g -xc99=%all -W0,-noglobal  -Wu,-save_args -xdebugformat=stabs -errtags=yes -errwarn=%all -_gcc=-Wno-missing-braces -_gcc=-Wno-sign-compare -_gcc=-Wno-unknown-pragmas -_gcc=-Wno-unused-parameter -_gcc=-Wno-missing-field-initializers -_gcc=-fno-inline-small-functions  -_gcc=-fno-inline-functions-called-once  -_gcc=-fno-ipa-cp -W0,-xglobalstatic    -xstrconst -D_KERNEL -D_SYSCALL32 -D_SYSCALL32_IMPL -D_ELF64  -D_DDI_STRICT -Dsun -D__sun -D__SVR4 -DDEBUG    -I../../intel -Y I,../../common  -c -o debug64/kb8042.o ../../common/io/kb8042/kb8042.c

/usr/ccs/bin/ld -r -dy -Nmisc/kbtrans -o debug64/kb8042 debug64/at_keyprocess.o    debug64/kb8042.o    debug64/kb8042_keytables.o


После компиляции
sudo install -s -m 755 -f /kernel/drv/amd64 debug64/kb8042
sudo bootadm update-archive



Наверно будут интересными эти ссылки
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/loadkeys/
https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/kbd/keymap
http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/io/kb8042/

27
OpenIndiana / Чтение электронных книг
« : Ноябрь 15, 2014, 12:39:12 am »
Добавить репозиторий http://pkg.openindiana.org/sfe
pkg set-publisher -g http://pkg.openindiana.org/sfe sfe

Установить fbreader
pkg install fbreader

За zip-архиве с книгой или на самой книге fb2 щелкнуть правой кнопкой и открыть с помощью "Чтение электронных книг". В меню GNOME программу можно найти в Applications/Офис

28
Скачать архив с исходниками с сайта http://webcollab.sourceforge.net/ . На момент написания заметки это webcollab-3.40.tar.gz
Распаковать архив:
tar xf webcollab-3.40.tar.gz
Дать доступ на запись в конфигурационный файл.
chmod a+w config/config.php
chmod a+w files/filebase

Пусть например распаковка выполнялась в каталог /var/apache2/2.2/htdocs/webcollab, тогда в браузере надо зайти по ссылке:

http://localhost/webcollab/setup.php
"A database is required to be created for WebCollab to operate. Do you wish to create a database now?" - нажать Yes

Создание БД аналогично collabtive (http://forum.os-solaris.ru/index.php?topic=510.0)
CREATE DATABASE `webcollab`;
GRANT ALL PRIVILEGES ON webcollab.* TO webcollab@localhost IDENTIFIED BY '1' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Заполнить поля второго шага:
Your database name:webcollab
Database user: webcollab
Database password: 1

Выбрать на одном из шагов имя и пароль для суперпользователя

После того как будет сохранен config/config.php снять с него права на запись.
chmod a-w config/config.php

Чтобы можно было сохранять русские тексты:
В файле ./database/mysql_pdo.php в function db_connection()  внести следующие изменения:

-db_query('SET time_zone=\''.sprintf('%+d:%02d', (int)TZ, (TZ - floor(TZ) ) * 60 ).'\', NAMES utf8, CHARACTER SET utf8' );
+// db_query('SET time_zone=\''.sprintf('%+d:%02d', (int)TZ, (TZ - floor(TZ) ) * 60 ).'\', NAMES utf8, CHARACTER SET utf8' );
+db_query('SET NAMES utf8' );
return;
}

Чтобы весь интерфейс был на русском языке, выполнить команды в каталоге lang:
mv ru_email.php en_email.php
mv ru_long_message.php en_long_message.php
mv ru_message.php en_message.php

Команда
grep FILE_BASE config/config.php
выдаст каталог, куда будут загружаться файлы.
Следует сделать его доступным для записи для web-сервера

29
Разработки Kirov OSUG / Re: Bluetooth в Illumos
« : Июль 16, 2014, 05:57:12 pm »
Сделать RFCOMM-сокет, скомпилить библиотеку openobex, чтобы заработало приложение obexftp.

30
OpenSolaris / Принтер Samsung ML-2160
« : Июль 05, 2014, 10:15:49 pm »
http://downloadcenter.samsung.com/content/DR/201110/20111019151150392/Smartpanel_1.01.tar.gz
http://downloadcenter.samsung.com/content/DR/201110/20111019151150392/PSU_1.01.tar.gz
http://org.downloadcenter.samsung.com/content/DR/200911/20091118145015140/UnifiedLinuxDriver_1.01.tar.gz

tar xf Smartpanel_1.01.tar.gz
tar xf PSU_1.01.tar.gz
tar xf UnifiedLinuxDriver_1.01.tar.gz

sudo cp ./cdroot/Linux/i386/at_root/usr/lib/cups/filter/rastertosamsungspl /usr/lib/cups/filter/
Установить из cdroot/Linux/noarch/at_opt/share/ppd/ML-2160.ppd

autorun зависает на 95%

Страницы: 1 [2] 3 4 ... 31