先说废话↓

转眼大学快过完了,已经开始了毕业设计的开发。笔者的毕业设计是一个运行ARM-Linux的第一人称控制机器人,为了挑(zhe)战(mo)一下自己,选择了一个性能很美丽的平台——iMX8MM,Cortex-A53四核1.8GHz,带一条PCI-E 2.0通道,还有硬件H.264编解码器,对我的需求可是再完美不过了。选来选去看到了飞凌嵌入式的OKMX8MM-C开发板和FETMX8MM-C核心板,核心板上带2GB DDR4 RAM和8GB EMMC,直到我拿到板子那一刻都是很开心的。

看起来很美好

但我的开心也仅仅停留在我拿到板子的那一刻。当我找客服拿到开发板的资料的时候,我看着那一点点可怜的资源发起了呆。

仅有的三本软件开发手册

这时候我想起我还是一个菜狗,飞凌嵌入式面向企业的资源属实不适合我,只买过一块iMX6ULL开发板还仅仅用来吃灰的我完全不能理解如何去开发我要的功能。

怀着忐忑的心情,我还是无奈地接上电源,连好串口终端,接上网线,插上显示器,开机。当我看到硕大的飞凌嵌入式的LOGO(Uboot)的时候,我以为他和树莓派没什么区别,无非就是跑个Debian之类的,都是arm64,应该和树莓派一样用就好吧?

然而天不遂人愿,进入桌面的那一刻我就惊呆了,没有我熟悉的GNOME也没有xfce或者其他任何常见的桌面环境。然而我很快就冷静下来,这没什么,我可以自己装桌面嘛。

随后我去串口终端登录,用ifconfig看了看网连上没有,再三确认获取到了ip并且dns配置都没问题之后,我ping了baidu.com,好的,网络都是通的,那我就可以安装我要的工具了吧。然而当我敲下apt update的时候,我还没有意识到我面临着多大的麻烦。

这个系统没有apt也没有yum。

一直在用Debian系发行版的我顿时不知道怎么给他安装哪怕一个vim,随后我发现这个系统除了kernel是4.14.10和Ubuntu 18比较接近以外没有什么是我熟悉的了。为了我能顺利完成我毕设的开发,我决定移植一个Ubuntu的文件系统进去。

Ubuntu-Base

能点开这篇文章的读者应该都了解Linux中根文件系统和Kernel之间的关系,Ubuntu-Base就是Ubuntu构建的文件系统,极为精简,但包含了Debian包管理器,也就是dpkg和apt,其背后是整个Ubuntu的软件源支持,易用且稳定。

下载Ubuntu-Base

由于kernel版本是4.14.10,我选择了Ubuntu-Base 18.04.05(LTS)版本的文件系统,官方下载链接如下

http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/

打开可以看到Ubuntu提供了各种架构使用的Ubuntu-Base文件系统,根据开发板的架构,我选择了arm64版本的包,可以看到大小仅有25MB,解压后的大小也不过59.1MB。

适用于各种架构的Ubuntu-Base

下载好后创建一个文件夹将其解压进去

larry@larry-Precision-5520:~/imx8$ ls -l
total 22576
drwxrwxr-x 3 larry larry     4096 1月  17 17:07 imx8mm
drwxrwxr-x 3 larry larry     4096 1月  17 22:09 imx8mq
-rwxrwxr-x 1 larry larry 23106150 1月  17 18:54 ubuntu-base-18.04.5-base-arm64.tar.gz
larry@larry-Precision-5520:~/imx8$ mkdir ubuntu-base
larry@larry-Precision-5520:~/imx8$ tar xvf ubuntu-base-18.04.5-base-arm64.tar.gz -C ubuntu-base/

解压好后进入文件夹,可以看到熟悉的根文件系统目录结构了

larry@larry-Precision-5520:~/imx8$ cd ubuntu-base/
larry@larry-Precision-5520:~/imx8/ubuntu-base$ ls
bin   dev  home  media  opt   root  sbin  sys  usr
boot  etc  lib   mnt    proc  run   srv   tmp  var

当然,刚刚下载好的文件系统自然不能直接烧录进开发板,为了方便使用还应该对他做一些配置。

配置Ubuntu-Base

配置Ubuntu-Base的时候最便捷的方法自然是直接将挂载到我们的开发主机上,但是我们的文件系统是arm64架构的,无法直接运行,所以使用qemu进行模拟。

qemu是一套开源的模拟器,通过它可以直接在x86平台上执行arm64的程序。首先在PC机上安装qemu,我的开发主机是Ubuntu 20.04,所以直接

sudo apt install qemu-user-static -y

因为Ubuntu-Base默认的apt安装源是官网源,速度比较慢,我们将其换为国内源,我习惯中科大源(mirrors.ustc.edu.cn),所以执行sed命令更换,注意路径

larry@larry-Precision-5520:~/imx8/ubuntu-base$ sed -i 's|ports.ubuntu.com|mirrors.ustc.edu.cn|g' ./etc/apt/sources.list

此时的文件系统里面还没有设置dns服务器,直接进去会无法解析域名,所以将开发机的DNS配置文件复制进去

larry@larry-Precision-5520:~/imx8/ubuntu-base$ cp /etc/resolv.conf ./etc/resolv.conf

在挂载文件系统之前,还要挂载proc、sys、dev、dev/pts 等文件系统,为此,我找到了一份脚本文件,感谢作者。

#!/bin/bashfunction mnt() {echo "MOUNTING"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}devsudo mount -o bind /dev/pts ${2}dev/ptssudo chroot ${2}
}function umnt() {echo "UNMOUNTING"sudo umount ${2}procsudo umount ${2}syssudo umount ${2}dev/ptssudo umount ${2}dev
}if [ "$1" == "-m" ] && [ -n "$2" ] ;
thenmnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
thenumnt $1 $2
elseecho ""echo "Either 1'st, 2'nd or both parameters were missing"echo ""echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"echo ""echo "For example: ch-mount -m /media/sdcard/"echo ""echo 1st parameter : ${1}echo 2nd parameter : ${2}
fi

在上层目录创建文件ch-mount.sh并将文件写入后赋予可执行权限。

larry@larry-Precision-5520:~/imx8/ubuntu-base$ cd ..
larry@larry-Precision-5520:~/imx8$ vim ch-mount.sh
larry@larry-Precision-5520:~/imx8$ sudo chmod +x ch-mount.sh

执行脚本文件自动挂载proc、sys、dev、dev/pts和根文件系统

larry@larry-Precision-5520:~/imx8$ ./ch-mount.sh -m ubuntu-base/
MOUNTING
root@larry-Precision-5520:/#

此时就已经成功挂载Ubuntu-Base文件系统,可以进行我们的配置了。首先设置主机名和hosts

echo "larry-imx8mm" > /etc/hostname
echo "127.0.0.1 localhost" > /etc/hosts
echo "127.0.0.1 larry-imx8mm" >> /etc/hosts

安装常用软件包

apt update
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

如果在apt update的时候出现Couldn’t create temporary file(无法创建临时文件)的错误,将/tmp路径权限设为777之后重试即可

chmod 777 /tmp

接着设置root用户密码

passwd root

如果需要使用桌面环境,可以此时安装GNOME或xfce等桌面环境,但是由于性能原因,尽可能选择一些较为精简的桌面环境。另外提醒一下,安装完桌面环境后需要创建用户用于登录桌面,只有安装完桌面环境后创建的用户才能正常进入桌面,否则会因为缺少相关的用户配置文件而无法登陆。

随后输入exit指令退出Ubuntu-Base文件系统,再使用ch-mount.sh脚本卸载proc、sys、dev、dev/pts文件系统即可。

到这里Ubuntu-Base文件系统的移植就算是完成了,将配置好的文件系统、内核和BootLoader一起烧录进开发板即可。

Ubuntu-Base在iMX8MM平台上的移植相关推荐

  1. Ubuntu-Base 18 文件系统 在iMX8平台上的移植

    Ubuntu-Base 18 文件系统 在iMX8平台上的移植 开发板是如下的型号 OKMX8MPX-C V2.0 OKMX8PQ-C开发板 FETMX8MPX-C V1.0 在 飞凌 提供的 ubu ...

  2. opus在arm的嵌入式平台上的移植和开发

    最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...

  3. QT4.7.3在dm6446平台上的移植[转]--make[1]: *** [assistant_cs.qm] Error 2

    师兄让我作达芬奇系统下的一个界面程序,听说QT不错,所以几天前就试着把QT移植到dm6446上来.去TI的论坛看了一个在omap3上的移植教程,看起来也不难,于是开始了我的移植过程. 1 首先去htt ...

  4. miniGUI 3.0.2 在Hi3535平台上的移植

    miniGUI是一个自由软件项目.其目标是提供一个快速.稳定.跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Linux/uClinux.eCos 以及其他传统 RTOS(如 VxWorks. ...

  5. 锐捷认证客户端在嵌入式linux平台上的移植

    一.TCP/IP协议简介 IP协议用于将多个包交换网络连接起来,IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流 ...

  6. Qt4.7.3在dm6446平台上的移植经验与教训

    1 首先去http://qt.nokia.com/downloads下载最新的QT原代码包:qt-everywhere-opensource-src-4.6.4.tar.gz 可以将其放在/tmp目录 ...

  7. 创维 linux内核,Linux2.6内核在创维特jx2410平台上的移植四

    Ne2000兼容的网卡移植 1.首先修改arch/arm文件夹下的Kconfig文件的ISA项如下: config ISA bool "gggggg ISA support" de ...

  8. 创维 linux内核,Linux2.6内核在创维特jx2410平台上的移植一

    我参考网上的资料做了linux2.6.14内核的移植.创维特jx2410的配置:cpu:s3c2410, 32M Nor Flash(Intel 28F128), 64M SDRAM.Nor Flas ...

  9. FFTW3在android平台上的移植

    目的:编译arm64-v8a armeabi-v7a架构的动态库 编译环境:ubuntu 64 + android-ndk-r10e 注意事项:一定要保证android-ndk-r10e的有足够的权限 ...

最新文章

  1. SQL查询语句 select 详解
  2. 北京科技大学C语言程序设计,北京科技大学《C语言》第1章.ppt
  3. ML之LassoRRidgeR:基于datasets糖尿病数据集利用LassoR和RidgeR算法(alpha调参)进行(9→1)回归预测
  4. mysql 热切换_热备服务器中,切换master中切换SQL
  5. Oracle 绑定变量 详解 .
  6. checkInterruptWhileWaiting
  7. 多个文件同时写 linux sd卡_相机报错:“记忆卡已锁定”别着急,都是写保护在搞事情...
  8. express 4 简单实现自动注册路由功能
  9. 修复 Xcode 错误 “The identity used to sign the executable is no longer valid”
  10. 未能成功加载扩展程序_【JAVA虚拟机(JVM)精髓】09-几种不同的类加载器
  11. Flutter 开发应用第一个页面
  12. wordpress如何让百度快速收录_安顺如何发布信息百度收录在首页
  13. ensp动态路由配置_动态路由的原理与配置
  14. 图文并茂全面总结上百个Android Studio好用的插件(IDE通用)
  15. 用二维码分享WiFi密码(转)
  16. 通信协议:分辨率和偏移量的使用
  17. Beyond Compare 报错 This license key has been revoked: 8454-8413
  18. SpringBosent框架
  19. 怎么给电脑里面的文件加密?这个软件轻松帮忙搞定
  20. 怎么将hashmap的数据传递给js_将Excel数据信息传递给Powerpoint应用

热门文章

  1. Egret白鹭引擎初始介绍及简单应用
  2. 微软的鼠标将会使用蓝光LED照明
  3. 学系统集成项目管理工程师(中项)系列08b_合同管理(下)
  4. html5中skew,css3 skew()属性怎么用?
  5. iOS NavigationBar的占位问题
  6. 网络环境下的社交方式
  7. OWASP TOP 10的风险分析、预防措施以及攻击范例(上)
  8. mysql tinyint int mediumint 用哪个好_MYSQL 字段类型之TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT...
  9. win10的版本升级——NUC7i7安装有感
  10. Unity 水、流体、波纹基础系列(二)——方向流体(Directional Flow)