关闭

如何为树莓派安装Ubuntu Core并在Snap系统中进行编译

3477人阅读 评论(2) 收藏 举报
分类:

在这篇文章中,我们将介绍如何在snap系统中进行交叉汇编来把我们的应用编译并安装到目标机器中.我们知道目前Snap支持ARM及x86芯片.在我们的Classic 16.04的系统中,我们很容易地编译出我们想要的在x86上的snap文件,但是我们如何生产为ARM板生产相应的armhf的snap文件呢?

下面我们以树莓派2板子为例来描述是如何实现的.但是这里的教程适合于任何其它的Ubuntu Core所支持的板子,比如高通的snapdragon 410c板子.


1)为树莓派2/3安装snap系统


我们可在地址下载最新的树莓派2的image,并存于系统的~/Downloads目录中.如果你是使用树莓派3的话,那么你可以在地址下载image.你也可以在如下的地址找到所有最新的Ubuntu Core image:

http://cdimage.ubuntu.com/ubuntu-core/16/stable/current/

如果你希望使用最新的daily build 镜像的话,可以使用连接:

http://cdimage.ubuntu.com/ubuntu-core/xenial/daily-preinstalled/current/

正式的发布软件可以在地址http://releases.ubuntu.com/ubuntu-core/16/找到.

如果大家有beaglebone的板子的话,那么你可以在地址http://people.canonical.com/~ogra/snappy/all-snaps/stable/current/找到最新的Ubuntu Core的软件.


整个image的大小约为161M.我们把我们的SD卡插入到我们电脑的MMC卡槽中,或插入到一个USB的adapter中.在进行拷贝image前,我们必须unmount我们的卡.然后,我们使用如下的命令来拷贝我们的image到卡中:


# Note: replace /dev/sdX with the device name of your SD card (e.g. /dev/mmcblk0, /dev/sdg1 ...)

xzcat ~/Downloads/ubuntu-core-16-pi2.img.xz | sudo dd of=/dev/sdX bs=32M
sync

注意这里的"ubuntu-core-16-pi2.img.xz"是我们下载后的image的名称.目前对于p3设备来说,默认的输出是通过串口,可以连接到我们的电脑上并进行查看启动的信息.大家可以买一个像链接所示的串口线.在我们的terminal中打入如下的命令:

$ sudo screen /dev/ttyUSB0 115200

这样就可以看到我们启动时的信息了.

当然,如果大家没有这样的连接线的话,我们可以通过修改如下的文件,并最终使得显示的结果输出到HDMI的显示器中:



上面的cmdline.txt里面的原始的内容为:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty0 elevator=deadline

我们把cmdline.txt中的文件的内容,修改为:

dwc_otg.lpm_enable=0 console=tty1 elevator=deadline

这样,我们就可以在HDMI的显示器上看到输出的结果了.通过键盘的操作,我们第一次完成Network的设置后,就可以在电脑上通过刚ssh的方式来进行登陆了.记住,我们必须提供launchpad的账号信息来完成设置的动作.关于如何创建一个launchpad的账号,请参阅文章"创建Ubuntu Core账号并为Ubuntu Core设备添加新的账号".

等上面的操作完成后,拔出我们的SD卡,并插入到我们的树莓派的SD卡插槽中.然后启动我们的树莓派.第一次的启动的时间比较长,需要耐心等待.



注意:这里的image名字"all-snaps-pi2.img.xz"可能会跟着版本的变化而发生改变.请根据你下载的具体的文件来替换.这里的sdX需要换成我们卡的设备号,比如在我们的电脑的MMC插槽中就是mmcblk0:



在我们刷卡时,我们可以使用sudo fdisk -l,或lsblk来获取我们的设备的代码.注意在我们执行命令时,命令行中的"/dev/sdX"可以是/dev/sdb而不是/dev/sdb1,可能是 /dev/mmcblk0 而不是 /dev/mmcblk0p1.


2)连接我们的树莓派设备


如果大家有路由器的话,建议大家把树莓派和自己的电脑同时连接到同一个路由器上.我们可以参阅文章"如何在装上Snappy Ubuntu的树莓派上启动WiFi"来找到树莓派上的IP地址.

如果我们的树莓派中已经安装了snapweb应用,我们可以通过如下的方式看到:

liu-xiao-guo@localhost:~$ snap list
Name         Version       Rev  Developer  Notes
bluez        5.37-1        7    canonical  -
classic      16.04         14   canonical  devmode
lights-app   0.1           x1              devmode
pi2-kernel   4.4.0-1021-3  14   canonical  -
pi3          16.04-0.4     5    canonical  -
piglow-app   1.0           x2              devmode
sensortag    1.0           x3              devmode
snapweb      0.21.1        21   canonical  -
ubuntu-core  16.04.1       760  canonical  -
webcam-app   1.0           x1              devmode

如果在你的系统还没有发现snapweb已经安装,我们可以使用如下的命令来安装我们的snapweb:

$ sudo snap install snapweb

我们可以通过如下的方式找到它是否运行正常:

liu-xiao-guo@localhost:~$ systemctl status -l snap.snapweb.snapweb
● snap.snapweb.snapweb.service - Service for snap application snapweb.snapweb
   Loaded: loaded (/etc/systemd/system/snap.snapweb.snapweb.service; enabled; vendor preset: enabled
   Active: active (running) since Mon 2016-09-12 07:49:32 UTC; 1 months 5 days ago
 Main PID: 1793 (snapweb)
   CGroup: /system.slice/snap.snapweb.snapweb.service
           └─1793 /snap/snapweb/21/bin/arm-linux-gnueabihf/snapweb

我们可以看到它在正常运行.如果是这样的话,我们可以通过如下的方式来在我们的host电脑上打入如下的指令:

liuxg@liuxg:~$ ping snapweb.local
PING snapweb.local (10.42.0.140) 56(84) bytes of data.
64 bytes from 10.42.0.140: icmp_seq=1 ttl=64 time=0.539 ms
64 bytes from 10.42.0.140: icmp_seq=2 ttl=64 time=0.534 ms
64 bytes from 10.42.0.140: icmp_seq=3 ttl=64 time=0.580 ms
^C
--- snapweb.local ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.534/0.551/0.580/0.020 ms

我们可以从上面看到我们所连的设备的IP地址.

一旦得到树莓派的IP地址,我们就可以通过如下的命令来完成和树莓派的ssh连接.在电脑上打入如下的命令:

$ ssh <your-launchpad-account-name>@your_raspberry_pi_ip_address

特别值得注意的是,如果是使用最新的Ubuntu Core的软件的话,这里的ubuntu应改为自己的launchpad的用户名.对于我的情况是liu-xiao-guo@your_raspberry_pi_ip_address.



一旦我们连接上我们的树莓派,我们可以参照文章"安装snap应用到Ubuntu 16.4桌面系统"来安装和检查我们的snap系统,比如:




一旦进入到我们的Ubuntu Core系统后,我们可以利用如下的命令来为我们的账号创建一个用户密码,这样我们可以在login画面(HDMI或serial terminal中)通过用户名/密码的方式进行登陆:

$ sudo passwd <your-launchpad-username> <your-password>

这样我们不一定需要用ssh的方式进行登陆.



3)交叉编译我们的应用



在这一节中,我们来展示如何把我们的应用进行交叉编译,并最终形成可以在我们的树莓派上可以运行的snap包.

首先我们在树莓派中安装如下的叫做"classic"的应用:

$ sudo snap install classic --devmode --edge

然后,我们打入如下的命令:

$ sudo classic.create 


我们再打入如下的命令来更新我们的系统:

$ sudo apt-get update



我们可以把git安装到系统中:

$ sudo apt install snapcraft git-core build-essential

如果我们需要使用到add-apt-repository命令来添加额外的ppa的话,那么我们必须使用如下的命令来安装这个命令:

$ sudo apt-get install software-properties-common python-software-properties

这样我们就安装好了我们的系统,我们可以用这里的环境来交叉编译我们的任何一个snap应用.编译后的snap包就可以直接在我们的树莓派上直接运行:




编译完我们的应以后,我们可以直接在我们的shell环境中安装我们的应用:




我们通过如下的方法来安装我们的应用:

$ sudo snap install webcam-webui_1_armhf.snap --devmode --dangerous

这里我们采用了--devmode,也就是说我们让我们的应不受任何的安全机制的限制,就像我们以前的Ubuntu桌面上的应用一样.在以后的章节中,我们必须通过interface来连接我们的plug及slot.camera的plug目前还没有在树莓派的image中.





至此,我们已经把我们的项目webcam-webui编译为我们树莓派可以使用的snap了.

我们其实也可以在https://launchpad.net/上创建我们的项目,并利用launchpad所提供的服务来帮我们打包我们的应用到我们想要的架构中.具体的步骤请参阅文章:https://kyrofa.com/posts/building-your-snap-on-device-there-s-a-better-way

1
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:456441次
    • 积分:8011
    • 等级:
    • 排名:第2531名
    • 原创:350篇
    • 转载:7篇
    • 译文:0篇
    • 评论:252条
    文章分类
    最新评论