yocto-第10篇-在qemux86机器运行时安装程序

By: fulinux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎订阅!
你的喜欢就是我写作的动力!

返回总目录 Yocto开发讲解系列 - 总目录

devtool deploy-target命令

使用devtool deploy-target命令可以将recipe的构建的do_install任务中安装的所有文件直接输出部署到运行着的目标机器上,目标机器上面需要运行ssh服务。

开发机器 目标机器 devtool deploy-target learnyocto root@192.168.7.2:/ 部署learnyocto到目标机器根目录下 开发机器 目标机器

注意:部署目标功能仅用于开发。您永远不要使用它来更新将在生产中使用的映像。

结合我们的qemux86-64平台,先运行系统,然后将上次安装到系统中的learnyocto程序删除:

build]$ runqemu qemux86-64
...
runqemu - INFO - Network configuration: ip=192.168.7.2::192.168.7.1:255.255.255.0
...
  • 1
  • 2
  • 3
  • 4

在另外一个shell终端上登录,并删除learnyocto:

$ ssh root@192.168.7.2
root@qemux86-64:~# rm /usr/bin/learnyocto 
  • 1
  • 2

为了演示我们正常的开发流程,我先在项目的main函数里面加一条打印:

build]$ vim workspace/sources/learnyocto/main.c
  • 1
#include <stdio.h>

int main (int argc, char **argv)
{
    printf ("[develop branch]Hello Yocto!\n");
    printf ("[develop branch]learn devtool deploy-target\n");

    return 0;
} /* ----- End of main() ----- */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

编译:

$ devtool build learnyocto
  • 1

编译通过后,想看实际修改的效果,还是每次要调用 devtool build-image 命令来生成目标镜像,然后再运行吗?No!

在线部署

我们今天学习一个新的方法,使用devtool deploy-target命令,将我们的recipe要安装的文件等直接部署到运行的机器中去,参考下面先将其部署到用户根目录下看看:

build]$ devtool deploy-target learnyocto root@192.168.7.2:~/
$ ssh root@192.168.7.2
root@qemux86-64:~# ls -l usr/bin/ 
-rwxr-xr-x    1 root     root         23512 Oct 24 02:55 learnyocto
root@qemux86-64:~# ./usr/bin/learnyocto 
[develop branch]Hello Yocto!
[develop branch]learn devtool deploy-target #后面加的一个打印
root@qemux86-64:~# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

可见其执行程序已经部署到机器上了。这个部署的过程有点像是将下面目录:

build]$ ls workspace/sources/learnyocto/oe-workdir/image/usr/
  • 1

复制到了板子上了。
正常部署时,目标路径应该是系统根目录,如下:

build]$ devtool deploy-target learnyocto root@192.168.7.2:/ 
#另一个shell终端中:
root@qemux86-64:~# learnyocto 
[develop branch]Hello Yocto!
[develop branch]learn devtool deploy-target #后面加的一个打印
root@qemux86-64:~# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

部署失败的情况

有些情况下部署会失败:

  1. 需要部署程序正在运行,或者库被依赖使用中
  2. 目标机器上没有没有安装应用程序所依赖的库或者其他程序

该命令不会自动部署程序依赖的其他库和程序

谢谢阅读!希望帮我点个赞加关注,你的喜欢就是我持续更新的动力!