linux内核移植imx8,NXP iMX8 Ubuntu 系统移植及 ROS 应用
By Toradex 胡珊逢
1).简介
NXP iMX8 是NXP近期发布的基于Cortex-A72、Cortex-A53等性能非常强大的的ARM处理器, 默认 BSP 是基于 Yocto 工程编译,这是一个精简的产品级 Linux BSP。但是对于习惯 Ubuntu 环境的用户,特别是 ROS 用户,Yocto 的操作会显得相对复杂。因此本文就采用Toradex基于NXP iMX8 SoC的ARM核心板模块Apalis iMX8介绍如何制作一个 Ubuntu BSP,并演示如何使用 ROS。
2). Ubuntu BSP定制
一个完整的 Ubuntu BSP 包括 u-boot、Linux kernel 和 Ubuntu rootfs。为了能够受益于 Toradex 的开发成果,我们将使用 Toradex 官方 Linux V3.0b4 BSP 中的u-boot、Linux kernel,rootfs 则仍然采用 ubuntu-base-18.04.4-base-arm64。编译方法来自 NXP 论坛。当然,我们会使用 Toradex 的Yocto编译环境。
首先从上面链接下载 ubuntu-base-18.04.4-base-arm64.tar.gz,然后解压。
---------------------------------------
$ mkdir ~/ubuntu-rootfs
$ sudo tar vxf ubuntu-base-18.04.4-base-arm64.tar.gz -C ubuntu-rootfs
---------------------------------------
复制该脚本文件,创建 ch-mount.sh。
---------------------------------------
$ sudo chmod a+x ./ch-mount.sh
---------------------------------------
上面下载的是一个基础的 Ubuntu-base 文件系统,缺失了很多常用的工具,需要我们进行安装。为此在电脑上安装 qemu-user-static 软件仿真 arm64 运行环境。
---------------------------------------
$ sudo apt install qemu-user-static
---------------------------------------
挂载 Ubuntu-base 文件系统,然后可以直接在arm64 环境中操作。
---------------------------------------
$ sudo ./ch-mount.sh -m ubuntu-rootfs/
---------------------------------------
添加 DNS 服务器,例如8.8.8.8,或者其他可用的DNS 服务器 IP。
---------------------------------------
# echo nameserver 8.8.8.8 > /etc/resolv.conf
---------------------------------------
安装相关软件,当然你也可以把其他软件添加进来。
---------------------------------------
# apt install language-pack-en-base sudo ssh net-tools \
network-manager iputils-ping rsyslog \
bash-completion htop resolvconf dialog \
vim nano v4l-utils alsa-utils git gcc \
less resolvconf autoconf autopoint libtool \
bison flex gtk-doc-tools glib-2.0 \
libglib2.0-dev libpango1.0-dev libatk1.0-dev kmod pciutils -y
---------------------------------------
创建用户和设置密码,这里用户名为 ubuntu
---------------------------------------
# useradd -s '/bin/bash' -m -G adm,sudo ubuntu
# passwd ubuntu
# passwd root
# echo 'apalis-imx8' > /etc/hostname
---------------------------------------
至此基本的 Ubuntu 已经配置完毕。
---------------------------------------
# exit
$ sudo ./ch-mount.sh -u ubuntu-rootfs/
---------------------------------------
接下来需要按照上面的链接搭建 Yocto 编译环境,生成适用于 Apalis iMX8的 GPU 驱动和 weston 软件。将 build/conf/local.conf 文件中INHERIT += "rm_work" 属性注释掉,因为我们需要其中一些软件包编译后的二进制文件,用于构建 Ubuntu BSP。然后成功编译适用于 Apalis iMX8的 console-tdx-image。
---------------------------------------
# Delete the the souIMX8rce/object/binary files once a package is built to preserve disk space
# INHERIT += "rm_work"
---------------------------------------
如果你已经在之前成功编译过 console-tdx-image 但是没有删除INHERIT += "rm_work" 属性,那需要重新编译下面几个软件包
---------------------------------------
$ bitbake -c cleanall libdrm && bitbake libdrm
$ bitbake imx-gpu-viv && bitbake -c cleanall imx-gpu-viv
$ bitbake -c cleanall imx-dpu-g2d && bitbake imx-dpu-g2d
$ bitbake -c cleanall wayland && bitbake wayland
$ bitbake -c cleanall wayland-protocols && bitbake wayland-protocols
$ bitbake -c cleanall weston && bitbake weston
& bitbake -c cleanall weston-init && bitbake weston-init
& bitbake -c cleanall libinput && bitbake libinput
---------------------------------------
删除 Ubuntu-base 中原有的 drm、egl、wayland 文件。
---------------------------------------
$ sudo rm -rf ubuntu-rootfs/usr/lib/aarch64-linux-gnu/libdrm*
$ sudo rm -rf ubuntu-rootfs/usr/lib/aarch64-linux-gnu/mesa-egl/*
$ sudo rm -rf ubuntu-rootfs/usr/lib/aarch64-linux-gnu/libglapi.so.0*
$ sudo rm -rf /usr/lib/aarch64-linux-gnu/libwayland-*
---------------------------------------
我们在 “~/V30/“ 目录下编译 Yocto 环境,同样 ubuntu-rootfs 也位于 “~/“目录中。根据你的实际情况调整路径,然后复制相关文件。
---------------------------------------
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/libdrm/2.4.91.imx-r0/image$ sudo cp -Ppra usr ~/ubuntu-rootfs/
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/imx-gpu-viv/1_6.2.4.p4.8-aarch64-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/imx-dpu-g2d/1.7.6-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-tdx-linux/wayland/1.16.0-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/wayland-protocols/1.16.imx-r0/image$ sudo cp -Ppra ./* ~/ ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/weston/5.0.0.imx-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-tdx-linux/libinput/1.11.3-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-tdx-linux/libxkbcommon/0.8.2-r0/images$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-tdx-linux/mtdev/1.1.5-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-tdx-linux/libevdev/1.5.9-r0/image$ sudo cp -Ppra ./* ~/ubuntu-rootfs /
---------------------------------------
如果需要 Gstreamer 也可以添加进来
---------------------------------------
$ bitbake -c cleanall gstreamer1.0-plugins-base && bitbake gstreamer1.0-plugins-base
$ bitbake -c cleanall gstreamer1.0-plugins-good && bitbake gstreamer1.0-plugins-good
$ bitbake -c cleanall gstreamer1.0-plugins-bad && bitbake gstreamer1.0-plugins-bad
$ bitbake -c cleanall imx-gst1.0-plugin && bitbake imx-gst1.0-plugin
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-tdx-linux/gstreamer1.0/1.14.imx-r0/image$ sudo cp -Ppra ./* ~/ ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/gstreamer1.0-plugins-base/1.14.imx-r0/image$ sudo cp -Ppra ./* ~/ ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/gstreamer1.0-plugins-good/1.14.imx-r0/image$ sudo cp -Ppra ./* ~/ ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/gstreamer1.0-plugins-bad/1.14.imx-r0/image$ sudo cp -Ppra ./* ~/ ubuntu-rootfs /
oe-user@oe-v30-build:~/V30/build/tmp/work/aarch64-mx8-tdx-linux/imx-gst1.0-plugin/4.5.2-r0/image$ sudo cp -Ppra ./* ~/ ubuntu-rootfs /
---------------------------------------
下载 Toradex Linux V3.0b4 BSP后解压。
---------------------------------------
$ cd ~/
$ tar vxf 107503-apalis-imx8_console-image-tezi.tar
$ cd Apalis-iMX8_Console-Image-Tezi_3.0b4.254/
$ sudo tar vxf Console-Image-apalis-imx8.tar.xz -C ~/console-rootfs
---------------------------------------
复制相关文件
---------------------------------------
oe-user@oe-v30-build:~ $ cd ~/
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/lib/firmware/vpu ubuntu-rootfs/lib/firmware/
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/lib/firmware/mrvl ubuntu-rootfs/lib/firmware/
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/lib/modules ubuntu-rootfs/lib/
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service ubuntu-rootfs/etc/systemd/system/getty.target.wants/
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/etc/fstab ubuntu-rootfs/etc/
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/usr/share/X11/xkb ubuntu-rootfs/usr/share/X11/
oe-user@oe-v30-build:~ $ sudo rm ubuntu-rootfs/usr/lib/aarch64-linux-gnu/libjpeg.so*
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/usr/lib/libjpeg.so* ubuntu-rootfs/usr/lib/aarch64-linux-gnu/
oe-user@oe-v30-build:~ $ sudo rm ubuntu-rootfs/usr/lib/aarch64-linux-gnu/libcairo.so*
oe-user@oe-v30-build:~ $ sudo cp -Ppra console-rootfs/usr/lib/libcairo.so.2* ubuntu-rootfs/usr/lib/aarch64-linux-gnu/
--------------------------------------
到此,集成显示功能的基本 Ubuntu rootfs 已经构建完毕。如你看到的,我们采用了 weston 和 wayland 显示框架,而不是传统的 Xorg。所以这里的 Ubuntu 也并不是我们在电脑上看到的 Gnome 桌面环境。
最后我们将 ubuntu-rootfs 重新打包成支持 Toradex Easy Installer 烧写的格式。
---------------------------------------
oe-user@oe-v30-build:~ $ cd ~/
oe-user@oe-v30-build:~ $ sudo tar cJfv ubuntu_18.04.4_rootfs.tar.xz -C ubuntu-rootfs .
oe-user@oe-v30-build:~ $ mv ubuntu_18.04.4_rootfs.tar.xz Apalis-iMX8_Console-Image-Tezi_3.0b4.254/
oe-user@oe-v30-build:~ $ mv Apalis-iMX8_Console-Image-Tezi_3.0b4.254 Apalis_iMX8_3.0b4.254_ubuntu18.04
oe-user@oe-v30-build:~ $ cd Apalis_iMX8_3.0b4.254_ubuntu18.04
oe-user@oe-v30-build:~ $ rm Console-Image-apalis-imx8.tar.xz
---------------------------------------
修改image.json 文件
---------------------------------------
{
"config_format": 2,
"autoinstall": false,
"name": "Ubuntu 18.04 based on Toradex Linux 3.0b4.254",
"description": "Ubuntu 18.04 Weston",
"version": "Ubuntu_18.04_3.0b4.254",
"release_date": "2020-04-21",
……
{
"partition_size_nominal": 512,
"want_maximised": true,
"content": {
"label": "RFS",
"filesystem_type": "ext4",
"mkfs_options": "-E nodiscard",
"filename": "ubuntu_18.04.4_rootfs.tar.xz",
"uncompressed_size": 1232.53125
}
}
---------------------------------------
现在你可以将 Apalis_iMX8_3.0b4.254_ubuntu18.04 复制到 SD 或者 U 盘通过 Toradex Easy Installer 安装。如果你想直接在 Apalis iMX8模块上测试 Ubuntu 也可以从这里下载我们已经制作好的安装文件。
安装完毕后在调试串口使用 ubuntu 用户登录,密码为之前您所设置的。我们提供的 Ubuntu 测试 BSP 里,密码为ubuntu.
开启以太网并设置DNS 服务器IP。
---------------------------------------
ubuntu@apalis-imx8:~$ sudo ifconfig eth0 up
ubuntu@apalis-imx8:~$ sudo dhclient eth0
ubuntu@apalis-imx8:~$ sudo vi /etc/resolv.conf
---------------------------------------
启动 weston 。
---------------------------------------
ubuntu@apalis-imx8:~$ export XDG_RUNTIME_DIR=/run/user/1000
ubuntu@apalis-imx8:~$ sudo -E weston --tty=1 &
ubuntu@apalis-imx8:~$ weston-flower
---------------------------------------
3). ROS测试
在 Ubuntu 系统里你可以十分方便地安装 ROS 程序,具体可以参考下面说明。
---------------------------------------
ubuntu@apalis-imx8:~$ sudo apt install lsb-core
ubuntu@apalis-imx8:~$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
ubuntu@apalis-imx8:~$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
ubuntu@apalis-imx8:~$ sudo apt update
ubuntu@apalis-imx8:~$ sudo apt install ros-melodic-desktop
---------------------------------------
在三个 SSH 终端分别运行下面命令,模拟ROS 节点之间相互通信。
---------------------------------------
// Terminal 1
ubuntu@apalis-imx8:~$ source /opt/ros/melodic/setup.sh
ubuntu@apalis-imx8:~$ roscore
// Terminal 2
ubuntu@apalis-imx8:~$ source /opt/ros/melodic/setup.sh
ubuntu@apalis-imx8:~$ rosrun roscpp_tutorials talker
// Terminal 3
ubuntu@apalis-imx8:~$ source /opt/ros/melodic/setup.sh
ubuntu@apalis-imx8:~$ rosrun roscpp_tutorials listener
---------------------------------------
4).总结
Ubuntu系统由于其丰富的软件源,用户可以很便捷地安装所需软件,加速测试、开发流程。为此本文结合NXP资料介绍在Apalis iMX8上移植Ubuntu的方法以及ROS的简单应用。由于驱动限制,iMX8并不支持Xorg,因此ROS默认的图形界面工具将无法直接使用,如rqt等。另外需要说明的是,本文仅用于技术讨论,使用期间如遇到问题,需用户自行解决。
linux内核移植imx8,NXP iMX8 Ubuntu 系统移植及 ROS 应用相关推荐
- Linux系统移植:NXP 官板 uboot 移植
文章目录 Linux系统移植:NXP 官板 uboot 移植 一.获取官板 U-Boot 二.编译下载 U-Boot 源码 三.官方驱动验证 Linux系统移植:NXP 官板 uboot 移植 移植 ...
- STM32MP153 Ubuntu系统移植到ST的STM32MP157-DK2记录
米尔科技STM32MP153 Ubuntu系统移植到ST的STM32MP157-DK2记录 ubuntu18:ros系统,边缘计算. 先上最终效果: 核心思想 1 解包,挂载.先把米尔科技提供的ubu ...
- linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程
本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...
- [基于STM32底盘控制与ROS上层导航小车制作] 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息
系列文章目录 第一节 stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32 ...
- Ubuntu系统下使用ROS(moveit )连接ABB实体机器人(irb120)(1.控制仿真)
前言: 经过两天的踩坑,终于将ROS与ABB连接成功,可以通过rviz的gui界面拖动机械臂来控制实体ABB机械臂进行运动,因为网络上的教程(几位博主和ROS WIKI等)个别步骤的不完整,所以走了很 ...
- NXP iMX8 Ubuntu 系统移植及 ROS 应用
By Toradex 胡珊逢 1). 简介 NXP iMX8 是NXP近期发布的基于Cortex-A72.Cortex-A53等性能非常强大的的ARM处理器, 默认 BSP 是基于 Yocto 工程编 ...
- linux 定时器中断 imx,NXP iMX8 存储性能测试
1).简介 NXP iMX8系列应用处理器是NXP发布的基于Cortex-A72/A53/A35和Coretex-M4/M7等架构的ARM处理器,对于存储部分,主要支持MMC 5.1.SD Memor ...
- linux清理页面缓存文件夹,清理Ubuntu系统的缓存、垃圾、多余内核。
linux和windows系统不同,linux不会产生无用垃圾文件,但是在升级缓存中,linux不会自动删除这些文件,还是很占硬盘的! 一.删除缓存 1,非常有用的清理命令:sudo apt-get ...
- debian linux 内核 3.14-1 显示器 很暗,Ubuntu 与 Linux Mint 用户安装 Kernel 3.14.1 内核
Ubuntu 与 Linux Mint 用户安装 Kernel 3.14.1 内核 Mark Do 2014年4月16日 暂无评论 阅读 3,928 次 最新稳定版本的Linux内核 Kernel 3 ...
- 申威 linux内核,一种申威防火墙快速移植高版本linux内核的方法与流程
技术特征: 1.一种申威防火墙快速移植高版本linux内核的方法,其特征在于,包括以下步骤: s1:预先制作生成内存根文件系统的压缩文件: 所述步骤s1包括以下步骤: s11:通过编译busybox制 ...
最新文章
- 访问centos端口
- 如何实现字符串的翻转,不用php库函数翻转字符串
- “RPC好,还是RESTful好?”
- CAS 服务器端取消 https的配置 方法
- SAP ABAP:获取汇率的完整实现之一
- WebSphere应用程序服务器Web容器设置
- 新手学习Java必需要知道的这些基本概念!
- 如何重新安装 Linux 的操作管理套件 (OMS) 代理
- MS SQL入门基础:触发器概述
- java代码块是对象吗_面向对象(Java中普通代码块,构造代码块,静态代码块区别及代码示例)...
- mysql按字段拆分表_MYSQL命令怎么实现将表中某个字段中多个记录拆分,急求答案!...
- linux tar命令压缩_Linux tar命令来压缩和提取文件
- python pickle反序列化漏洞_渗透测试 - 黑客技术 | 【技术分享】记CTF比赛中发现的Python反序列化漏洞_吾爱漏洞...
- ModuleNotFoundError: No module named xxx 解决办法
- 2060. 奶牛选美
- 数据结构 严蔚敏 习题总结
- 开源OA协同办公平台搭建教程丨模糊人员匹配功能配置说明
- 优点电子签章系统无法解除_电子签章常见问题解答
- 兔子生崽问题编程_兔子生崽问题
- Java学习——类和对象(上)
热门文章
- 小米 MIUI 主题制作
- 以后华为鸿蒙也要越狱了,华为EMUI升级鸿蒙后依然可使用太极运行 Xposed 提供多款型号升级...
- 安装SQL 2008的错误 等待数据库引擎恢复句柄失败。请查看 SQL Server 错误日志以了解可能的原因
- 色散方程用matlab编译,急切求助用matlab曲线拟合色散方程 - 程序语言 - 小木虫 - 学术 科研 互动社区...
- NLPIR/ICTCLAS中文分词系统 java相关api文档总结
- 旅游信息管理后台(SSM后台管理系统)
- Linux花生壳使用篇
- python 欧姆龙plc通信_二进制PLC通信校验和
- 哈理工OJ 1924 分数表达式(暴力枚举)
- Win8 64位 安装 Delphi5