iMX8模块Ubuntu移植

By Toradex胡珊逢

本文将介绍如何将 Ubuntu 系统移植到 Toradex Apalis iMX8 计算机模块上。该方法也同样使用与其他使用 eMMC 作为存储介质的模块,例如 Colibri、Verdin 模块。撰写文章时 Toradex 发布的最新 Linux BSP是 5.2.0,Ubuntu 为 20.04 LTS 和 20.10。为了获得更好的支持,建议使用新的Linux BSP。这里涉及的 Ubuntu 分为两类,Ubuntu 20.04 Base是不带任何图形界面的 console 镜像。Ubuntu 20.10 desktop使用了 Ubuntu 自带的桌面环境,如Gnome。

首先在电脑上安装 qemu-user-static 软件仿真 arm64 运行环境。

$ sudo apt install qemu-user-static

Ubuntu 20.04 Base

首先下载 Apalis iMX8 模块的 Linux BSP。

https://artifacts.toradex.com/artifactory/tdxref-oe-prod-frankfurt/dunfell-5.x.y/release/7/apalis-imx8/tdx-xwayland/tdx-reference-minimal-image/oedeploy/Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7.tar

解压文件。

$ tar vxf Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7.tar


提取 Linux BSP 中的文件系统到 rootfs 目录,里面包含一些模块的驱动和固件,稍后需要用到。

$ mkdir rootfs

$ cd Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7

$ sudo tar vxf Reference-Minimal-Image-apalis-imx8.tar.xz -C ../rootfs


下载 arm64 格式的 Ubuntu base 20.04.2 文件系统。

http://cdimage.ubuntu.com/ubuntu-base/releases/20.04.2/release/ubuntu-base-20.04.2-base-arm64.tar.gz

解压 Ubuntu 文件系统到ubuntu 文件夹中。

$ mkdir ubuntu

$ sudo tar vxf ubuntu-base-20.04.2-base-arm64.tar.gz -C ubuntu/


执行下面脚本ch-mount.sh,切换到 Ubuntu 目录中运行并安装软件。

$ chmod +x ./ch-mount.sh

$ sudo ./ch-mount.sh -m ubuntu/


设置 DNS 服务器,在线安装一些基本组件。这里页可以自行添加所需的其他软件。

# echo nameserver 8.8.8.8 > /etc/resolv.conf

# apt update

# apt upgrade

# apt install language-pack-en-base sudo ssh net-tools \

network-manager netplan.io iputils-ping rsyslog \

bash-completion htop resolvconf dialog \

vim nano alsa-utils gcc \

less resolvconf autoconf autopoint libtool \

bison flex libglib2.0-dev libpango1.0-dev libatk1.0-dev kmod pciutils -y


添加用户,如用户名ubuntu,并为ubuntu 和 root 用户设置密码。

# useradd -s '/bin/bash' -m -G adm,sudo ubuntu

# passwd ubuntu

# passwd root


设置主机名称。

# echo 'apalis-imx8' > /etc/hostname


将ttymxc0 用于默认的调试串口。

# systemctl enable serial-getty@ttymxc0.service


清除缓存。

# apt autoclean

# exit


卸载 ubuntu 目录。

$ sudo ./ch-mount.sh -u ubuntu/


这里采用netplan 作为有线网络管理工具。将相应的 yaml 配置文件复制到 ubuntu/etc/netplan 目录。这里提供两个配置文件供参考,分别为动态和静态IP 设置。

$ sudo cp 00-installer-config.yaml ubuntu/etc/netplan/


将 Linux BSP 中的内核驱动、固件和 fstab 复制到 Ubuntu 文件系统中。

$ sudo mkdir -p ubuntu/lib/modules

$ sudo cp -Ppr rootfs/lib/modules/* ubuntu/lib/modules/

$ sudo cp -Ppr rootfs/lib/firmware/* ubuntu/lib/firmware/

$ sudo rm ubuntu/etc/fstab

$ sudo cp rootfs/etc/fstab ubuntu/etc/


重新打包 Ubuntu 文件系统,用于Toradex Easy Installer 安装。

$ cd ubuntu/

$ sudo tar cvf ../ubuntu.tar .

$ xz -T0 ubuntu.tar


将生成的 ubuntu.tar.xz 复制到之前解压的 Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7 目录中

$ cp ubuntu.tar.xz Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7


修改 image.json 文件。

filename 为生成的 ubuntu.tar.xz。

uncompressed_size 为 ubuntu 目录大小,单位 MB,可以使用下面命令查看。

$ sudo du -sm ubuntu


至此,可以将 Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7 复制到 U 盘进行安装。

Ubuntu 20.10 desktop

首先下载 Apalis iMX8 模块的 Linux BSP。

https://artifacts.toradex.com/artifactory/tdxref-oe-prod-frankfurt/dunfell-5.x.y/release/7/apalis-imx8/tdx-xwayland/tdx-reference-minimal-image/oedeploy/Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7.tar

解压文件。

$ tar vxf Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7.tar


提取 Linux BSP 中的文件系统到 rootfs 目录,里面包含一些模块的驱动和固件,稍后需要用到。

$ mkdir rootfs

$ cd Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7

$ sudo tar vxf Reference-Minimal-Image-apalis-imx8.tar.xz -C ../rootfs


这里使用 Ubuntu 首次针对 raspi Arm64 处理器发布的 Ubuntu 20.10 桌面系统。下载镜像文件并解压。

$ wget https://cdimage.ubuntu.com/releases/20.10/release/ubuntu-20.10-preinstalled-desktop-arm64+raspi.img.xz

$ xz -d ubuntu-20.10-preinstalled-desktop-arm64+raspi.img.xz


ubuntu-20.10-preinstalled-desktop-arm64+raspi.img 原本是为 raspi 直接烧录 SD 使用,其中包括了 u-boot、Linux kernel、device tree 等文件,但我们只需要使用其文件系统即可。使用 fdisk 命令查看 img 文件中文件系统位置。

$ fdisk -l ubuntu-20.10-preinstalled-desktop-arm64+raspi.img

Disk ubuntu-20.10-preinstalled-desktop-arm64+raspi.img: 8.15 GiB, 8750736384 bytes, 17091282 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0xb6b5c3c7

Device                                             Boot  Start      End  Sectors  Size Id Type

ubuntu-20.10-preinstalled-desktop-arm64+raspi.img1 *      2048   526335   524288  256M  c W95 FAT32 (LBA)

ubuntu-20.10-preinstalled-desktop-arm64+raspi.img2      526336 17091247 16564912  7.9G 83 Linux


img2 是 Ubuntu 文件系统,其起始偏移地址为 526336,注意这里的单位是 sector。换算为字节是 526336 * 512 = 269484032。使用 mount 命令挂载时 offset=269484032

$ mkdir ubuntu

$ sudo mount -o loop,offset=269484032 ubuntu-20.10-preinstalled-desktop-arm64+raspi.img ubuntu/


删除以下文件。

$ cd ubuntu

$ sudo rm -rf boot

$ sudo rm etc/fstab

$ sudo rm -rf lib/modules/*

$ cd ..


执行下面脚本ch-mount.sh,切换到 ubuntu 目录中运行。

$ chmod +x ./ch-mount.sh

$ sudo ./ch-mount.sh -m ubuntu/


将ttymxc0 用于默认的调试串口。

# systemctl enable serial-getty@ttymxc0.service


删除下面软件。

# apt remove u-boot-rpi flash-kernel

# exit


卸载 ubuntu 目录。

$ sudo ./ch-mount.sh -u ubuntu/


将 Linux BSP 中的内核驱动、固件和 fstab 复制到 Ubuntu 文件系统中。

$ sudo cp -Ppr rootfs/lib/modules/* ubuntu/lib/modules/

$ sudo cp -Ppr rootfs/lib/firmware/* ubuntu/lib/firmware/

$ sudo rm ubuntu/etc/fstab

$ sudo cp rootfs/etc/fstab ubuntu/etc/


注释掉 fstab 中 /dev/boot-part 挂载路径。

$ vi ubuntu/etc/fstab

# stock fstab - you probably want to override this with a machine specific one

/dev/root            /                    auto       noatime               1  1

#/dev/boot-part       /boot                auto       noatime,noauto        0  0


重新打包 Ubuntu 文件系统,用于Toradex Easy Installer 安装。

$ cd ubuntu/

$ sudo tar cvf ../ubuntu-desktop.tar .

$ xz -T0 ubuntu-desktop.tar


将生成的 ubuntu-desktop.tar 复制到之前解压的 Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7 目录中

$ cp ubuntu-desktop.tar Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7


修改 image.json 文件。

filename 为生成的 ubuntu-desktop.tar。

uncompressed_size 为 ubuntu 目录大小,单位 MB,可以使用下面命令查看。

$ sudo du -sm ubuntu


至此,可以将 Apalis-iMX8_Reference-Minimal-Image-Tezi_5.2.0+build.7 复制到 U 盘进行安装。在安装完毕后需要连接 HDMI 显示器、键盘和鼠标。首次启动时,Ubuntu 系统会进入用户设置界面,如时区、用户名和密码等配置。期间可能会遇到错误,但可以关闭错误窗口。然后在调试串口中使用刚才设置的用户名和密码登录,运行 sudo reboot  重新启动即可。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容