[QNX] 用mcd实现存储设备自动挂在

Ref DOC : QNX_Neutrino_RTOS_Utilities_Reference.pdf

注:MCD 工具只在6.6之前的版本可以使用,7.0上已經將它的功能整合給了其他工具

 

mcd 簡介

mcd是可以用來檢測某個設備或者某個文件是否存在的工具,并且可以根據檢測結果做出相應的反應,比如,如果某個Upluged,那麽/dev目錄就會有相應的設備文件,儅該文件存在,就可以執行想要的觸發調用.

用法: mcd options config_file ,具體options可以用use mcd查看或者參考文檔

 

配置文檔

mcd必須要配置文件才能執行任務.配置文件以段為單位.

一個段以[section]為開頭,其中section 可以是:

1. 設備 / 文件 實例, 比如: /dev/hd0 , 那麽 段開頭就是 [/dev/hd0],這表示,需要mcd 監測 /dev/hd0這個文件,这种段称之为 entity section

2. 一條規則,比如 [RULE_NAME],一条规则的section并不检测任何文件,只是作为一个子分支供父段调用,这种段称之为 rule section

 

一个例子:

 

注意:配置文件不能以空格开头或结尾 ,可以用#当作注释

 

实例段支持的语法如下:

[section]

Callout = Callout_name #当定义的文件被监测到,执行的调用 或者说是通知机制

Argument = args #传递给callout的参数

Priority = value #线程优先级,建议没有特殊情况不用设定

Start Rule  = XXX #文件被检测到时,调用的子段(rule段)

Stop Rule  = XXX #文件消失时,调用的子段(rule段)

规则段支持的语法如下:

[section]

Callout = Callout_name #

Argument = args #传递给callout的参数

Priority = value #线程优先级,建议没有特殊情况不用设定

Match Rule = XXX #Callout执行成功,如果还有后续的rule,定义在这里

Fail Rule = XXX #Callout执行失败,如果还有后续的rule,定义在这里

 

#如果没有后续的rule,则到当前rule结束

#mcd 读取配置文件,监测指定的文件,根据文件的存在 / 消失, 调用对应的Callout, 如果指定了start / stop rule, callout执行完之后,查找对应的 rule section 继续.

 

Callout

mcd支持的callout 分为两种类型,build-in extension .

 build in Callout如下:

[Entity section] 支持的callout

CD_MEDIA_IOBLK

USB_MEDIA_ENUM

PATH_MEDIA_PROCMGR

PATH_MEDIA_SCAN

[rule section]支持的callout

DVD_OR_CD

CD_AUDIO

BLANK_CD

FNAME_MATCH

FNAME_PATTERN

MOUNT_FSYS

UNMOUNT_FSYS

 

Extension 允许自己实现触发某条section时的callout,格式如下:

Callout = my_func@my_ext_lib.so

@表示这是extension callout, @前面时func name, 后面时lib name.这样,mcd运行时会动态加载指定的库,并在触发该section时调用my_func

 

测试用例

mcd自动挂在FAT usb /mnt目录下,并且触发自定义的callout.

 

1. mcd.conf

 

[/dev/hd*t*]

Callout = PATH_MEDIA_PROCMGR #build in callout

Argument = /proc/mount #arg pass to callout

Priority = 11,10

Start Rule = MOUNT #file exist trigger MOUNT rule

Stop Rule = UNMOUNT #file disappear trigger UNMOUNT rule

 

[MOUNT]

Callout = MOUNT_FSYS #build in callout, read mnt file to do mount

Argument = /opt/mcd.mnt #arg pass to MOUNT_FSYS, the mnt file’s path

Match Rule = FILE_SCAN #if success, trigger FILE_SCAN rule

 

[UNMOUNT]

Callout = UNMOUNT_FSYS

 

[FILE_SCAN]

Callout = my_func@mcd_ext_lib.so #A extension callout

Argument = /mnt/usb_mnt

 

============================================================

2. mcd.mnt

/dev/hd0t12 /mnt/usb_mnt dos

============================================================

 

3. Build extension callout

 

Build a shared lib by this make cmd:

mcd_ext_lib:

$(CIT_QNX_QCC) -Vgcc_ntoarmv7 -EL -shared -c mcd_ext_lib.c

$(CIT_QNX_QCC) -Vgcc_ntoarmv7 -EL -shared -Wl -o mcd_ext_lib.so mcd_ext_lib.o

 

Write mcd_ext_lib.c by below content:

 

#include<stdio.h>

#include<sys/mcd.h> #Must include this head file

int my_func(char *device, void *arg)

{

printf("test! %s %s \n", device, arg);

 

return MCD_RULE_NO_MATCH;

}

==============================================================

 

在目标主机上运行:

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值