Apalis Imx8qm记录
生活随笔
收集整理的這篇文章主要介紹了
Apalis Imx8qm记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境
主機Ubuntu 18.04,硬件Apalis iMX8QM V1.1B,FSL-IMX8QM-MEK連線
電源。12V,3A直流圓形電源線 顯示。HDMI,LVDS輸出 串口。默認X22 tx/rx/gnd,USB轉RS232接口連接,目前買的綠聯RS232串口線,需在windows安裝串口驅動恢復模式
1.Windows系統下載Apalis-iMX8_ToradexEasyInstaller_2.0b7-20210415壓縮包 2.將參考鏡像Apalis-iMX8_Reference-Multimedia-Image-Tezi_5.2.0+build.7.tar解壓到sd卡(下載地址參考11.5) 3.短接跳線,插入包含參考鏡像的sd卡,重啟單板4.Windows運行Apalis-iMX8_ToradexEasyInstaller_2.0b7-20210415/recovery-windows,進入圖形界面的Toradex Easy Installer,安裝參考鏡像后拔掉跳線,重啟恢復模式安裝Linux
Apalis imx8qm V1.1B官方提供了linux參考鏡像 https://developer.toradex.cn/knowledge-base/toradex-easy-installer-os-and-demo-images 下載Toradex Embedded Linux Quarterly Releases欄目中官方穩定支持版本。 解壓到sd卡后,恢復模式使用Toradex Easy Installer就可識別到鏡像,安裝。默認用戶名root,密碼空恢復模式安裝Android
Apalis imx8qm V1.1B安裝Android由合作商Kynetics提供,支持10.0/11.0 參考鏡像下載地址:ftp://ftp.toradex.cn/Android/iMX8/toradex_apalis-imx8_b0_kynetics-android-image_11-eval-snapshot-20210323.zip 解壓到SD卡,恢復模式使用Toradex Easy Installer就可識別到鏡像,安裝恢復模式原理
/* 1 從windows下載imx-boot到imx8qm內存,并啟動到uboot */ SDPS: boot -f ../imx-boot /* 2 uboot命令行下載../boot.scr到內存 0x82e00000 */ FB: ucmd setenv fastboot_buffer 0x82e00000 FB: download -f ../boot.scr /* 3 uboot命令行下載../htmitxfw.bin到內存 0x82fe0000 */ FB: ucmd setenv fastboot_buffer 0x82fe0000 FB: download -f ../hdmitxfw.bin /* 4 uboot命令行下載../tezi.itb到內存 0x83000000 */ FB: ucmd setenv fastboot_buffer 0x83000000 FB: download -f ../tezi.itb /* 5 uboot命令行執行boot.scr中的命令,參考6-10步 */ FB: acmd source 0x82e00000 /* 6 從0x82fe0000加載hdp firmware htmitxfw.bin */ /* 7 從tezi.itb FIT Image中加載kernel到0x80280000 */ /* 8 從tezi.itb FIT Image中加載ramdisk到0x836b0e54 */ /* 9 從tezi.itb FIT Image中加載dtb到0x83696cec */ /* 10 bootm itb,FIT方式啟動簡化版linux Toradex easy Installer */ bootm ${ramdisk_addr_r}#config@freescale_fsl-imx8qm-apalis-v1.1-eval.dtbDtc
Dtc
/* dtb轉為dts */ dtc -I dtb -O dts -o imx8qm-mek-dom0.dts ./imx8qm-mek-dom0.dtb /* dts轉為dtb */ dtc -I dts -O dtb -o imx8qm-mek-dom0.dtb ./imx8qm-mek-dom0.dtsDtbo
/* dtbo轉為dtb */ ./mkdting dump dtbo-imx8qm-xen.img -b imx8qm-xen.dtb /* dtb轉為dts */ dtc -I dtb -O dts -o imx8qm-xen.dts ./imx8qm-xen.dtbWic
sudo losetup -f --show -P agl-cluster-demo-platform-imx8mqevk-20210705070813.rootfs.wic 查看當前掛在哪個位置 lsblk mkdir p1 mkdir p2 sudo mount /dev/loop18p1 p1 sudo mount /dev/loop18p2 p2Uboot
目前虛擬化平臺直接使用參考linux自帶uboot,暫無需編譯改動uboot。Apalis Uboot
Uboot for linux on Apalis imx8qm board(目前直接使用參考linux自帶uboot,暫無需編譯改動uboot) /* 0 refer Doc */ https://developer.toradex.cn/knowledge-base/build-u-boot-and-linux-kernel-from-source-code /* 1 git uboot code */ mkdir ~/apalis-uboot;cd ~/apalis-uboot git clone -b toradex_imx_v2020.04_5.4.70_2.3.0 git://git.toradex.com/u-boot-toradex.git/* 2 Build uboot,編譯后生成u-boot.bin */ cd ~/apalis-uboot/u-boot-toradex make CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- apalis-imx8_defconfig make CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- /* 3 Build Security Controller (SECO) Firmware */ cd ~/apalis-uboot wget -c https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-3.7.4.bin chmod u+x imx-seco-3.7.4.bin ./imx-seco-3.7.4.bin ls imx-seco-3.7.4/firmware/seco//* 4 Build SCU Firware(SCFW) */ cd ~/apalis-uboot mkdir scfw-bin cd scfw-bin/ wget https://github.com/toradex/i.MX-System-Controller-Firmware/raw/60d8c942f49012b6620f34800e2e9f11e45a9ef5/src/scfw_export_mx8qm_b0/build_mx8qm_b0/mx8qm-apalis-scfw-tcm.bin mv mx8qm-apalis-scfw-tcm.bin scfw_tcm.bin/* 5 Build Arm Trust Firmware(ATF) */ cd ~/apalis-uboot git clone git://git.toradex.com/imx-atf.git -b toradex_imx_5.4.70_2.3.0 cd imx-atf/ make CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- PLAT=imx8qm bl31/* 6 Assemble The Boot Container */ cd ~/apalis-uboot git clone -b imx_5.4.70_2.3.0 https://source.codeaurora.org/external/imx/imx-mkimage/ cd imx-mkimage/ cp ../scfw-bin/scfw_tcm.bin iMX8QM/ cp ../imx-atf/build/imx8qm/release/bl31.bin iMX8QM/ cp ../u-boot-toradex/u-boot.bin iMX8QM/ cp ../imx-seco-3.7.4/firmware/seco/mx8qmb0-ahab-container.img iMX8QM/ make SOC=iMX8QM flash_b0 ls iMX8QM/flash.bin mv iMX8QM/flash.bin iMX8QM/imx-bootYocto Uboot
Uboot for xen and linux Dom0 on fsl-imx8qmmek board(目前用不上,可參考其實現) /* cd to uboot dir */ cd ~/YOCOTO-V/imx-yocto-bsp/build-wayland_8qm_mipi/tmp/work/imx8qmmek-poky-linux/u-boot-imx/1_2020.04-r0/git /* make config */ make CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- imx8qm_mek_androidauto_xen_defconfig make CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- 10.10.3Android Auto Uboot Uboot for xen and linux Dom0 & Android P DomU on imx8qmmek board(目前用不上,可參考其實現) /* cd to uboot dir */ cd ~/ANDROID_P_AUO_IMX/imx-p9.0.0_2.0.0-ga/android_build/vendor/nxp-opensource/uboot-imx源碼下載
下載XEN
/* Yocto Linux中有imx-xen源碼,如果使用YOCTO此步驟可跳過,下面為單獨下載xen */ git clone https://source.codeaurora.org/external/imx/imx-xen下載YOCTO LINUX
/* 0下載YOCTO LINUX FOR DOM0 要求python3.6+ */ $ mkdir imx-yocto-bsp $ cd imx-yocto-bsp /* 1 此處建議使用新版本ZEUS, XEN:4.13.0, imx linux:5.4.70 */ $ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.70-2.3.0.xml /* 官方也有老版本SUMO, XEN:4.11.0, imx linux:4.14.98 */ $ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml /* 2 下載代碼 */ $ repo sync 注 : 在執行這些指令前,確保已經安裝Git工具并且對Git進行配置。 在imx-yocto-bsp目錄下主要生成了兩個腳本和一個sources目錄。 sources目錄——主要存放著下載的配方文件和各種腳本,作為bitbake時的原材料。 fsl-setup-release.sh腳本——在bitbake編譯前進行配置時使用該腳本。 setup-environment腳本——當主機重啟或開啟新終端時,在重新bitbake前需要使用該腳本進行配置,然后可以繼續上一次的編譯。下載Android P
/* 下載Android P 9.0壓縮包 FOR DOMU */ 在NXP官網https://www.nxp.com/ 搜索 P9.0.0_2.0.0_GA_ANDOIRD_SOURCE編譯XEN
/* 1 編譯11.8.1章節的xen,Configure Hypervisor: */ $ cd xen/xen $ make menuconfig CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- XEN_TARGET_ARCH=arm64 /* 2 Enable debugging option,開啟后才能使用CONFIG_EARLY_PRINTK */Debugging Options --->[*] Developer Checks /* 3 build xen */ $ make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=~/uboot-tools/gcc-linaro/bin/aarch64-none-linux-gnu- CONFIG_EARLY_PRINTK=imx8qm debug=y /*CONFIG_DTB_FILE=/root/linux-dom0/arch/arm64/boot/dts/fsl-imx8qm-mek-dom0.dts*/ /* 4 make xen-uImage for booting on U-Boot bootm*/ $ mkimage -A arm64 -T kernel -a 0x83000000 -e 0x83000000 -C none -n xen -d ./xen/xen xen-uImage /* 5 make kernel uImage for booting on U-Boot bootm*/ $ mkimage -A arm64 -O linux -T kernel -C none -a 0x80280000 -e 0x80280000 -n Linux -d Image uImage/* ubuntu cross compile location */ CROSS_COMPILE=/home/ADC/80258896/home/sp/zhongzi_bianyi/STSP/STSP/toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-編譯DOM0
YOCTO Linux作DOM0
安裝依賴 $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat libsdl1.2-dev 編譯。此次鏡像編譯基于的硬件平臺為i.MX8QM,選擇的圖形后端為wayland,支持GUI,不支持QT 。編譯鏡像一般分成編譯前的配置和鏡像編譯兩部分。https://www.wpgdadatong.com/cn/blog/detail?BID=B0727 /* build-wayland_8qm_mipi 為自定義文件夾目錄 ,可以根據自己的習慣命名,平臺 MACHINE=imx8qmmek 選擇的是 IMX8QM ,圖形后端為wayland weston,支持GUI不支持QT*/ $ mkdir build-wayland_8qm_mipi建議編譯ZEUS版本XEN 4.13.0,linux 5.4.70
$ DISTRO=fsl-imx-wayland MACHINE=imx8qmmek source imx-setup-release.sh -b build-wayland_8qm_mipi /* 在 local.conf 中加入 Xen */ $ vi conf/local.conf DISTRO_FEATURES_append = " xen" /*增加*/ CONF_VERSION = "1" /* 使用 bitbake 命令開始鏡像編譯 */ $ bitbake imx-image-multimedia /* 編譯完成后目標文件目錄 */ build-wayland_8qm_mipi/tmp/deploy/images/imx8qmmek/不建議編譯老版本XEN 4.11.0,linux 4.14.98
$ DISTRO=fsl-imx-wayland MACHINE=imx8qmmek source fsl-setup-release.sh -b build-wayland_8qm_mipi /* 在 local.conf 中加入 Xen */ $ vi conf/local.conf DISTRO_FEATURES_append = " xen" /*增加*/ #PACKAGECONFIG_append_pn-qemu-native = " sdl" CONF_VERSION = "1" /* 使用 bitbake 命令開始鏡像編譯 */ $ bitbake fsl-image-validation-imx /* 編譯完成后目標文件目錄 */ build-wayland_8qm_mipi/tmp/deploy/images/imx8qmmek/ PS:Apalis uboot解析sumo dtb有問題文件組成
Linux Image組成 1. Bootloader : 包括 U-Boot、ATF、SCFW、SECO、SPL、OPTEE等。在MX8MQ中,SPL初始化DDR并將U-Boot、ATF等從引導設備加載到SCU內存中,然后執行ATF,之后再執行U-Boot。 2. kernel image : 如zImage、Image 。 3. 設備樹文件(DTB): 樹數據結構,描述了硬件配置(特定于board),通過其配置,允許不同board使用相同的kernel。 4. 根文件系統(Rootfs):包含busybox、公共庫和其他元素,定義了要使用的圖形后端,文件名為ext3或ext4,xen tools。YOCTO使用
YOCTO IMX中的xen ~/YOCOTO-V/imx-yocto-bsp/build-wayland_8qm_mipi/tmp/work/aarch64-poky-linux/imx-xen/4.13.0-r0/git YOCTO IMX中的linux ~/YOCTO-IMX-ZEUS/build-wayland_8qm_mipi/tmp/work/imx8qmmek-poky-linux/linux-imx/5.4-r0 YOCTO編譯操作 $ cd ~/YOCOTO-IMX-ZEUS/imx-yocto-bsp/build-wayland_8qm_mipi/ /* 單獨部署imx-xen */ $ MACHINE=imx8qmmek bitbake -c deploy imx-xen /* 單獨清理imx-xen */ $ MACHINE=imx8qmmek bitbake -c cleanall imx-xen /* 繼續編譯imx-xen,忽略錯誤,最后錯誤會提示出來 */ $ MACHINE=imx8qmmek bitbake -k imx-xen /* 單獨拉代碼imx-xen */ $ MACHINE=imx8qmmek bitbake -c fetch imx-xen /* 顯示依賴imx-xen */ $ MACHINE=imx8qmmek bitbake -g imx-xen /* 單獨重新編譯imx-xen,如果在tmp/work目錄改了文件適用 */ $ MACHINE=imx8qmmek bitbake -c compile -f imx-xen編譯DOMU
YOCTO Linux作DOMU
DomU linux無需特殊編譯,YOCTO編譯Dom0已生成: 內核Image:復用Dom0 Image //無需mkimage Rootfs:復用Dom0 rootfs,也可使用其他 配置文件:/etc/xen/domu-imx8qm-mek.cfg //Dom0 rootfs自帶 設備樹文件:imx8qm-mek-domu.dtb 復制build-wayland_8qm_mipi/tmp/deploy/images/imx8qmmek/Image和build-wayland_8qm_mipi/tmp/deploy/images/imx8qmmek/imx8qm-mek-domu.dtb到SD卡FAT分區. 復制build-wayland_8qm_mipi/tmp/deploy/images/imx8qmmek/rootfs到SD卡EXT4分區.ANDROID P作DOMU
編譯方法
/* 1.解壓從NXP官網下載的Android P Auto For imx8QM源碼 */ $ tar xzvf imx-p9.0.0_2.0.0-auto-ga.tar.gz /* 2.get gcc-arm-none-eabi for M4 and export */ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2?revision=bc2c96c0-14b5-4bb4-9f18-bceb4050fee7?product=GNU%20Arm%20Embedded%20Toolchain%20Downloads,64-bit,,Linux,7-2018-q2-update export ARMGCC_DIR=~/toolchain/gcc-arm-none-eabi-7-2018-q2-update/ /* 3.執行下載 Android Code 腳本 */ $ cd ~/imx-p9.0.0_2.0.0-ga $ source imx_android_setup.sh? $ source build/envsetup.sh $ lunch mek_8q_car-userdebug /* with Cortex M4 CPU core */ $ make -j4 /* 編譯完成后生成目錄 */ ~/ANDROID_P_IMX/imx-p9.0.0_2.0.0-ga/android_build/out/target/product/mek_8q /* Android作DomU使用的dts位于 */ ~/ANDROID_P_IMX/imx-p9.0.0_2.0.0-ga/android_build/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/fsl-imx8qm-mek-domu.dts /* 若有修改生成patch */ git diff > kernel_imx.patch編譯配置
/* 各個配置項和使用dtb */ device/fsl/imx8q/mek_8q/BoardConfig.mk /* 編譯dtbo */ device/fsl/common/build/dtbo.mk /* 根據imx8q/mek_8q/BoardConfig.mk */ // imx8qm auto android TARGET_BOARD_DTS_CONFIG := imx8qm:fsl-imx8qm-mek-car.dtb // imx8qm auto android virtualization TARGET_BOARD_DTS_CONFIG += imx8qm-xen:fsl-imx8qm-mek-domu-car.dtbDocker
Docker編譯
Docker編譯用于解決下載中子代碼基線后云環境缺少編譯依賴問題。Docker image已經將依賴庫安裝好,只需掛載代碼即可編譯。Docker搭建
/* 1.在Ubuntu中安裝Docker,更新ubuntu的apt源索引 */ sudo apt-get update /* 安裝包允許apt通過HTTPS使用倉庫 */ sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common /* 添加Docker官方GPG key */ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - /* 設置Docker穩定版倉庫 */ sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable" /* 添加倉庫后,更新apt源索引 */ sudo apt-get update /* 安裝最新版Docker CE(社區版) */ sudo apt-get install docker-ce /* 檢查Docker CE是否安裝正確 */ sudo docker run hello-world /* 2.查看本地鏡像 */ sudo docker images /* 下載需要鏡像.如ubuntu20.04容器鏡像 */ sudo docker pull ubuntu:20.04 /* 3.運行鏡像.提示符變化則進入容器 */ sudo docker run --net=host -t -i -v ~/ANDROID-AUTO-IMX:/ANDROID_AUTO_IMX:rw ubuntu:20.04 /bin/bash /* 4.進入已運行的容器 */ //docker exec -it 容器名或容器id 進入后執行的第一個命令 sudo docker exec -it ubuntu /bin/bash /* 查看容器.列出本機所有容器,包括已經終止運行的 */ sudo docker ps -a /* 停止一個已經在運行的容器 */ sudo docker container stop 容器名或容器id /* 啟動一個已經停止的容器 */ sudo docker container start 容器名或容器id /* kill掉一個已經在運行的容器 */ sudo docker container kill 容器名或容器id /* 刪除容器 */ sudo docker rm 容器名或容器id /* 5. 將容器保存為鏡像.將apt安裝的依賴保留和固化到鏡像內 */ ctrl + p + q 退出容器 //docker commit 容器名 鏡像名 sudo docker commit -a "sunpeng" -m "docker for android9 compile" 87a93cd4d36c docker-android9:v1 /* 6. 鏡像備份與遷移.通過save命令將鏡像打包成文件,可拷貝給別人使用 */ //docker save -o 保存的文件名 鏡像名 sudo docker save -o ./docker-android9.tar docker-android9:v1 /* 在拿到鏡像文件后,可以通過load方法,將鏡像加載到本地 */ sudo docker load -i ./docker-android9.tar編譯Android9
/* 1.加載用于編譯android9的docker image */ sudo docker load -i docker-android9.tar /* 2.運行docker并將本地代碼~/ANDROID-AUTO-IMX掛載到/ANDROID_AUTO_IMX目錄,權限讀寫 */ sudo docker run --net=host -t -i -v ~/ANDROID-AUTO-IMX:/ANDROID_AUTO_IMX:rw docker-android9:v1 /bin/bash /* 3.進入docker后編譯android p auto */ cd /ANDROID_AUTO_IMX/imx-p9.0.0_2.0.0-ga; export ARMGCC_DIR=/ANDROID_AUTO_IMX/toolchain/gcc-arm-none-eabi-7-2018-q2-update; source build/envsetup.sh; lunch mek_8q_car-userdebug; make -j4;解決編譯問題
/* 1 更新ubuntu的apt源索引 */ apt-get update /* 2 下載常用依賴庫 */ apt-get install cmake apt-get install vim apt-get install unzip apt-get install zip /* 3 下載android依賴庫 */ apt-get install uuid uuid-dev apt-get install zlib1g-dev liblz-dev apt-get install liblzo2-2 liblzo2-dev apt-get install lzop apt-get install git-core curl apt-get install u-boot-tools apt-get install mtd-utils apt-get install android-tools-fsutils apt-get install openjdk-8-jdk apt-get install device-tree-compiler apt-get install gdisk apt-get install liblz4-tool apt-get install m4 apt-get install libz-dev apt-get install bc apt-get install rsync /* 4 libtinfo.so.5庫找不到 */ ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 /* 5 libncurses.so.5庫找不到 */ ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5 /* 6 classmap.h 247行注釋 */ /ANDROID_AUTO_IMX/imx-p9.0.0_2.0.0-ga/android_build/vendor/nxp-opensource/kernel_imx/security/selinux/include/classmap.h /* 7 classes.dex編譯失敗 */ FAILED: out/target/common/obj/JAVA_LIBRARIES/apache-xml_intermediates/dex-hiddenapi/classes.dex $ make clean-ims-common $ make ims-common $ make apache-xmldocker中子編譯
/* 0 下載中子android-p-auto代碼基線 */ $ mkdir -p ~/ANDROID-AUTO-IMX;cd ~/ANDROID-AUTO-IMX; $ repo init -u ssh://xx/imx-p9.0.0_2.0.0-ga -b master -m manifest.xml --reference=/work/mirror --no-repo-verify;repo sync -fcq -j36 --no-tags --prune --no-repo-verify /* 1 Docker-android9鏡像已經上傳至中子harbor庫,拉取該鏡像 */ sudo docker pull 172.23.17.35:8082/neutron_public/docker-android9:v1 /* 2 成功后在本地可看到 */ sudo docker images /* 3 運行docker鏡像,掛載本地ANDROID9代碼 */ sudo docker run --net=host -t -i -v /work/ANDROID-AUTO-IMX:/ANDROID-AUTO-IMX:rw 172.23.17.35:8082/neutron_public/docker-android9:v1 /bin/bash -v:指明目錄掛載路徑和權限。格式為:本地源目錄:docker內掛載目錄:權限 --net=host:指明docker虛擬機不進行網絡隔離。 /* 4 提示符變化,表示登錄成功,查看目錄,掛載成功 */ /* 5 進入目錄后編譯android p auto */ $ cd /ANDROID-AUTO-IMX/; $ export ARMGCC_DIR=/ANDROID-AUTO-IMX/toolchain/gcc-arm-none-eabi-7-2018-q2-update; $ source build/envsetup.sh; $ lunch mek_8q_car-userdebug; $ make -j4; /* 6 編譯完成后生成目錄 */ /ANDROID-AUTO-IMX/out/target/product/mek_8q /* 7 退出容器 */ $ ctrl + p + q 退出容器Apalis燒寫啟動
Apalis內存啟動xen和Dom0
?在Apalis imx8qm Linux uboot上啟動xen和Dom0。 /* sd卡第一個分區FAT:放dom0-Image,ramdiskfs.img,imx8qm-mek-dom0.dtb,xen-uImage,domu-Image-linux,imx8qm-mek-domu-linux.dtb,imx8qm-mek-domu-android.dtb */ /* sd卡第二個分區ext4:將dom0 linux rootfs解壓后復制過去,無需dd */ /* sd卡第三個分區ext4:將domu linux rootfs解壓后復制過去,無需dd */ /* (可選)sd卡第四個分區ext4:將domu android rootfs解壓后復制過去,無需dd */ /* uboot加載的鏡像需要mkimage制作為uboot可識別的uimg格式 */ mkimage -A arm64 -O linux -T kernel -C none -a 0x80280000 -e 0x80280000 -n Linux -d Image uImage-zeus mkimage -A arm64 -O linux -T ramdisk -C none -a 0x88000000 -e 0x88000000 -n Linux -d ramdisk ramdiskfs.img /* uboot命令行界面進行加載 */ fatload mmc 1:1 0x80280000 uImage-zeus; //dom0 Image,通過dtb傳遞 fatload mmc 1:1 0x88000000 ramdiskfs.img; //ramdiskfs.img沒用,用的是mmcblk1p2 fatload mmc 1:1 0x82280000 imx8qm-mek-dom0-zeus-602.dtb; //dtb for xen和dom0 fatload mmc 1:1 0x83000000 xen-uImage-zeus; //xen Image fdt addr 0x82280000;fdt resize;fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module";fdt set /chosen/module@0 reg <0x0 0x80280000 0x0 0x1ab7240>;fdt set /chosen/module@0 bootargs "earlycon=xen console=hvc0 loglevel=8 root=/dev/mmcblk1p2 rw rootwait";setenv bootargs "console=dtuart dtuart=/bus@5a000000/serial@5a070000 dom0_mem=640M"; bootm 0x83000000 0x88000000 0x82280000Apalis啟動DomU linux
/*將linux rootfs所在設備umount */ umount /run/media/mmcblk1p3; /* 創建DomU linux虛擬機 */ xl create /etc/xen/domu-imx8qm-mek.cfg /* 切換到DomU Console */ xl console DomU /* 從DomU console 切回Dom0 console */ Ctrl + ]Apalis啟動DomU Android
/* 1 啟動帶emmc的Dom0清misc分區,此時Dom0內存可大些 */ fatload mmc 1:1 0x80280000 uImage-zeus;fatload mmc 1:1 0x88000000 ramdiskfs.img;fatload mmc 1:1 0x82280000 imx8qm-mek-dom0-zeus-602.dtb;fatload mmc 1:1 0x83000000 xen-uImage-zeus;fdt addr 0x82280000;fdt resize;fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module";fdt set /chosen/module@0 reg <0x0 0x80280000 0x0 0x1ab7240>;fdt set /chosen/module@0 bootargs "earlycon=xen console=hvc0 loglevel=8 root=/dev/mmcblk1p2 rw rootwait";setenv bootargs "console=dtuart dtuart=/bus@5a000000/serial@5a070000 dom0_mem=2G";bootm 0x83000000 0x88000000 0x82280000 root登陸后 cd /run/media/mmcblk1p1/flash_img_sp/;python3 flash_img.py /* img全刷 */ cd /run/media/mmcblk1p1/flash_img;python3 flash_img.py -n boot.img /* 單刷boot.img */ cd /run/media/mmcblk1p1/flash_img;python3 flash_img.py -n misc /* 清misc分區 */ /* 2 重啟,進不帶emmc的Dom0,此時內存小些 */ fatload mmc 1:1 0x80280000 uImage-zeus;fatload mmc 1:1 0x88000000 ramdiskfs.img;fatload mmc 1:1 0x82280000 imx8qm-mek-dom0-zeus-602-mmcu.dtb;fatload mmc 1:1 0x83000000 xen-uImage-zeus;fdt addr 0x82280000;fdt resize;fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module";fdt set /chosen/module@0 reg <0x0 0x80280000 0x0 0x1ab7240>;fdt set /chosen/module@0 bootargs "earlycon=xen console=hvc0 loglevel=8 root=/dev/mmcblk1p2 rw rootwait";setenv bootargs "console=dtuart dtuart=/bus@5a000000/serial@5a070000 dom0_mem=1G";bootm 0x83000000 0x88000000 0x82280000 /* 3 創建DomU Android虛擬機 */ cd /run/media/mmcblk1p1/flash_img_sp;xl create domu-imx8qm-mek-androidauto.cfg /* 4 切換到DomU Console */ xl console DomU /* 5 從DomU console 切回Dom0 console */ Ctrl + ]FSL-imx8qm-mek虛擬化平臺
板子原理圖
啟動準備
fsl-imx8qm-mek上啟動多系統,目前思路是從SD卡啟動,加載xen和Dom0,接著引導emmc中的Android DomU. SD卡。fsl-imx8qm-mek上啟動多系統,需要將SD卡(16GB)至少分成2個分區: 前8M區域。32K位置開始存放uboot,用于SD卡啟動,參考11.2章節 第一個分區FAT,裝“xen”,“Image”,“dom0.dtb”,“fw.bin”等 第二分區EXT4,裝Dom0 rootfs 第三分區EXT4,用于Dom0和DomU Android間共享(可選) 第四分區EXT4,裝DomU rootfs for AGL(可選) EMMC。提前將Android鏡像燒寫到emmc中,參考11.3章節SD卡燒錄Xen Dom0
/* 1 查看sd卡,如顯示SD卡為/dev/sdc設備 */ lsblk /* 2 將.wic或者.sdcard鏡像dd到設備,鏡像有3個部分:前8M自帶uboot;FAT格式boot分區存放Image,Dtb,fw等;Ext4格式root分區存放rootfs */ $ bunzip2 -dk -f fsl-image-validation-imx-imx8qmmek.sdcard.bz2 $ sudo dd if=fsl-image-validation-imx-imx8qmmek.sdcard of=/dev/sdb bs=1M conv=fsync /* 3 dd完成后,將卡插入板子,將板子BOOT MODE設置為SD1啟動(6-1位001100) */ 11.4Emmc燒寫android /* 0 準備工作:下載uuu.exe,解壓Android鏡像壓縮包到win10 */ //uuu.exe下載地址,使用新版的https://github.com/NXPmicro/mfgtools/releases /* 1 將uuu.exe放到android鏡像目錄,可跳過步驟1 */ /* 2 關機,將板子BOOT MODE設置為SERIAL BOOT(6-1位000100),先不要重啟 */ /* 3 通過uuu燒寫原生android到emmc。取出SD卡,windows上執行腳本,顯示等待USB設備后再上電板子 */ .\uuu_imx_android_flash.bat -f imx8qm -e .\uuu_imx_android_flash.bat -f imx8qm -e -d md //android11 md.dtbo /* 4 或通過uuu燒寫DomU android到emmc。取出SD卡,windows上執行腳本,顯示等待USB設備后再上電板子 */ .\uuu_imx_android_flash.bat -f imx8qm -d xen /* 5 燒寫完成后,將板子BOOT MODE設置為EMMC啟動(6-1位001000)或SD卡啟動 */啟動XEN Dom0
/* 1 SD卡模式啟動,重啟后敲擊回車鍵進入sd卡uboot命令行,啟動XEN和Dom0*/ setenv domu-android-auto yes; saveenv; run xenmmcboot; /* 2 進入Dom0命令行后,可通過xl工具對虛擬機進行管理 */ xl list /* 查看運行的dom */ Xl create /etc/xen/xx.cfg /* 創建虛擬機 */ xl console DomU /* attach到DomU串口 */ ctrl + [ /* 退出DomU串口 */ //Ctrl + a 3次回到xen命令行,再3次回到Dom0命令行 11.6啟動SUMO DomU Android /* 1 打開/etc/xen/domu-imx8qm-mek-androidauto.cfg,將Image修改為spl-imx8qm-xen.bin,創建xvda設備 */ /* 2 /run/media/mmcblk1p3用于Dom0和DomU共享 */ umount /run/media/mmcblk1p3 xl create /etc/xen/domu-imx8qm-mek-androidauto.cfg xl console DomU /* 3 進入android后,提權,mount xvda設備*/ su; mkdir -p /data/blk1p3; mount -t ext4 -o loop /dev/block/xvda /data/blk1p3啟動ZEUS DomU Linux
/* 0 創建pa3分區,拷貝pa2的內容到pa3 */ /* 1 uboot命令行將dom0_mem設置為1024M,不然DomU內存不足 */ setenv xenhyper_bootargs "console=dtuart dom0_mem=1024M dom0_max_vcpus=2 dom0_vcpus_pin=true hmp-unsafe=true"; echo $xenhyper_bootargs; saveenv; run xenmmcboot; /* 2 在dom0中創建虛擬機 */ umount /run/media/mmcblk1p3; xl create -c /etc/xen/domu-imx8qm-mek.cfg啟動ZEUS DomU Android
/* 1 uboot命令行將dom0_mem設置為1024M,不然DomU內存不足 */ setenv xenhyper_bootargs "console=dtuart dom0_mem=1024M dom0_max_vcpus=2 dom0_vcpus_pin=true hmp-unsafe=true"; echo $xenhyper_bootargs; setenv domu-android-auto yes; saveenv; run xenmmcboot; /* 2 在dom0中創建虛擬機 */ umount /run/media/mmcblk1p3; xl create /etc/xen/domu-imx8qm-mek-androidauto.cfg /* 3 進入android后,提權,mount xvda設備*/ su; mkdir -p /data/blk1p3; mount -t ext4 -o loop /dev/block/xvda /data/blk1p3Android 11 Auto編譯
repo init -u ssh://xx/AutoMative_R/manifests.git -b master -m imx-automotive-11.0.0_1.1.0.xml && repo sync -fcq -j16 --no-tags --prune --no-repo-verifyexport ARMGCC_DIR=~/ANDROID-AUTO-IMX/toolchain/gcc-arm-none-eabi-7-2018-q2-update export AARCH64_GCC_CROSS_COMPILE=~/ANDROID-AUTO-IMX/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-source build/envsetup.sh lunch mek_8q_car-userdebug ./imx-make.sh -j 2>&1 | tee build-log.txt 11.11Android截屏 adb shell; su; mkdir -p /data/tmp; cd /data/tmp; screencap -p test.png; exit; adb root; adb pull /data/tmp/test.png; start .;格式化userdata
/* 如果第一次燒寫啟動android,userdata分區可能未掛載,需先格式化后重啟自動掛載。格式化userdata */ cd /dev/block/by-name;ls -l; mkfs.ext4 userdata; reboot;AVB
Vbmeta。i.MX安卓鏡像開啟了AVB(Android Verified Boot),Vbmeta是一個額外的用于AVB的鏡像。 它不含有任何可執行代碼,用于uboot校驗鏡像,Vbmeta用于校驗boot,dtbo,system,vender分區。 關閉avb:android dts中android/vendor fsmgr_f 參數去掉slotselect,avb refer:https://blog.csdn.net/tkwxty/article/details/106020050ubuntu 掛載安卓鏡像
1 simg2img system.img system_img.ing 2 sudo mount system_img.img mount_path -o loop -t ext4AGL
編譯
/* 下載外網agl */ repo init -b koi -u https://git.automotivelinux.org/AGL/AGL-repo;repo sync /* 打上apalis-imx8 bsp patch */ source meta-agl/scripts/aglsetup.sh -f -m apalis-imx8 agl-devel agl-demo agl-all-features; /* 支持xen的image */ source meta-agl/scripts/aglsetup.sh -f -m apalis-imx8 agl-devel agl-demo agl-all-features agl-virt-xen; /* 如果linux-toradex下載不下來,手動下載 */ git clone git://git.toradex.com/linux-toradex.git git checkout toradex_5.4-2.3.x-imx; git reset --hard dbdbcabf0f98ccc45a90972a7d92fd4e0d16689d; /* 編譯cluster */ bitbake agl-cluster-demo-platform; /* 編譯ivi */ bitbake agl-demo-platform; /* 單獨編譯linux */ MACHINE=apalis-imx8 bitbake -c compile -f linux-toradex /* 針對某bb單獨編譯 */ MACHINE=apalis-imx8 bitbake -b linux-toradex_5.4-2.3.x.bb -C compile MACHINE=apalis-imx8 bitbake -b linux-toradex_5.4-2.3.x.bb -c clean /* 外網加入對xen的編譯,增加xen bb文件后 */ /* 安裝xen及其依賴 */ bitbake -b python-native -c compile bitbake -b python-native -c install bitbake -b python-native -c do_populate_sysroot bitbake -b python_2.7.18 -c compile bitbake -b python_2.7.18 -c install bitbake -b python_2.7.18 -c do_populate_sysroot iasl bitbake -b imx-xen_4.13.0 -c clean bitbake -b imx-xen_4.13.0 -c compile bitbake -b imx-xen_4.13.0 -c install bitbake -b imx-xen_4.13.0 -c do_populate_sysroot bitbake -b imx-xen_4.13.0 -c do_deploy Xentools cp -rdf root /* 編譯scr程序 */ mkimage -A arm -T script -O linux -d runxen.txt runxen.scr /* uboot下拷貝 */ fatload mmc 1:1 0x96000000 xen-apalis-imx8; fatwrite mmc 0:1 0x90000000 xen-apalis-imx8 $filesize啟動
/* 制作T卡鏡像,鏡像放在\\xx\share\SD-FSL\VIRT-IMG\AGL */ sudo dd if=agl-0ivi-hdmi-ucluster-lvds.img of=/dev/sdx bs=8M count=1800; sync; /* /dev/sdx為lsblk下該sd卡設備 */ /* 鏡像說明 */ /* 第一個分區boot:放dtb,xen,dom0 image等 */ /* 第二個分區root:domu cluster rootfs */ /* 第三個分區root1:dom0 ivi rootfs */ /* 第四個分區data:domu dtb,cfg,image */tcard ivi
/* 1 啟動tcard ivi(如果只顯示hdmi,將overlay中剩余刪除) */ setenv devtype "mmc";setenv boot_devnum "1";setenv boot_part "1";setenv root_devnum "1";setenv root_part "3" fatload mmc 1:1 0x80280000 boot.scr;source 0x80280000tcard cluster
/* 1 啟動tcard cluster(如果只顯示hdmi,將overlay中剩余刪除) */ setenv devtype "mmc";setenv boot_devnum "1";setenv boot_part "1";setenv root_devnum "1";setenv root_part "2"; fatload mmc 1:1 0x80280000 boot_bk.scr;source 0x80280000; 13.2.3dom0 ivi + domu cluster /* 1 啟動xen+dom0 ivi hdmi */ fatload mmc 1:1 0x80280000 runxen.scr;source 0x80280000; /* 2 啟動xl服務 */ systemctl start xenstored; systemctl start proc-xen.mount; systemctl start var-lib-xenstored.mount; systemctl start xen-qemu-dom0-disk-backend.service; systemctl start xenconsoled.service; systemctl start xen-init-dom0.service; systemctl start xenstored.service; systemctl start xendomains.service; systemctl start xen-watchdog.service /* 3 創建domu cluster */ mkdir -p /home/data; mount /dev/mmcblk1p4 /home/data; xl create -c /home/data/domu-imx8qm-mek.cfg; /* 4 重啟cluster weston;如果已經啟動,則無需重啟 */ systemctl restart weston@display.service /* 5 基礎儀表程序 */ systemctl restart afm-appli-cluster-gauges--1.0--main@1001.service 或者 /var/local/lib/afm/applications/cluster-gauges/bin/cluster-gauges 30004 @t & /* 5.1 儀表中框導航程序 */ /var/local/lib/afm/applications/xdg-cluster-receiver/bin/xdg-cluster-receiver 30005 @t & 13.2.4dom0 cluster + domu ivi /* 1 啟動xen+dom0 cluster */ fatload mmc 1:1 0x80280000 runxen-c0i1.scr;source 0x80280000; /* 2 啟動xl服務 */ systemctl start xenstored;systemctl start proc-xen.mount;systemctl start var-lib-xenstored.mount; systemctl start xen-qemu-dom0-disk-backend.service;systemctl start xenconsoled.service;systemctl start xen-init-dom0.service; systemctl start xenstored.service; systemctl start xendomains.service;systemctl start xen-watchdog.service /* 3 創建domu ivi */ mkdir -p /home/data; mount /dev/mmcblk1p4 /home/data; xl create -c /home/data/domu-imx8qm-mek-c0i1.cfg; /* 4 手動拉起domu Afm homescreen服務,domu ivi可顯示 */ /var/local/lib/afm/applications/homescreen/bin/HomeScreen 30030 @t & /var/local/lib/afm/applications/launcher/bin/launcher 30032 @t & /var/local/lib/afm/applications/settings/bin/settings 30040 @t &13.4.2 weston
Weston /* 除了agl-compositor,agl還支持原生的weston compositor */ /* 殺死weston相關進程 */ Killall weston /* 啟動weston圖形,IVI和cluster或linux ubuntu均可執行 */ weston-start /* 啟動weston圖形小程序 */ weston-flower天線
https://www.toradex.cn/computer-on-modules/apalis-arm-family/nxp-imx-8#accessories Apalis imx8外裝天線,需要首先安裝一個MHF4轉SMA接頭(圖1),再安裝cable SMA天線(圖2)。也可以直接安裝MHF4(male)的天線(圖3)Ethernet
dhcp動態ip
插上路由器網線,dhcp動態分配ip,網絡和導航功能正常靜態ip
插上個人辦公網線,由于必須使用固定MAC和IP才能上網,因此只能靜態配置。 僅能配置一次,換了ip或者重啟后需要重新配置 本地測試 ifconfig eth0 down ifconfig eth0 hw ether 00:D8:61:96:48:BF ifconfig eth0 up 配置如下命令后,插上網線,agl自動配置為172.23.73.198,內外網均可訪問。 不配置的話,dhcp的ip和mac是不匹配的,無法上網。Linux分區自動掛載
編輯 /etc/fstab 配置文件 掛載(推薦) echo "/dev/mmcblk1p1 /home/data auto defaults 0 0" >> /etc/fstab UUID=8176-6798 /home/data ext4 defaults 0 0 要掛載的分區設備號 掛載點 文件系統類型 掛載選項 是否備份 是否檢測android 問題
fsmgr_flags 參數去掉slotselect,avb,解決android ab分區問題調整內核日志限頻
ratelimit.h DEFAULT_RATELIMIT_BURST 10 -> 25解壓vender.img
out/host/linux-x86/bin/simg2img vendor.img vendor.img.raw mount -t ext4 -o loop vendor.img.raw mnt-vendor/解壓boot.img
./split_bootimg.pl boot.img gzip -d boot.img-ramdisk.gz cpio -i -F boot.img-ramdisk /* Boot.img由boot.img-kernel boot.img-ramdisk和Cmdline組成 */ Command line: console=hvc0 root=/dev/xvda rw init=/init androidboot.hardware=freescale androidboot.fbTileSupport=enable cma=800M@0x960M-0xe00M androidboot.primary_display=imx-drm firmware_class.path=/vendor/firmware transparent_hugepage=never androidboot.wificountrycode=CN galcore.contiguousSize=33554432 video=HDMI-A-2:d buildvariant=userdebug androidboot.selinux=permissive /* 增加 console=hvc0 root=/dev/xvda rw */ /* 增加 androidboot.selinux=permissive關閉selinux */使用Android Image,rootfs,dtb進行啟動
?Dtb:由于Android最終設備樹由dts和dtbo overlay而來,需要自己做制作dtb。 ~/ANDROID_P_IMX/imx-p9.0.0_2.0.0-ga/android_build/out/target/product/mek_8q/obj/KERNEL_OBJ/arch/arm64/boot/dts/freescale ?Dts:~/ANDROID_P_IMX/imx-p9.0.0_2.0.0-ga/android_build/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/fsl-imx8qm-mek-domu.dts ?Dtc:~/ANDROID_P_IMX/imx-p9.0.0_2.0.0-ga/android_build/out/target/product/mek_8q/obj/KERNEL_OBJ/scripts/dtc/dtcqemu啟動AGL
啟動cluster: sudo qemu-system-x86_64 \ -drive file=agl-cluster-demo-platform-qemux86-64.ext4,if=virtio,format=raw -show-cursor -usb -usbdevice tablet -device virtio-rng-pci \ -vga virtio \ -net nic,macaddr=52:54:00:12:34:58 \ -soundhw hda -machine q35 -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -enable-kvm \ -m 2048 -serial mon:vc -serial mon:stdio -serial null -kernel bzImage \ -append 'root=/dev/vda rw console=tty0 mem=2048M ip=dhcp oprofile.timer=1 console=ttyS0,115200n8 verbose fstab=no' 啟動ivi: sudo qemu-system-x86_64 \ -drive file=agl-demo-platform-qemux86-64.ext4,if=virtio,format=raw -show-cursor -usb -usbdevice tablet -device virtio-rng-pci \ -vga virtio \ -net nic,macaddr=52:54:00:12:34:57 \ -soundhw hda -machine q35 -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -enable-kvm \ -m 2048 -serial mon:vc -serial mon:stdio -serial null -kernel bzImage \ -append 'root=/dev/vda rw console=tty0 mem=2048M ip=dhcp oprofile.timer=1 console=ttyS0,115200n8 verbose fstab=no'總結
以上是生活随笔為你收集整理的Apalis Imx8qm记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wiener Filter维纳滤波器ha
- 下一篇: 3D 相机halcon算子,持续更新