Also: R0 = 0x2000125c R8 = 0x00000000 R1 = 0x0000f7d0 R9 = 0x00000000 R2 = 0x200033c8 R10 = 0x00000000 R3 = 0x20001084 R11 = 0x00000000 R4 = 0x024010e8 R12 = 0x00008b00 R5 = 0x00006301 SP = 0xffffff04 R6 = 0x00000001 LR = 0x00007791 R7 = 0x00000000 PC = 0x0000631e XPSR = 0x21000000 VEC = 0x00000003 RTEMS version: 5.0.0.6ade69e777ed678d9776956dbe32e858232f915e-modified RTEMS tools: 7.3.0 20180125 (RTEMS 5, RSB f07d2b6e9ad70d62eb617a9f5515c5045ee0c119, Newlib 08eab6396f678cf5e5968acaed0bae9fd129983b) executing thread ID: 0x089010001 executing thread name: IDLE
Checking the PC pointed to _Thread_queue_Enqueue: 0000630c <_Thread_queue_Enqueue>: 630c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} 6310: 4604 mov r4, r0 6312: 6550 str r0, [r2, #84] ; 0x54 6314: e003 b.n *631e* <_Thread_queue_Enqueue+0x12> 6316: 42a2 cmp r2, r4 6318: d04c beq.n 63b4 <_Thread_queue_Enqueue+0xa8> 631a: 6d64 ldr r4, [r4, #84] ; 0x54 631c: b114 cbz r4, 6324 <_Thread_queue_Enqueue+0x18> *631e*: 6864 ldr r4, [r4, #4] Digging into the close function I found that fatal occurred when I try to get inside rtems_libio_free. If I try to get just an address of that function fatal occurred also. Maybe I corrupt some addresses by stack overflow? But my program doesn't do anything, just created node, open it, cal ioctl and than try to close with corresponding fd. I have no debugger right now, maybe someone can give me some advice how I can debug this problem without debugger? Thank you. On Fri, 9 Nov 2018 at 18:02, Ярослав Лещинский <midniwal...@gmail.com> wrote: > 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, Ярослав Лещинский <midniwal...@gmail.com> > wrote: > >> Hello Sebastian, >> >> Thank you. This looks like what I needed. >> >> On Fri, 9 Nov 2018 at 13:32, Sebastian Huber < >> sebastian.hu...@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@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.hu...@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* > -- -- Kind regards, *Yaroslav Leshchinsky*
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users