zoukankan      html  css  js  c++  java
  • Linux环境调试.net Core调用PCI设备

    一、虚拟机CentOS

    最近有一款PCI密码设备,在Windows 10上测试OK。准备测试Linux系统,于是在Windows 10安装虚拟机CentOS 7,安装驱动等准备测试程序。出现以下问题:

    1、拷贝文件(到lib64目录下)的时候出现权限不够

    打开一个终端,然后运行命令 sudo nautilus 

    就可以打开一个具有管理员权限的文件管理器,然后就可以在不切换到管理员的条件下拷贝文件。

    2、登录Root账户

    su root    然后 输入密码

    切换回普通用户:su - 用户名

    3、.NET Core平台下调用C++动态库的问题

    DLL本身是C++编写的,通过DllImport / PINVOKE的方式封装为C#可以调用的类:

    [DllImport("Fwlib64.dll", EntryPoint="cnc_actf")]
    public static extern short cnc_actf(ushort FlibHndl, [Out,MarshalAs(UnmanagedType.LPStruct)] ODBACT a);

    现在,在windows 操作系统中,以上的过程可以正常调用;但是在Linux环境下调用的时候,提示无法加载Fwlib64.dll,缺少dll或它的依赖项:
    Unable to load shared library '/home/pi/workspace/publish2/Fwlib64.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: /home/pi/workspace/publish2/Fwlib64.dll: invalid ELF header
    我尝试把可能依赖的dll都放到运行目录下,仍然无法正常调用。

    在 linux 上需要引用 Fwlib64.so

    [DllImport("Fwlib64.so", EntryPoint="cnc_actf")]

    How To Bind C++ Code with Dotnet Core

    如何在Windows和Linux上进行跨平台P/Invoke

    4、虚拟机中的linux系统能否识别主机中的PCI插槽设备?

     一般情况下虚拟机中的操作系统只能识别一些通用设备,如copy果要想在虚拟操作系统中直接使用主机的PCI设备bai需要使用一些虚拟机的高级功能-直接硬件访问,在这一功du能支持下,可以将某些设备单独分配给特定的虚拟机独占使用,但这对zhi主机的主板、CPU、虚拟机管理软件和相关dao硬件设备都有一定要求。

    虚拟机的LINUX对应的硬件平台是虚拟出来的硬件,PCI插槽设备是物理机硬件,是实实在在的硬件,在虚拟机下是不能识别物理机的硬件的,所有的虚拟机下的系统识别的都只是虚拟机软件虚拟出来的硬件.

    所以需要用一台机器安装linux来使用此PCI设备。

    二、Window 10系统改装为CentOS 7系统

    1、准备资料

    1.1  准备一个U盘(大于8G)

    1.2  下载U盘启动盘制作工具  UltraISO

    https://cn.ultraiso.net/xiazai.html

    1.3  下载IOS镜像文件  

    2、制作一个启动盘

    打开UltraISO,文件->打开->系统iso镜像文件

    启动->写入硬盘映像 ,然后单击 便携启动,下图

    硬盘驱动器 选择的是U盘,然后 单击写入。

     

    至此,启动盘就制作好了

    3、将window改装为linux系统

    3.1  将刚制作好好的U盘启动盘插入要改装的电脑

    3.2  启动系统,启动时按F12, 进入BIOS界面,选择第三项USB,按Enter键

     

    1、查看你的硬盘信息

    先移动到第二项Install,然后按提示 按tab键(也有可能是e字母)【不要按Enter键】编辑路径。

    将vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_64 quiet 改成 vmlinuz initrd=initrd.img linux dd quiet  按回车或者ctrl+x

    然后在显示出的列表中查看你的硬盘信息,很清晰的可以知道哪一个是你的U盘路径(一般显示的几个,格式为NTFS的都是你的电脑自身的盘符,另外一个就是你的U盘,记下你的U盘的盘符名字,我的就是sdb4

    2、启动U盘安装

    使用ctrl+alt+del重新启动电脑【不生效的话 直接按重启开关】,进入BLOS界面再次选择U盘引导启动,然后再先移动到第二项Install,

    然后按tab键/e键 编辑路径。将vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_64 quiet改成vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sdb4 quiet   按回车或者ctrl+x

    剩下的就是安装系统了。参考:https://blog.csdn.net/yangzhengzeo/article/details/88891040

    三、Linux上安装设备并使用

    1、在pc上插入PCI设备

        命令 lspci -nn 可看是否含有当前密码卡的设备号

    windows上用命令行或者设备管理器可看:

     命令行:wmic path win32_pnpentity where "deviceid like '%PCI%'" get name,deviceid

    2、按照用户手册,执行命令,安装Linux驱动,记得用root用户,安装好后,用dmesg查看是否成功加载驱动。

          输出最后一行,提示 Card Driver POLLING Installed! 表示安装成功。

    3、将64位的接口库改名为libswsds.so放在/lib64/目录下

    4、运行Linux版的管理程序

    (需要 右键 获取 可执行权限),将管理程序拉到 终端运行。

     若提示终端需要额外的字体,于是在终端中右键 ->配置文件->配置文件首选项,自定义字体,AR PL UMing TW Light

          终端设置字符编码,拖入管理程序时是UTF-8,运行,可能乱码。不管,修改编码为GBK,管理程序中 下一步,enter,变为ok的话,则开始进行设备的配置。 

    这个字体跟中文乱码无关,中文乱码参考:https://jingyan.baidu.com/article/ab69b270de8b4f2ca7189f1d.html

    5、测试自己的程序:

    终端中命令  dotnet SansecDemo.dll
    问题1、打开设备失败

    查看用户手册的5.4 权限不满足,需要当前用户具备设备的读写操作权限。可以用root执行程序,或者给用户 增加 访问控制权限,再以当前用户访问密码卡。

    用root用户执行,chmod 777 swcsm-pic18-0 

    分别swcsm-pic18-1、swcsm-pic18-2、swcsm-pic18-3

     
  • 相关阅读:
    安装vmware tools 使用hgfs共享文件一波三折
    RedHat停止sendmail加快启动
    [宏]_IO, _IOR, _IOW, _IOWR 宏的用法与解析
    __VA_ARGS__
    超级终端串口发送命令,uboot接收不到
    statfs函数获取大容量磁盘信息速度慢的解决过程
    ctags使用简介
    做技术多久才能入门
    linux目录和文件介绍
    OpenScalesLayer
  • 原文地址:https://www.cnblogs.com/peterYong/p/13032655.html
Copyright © 2011-2022 走看看