Device driver initialization sequence

Ярослав Лещинский midniwalker at gmail.com
Fri Nov 9 15:02:07 UTC 2018


I've tried the variant with posix descriptor and got an error when trying
to call close(fd). Program crashed with RTEMS_FATAL_SOURCE_EXCEPTION.

107     rv = IMFS_make_generic_node(
108             "/dev/gpio",
109             S_IFCHR | S_IRWXU | S_IRWXG | S_IRWXO,
110             &gpio_node_control,
111             NULL);
112
113     assert(rv == 0);
114
115     fd = open("/dev/gpio", O_RDWR);
116
117     if(fd < 0)
118     {
119         printf("stderr:[%s] at: [%d]\n", strerror (errno), __LINE__);
120     }
121
122     rv = ioctl(fd, SET_HIGH, NULL);
123
124     if(rv < 0)
125     {
126         printf("stderr:[%s] at: [%d]\n", strerror (errno), __LINE__);
127     }
128     */* Everything was ok until now*/*
129     rv = close(fd);
130     if(rv != 0)
131     {
132         printf("stderr:[%s] at: [%d]\n", strerror (errno), __LINE__);
133     }

It even didn't enter inside the if block line:132.
For test purpose I'm using such declaration of file handlers:

static const rtems_filesystem_file_handlers_r gpio_node_handlers = {
    .open_h = rtems_filesystem_default_open,
    .close_h = rtems_filesystem_default_close,
    .read_h = NULL,
    .write_h = NULL,
    .ioctl_h = gpio_bus_ioctl,
    .lseek_h = rtems_filesystem_default_lseek,
    .fstat_h = IMFS_stat,
    .ftruncate_h = rtems_filesystem_default_ftruncate,
    .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
    .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
    .fcntl_h = rtems_filesystem_default_fcntl,
    .kqfilter_h = rtems_filesystem_default_kqfilter,
    .mmap_h = rtems_filesystem_default_mmap,
    .poll_h = rtems_filesystem_default_poll,
    .readv_h = rtems_filesystem_default_readv,
    .writev_h = rtems_filesystem_default_writev
};

Could someone take a look and give some advice, seems like I made some
silly mistake.

On Fri, 9 Nov 2018 at 16:26, Ярослав Лещинский <midniwalker at gmail.com>
wrote:

> Hello Sebastian,
>
> Thank you. This looks like what I needed.
>
> On Fri, 9 Nov 2018 at 13:32, Sebastian Huber <
> sebastian.huber at embedded-brains.de> wrote:
>
>> Hello Yaroslav,
>>
>> the initialization sequence is documented here:
>>
>>
>> https://docs.rtems.org/branches/master/c-user/initialization.html#initializing-rtems
>>
>> I would not use the I/O Manager. Working with major/minor numbers is
>> quite painful. I would initialize custom devices in the initialization
>> task. If you need the POSIX file descriptor API for your devices, then I
>> would use IMFS_make_generic_node() to register them.
>>
>> On 09/11/2018 11:25, Ярослав Лещинский wrote:
>> > Hello,
>> >
>> > I read the documentation about I/O Manager, found different source
>> > codes where mentioning not only rtems_io_* functionality but also
>> > drvmgr*, rtems_libio* and another mechanisms which are referred to
>> > device driver topic and I have a feeling that I'm missing something.
>> >
>> > Could you please correct me if I'm wrong in the following steps of
>> > initialization of device driver:
>> >
>> > 1. define *CONFIGURE_MAXIMUM_DRIVERS* macro
>> > 1. Create *rtems_driver_address_table *and register it via
>> > *register_io_register_driver*
>> > 2. Write all necessary functions for *rtems_io_initialize,
>> > rtems_io_open, etc*
>> > 3. Associate name with major:minor pair using *rtems_register_name*
>> > *
>> > *
>> > As I understood there are can be a lot of different device drivers
>> > tables and I should somehow get the right major:minor driver from the
>> > right table. How I can do this?
>> >
>> > --
>> > --
>> > Kind regards,
>> > *Yaroslav Leshchinsky*
>> >
>> > _______________________________________________
>> > users mailing list
>> > users at rtems.org
>> > http://lists.rtems.org/mailman/listinfo/users
>>
>> --
>> Sebastian Huber, embedded brains GmbH
>>
>> Address : Dornierstr. 4, D-82178 Puchheim, Germany
>> Phone   : +49 89 189 47 41-16
>> Fax     : +49 89 189 47 41-09
>> E-Mail  : sebastian.huber at embedded-brains.de
>> PGP     : Public key available on request.
>>
>> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
>>
>>
>
> --
> --
> Kind regards,
> *Yaroslav Leshchinsky*
>


-- 
--
Kind regards,
*Yaroslav Leshchinsky*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20181109/81794e01/attachment-0002.html>


More information about the users mailing list