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

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


Темы - keremet

Страницы: [1] 2 3 ... 8
1
OpenIndiana / Как работает вход через консоль
« : Январь 10, 2018, 12:03:01 pm »
 svcs -l svc:/system/console-login:default
logfile      /var/svc/log/system-console-login:default.log
contract_id  142

по логу видно, что запускается /lib/svc/method/console-login

pgrep -c 142

sudo pargs 955
955:   /usr/sbin/ttymon -g -d /dev/console -l console -m ldterm,ttcompat -h -p sunhost
argv[0]: /usr/sbin/ttymon
argv[1]: -g
argv[2]: -d
argv[3]: /dev/console
argv[4]: -l
argv[5]: console
argv[6]: -m
argv[7]: ldterm,ttcompat
argv[8]: -h
argv[9]: -p
argv[10]: sunhost console login:



А потом запускается login
https://github.com/illumos/illumos-gate/blob/bccbd30bb6d0c20635d3f23e8d63f3f8170d3c46/usr/src/cmd/login/login.c

3
Разработки Kirov OSUG / Разделяемая память
« : Декабрь 03, 2017, 04:20:20 pm »
/* Программа 2 (06-1b.с) для иллюстрации работы с
разделяемой памятью */
/* Мы организуем разделяемую память для массива из
трех целых чисел. Первый элемент массива является
счетчиком числа запусков программы 1, т. е. данной
программы, второй элемент массива – счетчиком числа
запусков программы 2, третий элемент массива –
счетчиком числа запусков обеих программ */
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <errno.h>
int main()
{
    int *array;   /* Указатель на разделяемую память */
    int shmid;    /* IPC дескриптор для области разделяемой памяти */
    int new = 1;  /* Флаг необходимости инициализации элементов массива */
    char pathname[] = "1.c"; /* Имя файла,
        используемое для генерации ключа. Файл с таким
        именем должен существовать в текущей директории */
    key_t key;    /* IPC ключ */
    /* Генерируем IPC ключ из имени файла 06-1a.c в
    текущей директории и номера экземпляра области
    разделяемой памяти 0 */
    if((key = ftok(pathname,0)) < 0){
        printf("Can\'t generate key\n");
        exit(-1);
    }
    /* Пытаемся эксклюзивно создать разделяемую память
    для сгенерированного ключа, т.е. если для этого
    ключа она уже существует, системный вызов вернет
    отрицательное значение. Размер памяти определяем
    как размер массива из трех целых переменных, права
    доступа 0666 – чтение и запись разрешены для всех */
    if((shmid = shmget(key, 100*1024*1024,
        0666|IPC_CREAT|IPC_EXCL)) < 0){
    /* В случае возникновения ошибки пытаемся определить:
    возникла ли она из-за того, что сегмент разделяемой
    памяти уже существует или по другой причине */
        if(errno != EEXIST){
            /* Если по другой причине – прекращаем работу */
            printf("Can\'t create shared memory\n");
            exit(-1);
        } else {
            /* Если из-за того, что разделяемая память уже
            существует, то пытаемся получить ее IPC дескриптор
            и, в случае удачи, сбрасываем флаг необходимости
            инициализации элементов массива */
            if((shmid = shmget(key, 100*1024*1024, 0)) < 0){
                printf("Can\'t find shared memory\n");
                exit(-1);
            }
            new = 0;
        }
    }
    /* Пытаемся отобразить разделяемую память в адресное
    пространство текущего процесса. Обратите внимание на то,
    что для правильного сравнения мы явно преобразовываем
    значение -1 к указателю на целое.*/
    if((array = (int *)shmat(shmid, NULL, 0)) ==
        (int *)(-1)){
        printf("Can't attach shared memory\n");
        exit(-1);
    }
    /* В зависимости от значения флага new либо
    инициализируем массив, либо увеличиваем
    соответствующие счетчики */
    if(new){
        array[0] = 0;
        array[1] = 1;
        array[2] = 1;
    } else {
        array[1] += 1;
        array[2] += 1;
    }
    /* Печатаем новые значения счетчиков, удаляем разделяемую
    память из адресного пространства текущего процесса и
    завершаем работу */
    printf("Program 1 was spawn %d times, program 2 - %d times, total - %d times\n",
    array[0], array[1], array[2]);
    getchar();
    if(shmdt((char*)array) < 0){
        printf("Can't detach shared memory\n");
        exit(-1);
    }
    printf("shmdt executed\n");
    getchar();
    return 0;
}

4
OpenIndiana / Ошибка pkg
« : Декабрь 08, 2016, 05:28:34 pm »
$ sudo pkg install  pkg:/developer/gnu-binutils@2.25.1-2016.0.1.2
Linked image publisher check
Traceback (most recent call last):
  File "/usr/bin/pkg", line 5444, in handle_errors
    __ret = func(*args, **kwargs)
  File "/usr/bin/pkg", line 5430, in main_func
    pargs=pargs, **opts)
  File "/usr/bin/pkg", line 2100, in install
    display_plan_cb=display_plan_cb, logger=logger)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/client_api.py", line 1554, in _install
    logger=logger)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/client_api.py", line 1442, in __api_op
    logger=logger, **kwargs)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/client_api.py", line 1313, in __api_plan
    display_plan_cb=display_plan_cb)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/client_api.py", line 1285, in __api_plan
    for pd in api_plan_func(**kwargs):
  File "/usr/lib/python2.7/vendor-packages/pkg/client/api.py", line 1517, in __plan_op
    log_op_end_all=True)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/api.py", line 1427, in __plan_op
    self.__linked_pubcheck(_op)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/api.py", line 1610, in __linked_pubcheck
    self._img.linked.api_recurse_pubcheck(self.__progresstracker)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/linkedimage/common.py", line 2367, in api_recurse_pubcheck
    _failfast=False))
  File "/usr/lib/python2.7/vendor-packages/pkg/client/linkedimage/common.py", line 2057, in __children_op
    stage=pkgdefs.API_STAGE_DEFAULT
  File "/usr/lib/python2.7/vendor-packages/pkg/client/linkedimage/common.py", line 2159, in __children_op_vec
    _syncmd_tmp, **kwargs)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/linkedimage/common.py", line 3229, in child_op_setup
    self.__child_setup_pubcheck(_pmd, **kwargs)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/linkedimage/common.py", line 3187, in __child_setup_pubcheck
    pkgdefs.PKG_OP_PUBCHECK)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/pkgremote.py", line 408, in setup
    self.__rpc_server_setup(img_path)
  File "/usr/lib/python2.7/vendor-packages/pkg/client/pkgremote.py", line 163, in __rpc_server_setup
    rpc_client = pkg.pipeutils.PipedServerProxy(client_cmd_pipe)
  File "/usr/lib/python2.7/vendor-packages/pkg/pipeutils.py", line 628, in __init__
    http_enc=http_enc)
  File "/usr/lib/python2.7/vendor-packages/pkg/pipeutils.py", line 412, in __init__
    rpc.Transport.__init__(self)
TypeError: __init__() takes exactly 2 arguments (1 given)


pkg: This is an internal error in pkg(5) version b2f36a5.  Please log a
Service Request about this issue including the information above and this
message.



Решение:
vi /usr/lib/python2.7/vendor-packages/pkg/pipeutils.py.

Добавить в секцию импорта:
import jsonrpclib.config as rpcconfig

Изменить строку 412 (теперь 413) на:
rpc.Transport.__init__(self,config=rpcconfig.DEFAULT)

5
Сеть, сетевые сервисы, сетевой софт / Ekiga 4.0.1
« : Декабрь 08, 2016, 05:15:15 am »
Открывает порты на каждом сетевом интерфейсе. Хотелось бы, чтобы открывала только на заданном.

Посмотрим, где это происходит
Для начала поставим gc++filt, если его еще нет
sudo pkg install pkg:/developer/gnu-binutils@2.25.1-2016.0.1.2
Запустим скрипт, а  потом екигу
sudo dtrace -n 'syscall::so_socket:entry/execname=="ekiga"/{ if((arg0 == 2)&&(arg1 == 2)&&(arg2 == 0)){ustack(); printf("family = %d, type_w_flags = %d, protocol = %d\n", arg0, arg1, arg2);} }'|gc++filt
dtrace: description 'syscall::so_socket:entry' matched 5 probes
CPU     ID                    FUNCTION:NAME
  0  12832                  so_socket:entry
              libc.so.1`_so_socket+0x15
              libsocket.so.1`__xnet_socket+0x23
              libpt.so.2.10.11`PSocket::os_socket(int, int, int)+0x25
              libpt.so.2.10.11`PTCPSocket::OpenSocket(int)+0x29
              libpt.so.2.10.11`PIPSocket::Listen(PIPSocket::Address const&, unsigned int, unsigned short, PSocket::Reusability)+0x1fe
              libpt.so.2.10.11`PTCPSocket::Listen(PIPSocket::Address const&, unsigned int, unsigned short, PSocket::Reusability)+0x2b
              libopal.so.3.10.10`OpalListenerTCP::Open(PNotifierTemplate<int> const&, OpalListener::ThreadMode)+0x1e6
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalListener*)+0xaf
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalTransportAddress const&)+0x17b
              libopal.so.3.10.10`OpalEndPoint::StartListeners(PStringArray const&)+0x104
              libekiga.so`Opal::H323::EndPoint::set_listen_port(unsigned int)+0x11f
              libekiga.so`Opal::H323::EndPoint::EndPoint(Opal::CallManager&, Ekiga::ServiceCore&, unsigned int, unsigned int)+0x1e2
              libekiga.so`OPALSpark::try_initialize_more(Ekiga::ServiceCore&, int*, char***)+0x8da
              libekiga.so`Ekiga::KickStart::kick(Ekiga::ServiceCore&, int*, char***)+0x2c0
              libekiga.so`engine_init(boost::shared_ptr<Ekiga::ServiceCore>, int, char**)+0x838
              ekiga`main+0x30e
              ekiga`_start+0x83
family = 2, type_w_flags = 2, protocol = 0

COMPONENT_NAME=opal
COMPONENT_VERSION=3.10.10
COMPONENT_SRC=$(COMPONENT_NAME)-$(COMPONENT_VERSION)
COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.xz

wget http://ftp.gnome.org/pub/GNOME/sources/$COMPONENT_NAME/3.10/$COMPONENT_ARCHIVE

wget http://ftp.gnome.org/pub/GNOME/sources/ekiga/4.0/ekiga-4.0.1.tar.xz

Протокол UDP
sudo soconfig -l

sudo dtrace -n 'syscall::so_socket:entry/execname=="ekiga"/{ if(((arg0 == 2)||(arg0 == 26))&&(arg1 == 1)){ustack(); printf("family = %d, type_w_flags = %d, protocol = %d\n", arg0, arg1, arg2);} }'|gc++filt




  1   8082                  so_socket:entry
              libc.so.1`_so_socket+0x7
              libsocket.so.1`__xnet_socket+0x23
              libpt.so.2.10.11`PSocket::os_socket(int, int, int)+0x25
              libpt.so.2.10.11`PUDPSocket::OpenSocket(int)+0x29
              libpt.so.2.10.11`PUDPSocket::PUDPSocket(unsigned short, int)+0xfd
              libpt.so.2.10.11`PMonitoredSockets::CreateSocket(PMonitoredSockets::SocketInfo&, PIPSocket::Address const&)+0x91
              libpt.so.2.10.11`PMonitoredSocketBundle::OpenSocket(PString const&)+0x56
              libpt.so.2.10.11`PMonitoredSocketBundle::Open(unsigned short)+0xc5
              libopal.so.3.10.10`OpalListenerUDP::Open(PNotifierTemplate<int> const&, OpalListener::ThreadMode)+0x3c
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalListener*)+0xaf
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalTransportAddress const&)+0x17b
              libopal.so.3.10.10`OpalEndPoint::StartListeners(PStringArray const&)+0x104
              libekiga.so`Opal::Sip::EndPoint::set_listen_port(unsigned int)+0x13c
              libekiga.so`Opal::Sip::EndPoint::EndPoint(Opal::CallManager&, Ekiga::ServiceCore&, unsigned int)+0x550
              libekiga.so`OPALSpark::try_initialize_more(Ekiga::ServiceCore&, int*, char***)+0x811
              libekiga.so`Ekiga::KickStart::kick(Ekiga::ServiceCore&, int*, char***)+0x2c0
              libekiga.so`engine_init(boost::shared_ptr<Ekiga::ServiceCore>, int, char**)+0x838
              ekiga`main+0x30e
              ekiga`_start+0x83
family = 2, type_w_flags = 1, protocol = 0

Поменял тут: libekiga.so`Opal::Sip::EndPoint::set_listen_port(unsigned int)
ekiga-4.0.1/lib/engine/components/opal/sip-endpoint.cpp
Opal::Sip::EndPoint::set_listen_port (unsigned port)
{
  unsigned udp_min, udp_max;

  listen_iface.protocol = "udp";
  listen_iface.voip_protocol = "sip";
  listen_iface.id = "*";

  manager.get_udp_ports (udp_min, udp_max);

  if (port > 0) {

    std::stringstream str;
    RemoveListener (NULL);

    str << "udp$192.168.1.1:" << port; //!
    if (!StartListeners (PStringArray (str.str ()))) {

      port = udp_min;
      str << "udp$*:" << port;
      while (port <= udp_max) {

        if (StartListeners (PStringArray (str.str ()))) {

          listen_iface.port = port;
          return true;
        }

        port++;
      }
    }
    else {
      listen_iface.port = port;
      return true;
    }
  }

  return false;
}


Отключить STUN
#define NAT_KEY "/apps/" PACKAGE_NAME "/general/nat/"

  else if (key == NAT_KEY "stun_server") {

    gchar* stun_server = gm_conf_entry_get_string (entry);
    manager.set_stun_server (stun_server ? stun_server : "stun.ekiga.net");
    g_free (stun_server);
  }
  else if (key == NAT_KEY "enable_stun") {

    manager.set_stun_enabled (gm_conf_entry_get_bool (entry));
  }

6
OpenIndiana / Компиляция PHP
« : Август 05, 2016, 04:54:16 pm »
http://ar2.php.net/get/php-5.6.24.tar.bz2/from/this/mirror
./configure
make
Будет ошибка
/usr/include/sys/feature_tests.h:355:2: #error "Compiler or options invalid; UNIX 03 and POSIX.1-2001 applications    require the use of c99"

Надо скомпилить этот файл с параметром -std=c99

/bin/sh /home/True/Скачивание/php-5.6.24/libtool --silent --preserve-dup-deps --mode=compile gcc -I/home/True/Скачивание/php-5.6.24/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0  -Iext/sqlite3/ -I/home/True/Скачивание/php-5.6.24/ext/sqlite3/ -DPHP_ATOM_INC -I/home/True/Скачивание/php-5.6.24/include -I/home/True/Скачивание/php-5.6.24/main -I/home/True/Скачивание/php-5.6.24 -I/home/True/Скачивание/php-5.6.24/ext/date/lib -I/home/True/Скачивание/php-5.6.24/ext/ereg/regex -I/usr/include/libxml2 -I/home/True/Скачивание/php-5.6.24/ext/sqlite3/libsqlite -I/home/True/Скачивание/php-5.6.24/TSRM -I/home/True/Скачивание/php-5.6.24/Zend  -D_POSIX_PTHREAD_SEMANTICS  -I/usr/include -g -O2  -c /home/True/Скачивание/php-5.6.24/ext/sqlite3/libsqlite/sqlite3.c -std=c99 -o ext/sqlite3/libsqlite/sqlite3.lo

make
make test

7
OpenIndiana / flashplayer после oi151.7
« : Январь 06, 2016, 09:17:23 am »
Нормально воспроизводится звук, но не видео

ptree
1552  /usr/lib/firefox37/lib/firefox-37.0/firefox.exe
      1577  /usr/lib/firefox37/lib/firefox-37.0/plugin-container /usr/lib/firef

truss -p 1577

/3:     lwp_park(0x00000000, 0)                         = 0
/1:     lwp_unpark(3)                                   = 0
/3:     open("/dev/cpu/self/cpuid", O_RDONLY)           = 18
/10:    clock_gettime(4, 0xF25FEC08)                    = 0
/3:     ioctl(18, (('c'<<24)|('i'<<16)|('d'<<8 ) | 0), 0xF45EEE08) = 0
/3:     close(18)                                       = 0
/3:         Incurred fault #6, FLTBOUNDS  %pc = 0xF5195DC2
/3:           siginfo: SIGSEGV SEGV_MAPERR addr=0x00000014
/3:         Received signal #11, SIGSEGV [default]
/3:           siginfo: SIGSEGV SEGV_MAPERR addr=0x00000014

mdb core
mdb: core file data for mapping at ef4a0000 not saved: Bad address
mdb: core file data for mapping at ef6e0000 not saved: Bad address
mdb: core file data for mapping at f19c0000 not saved: Bad address
mdb: core file data for mapping at f1de0000 not saved: Bad address
mdb: core file data for mapping at f23a0000 not saved: Bad address
mdb: core file data for mapping at f2780000 not saved: Bad address
Loading modules: [ libc.so.1 libuutil.so.1 libnvpair.so.1 ld.so.1 ]
> $C
f45eede8 0xf5195dc2(f261c000, 280, b4, 280, 280, f1a85010)
f45eee48 0xf51745e9(8046550, 280, b4, f45eeeb0, 280, 280)
f45eeed8 0xf4e02645(f4272700, 8046550, 0, b4)
f45eef08 0xf4b7d181(f4209070, fef5a000, f45eef88, f49aa20e)
f45eef88 0xf49aa236(f4209078, 0, 0, 0)
f45eefa8 0xf49aa290(f4209078, 62, f7dc12a0, fef5a000)
f45eefc8 0xf49a9f50(f4209078, 0, 0, 0)
f45eefe8 libc.so.1`_thrp_setup+0x88(f7dc1240)
f45eeff8 libc.so.1`_lwp_start(f7dc1240, 0, 0, 0, 0, 0)
>


Ключ к пониманию проблемы  в сравнении /illumos-gate/usr/src/uts/common/sys/cpuid_drv.h с его предыдущей версией
http://src.illumos.org/source/diff/illumos-gate/usr/src/uts/common/sys/cpuid_drv.h?r2=%2Fillumos-gate%2Fusr%2Fsrc%2Futs%2Fcommon%2Fsys%2Fcpuid_drv.h%40ebb8ac078e9265f87093fbb363e8c2cbc6ee13e6&r1=%2Fillumos-gate%2Fusr%2Fsrc%2Futs%2Fcommon%2Fsys%2Fcpuid_drv.h%407c478bd95313f5f23a4c958a745db2134aa03244


8
OpenIndiana / Замечательный оконный менеджер DWM
« : Январь 16, 2015, 06:48:42 pm »
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);
}

9
Прослушиваемые порты видны через
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 определяем названия протоколов

10
$ 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



11
OpenIndiana / Загрузка OpenIndiana через GRUB2
« : Январь 07, 2015, 03: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

12
OpenSolaris / Свежий gajim
« : Январь 07, 2015, 12: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


13
OpenIndiana / ATI Radeon HD 6310
« : Декабрь 14, 2014, 12: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/

14
Мне подарили ноут с частично работающей клавиатурой. Все неработающие клавиши я поделил на 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/

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

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

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

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