<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Anbox在Jetson Nano 2GB上運行Android應用程序

ICExpo ? 來源:NVIDIA英偉達中國 ? 作者:NVIDIA英偉達中國 ? 2021-08-26 17:46 ? 次閱讀

**Jetson Nano 2GB是NVIDIA的一款高性價比嵌入式平臺。麻雀雖小五臟俱全,戰力強悍,但是惜乎沒有原生Android系統支持。目前想在Jetson平臺上體驗Android,可以使用虛擬機運行Android系統,或者使用Anbox這樣的平臺。
Anbox是基于容器開發的,能夠為Android程序提供原生運行支持。今天我們來嘗試一下在Jetson Nano上編譯部署Anbox,基本步驟參考NVIDIA論壇上的文章[Anbox on jetson nano],根據需要稍作調整。

重新編譯并燒寫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都存在。

更新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

wgethttps://launchpad.net/ubuntu/...

wgethttps://launchpad.net/ubuntu/...

wgethttps://launchpad.net/ubuntu/...

編譯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

編譯安裝Anbox

下載Anbox源代碼,編譯安裝:

git clonehttps://github.com/HarleyPato...

mkdir -p anbox-arm64/build && cd anbox-arm64/build

cmake .. && make && sudo make install

sudo cp /usr/local/bin/anbox /usr/bin/

下載Android鏡像:

wgethttp://anbox.postmarketos.org...

mv android-7.1.2_r39-anbox_arm64-userdebug.img /var/lib/anbox/android.img

通過Anbox發布的deb安裝包獲取配置文件:

mkdir anbox-deb && cd anbox-deb

wgethttp://ports.ubuntu.com/pool/...

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環境中并運行。

文章轉自:技術社區

作者:NVIDIA英偉達嵌入式系統

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源碼
    +關注

    關注

    8

    文章

    582

    瀏覽量

    28663
  • 容器
    +關注

    關注

    0

    文章

    481

    瀏覽量

    21914
  • 編譯
    +關注

    關注

    0

    文章

    624

    瀏覽量

    32448

原文標題:技術分享 | 使用Anbox在Jetson Nano 2GB上運行Android應用程序

文章出處:【微信號:ic-china,微信公眾號:ICExpo】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Nvidia Jetson Nano + CYW55573/AWXB327MA-PUR M.2無法使用操作系統內置的網絡管理器管理Wi-Fi如何解決?

    我們使用的是 Nvidia Jetson Nano + CYW55573/AWXB327MA-PUR M.2 ,請參閱 Nvidia Jetson 與英飛凌 AIROC Wi-Fi 6
    發表于 05-23 06:47

    Banana Pi為何選擇rk3588開發與Jetson Nano引腳兼容的嵌入式產品

    引言: 當Banana PI&armsom決定采用RK3588芯片開發一款與Jetson Nano引腳兼容的產品時,這意味著一次重要的技術決策,為開發者和制造商提供了更大的靈活性
    發表于 11-02 12:30

    armsom:為何選擇rk3588開發與Jetson Nano引腳兼容的嵌入式產品

    引言: 當armsom決定采用RK3588芯片開發一款與Jetson Nano引腳兼容的產品時,這意味著一次重要的技術決策,為開發者和制造商提供了更大的靈活性。這篇文章將解釋我們選擇RK3588
    發表于 10-18 17:35

    NANO130系列程序運行是為什么?

    拿到公司給的開發,Nutiny-EVB-Nano130,用官方例程nano100B的程序,下載進去程序運行,keil在線調試正常
    發表于 08-21 08:00

    使用Jetson Nano構建人臉識別系統

    電子發燒友網站提供《使用Jetson Nano構建人臉識別系統.zip》資料免費下載
    發表于 07-06 11:37 ?0次下載
    使用<b class='flag-5'>Jetson</b> <b class='flag-5'>Nano</b>構建人臉識別系統

    基于Jetson NANO的助手機器人

    電子發燒友網站提供《基于Jetson NANO的助手機器人.zip》資料免費下載
    發表于 07-06 11:27 ?0次下載
    基于<b class='flag-5'>Jetson</b> <b class='flag-5'>NANO</b>的助手機器人

    使用Arduino和處理Android應用程序DIY車速表

    電子發燒友網站提供《使用Arduino和處理Android應用程序DIY車速表.zip》資料免費下載
    發表于 07-06 11:23 ?0次下載
    使用Arduino和處理<b class='flag-5'>Android</b><b class='flag-5'>應用程序</b>DIY車速表

    NVIDIA Jetson Nano上的智能視頻分析

    電子發燒友網站提供《NVIDIA Jetson Nano上的智能視頻分析.zip》資料免費下載
    發表于 07-06 10:39 ?0次下載
    NVIDIA <b class='flag-5'>Jetson</b> <b class='flag-5'>Nano</b>上的智能視頻分析

    使用Arduino Nano 33構建嵌入式語音識別應用程序

    電子發燒友網站提供《使用Arduino Nano 33構建嵌入式語音識別應用程序.zip》資料免費下載
    發表于 06-28 14:50 ?1次下載
    使用Arduino <b class='flag-5'>Nano</b> 33構建嵌入式語音識別<b class='flag-5'>應用程序</b>

    Made with KiCad(一):Jetson Nano Baseboard

    ?“ 該項目包含支持NVIDIA Jetson Nano、Xavier NX和TX2 NX SoM的基板,并開源了所有硬件設計文件。它由Antmicro公司創建。Antmicro公司是一家定制硬件
    發表于 06-27 13:40

    CUDA與Jetson Nano:并行Pollard Rho測試

    電子發燒友網站提供《CUDA與Jetson Nano:并行Pollard Rho測試.zip》資料免費下載
    發表于 06-15 09:30 ?0次下載
    CUDA與<b class='flag-5'>Jetson</b> <b class='flag-5'>Nano</b>:并行Pollard Rho測試

    無法Nanoleaf Android應用程序上找到OTBR怎么解決?

    我正在使用 Nanoleaf Essential Matter A19 | 通過 Nanoleaf Android 應用程序 NXP 的 iMX93 和 iMX8 參考板使用我的自
    發表于 06-08 08:23

    怎么做才能通過Jetson Xavier AGX構建android圖像呢?

    我正在使用 Nvidia 的 Jetson Xavier AGX 按照“android 用戶指南”為 imx8 qm Mek 套件構建 android 圖像(android 13)。當
    發表于 06-07 08:58

    如何通過Android應用程序NodeMCU V2上點亮LED ?

    Studio 創建應用程序 NodeMCU V2 上點亮 LED 這樣簡單的事情,但所有在線內容都使用 MIT App maker 或他們自己的程序。任何人都可以指導我學習教程,
    發表于 06-06 12:23

    使用espandroid運行應用程序或文件?

    我是初學者,我使用 Arduino 和一些我知道的傳感器 但是,我想知道我是否可以使用我的 android 手機作為輸出?例如,我想在特定傳感器檢測到某些東西時播放視頻。 即使不運行視頻,我也可以制作一個自動播放視頻的應用程序,
    發表于 06-05 06:49
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>