gpt4 book ai didi

c - 如何在Raspberry Pi上运行Azure IoT C SDK的端到端测试?

转载 作者:行者123 更新时间:2023-11-30 16:18:54 25 4
gpt4 key购买 nike

我正在尝试在树莓派上编译和测试azure-iot-sdk-c。如何在树莓派上编译它,然后运行SDK中提供的E2E测试?

最佳答案

为了实现这一点,您可以采取几种方法。您可以下载Pi的交叉编译器,并将源代码仅保留在开发计算机上。然后,当您想在Pi上运行代码/测试时,可以使用交叉编译器生成可以在Pi上运行的输出,将可执行文件传输到Pi,然后将结果返回给开发机器。这种方法可能会非常快,并且如果您的项目包含许多文件,则可能是解决该问题的好方法。设置交叉编译器并不是一件最简单的事情,但是网上有很多有案可查的案例,说明已经有这样做的人了。

另一种方法是在开发机器上开发源代码,但在Pi本身上为Pi构建代码。这消除了建立交叉编译器的需要,并使将测试结果返回到开发机器非常简单。

您可以使用文本编辑器在开发机器上开发代码。然后rsync将您的源文件传输到Raspberry Pi。最后,您可以在开发机器和Pi上安装Ruby和Ceedling(C单元测试工具),以帮助运行测试。这是实现这一切的方法。


设置SSH密钥


此步骤很重要,因为它使您可以将文件从开发计算机传输到Pi并远程执行命令,而不必每次都输入用户名和密码。首先,请确保您在开发计算机上生成了SSH密钥。如果您不确定,或者不确定,请查看此出色的GitHub article that explains how to generate one

如果您在开发计算机上打开〜/ .ssh(或Windows上的/user/directory/.ssh)目录,则应该有一个名为rd_isa.pub的文件。这是SSH密钥的“公开”部分。您需要将此文件传输到Raspberry Pi,以便它可以将您识别为批准的用户。使用以下命令执行此操作:

scp〜/ .ssh / id_rsa.pub user@remote.host:pubkey.txt

确保在Raspberry Pi上用用户名替换“用户”,并用Pi的IP地址替换“ remote.host”。

完成此操作后,您需要将密钥添加到Pi上的“ authorized_keys”文件中。为此,您将需要SSH进入Pi,然后手动编辑/创建文件。可以按照以下步骤完成:

scp ~/.ssh/id_rsa.pub user@remote.host:pubkey.txt

ssh user@remote.host

mkdir ~/.ssh

cat pubkey.txt >> ~/.ssh/authorized_keys

rm ~/pubkey.txt



安装“ rsync”


下一步是安装rsync,该实用程序可让您在两台计算机之间同步目录。当我们在本地计算机上进行更改时,rsync会将这些更改传输到Pi进行测试。 rsync非常聪明,它仅可以传输自上次传输以来已更新的文件,这将加快处理过程。为了使rsync正常工作,必须将其同时安装在开发计算机和Raspberry Pi上。要将其安装在Pi上,请执行以下命令。

sudo apt-get install rsync


在开发计算机上安装rsync的过程会因所运行的操作系统而异。在Mac上,它已经安装。一些Linux发行版也随之提供。另一方面,Windows落后于游戏。在Google上搜索“在Windows上安装rsync”,以获取有关设置的说明。


安装Ruby


Ruby是开发机器和目标需要安装的另一个组件。 Ruby是Ceedling用于自动执行单元测试的脚本语言。再次,请参阅所有Google,以获取有关在您的开发机器上安装最新版本的说明。要在Raspberry Pi上安装Ruby,请使用以下命令:

sudo apt-get install ruby



安装耙


Rake是Ruby gem(软件包),提供类似于“ make”的构建自动化支持。一旦安装了Ruby,Rake的安装就像输入以下命令一样简单:

sudo gem install rake



设置立项项目


最后,我们已经可以在本地编写代码,并使用“ rake test:all”命令在开发计算机上执行测试。

我们需要做的最后一件事是设置一个自定义的rake任务,该任务将在Pi上运行测试,而无需手动SSH进入它。在Ceedling项目的根目录中查找,您将看到一个名为Rakefile.rb的文件。这是我们放置自定义耙任务的地方。将以下内容添加到文件的底部:

desc "Run rake test:all on RPi with latest changes"

desc "Update the RPi with the latest changes on dev machine."
task :update_pi_source do

#send the latest changes to the pi
puts cmd = "rsync -r -v . #{REMOTE_RPI_USER}@#{REMOTE_RPI_IP_ADDR}:#{REMOTE_RPI_PROJ_ROOT} --exclude=#{PROJECT_BUILD_ROOT}"
system(cmd)
end

desc "Run rake test:all in the project directory on the pi"
task :run_all_tests_pi do

#execute tests on the pi
puts cmd = "ssh #{REMOTE_RPI_USER}@#{REMOTE_RPI_IP_ADDR} "cd #{REMOTE_RPI_PROJ_ROOT} && rake test:all""
system(cmd)
end

task :pi_test_all > [:update_pi_source, :run_all_tests_pi] do
end


这实际上定义了三个耙任务。第一个是update_pi_src,它是使用rsync更新Pi上源代码的任务。第二个是run_all_tests_pi,它使用SSH执行必要的命令来编译代码并在Pi上运行测试。第三个任务pi_test_all只是将前两个结合在一起的包装器。

希望能帮助到你。

关于c - 如何在Raspberry Pi上运行Azure IoT C SDK的端到端测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com