ip2mkdev.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <linux/major.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <stdio.h>
  7. #include "ip2.h"
  8. #include "i2ellis.h"
  9. char nm[256];
  10. i2eBordStr Board[2];
  11. static void ex_details(i2eBordStrPtr);
  12. int main (int argc, char *argv[])
  13. {
  14. int board, box, port;
  15. int fd;
  16. int dev;
  17. i2eBordStrPtr pB  = Board;
  18. // Remove all IP2 devices
  19. for ( board = 0; board < 4; ++board )
  20. {
  21. sprintf ( nm, "/dev/ip2ipl%d", board );
  22. unlink ( nm );
  23. sprintf ( nm, "/dev/ip2stat%d", board );
  24. unlink ( nm );
  25. }
  26. for ( port = 0; port < 256; ++port  )
  27. {
  28. sprintf ( nm, "/dev/ttyF%d", port );
  29. unlink ( nm );
  30. sprintf ( nm, "/dev/cuf%d", port );
  31. unlink ( nm );
  32. }
  33. // Now create management devices, and use the status device to determine how
  34. // port devices need to exist, and then create them.
  35. for ( board = 0; board < 4; ++board )
  36. {
  37. printf("Board %d: ", board );
  38. sprintf ( nm, "/dev/ip2ipl%d", board );
  39. mknod ( nm, S_IFCHR|0666, (IP2_IPL_MAJOR << 8) | board * 4 );
  40. sprintf ( nm, "/dev/ip2stat%d", board );
  41. mknod ( nm, S_IFCHR|0666, (IP2_IPL_MAJOR << 8) | board * 4 + 1 );
  42. fd = open ( nm, O_RDONLY );
  43. if ( !fd )
  44. {
  45. printf ( "Unable to open status device %sn", nm );
  46. exit ( 1 );
  47. }
  48. if ( ioctl ( fd,  65, Board ) < 0 )
  49. {
  50. printf ( "not presentn" );
  51. close ( fd );
  52. unlink ( nm );
  53. sprintf ( nm, "/dev/ip2ipl%d", board );
  54. unlink ( nm );
  55. }
  56. else
  57. {
  58. switch( pB->i2ePom.e.porID & ~POR_ID_RESERVED ) 
  59. {
  60. case POR_ID_FIIEX: ex_details ( pB );       break;
  61. case POR_ID_II_4:  printf ( "ISA-4" );      break;
  62. case POR_ID_II_8:  printf ( "ISA-8 std" );  break;
  63. case POR_ID_II_8R: printf ( "ISA-8 RJ11" ); break;
  64. default:
  65. printf ( "Unknown board type, ID = %x", pB->i2ePom.e.porID );
  66. }
  67. for ( box = 0; box < ABS_MAX_BOXES; ++box )
  68. {
  69. for ( port = 0; port < ABS_BIGGEST_BOX; ++port )
  70. {
  71. if ( pB->i2eChannelMap[box] & ( 1 << port ) )
  72. {
  73. dev = port 
  74.  + box * ABS_BIGGEST_BOX 
  75.  + board * ABS_BIGGEST_BOX * ABS_MAX_BOXES;
  76. sprintf ( nm, "/dev/ttyF%d", dev );
  77. mknod ( nm, S_IFCHR|0666, (IP2_TTY_MAJOR << 8) | dev );
  78. sprintf ( nm, "/dev/cuf%d", dev );
  79. mknod ( nm, S_IFCHR|0666, (IP2_CALLOUT_MAJOR << 8) | dev );
  80. printf(".");
  81. }
  82. }
  83. }
  84. printf("n");
  85. }
  86. }
  87. }
  88. static void ex_details ( i2eBordStrPtr pB )
  89. {
  90. int            box;
  91. int            i;
  92. int            ports = 0;
  93. int            boxes = 0;
  94. for( box = 0; box < ABS_MAX_BOXES; ++box )
  95. {
  96. if( pB->i2eChannelMap[box] != 0 ) ++boxes;
  97. for( i = 0; i < ABS_BIGGEST_BOX; ++i ) 
  98. {
  99. if( pB->i2eChannelMap[box] & 1<< i ) ++ports;
  100. }
  101. }
  102. printf("EX bx=%d pt=%d %d bit", boxes, ports, pB->i2eDataWidth16 ? 16 : 8 );
  103. }