Как я могу открыть один файл устройства TTY с указанным номером c и использованием tty_driver? - PullRequest
0 голосов
/ 12 февраля 2020

Итак, следуя коду, найденному в LDD, я получил нижеприведенный код, в котором я добавляю device_create, чтобы получить файл устройства при загрузке модуля (за исключением проверок на ошибки, чтобы соответствовать коду здесь). Также есть mock_tty_register_device и некоторые другие изменения, которые были созданы, чтобы избежать проверок количества циклов устройства и драйвера-> num.

Я не могу открыть ни одно устройство с указанными c нумерация в соответствии с примерами LDD, и не открывайте ttyO5 с кодом ниже в gpsd, который выплевывает Ошибка разрешения (несмотря на появление правого разрешения через ls ). Есть предложения?

static int __init tiny_init( void )
{
   int retval;
   struct device* retDevice = NULL;

    /* allocate the tty driver */
   tiny_tty_driver = alloc_tty_driver( DEVICES_N );

   tiny_tty_driver->owner = THIS_MODULE;
   tiny_tty_driver->driver_name = "tty_mock";
   tiny_tty_driver->name = "ttyO";
   tiny_tty_driver->major = 0, // to be assigned later
   tiny_tty_driver->minor_start = 5, // device minor number
   tiny_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
   tiny_tty_driver->subtype = SERIAL_TYPE_NORMAL,
   tiny_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV,
   tiny_tty_driver->init_termios = tty_std_termios;
   tiny_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | CSIZE | CLOCAL;
   tty_set_operations( tiny_tty_driver, &serial_ops );
   tty_port_init( &tiny_tty_port );
   tiny_tty_driver->ports[0] = &tiny_tty_port;

   /* register the tty driver */
   retval = tty_register_driver( tiny_tty_driver );

   tty_class = class_create( THIS_MODULE, tiny_tty_driver->name );

   retDevice = mock_tty_register_device( tiny_tty_driver, 5, NULL );
   //retDevice = tty_register_device( tiny_tty_driver, 5, NULL );

   //tty_init_dev also
   devt = MKDEV( tiny_tty_driver->major, tiny_tty_driver->minor_start );
   retDevice = device_create( tty_class, NULL, devt, NULL, "ttyO5" );
   return retval;
}
...