目录

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

1.1 获取kernel源代码

1.2 编译并烧写内核

2. 更新libsdl2库

3. 编译安装Anbox


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<n> zImage
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT -j<n> modules
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT -j<n> dtbs #
make -C $KERNEL_SOURCE ARCH=arm64 O=$KERNEL_OUT INSTALL_MOD_PATH=$KERNEL_MODULES_OUT modules_install

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

更新内核到开发板:

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

准备好系统的Jetson Nano 2G kit开机,连接好USB线到开发机,确保开发机能通过192.168.55.1地址访问开发板。

通过ssh拷贝kernel镜像和kernel模块到开发板,至此主机的操作全部完成,后续全部在开发板上操作。备份/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

完成以后用vim打开/boot/extlinux/extlinux.conf,去掉LABEL backup以及后面的注释:

TIMEOUT 30
DEFAULT primaryMENU TITLE L4T boot optionsLABEL primaryMENU LABEL primary kernelLINUX /boot/ImageINITRD /boot/initrdAPPEND ${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, RebootLABEL backupMENU LABEL backup kernelLINUX /boot/Image.backupINITRD /boot/initrdAPPEND ${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

重启开发板,确认当前工作kernel版本为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.servicesystemctl --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安装apk到Anbox Android镜像中。

使用Anbox在Jetson Nano 2GB上运行Android应用程序相关推荐

  1. anbox 使用情况_Anbox让您在Linux桌面上运行Android应用程序

    Anbox让您在Linux桌面上运行Android应用程序 imcn 2017年4月13日 1条评论 阅读 18,083 次 认识一下Anbox,一种新颖的在Linux桌面上运行Android应用的新 ...

  2. 手把手教程 | 使用 NICE DCV 在 G4 实例上运行 Android 应用程序

    随着Android应用程序和游戏变得越来越丰富,其中有些甚至比PC上的软件更易于使用和娱乐,因此许多人希望能够在云上运行Android游戏或应用程序,而在EC2实例上运行Android的解决方案可以让 ...

  3. android phone win10下载,微软Your Phone新功能: 可在Win 10 PC 上运行 Android 应用程序...

    今年 8 月,微软发布了一项 Your Phone 重大功能,可以在 Windows 10 PC 上运行 Android 应用程序.该功能主要通过 Your Phone 应用将 Android 应用投 ...

  4. ubuntu安装android应用程序,Anbox将使Ubuntu手机能运行Android应用程序

    就在支持Ubuntu Phone设备的OTA-3软件更新发布两天之后,Ubuntu Touch维护者UBports现在开始为用户提供即将到来的Android应用程序支持. 还记得Anbox(Andro ...

  5. anbox android 镜像,Anbox将使Ubuntu手机能运行Android应用程序

    Anbox 就在支持Ubuntu Phone设备的OTA-3软件更新发布两天之后,Ubuntu Touch维护者UBports现在开始为用户提供即将到来的Android应用程序支持. [UBports ...

  6. 在硬件设备上运行Android应用程序

    前面的话 写这篇译文,主要是因为几年前写过的一篇博客<关于adb命令没有权限访问手机设备的问题>,博客地址如下: http://blog.csdn.net/liubingzhao/arti ...

  7. python怎么另起一行阅读答案_使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)...

    Nvidia Jetson Nano 2GB开发板是一款新的单板机 售价59美元 运行带有GPU加速的人工智能软件.在2020年 你可以从一台售价59美元的单板计算机中获得令人惊叹的性能 让我们用它来 ...

  8. 使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)

    Nvidia Jetson Nano 2GB开发板是一款新的单板机,售价59美元,运行带有GPU加速的人工智能软件. 在2020年,你可以从一台售价59美元的单板计算机中获得令人惊叹的性能,让我们用它 ...

  9. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统...

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

最新文章

  1. 面对500篇GNN论文,心态差点儿崩了,幸好我有这本小书
  2. 《机器学习实践应用》书中源代码
  3. jQuery中的视图样式和动画效果
  4. go https client
  5. 梦断代码读后感——终结
  6. 高等数学(第七版)同济大学 习题5-2 个人解答
  7. matlab常用插值函数
  8. IP:网络上的击鼓传花
  9. 汽车电子控制系统的构成
  10. 2008年12月12号,星期五晴。为人父,却不能尽父责,为人夫,却不能尽夫责。这种痛楚什么时候才能结束。
  11. 金蝶新建生产领料单,单据编号不能自动填写
  12. 联想电脑管家图文介绍:联想电脑管家怎么下载?
  13. 数据分析-人群画像和目标群体分析
  14. 利用计算机画统计图.doc,信息技术应用利用计算机画统计图.pptx
  15. 怎么制作书单视频?一款好用的制作软件教程
  16. 只读pdf文件怎么编辑?如何把pdf只读改为可编辑
  17. python使用SMTP发送qq/sina邮件
  18. 如果重新学习计算机,你的学习路线是什么?
  19. CSDN 富文本编辑器和 Markdown 编辑器使用 Word 支持的 LaTx 语法公式
  20. 备份还原数据数据库(固定IP版)

热门文章

  1. 从零开始写Python爬虫---1.1 requests库的安装与使用
  2. Linux 内存管理中的 RSS 、VSZ等的含义
  3. 51单片机PWM源码讲解 小车调速 呼吸灯等应用
  4. 高级Magento模型 EAV
  5. UiPress – 现代WordPress仪表板主题
  6. 自定义view实现涂鸦(画板)功能
  7. SpringbootApi接口学习笔记
  8. iOS7下的drawInRect的新方法drawInRect:withAttributes:使用
  9. POJ Haybale Guessing
  10. 导出excel工具类