linux 端口线程sc,Linux下pc/sc接口的实现

运行环境:

内核版本:2.6.23.1-42.fc8

OS:Fedora8、RedHat9

平台:PC

实现步骤:

1、安装libusb(版本0.1.12)。默认生成在/usr/local/lib目录下。

2、安装pcsc-lite,它是独立于设备的API,基于pc/sc规范,可以通过这些接口访问智能卡。在此用的版本为pcsc-lite-1.4.99,安装步骤

./configure(配置编译环境)

Make(编译生成libpcsclite.a和libpcsclite.so)

Make install

Make生成的.a和.so文件默认在/usr/local/lib下, 运行file *,可以看到:

68bd75ab5d7055358988b8b4b7b10ede.png

3、检查/usr/lib/pcsc/目录下是否有读卡器驱动,若没有,安装驱动ccid(此版本为1.3.6)。默认生成在/usr/local/pcsc目录下

4、安装完成后,可以运行src/目录下的testpcsc程序测试PC-linux平台下与智能卡是否可以通讯。注意要先启动pcscd 程序,然后再运行./testpcsc。

编译测试程序如果出错,则须将/usr/locate/lib 加入到/etc/ld.so.conf文件中,别忘了ldconfig.

测试程序运行正确如图:

7fdb899660e94847d7491c3c048b8eed.png

5、将该测试程序移植到arm-linux平台下,需用交叉编译工具重新编译:

CC=arm-linux-gcc /configure –host=arm-linux –disable-libusb(配置编译环境)

Make(编译生成libpcsclite.a和libpcsclite.so)

Make install

CC是定义编译工具,默认为gcc, 在此要保证你的系统中装有arm-linux-gcc交叉编译环境;--host定义编译程序的运行平台,默认为PC-linux,在此我们要在arm下运行,所以改为arm-linux;由于系统中没有libusb故用disable.若有此库可不写。

编译生成pcsclite的动态库(.so)和静态库(.a)同样在/usr/local/lib下可以找到,此时运行命令file *,可以看到:

附:

PCSC卡在linux下的驱动(PCSC-Lite, CCID driver):http://pcsclite.alioth.debian.org/

libusb库下载地址:http://libusb.wiki.sourceforge.net/0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SystemC中,用于同步和通信的基本元素是事件和过程。事件是用于通知进程发生某些特定事件的信号,而过程则是用于响应事件的代码部分。 sc_event是SystemC中的事件类,它可以用于同步和通信。wait()是SystemC中的方法,它是用于等待事件发生的方法。wait()方法是在进程中使用的,当执行到wait()方法时,进程会阻塞,直到等待的事件被触发。 下面是一个简单的例子,演示了如何使用sc_event和wait()方法进行同步: ``` #include <systemc.h> SC_MODULE(MyModule) { public: sc_in<bool> in; // 输入端口 sc_event event; // 事件 void do_something() { while (true) { // 等待事件 wait(event); // 执行任务 cout << "任务开始执行" << endl; // ... cout << "任务执行完毕" << endl; } } SC_CTOR(MyModule) { // 绑定事件 SC_THREAD(do_something); // 在构造函数中使用SC_METHOD()定义一个方法 // 该方法会在in信号发生变化时触发事件 SC_METHOD(trigger_event); sensitive << in; } void trigger_event() { // 触发事件 event.notify(); } }; int sc_main(int argc, char *argv[]) { // 创建事件和信号 sc_signal<bool> sig; sc_event event; // 创建模块并绑定输入端口和事件 MyModule m("my_module"); m.in(sig); m.event(event); // 在主函数中改变信号状态,触发事件 sig = true; event.notify(); // 等待事件处理完成 sc_start(); return 0; } ``` 在上面的代码中,MyModule模块中定义了一个事件event和一个函数do_something(),该函数在等待事件event,当事件event被触发时,会执行一些任务。在MyModule模块的构造函数中,使用SC_METHOD()定义了一个方法trigger_event(),该方法会在输入信号in发生变化时触发事件event。 在主函数中,创建了一个信号sig和一个事件event,并将它们绑定到MyModule模块的输入端口和事件上。然后,改变信号sig的状态并触发事件event。最后,调用sc_start()方法等待事件处理完成。 注意,在SystemC中,wait()方法只能在SC_THREAD线程中使用,不能在SC_METHOD中使用。同时,wait()方法必须与敏感信号一起使用,以便在信号发生变化时触发等待。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值