在 Sharks Cove 板上安装示例设备和驱动程序

按照以下步骤安装示例驱动程序,并将ADXL345加速计附加到 Sharks Cove 板上的 J1C1 标头。

警告

不再支持 Sharks Cove 硬件开发板。 如需目前支持的开发板的列表,请参阅 SoCs and custom boards(SoC 和自定义板)。

在 Sharks Cove 板上安装 Windows

有关如何获取 Sharks Cove 开发板以及如何在开发板上安装 Windows 的信息,请参阅 Sharks Cove 硬件开发板 和 SharksCove.org。

修改ADXL345以使用鲨鱼湾

若要在 I2C 模式下设置ADXL345,请将 VDD 输出连接到 CS 信号,如下所示:

adxl345 分组讨论板。

将修改后的ADXL345附加到鲨鱼湾

当ADXL345在 I2C 模式下运行时,请将其附加到 Sharks Cove 板上的 J1C1 标头。 如果电源接头显示在左上角,你将在右下角看到此标头:

j1c1 标头。

将ADXL345引脚附加到 J1C1 标头引脚,如下所示:

j1c1 引脚。

安装工具包和工具

一个驱动程序开发环境有两台计算机:主计算机 和目标计算机 。 目标计算机也称为“测试计算机” 。 在主机上的 Microsoft Visual Studio 中开发和构建驱动程序。 调试程序在主机上运行并且位于 Visual Studio 用户界面中。 当测试和调试驱动程序时,驱动程序在目标计算机上运行。 在此情况下,Sharks Cove 板是目标计算机。

在主机计算机上安装套件和工具,如 Sharks Cove 硬件开发板中所述。

下载并提取 SpbAccelerometer 示例

在主计算机上转到 此页面 并单击下载按钮。 单击“ 保存”,然后单击“ 打开文件夹”。 右键单击“SpbAccelerometer 示例驱动程序 (UMDF 版本 1) .zip”,然后选择“ 全部提取”。 指定或浏览到提取文件的文件夹。 例如,可以提取到 c:\SpbAccelerometer。

在 Visual Studio 中打开驱动程序解决方案

在主计算机上,转到包含提取示例的文件夹。 双击解决方案文件 SpbAccelerometer.sln。 在 Visual Studio 中,找到解决方案资源管理器。 (如果尚未打开,请从“视图”菜单中选择“解决方案资源管理器”。) 在解决方案资源管理器中,可以看到一个包含两个项目的解决方案。 有一个名为 SpbAccelerometer 的驱动程序项目和一个名为 package 的包项目 (小写) 。

在 Visual Studio 中设置配置和平台

在 Visual Studio 解决方案资源管理器 中,右键单击“解决方案”SpbAccelerometer“ (2 个项目) ,然后选择”Configuration Manager”。 设置配置和平台。 请确保配置 Win8.1 调试,并将平台设置为 Win32。 为驱动程序项目和包项目执行此操作。 不要检查“部署”框。

使用 Visual Studio 生成示例

在 Visual Studio 的“ 生成 ”菜单上,选择“ 生成解决方案”。

找到生成的驱动程序包

在 文件资源管理器 中,导航到包含生成的驱动程序包的文件夹。 例如,C:\SpbAccelerometer\Win8.1Debug\Packge。

包包含以下文件:

文件 说明
SpbSamples.cat 已签名的目录文件,用作整个包的签名。
SpbAccelerometer.inf 一个信息 (INF) 文件,其中包含安装驱动程序所需的信息。
WudfUpdate_01011.dll WDF 的硬币塔勒。
SpbAccelerometer.dll 驱动程序文件。

更改辅助系统描述表 (SSDT)

  1. 将 x86 版本的 ASL.exe 复制到 Sharks Cove 板。 ASL.exe 包含在 Windows 驱动程序工具包 (WDK) 中。

    示例:C:\Program Files (x86)\Windows Kits\8.1\Tools\x86\ACPIVerify\ASL.exe

  2. 在 Sharks Cove 板上,以管理员身份打开命令提示符窗口。 通过输入以下命令反编译 SSDT:

    asl /tab=ssdt

    这将创建 Ssdt.asl 文件。

  3. 打开 Ssdt.asl(例如,在记事本中打开)。

    DefinitionBlock("SSDT.AML", "SSDT", 0x01, "Intel_", "ADebTabl", 0x00001000)
    {
        Scope()
        {
            Name(DPTR, 0x3bf2d000)
            Name(EPTR, 0x3bf3d000)
            Name(CPTR, 0x3bf2d010)
            Mutex(MMUT, 0x0)
            Method(MDBG, 0x1, Serialized)
            {
                Store(Acquire(MMUT, 0x3e8), Local0)
                If(LEqual(Local0, Zero))
                {
                    OperationRegion(ABLK, SystemMemory, CPTR, 0x10)
                    Field(ABLK, ByteAcc, NoLock, Preserve)
                    {
                        AAAA, 128
                    }
                    Store(Arg0, AAAA)
                    Add(CPTR, 0x10, CPTR)
                    If(LNot(LLess(CPTR, EPTR)))
                    {
                        Add(DPTR, 0x10, CPTR)
                    }
                    Release(MMUT)
                }
                Return(Local0)
            }
        }
    
        // Insert a Scope(_SB_) and a Device entry here.
    
    }
    
  4. 插入 Scope(_SB_) 条目。 在 Scope 条目内,插入你自己的 Device 条目。 下面是ADXL345加速计的范围 (_SB_) 条目和设备条目。

    Scope(_SB_)
    {
        Device(SPBA)
        {
            Name(_HID, "SpbAccelerometer")
            Name(_UID, 1)
    
            Method(_CRS, 0x0, NotSerialized)
            {
                Name(RBUF, ResourceTemplate()
                {          
                    I2CSerialBus(0x53, ControllerInitiated, 400000, AddressingMode7Bit, "\\_SB.I2C3", 0, ResourceConsumer) 
                    GpioInt(Edge, ActiveHigh, Exclusive, PullDown, 0, "\\_SB.GPO2") {0x17}
                })
    
                Return(RBUF)
            }
    
            Method(_DSM, 0x4, NotSerialized)
            {
                If(LEqual(Arg0, Buffer(0x10)
                {
                    0x1e, 0x54, 0x81, 0x76, 0x27, 0x88, 0x39, 0x42, 0x8d, 0x9d, 0x36, 0xbe, 0x7f, 0xe1, 0x25, 0x42
                }))
                {
                    If(LEqual(Arg2, Zero))
                    {
                        Return(Buffer(One)
                        {
                            0x03
                        })
                    }
    
                    If(LEqual(Arg2, One))
                    {
                        Return(Buffer(0x4)
                        {
                            0x00, 0x01, 0x02, 0x03
                        })
                    }
                }
                Else
                {
                    Return(Buffer(One)
                    {
                        0x00
                    })
                }
            } // Method(_DSM ...)
    
        } // Device(SPBA)
    
    } // Scope(*SB*)
    
    

在此示例中,ResourceTemplate() 下的条目指定加速计需要两个硬件资源:特定 I2C 总线控制器 (I2C3) 的连接 ID 和 GPIO 中断。 中断使用名为 GPO2 的 GPIO 控制器上的引脚 0x17。

  1. 将自己的 Device 条目添加到 Ssdt.asl 之后,通过输入以下命令编译 Ssdt.asl:

    asl ssdt.asl

    这会将编译的输出放置在名为 Ssdt.aml 的文件中。

  2. 验证是否已为 Sharks Cove 板启用测试签名。

    注意

    会在预配期间自动启用测试签名。

    在 Sharks Cove 板上,以管理员身份打开命令提示符窗口。 输入以下命令:

    bcdedit /enum {current}

    验证是否可以在输出中看到 testsigning Yes

    Windows Boot Loader
    -------------------
    identifier              {current}
    ...
    testsigning             Yes
    ...
    

如果需要手动启用测试签名,请参照以下步骤:

  1. 以管理员身份打开命令提示符窗口,并输入此命令:

    bcdedit /set TESTSIGNING ON

  2. 重启 Sharks Cove 板。 在开发板重启时,按住增大音量按钮。 转到 “设备管理器”>“系统设置”>“启动”。 将“UEFI 安全启动” 设置为“禁用” 。

  3. 保存更改并继续启动到 Windows。

  4. 若要加载已更新的 SSDT,请以管理员身份打开命令提示符窗口,并输入此命令:

    asl /loadtable ssdt.aml

    重启 Sharks Cove 板。

安装并运行示例驱动程序

  1. 在主计算机上,在 Visual Studio 中打开 SpbAccelerometer 解决方案。

  2. 在“解决方案资源管理器”中,双击小写) (,然后选择“属性”。 转到 “驱动程序安装”>“部署”。 选中 “启用部署”。 选中“部署前删除以前的驱动程序版本” 。 对于 “目标计算机名称”,输入之前预配的 Sharks Cove 板的名称。 选择“安装并验证” 。 单击 “确定”

  3. “调试 ”菜单上,选择“ 开始调试”。 驱动程序包会自动复制到 Sharks Cove 开发板。 将自动安装并加载驱动程序。 在 Visual Studio 的主机上运行的 Windows 用户模式调试器 () 自动附加到托管驱动程序的 Sharks Cove 板) 上运行的 Wudfhost.exe (实例。