0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Jetson Nano上编译部署Anbox

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-21 10:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Jetson Nano 2GB是NVIDIA的一款高性价比嵌入式平台。麻雀虽小五脏俱全,战力强悍,但是惜乎没有原生Android系统支持。目前想在Jetson平台上体验Android,可以使用虚拟机运行Android系统,或者使用Anbox这样的平台。Anbox是基于容器开发的,能够为Android程序提供原生运行支持。今天我们来尝试一下在Jetson Nano上编译部署Anbox,基本步骤参考NVIDIA论坛上的文章[Anbox on jetson nano],根据需要稍作调整。

1. 重新编译并烧写Jetson Nano 2GB内核

本节参考L4T Kernel Customization。

Anbox运行依赖于bander和ashmem两个驱动,Jetson Nano 2GB目前最新的内核版本是4.9.201,这两个驱动已经在Jetson Nano的内核里了只是默认没有打开。一开始我想尝试不重新编译内核直接将这两个驱动编译成模块加载,binder能够正常加载,ashmem无法加载成功。原因是这两个驱动在4.9上不允许单独编译为可加载模块。也就是说,必须跟kernel源码整体编译。保险起见,我选择整体重新编译内核,并打开驱动支持,和论坛里的操作保持一致。

1.1 环境准备

一块已经烧写好镜像,并完成启动初始化的Jetson Nano 2GB设备,参考Getting Started with Jetson Nano 2GB Developer Kit。

Jetson开发推荐使用Ubuntu18.04作为开发机,交叉编译推荐使用Linaro GCC 7,kernel源代码可以使用Jetpack提供的脚本通过git获取,或者手动下载,我们这里使用手动下载[L4T Driver Package (BSP) Sources]。

# 解压缩交叉编译工具链
mkdir $HOME/l4t-gcc
cd $HOME/l4t-gcc
tar Jxvf /PATH_TO_DOWNLOADS/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
# 解压缩L4T BSP源码包及kernel
mkdir $HOME/l4t-source
cd $HOME/l4t-source
tar jxvf /PATH_TO_DOWNLOADS/public_sources.tbz2
cd Linux_for_Tegra/source/public
tar jxvf kernel_src.tbz2

1.2编译并烧写内核

在$HOME/l4t-source/Linux_for_Tegra/source/public/kernel/kernel-4.9/arch/arm64/configs/tegra_defconfig文件末尾,增加:

#Anbox Configuration
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDER_IPC_SELFTEST=y
CONFIG_ASHMEM=y

编译内核:

# 配置环境变量
export CROSS_COMPILE=\
$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export LOCALVERSION=-tegra-anbox #该环境变量改变生成的kernel后缀
export KERNEL_SOURCE=\
$HOME/l4t-source/Linux_for_Tegra/source/public/kernel/kernel-4.9
export KERNEL_OUT=$KERNEL_SOURCE/img_out #image output dir
export KERNEL_MODULES_OUT=$KERNEL_SOURCE/mod_out #modules output dir
# 编译内核
cd $TEGRA_KERNEL_SRC_DIR
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT tegra_defconfig
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT -j zImage
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT -j modules
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT -j dtbs # 
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT INSTALL_MOD_PATH=$KERNEL_MODULES_OUT modules_install
 

编译完成后,我们得到内核镜像:$KERNEL_OUT/arch/arm64/boot/Image以及对应的内核模块文件夹:$KERNEL_MODULES_OUT/lib/modules/4.9.201-tegra-anbox。

更新内核以及模块到开发板:

正常更新内核,需要重做根文件系统,花费时间比较长。我们这里采用快速验证方案:

准备好系统的开发板上电开机,连接好USB线到开发机,确保开发机能通过192.168.55.1地址访问开发板。

通过ssh拷贝内核镜像和模块文件夹到开发板,至此主机的操作全部完成,后续全部在开发板上操作。备份原始镜像/boot/Image到/boot/Image.backup:

# 主机执行
scp $KERNEL_OUT/arch/arm64/boot/Image $USER@192.168.55.1:~/
scp -R $KERNEL_MODULES_OUT/lib/modules/4.9.201-tegra-anbox $USER@192.168.55.1:~/
ssh $USER@192.168.55.1 # 登录开发板

# 开发板上执行
sudo cp /boot/Image /boot/Image.backup # 备份原始kernel
sudo mv ~/Image /boot/Image # 更新内核
sudo mv ~/4.9.201-tegra-anbox /lib/modules/  # 拷贝内核模块
sudo update-initramfs -c -k 4.9.201-tegra-anbox # 更新initramfs
cd /boot/
sudo ln -sf initrd.img-4.9.201-tegra-anbox initrd.img
 

完成以后用编辑/boot/extlinux/extlinux.conf,去掉LABEL backup以及后面的注释,类似这样:

TIMEOUT 30
DEFAULT primary

MENU TITLE L4T boot options

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      INITRD /boot/initrd
      APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0

# When testing a custom kernel, it is recommended that you create a backup of
# the original kernel and add a new entry to this file so that the device can
# fallback to the original kernel. To do this:
#
# 1, Make a backup of the original kernel
#      sudo cp /boot/Image /boot/Image.backup
#
# 2, Copy your custom kernel into /boot/Image
#
# 3, Uncomment below menu setting lines for the original kernel
#
# 4, Reboot

LABEL backup
    MENU LABEL backup kernel
    LINUX /boot/Image.backup
    INITRD /boot/initrd
    APPEND ${cbootargs}
 
更新权限:
创建 /etc/udev/rules.d/99-anbox.rules文件,内容如下:
KERNEL==“ashmem”, NAME="%k", MODE=“0666”
KERNEL==“binder”, NAME="%k", MODE=“0666”
 
然后执行:
sudo udevadm control --reload-rules && udevadm trigger

重启开发板,确认当前工作内核版本为4.9.201-tegra-anbox,设备/dev/ashmem和/dev/binder都存在。

2.更新libsdl2

原帖中说18.04(开发板系统版本)的libsdl2库有一个bug,所以需要更新libsdl2。具体是什么问题没有仔细去查,这里我们选择follow这一步操作:

# 安装依赖包
sudo apt install dot2tex build-essential cmake cmake-data debhelper dbus google-mock libboost-dev libboost-filesystem-dev libboost-log-dev libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libcap-dev libsystemd-dev libegl1-mesa-dev libgles2-mesa-dev libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev libprotobuf-dev lxc-dev pkg-config protobuf-compiler
# 下载libsdl源代码
mkdr libsdl-source && cd libsdl-source
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/libsdl2/2.0.9+dfsg1-1ubuntu1.19.04.1/libsdl2_2.0.9+dfsg1-1ubuntu1.19.04.1.dsc
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/libsdl2/2.0.9+dfsg1-1ubuntu1.19.04.1/libsdl2_2.0.9+dfsg1-1ubuntu1.19.04.1.debian.tar.xz
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/libsdl2/2.0.9+dfsg1-1ubuntu1.19.04.1/libsdl2_2.0.9+dfsg1.orig.tar.xz
# 编译deb包
dpkg-source -x libsdl2_2.0.9+dfsg1-1ubuntu1.19.04.1.dsc
cd libsdl2-2.0.9+dfsg1/
dpkg-buildpackage -rfakeroot -b -uc -us
cd ..
# 安装deb
sudo dpkg -i libsdl2-2.0-0_2.0.9+dfsg1-1ubuntu1.19.04.1_arm64.deb libsdl2-dev_2.0.9+dfsg1-1ubuntu1.19.04.1_arm64.deb libsdl2-doc_2.0.9+dfsg1-1ubuntu1.19.04.1_all.deb

3.编译安装Anbox

下载Anbox源代码,编译安装:

git clone https://github.com/HarleyPato/anbox-arm64
mkdir -p anbox-arm64/build && cd anbox-arm64/build
cmake .. && make && sudo make install
sudo cp /usr/local/bin/anbox /usr/bin/

下载Android镜像:

wget http://anbox.postmarketos.org/android-7.1.2_r39-anbox_arm64-userdebug.img
mv android-7.1.2_r39-anbox_arm64-userdebug.img /var/lib/anbox/android.img

通过Anbox发布的deb安装包获取配置文件:

mkdir anbox-deb && cd anbox-deb
wget http://ports.ubuntu.com/pool/multiverse/a/anbox/anbox_0.0~git20191115-1build1_arm64.deb
ar x anbox_0.0~git20191115-1build1_arm64.deb
tar Jxvf data.tar.xz
sudo cp ./lib/systemd/system/anbox-container-manager.service /lib/systemd/system/
sudo cp ./usr/lib/systemd/user/anbox-session-manager.service /usr/lib/systemd/usr/

在/lib/systemd/system/anbox-container-manager.service文件中注释掉这两行:

ExecStartPre=/sbin/modprobe ashmem_linux
ExecStartPre=/sbin/modprobe binder_linux

在/usr/lib/systemd/user/anbox-session-manager.service文件中,ExecStart前添加:

Environment="DISPLAY=:0"

启动Anbox服务:

sudo systemctl unmask anbox-container-manager.service
sudo systemctl start anbox-container-manager.service
sudo systemctl enable anbox-container-manager.service

systemctl --user unmask anbox-session-manager.service
systemctl --user start anbox-session-manager.service
systemctl --user enable anbox-session-manager.service

检查Anbox状态:

sudo systemctl status anbox-container-manager.service
systemctl --user status anbox-session-manager.service

结果应该类似下图:

至此所有安装均已完成,重启开发板,启动Anbox,就能看到Android界面了。可以通过adb install安装apk到Anbox Android环境中并运行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20145

    浏览量

    328733
  • Android
    +关注

    关注

    12

    文章

    3985

    浏览量

    133041
  • 虚拟机
    +关注

    关注

    1

    文章

    968

    浏览量

    30171
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在NVIDIA Jetson AGX Thor通过Docker高效部署vLLM推理服务

    继系统安装与环境配置后,本期我们将继续带大家深入 NVIDIA Jetson AGX Thor 的开发教程之旅,了解如何在 Jetson AGX Thor ,通过 Docker 高效
    的头像 发表于 11-13 14:08 3003次阅读
    如<b class='flag-5'>何在</b>NVIDIA <b class='flag-5'>Jetson</b> AGX Thor<b class='flag-5'>上</b>通过Docker高效<b class='flag-5'>部署</b>vLLM推理服务

    BPI-AIM7 RK3588 AI与 Nvidia Jetson Nano 生态系统兼容的低功耗 AI 模块

    260 针金手指设计 :机械Jetson Nano 载板 100% 兼容,可重复使用现有硬件投资。 PCIe 3.0 x4高速通道 :支持外部AI加速器(例如TensorRT加速器)。 3.
    发表于 10-11 09:08

    BPI-AIM7 RK3588 AI与 Nvidia Jetson Nano 生态系统兼容的低功耗 AI 模块

    。它是开源硬件,我们已在线发布设计文档,包括原理图和接口定义。其异构计算架构兼容 NVIDIA Jetson Nano 接口标准,非常适合边缘计算、AI 推理、VR/AR、智能 NVR 系统以及通用
    的头像 发表于 10-11 09:06 532次阅读
    BPI-AIM7 RK3588 AI与 Nvidia <b class='flag-5'>Jetson</b> <b class='flag-5'>Nano</b> 生态系统兼容的低功耗 AI 模块

    NVIDIA Jetson + Isaac SDK 人形机器人方案全面解析

    (TOPS) 工作功耗 适用场景 Jetson Nano 128-core Maxwell Quad A57 0.5 5~10W 教育型、初级移动机器人 Jetson Xavier NX 384-core
    的头像 发表于 07-30 16:12 1842次阅读

    Jetson平台核心组件BOM清单概览

    的接口芯片。对于开发者和系统集成商而言,了解这些关键组件的构成,对于产品选型、硬件设计和成本控制至关重要。 以下我们将根据公开的资料和设计文档,对主流的Jetson平台产品(Jetson Nano
    的头像 发表于 07-30 16:11 2433次阅读

    NVIDIA Jetson + Isaac SDK 在人形机器人领域的方案详解

    组件 描述 硬件平台(Jetson系列) 面向边缘AI和机器人开发的SoC模块,搭载GPU + ARM CPU,支持多种传感器和AI模型部署 软件平台(Isaac SDK / Isaac Sim) 用于
    的头像 发表于 07-30 16:05 3126次阅读

    Arm方案 基于Arm架构的边缘侧设备(树莓派或 NVIDIA Jetson Nano)上部署PyTorch模型

    本文将为你展示如何在树莓派或 NVIDIA Jetson Nano 等基于 Arm 架构的边缘侧设备上部署 PyTorch 模型。
    的头像 发表于 07-28 11:50 2489次阅读

    【经验分享】在Omni3576编译Redis-8.0.2源码,并安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在
    的头像 发表于 06-05 08:05 763次阅读
    【经验分享】在Omni3576<b class='flag-5'>上</b><b class='flag-5'>编译</b>Redis-8.0.2源码,并安装及性能测试

    Made with KiCad(126):Antmicro OV5640 双摄像头子板

    Jetson NanoJetson TX2 NX、Jetson Xavier NX 系统模块的 Jetson
    发表于 05-12 18:13

    何在CentOS系统中部署ELK日志分析系统

    功能,使用户能够快速获取关键业务洞察。本文将详细介绍如何在 CentOS 系统中部署 ELK 日志分析系统,
    的头像 发表于 05-08 11:47 779次阅读
    如<b class='flag-5'>何在</b>CentOS系统中<b class='flag-5'>部署</b>ELK日志分析系统

    RK3576 yolov8训练部署教程

    本章展示yolov8模型的在EASY EAI Orin nano部署过程。
    的头像 发表于 04-02 16:04 1567次阅读
    RK3576 yolov8训练<b class='flag-5'>部署</b>教程

    何在RAKsmart服务器实现企业AI模型部署

    AI模型的训练与部署需要强大的算力支持、稳定的网络环境和专业的技术管理。RAKsmart作为全球领先的服务器托管与云计算服务提供商,已成为企业部署AI模型的理想选择。那么,如何在RAKsmart服务器
    的头像 发表于 03-27 09:46 758次阅读

    何在RakSmart服务器用Linux系统部署DeepSeek

    Linux系统 DeepSeek 部署方案,结合RakSmart 服务器硬件推荐及多场景适配建议,主机推荐小编为您整理发布如何在RakSmart服务器用Linux系统部DeepSeek。
    的头像 发表于 03-14 11:53 623次阅读

    研华NVIDIA Jetson Orin Nano系统支持Super Mode

    提升生成式AI性能1.7倍 2025年春季— 研华科技,作为全球工业嵌入式 AI 解决方案供应商,宣布推出搭载NVIDIA Jetson Orin Nano 8GB系统模块的AI边缘运算系统
    发表于 03-10 14:07 624次阅读
    研华NVIDIA <b class='flag-5'>Jetson</b> Orin <b class='flag-5'>Nano</b>系统支持Super Mode

    NVIDIA发布小巧高性价比的Jetson Orin Nano Super开发者套件

    NVIDIA近期推出了一款全新的生成式AI超级计算机——Jetson Orin Nano Super开发者套件。这款开发者套件以其小巧的尺寸和高性价比吸引了广泛关注。 Jetson Orin
    的头像 发表于 12-19 11:28 1458次阅读