|
I/O管理器操作
作者 Ray
RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray
21.3: 操作
21.3.1 : 驱动的注册和查询
rtems_io_register 函数将驱动的名称和指定设备联合相关联(也就是和主从设备号相关联)。驱动的名称一般在系统初始化时和设备号建立映射。rtems_io_lookup用来根据设备的名称查找对应的主/从设备编号。使用该函数,应用程序就可以根据设备的名称对设备进行操作,开发者也不用老是记着枯燥的设备编号。此外也可以增加模块的独立性,设备编号该动,程序不用修改。一般来说RTEMS不像Linux那样对设备编号有复杂的规范(其实现在Linux中设备编号的原始意义早已失去),对设备的命名也没有特殊的要求。
函数原型:
rtems_status_code rtems_io_register_driver(
rtems_device_major_number major,
rtems_driver_address_table *driver_table,
rtems_device_major_number *registered_major
);
返回值代表的状态 :
RTEMS_SUCCESSFUL- 成功注册
RTEMS_INVALID_NUMBER- 无效主设备号
RTEMS_TOO_MANY- 没有可得的主设备表格条目 ( 设备太多 )
RTEMS_RESOURCE_IN_USE- 主设备号正在使用
描述 :
该函数将一个新的驱动程序加入驱动程序表格中。用户可以通过该函数自己定义主设备号。也可以将major赋值为0让函数自己查找可用的主设备号。系统分配的设备编号将通过registered_major返回。
函数自动地分为设备分配一个最小的设备号。
如果驱动地址表格中有initialization和open函数的入口,那么该函数将自动启动 IO_INITIALIZE
函数。
如果设备条目表满了,函数返回RTEMS_TOO_MANY,如果申请的major号被其他设备占用,函数返回RTEMS_RESOURCE_IN_USE。
注意:
驱动程序表格尺寸在配置表格中指定。如果系统的设备多,需要将驱动表尺寸设定成应用需要的最大尺寸。
21.3.2 : 访问驱动程序
输入/输出管理器为应用程序访问设备驱动提供了标准函数。在RTEMS 输入/输出管理器中访问设备的函数包括rtems_io_initialize
, rtems_io_open , rtems_io_close , rtems_io_read , rtems_io_write 和 rtems_io_control
这些函数和其下的驱动层程序相关联。
注销一个设备驱动
函数原型:
rtems_status_code rtems_io_unregister_driver(
rtems_device_major_number major
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功注销
RTEMS_INVALID_NUMBER- 无效主设备号码
21.4.3 : IO_INITIALIZE- 初始化一个驱动程序
函数原型:
rtems_status_code rtems_io_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功地初始化
RTEMS_INVALID_NUMBER- 无效主设备号码
描述:
该函数调用在驱动程序表格中驱动程序初始化例程为初始化设备驱动。当使用initialize_executive
函数启动多任务模块时,函数将会自动调用。
驱动程序初始化模块负责初始化所有的硬件和以及与设备相关的数据结构。如果需要,初始化函数能为驱动程序分配内存空间。
注意:
该函数可能会引发抢占式调度。
21.4.4 : IO_REGISTER_NAME- 注册一个设备
函数原型:
rtems_status_code rtems_io_register_name(
char *name,
rtems_device_major_number major,
rtems_device_minor_number minor
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功地初始化
RTEMS_TOO_MANY- 太多的登记设备
描述:
该函数将设备的名称与主从设备号相关联。
21.4.5 : IO_LOOKUP_NAME- 查询一个设备
函数原型:
rtems_status_code rtems_io_lookup_name(
const char *name,
rtems_driver_name_t *device_info
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功地设定初值
RTEMS_UNSATISFIED- 名称没有注册
描述:
该函数在device_info结构返回主/从设备编号中。
21.4.6 : IO_OPEN-开启一个设备
函数原型:
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
);
返回值代表的状态 :
RTEMS_SUCCESSFUL- 成功地打开设备
RTEMS_INVALID_NUMBER- 无效主设备号码
描述 :
函数将调用驱动设备表中的open函数。该函数的目的是向上层应用提供互斥的设备访问接口。
21.4.7 : IO_CLOSE- 关闭一个设备
函数原型:
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功关闭
RTEMS_INVALID_NUMBER- 无效主设备号码
描述:
该函数使用驱动的close函数,释放设备号以及其他对应的资源。
21.4.9 : IO_WRITE-向设备中写入数据
函数原型:
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功写入数据
RTEMS_INVALID_NUMBER- 无效主设备号码
描述:
该函数调用驱动中的write函数,将应用程序中的数据传输给驱动程序处理。
21.4.10 : IO_CONTROL- 特别的设备服务
函数原型:
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功地设定初值
RTEMS_INVALID_NUMBER- 无效主设备号码
描述:
该函数调用了驱动中的ioctl程序对设备进行控制。举例来说,一个 RS-232 驱动输入/输出控制行动可能包括修改波特律,软盘的控制函数可能是寻道操作。
|