转自:https://blog.csdn.net/sinat_37141443/article/details/80882219

1.下载根文件系统

首先创建保存路径

$ mkdir ~/image
$ cd image
$ mkdir ubrfs16.04.4
$ cd ubrfs16.04.4

下载官方根文件系统。其他资料里提到的都是ubuntu-core,但进入到

<a href="http://cdimage.ubuntu.com/" rel="nofollow" target="_blank">http://cdimage.ubuntu.com/</a>

,发现文件命名方式和以前不一样了,于是我选择了ubuntu-base-16.04.4-base-armhf.tar.gz,先进入到保存文件系统的目录,我的目录是

~/image/ubrfs16.04.4

下载ubuntu-base-16.04.4-base-armhf.tar.gz,

$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.4/release/ubuntu-base-16.04.4-base-armhf.tar.gz

解压文件系统,一定要用root权限解压,否则后面会出现各种奇怪的问题。(已经踩过坑了,多么痛得领悟。。。),我选择直接在当前目录解压。

$ sudo tar zxf ubuntu-base-16.04.4-base-armhf.tar.gz

解压后得到

$ ls
bin   dev  home  media  opt   root  sbin  sys  ubuntu-base-16.04.4-base-armhf.tar.gz  var
boot  etc  lib   mnt    proc  run   srv   tmp  usr

2.安装qemu-user-static工具

安装qemu-user-static工具

sudo apt-get install qemu-user-static

拷贝qemu-arm-static到刚刚解压出来的目录

$ sudo cp /usr/bin/qemu-arm-static ./usr/bin/

3.网络配置

修改根文件系统软件源

$ sudo vim ./etc/apt/sources.list

添加ubuntu arm源,我选择的是中科大的源

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

为了制作成功的根文件系统能够联网,可以直接拷贝本机的dns配置文件到根文件系统的相应位置,

$ sudo cp /etc/resolv.conf ./etc/resolv.conf

4.挂在根文件系统并chroot

首先在本机挂载刚刚下载好的文件系统,联网完成相应的配置,然后载烧录到开发板上。

需要挂载proc, sys, dev, dev/pts等文件系统。

挂载过程的bash脚本内容:

#!/bin/bash
echo "MOUNTING"
sudo mount -t proc /proc /home/phy/image/debian-rootfs/proc
sudo mount -t sysfs /sys /home/phy/image/debian-rootfs/sys
sudo mount -o bind /dev /home/phy/image/debian-rootfs/dev
sudo mount -o bind /dev/pts /home/phy/image/debian-rootfs/dev/pts        
sudo chroot /home/phy/image/debian-rootfs/

卸载过程的bash脚本内容:

#!/bin/bash
echo "UNMOUNTING"
sudo umount /home/phy/image/debian-rootfs/proc
sudo umount /home/phy/image/debian-rootfs/sys
sudo umount /home/phy/image/debian-rootfs/dev/pts
sudo umount /home/phy/image/debian-rootfs/dev

当然我们也可以编写一个bash脚本ms.sh来完成挂载和卸载操作,首先回到ubrfs16.04.4的上一级目录,并创建ms.sh文件,

$ cd ~/image

$ vim ms.sh

创建ms.sh文件内容如下:

#!/bin/bash
mnt ()
{
    echo "MOUNTING"
    sudo mount -t proc /proc ${2}proc
    sudo mount -t sysfs /sys ${2}sys
    sudo mount -o bind /dev ${2}dev
    sudo mount -o bind /dev/pts ${2}dev/pts      
    sudo chroot ${2}    
}
umnt ()
{
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev/pts
    sudo umount ${2}dev
}

if [ "$1" = "-m" ] && [ -n "$2" ];
then
    mnt $1 $2
    echo "mnt -m pwd"
elif [ "$1" = "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
    echo "mnt -u pwd"
else
    echo ""
    echo "Either 1'st, 2'nd or bothparameters were missing"
    echo ""
    echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ch-mount -m/media/sdcard/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi

上面脚本参考了https://blog.csdn.net/mountzf/article/details/51707853,做了一些修改,function的定义方式做了修改参考中的文件运行时一直报错,研究了一下,定义方式有点问题,毕竟没有专门学shell,基础太弱了,废了一些时间。
挂载根文件系统

$ sudo sh ms.sh -m /home/phy/image/ubrfs16.04.4/

其中-m表示挂载,-u表示卸载,后面的路径为解压获得的根文件系统所在的路径。chroot后

MOUNTING
root@phy-VM:/# ls
bin   dev  home  media    opt   root  sbin  sys  ubuntu-base-16.04.4-base-armhf.tar.gz  var
boot  etc  lib     mnt    proc  run   srv   tmp  usr

5.安装软件

首先更新源

apt update

更新完成,安装必要软件,这个根据需求安装就可以了。

apt install sudo
apt install language-pack-en-base
apt install ssh
apt install net-tools
apt install ethtool
apt install ifupdown
apt install iputils-ping
apt install rsyslog
apt install htop
apt install vi

6.用户配置

设置root密码

passwd root

创建用户

adduser phy

设置主机名称和本机IP

echo "i.MX6" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.1.1 i.MX6" >> /etc/hosts

7.配置串口和网络dhcp

首先配置串口,这里踩了几次坑,下载到板子上以后发现串口无法输出到超级终端,找了很多方案,终于试出来了,需要做一个链接才行。

ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttymxc0.service

由于我用的是i.mx6ul的平台,需要添加一个名为getty@ttymxc0.service的链接,连接到getty@.service服务。i.mx的平台是ttymxc0,其他平台的名字就不清楚了。如果确定不了名字,一个比较笨的方法就是先把制作好的根文件系统下载到开发板上,超级终端上查看打印出来的log,会在 waiting for device dev-ttymxc0.device 时出现 [Time out] ,Dependency failed for Serial Getty on ttymxc0. 由此就可以知道了。

配置DHCP,也可以等下载到开发板之后在配置,但启动时会很慢。

echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
/etc/init.d/networking restart

推出根文件系统

exit

卸载根文件系统

$ sudo sh ms.sh -u /home/phy/image/ubrfs16.04.4/

8.制作镜像

进入到根文件系统目录

$ cd ubrfs16.04.4

压缩生成.bz2的镜像

$ sudo tar jcf ubuntu-16.04.4-core-armhf.tar.bz2 *

压缩生成的.bz2镜像文件

$ ls
bin   dev  home  media  opt   root  sbin  sys  ubuntu-16.04.4-core-armhf.tar.bz2  var
boot  etc  lib   mnt    proc  run   srv   tmp  usr

9.烧写镜像

我采用的mfgtools来烧写u-boot、zImage、rootfs.tar.bz2文件。飞凌开发板提供的资料将烧写不同类型的系统写成不同类型的VB脚本文件。

首先将上面生成的压缩文件ubuntu-16.04.4-core-armhf.tar.bz2更名为rootfs.tar.bz2,

mv ubuntu-16.04.4-core-armhf.tar.bz2 rootfs.tar.bz2

并将文件转到宿主计算机,我用的win10系统。由于mfgtools只有windows版,所以想用它,就只能在windows下。我采用的是文件共享的方式将文件从虚拟机中拷贝到宿主计算机。

在windows系统下将rootfs.tar.bz2拷贝到 ../mfgtools/Profiles/Linux/OS Firmware/files/linux/console/目录下

然后运行脚本烧写到开发板。

附录

mfgtools工具中,ucl2.xml文件中有这么一段

<!-- burn rootfs -->
    <CMD state="Updater" type="push" body="$ mkfs.ext3 -E nodiscard /dev/mmcblk%mmc%p2">Formatting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
    <CMD state="Updater" type="push" body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
    <CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblk%mmc%p2" file="files/linux/console/<span style="color:#990000;background-color:rgb(102,255,255);">rootfs.tar.bz2</span>" ifdev="MX6UL MX7D">Sending and writting rootfs</CMD>
    <CMD state="Updater" type="push" body="frf">Finishing qt4 write</CMD>
    <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p2">Unmounting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

其中写了烧写rootfs文件的地址和文件名,也可修改它来更改下载镜像的名字。

参考:

1.定制适用于ARM平台的Ubuntu rootfs(根文件系统):https://blog.csdn.net/mountzf/article/details/51707853

2.移植ubuntu core到Arm开发板:https://blog.csdn.net/kickxxx/article/details/15341079
---------------------  
作者:Vincent_Penn  
来源:CSDN  
原文:https://blog.csdn.net/sinat_37141443/article/details/80882219  
版权声明:本文为博主原创文章,转载请附上博文链接!

移植ubuntu 16.04.4 到arm平台相关推荐

  1. Ubuntu 16.04 利用qemu模拟ARM开发板

    QEMU目前可以模拟vexpress Cortex A9四核处理器开发板. 环境配置:Ubuntu 16.04,Kernel 4.4.1 内容参考了: http://blog.csdn.net/lin ...

  2. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)

    Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题) 参考文章: (1)Ubuntu 16.04下用Wine运行的软件出现方块的解决思路( ...

  3. Ubuntu 16.04 LTS 64位下安装steam游戏平台

    此文章翻译来自外国的友人写的 原文链接:点我 这次安装比较有问题的就一点,steam平台下载的deb文件是32位的,而如果64位系统想安装的话,就会不断的提示libc6-i386 依赖关系出错.这是因 ...

  4. Ubuntu 16.04下Intel SGX驱动、平台软件和SDK安装

    本文作者:邱朋飞 本文介绍了在Ubuntu 16.04下安装Intel SGX驱动.平台软件和SDK的步骤.在安装过程中,参考了Intel提供的SGX驱动.平台软件和SDK安装文档,安装文档给出了更加 ...

  5. 机械革命X6Ti(skylake平台)安装ubuntu 16.04,完美解决无法关机挂起问题

    本本为机械革命X6Ti,安装ubuntu 16.04的时候卡在了ubuntu界面加载不进去.查了资料大致判断为独显(GTX965M)不兼容,于是在grub界面按E进入编辑模式,加入acpi=off(应 ...

  6. QT4.8.6的交叉编译 - 编译平台:Ubuntu 20.04 LTS,目标平台:linux/imx6ull

    版本记录表 开发环境 编译环境: 64位Ubuntu 20.04 LTS 交叉编译工具链: arm-linux-gnueabihf-GCC 4.9.1 本地编译器:gcc version 7.5.0 ...

  7. Ubuntu 16.04 安装使用最新版QQ 微信 (deepin-wine)

    Ubuntu 16.04 安装使用最新版QQ 微信 (deepin-wine) 技术简介 这次安装软件的并非官方的版本,而是在x86Ubuntu上基于wine安装的QQ和微信 2008年出现了一种名为 ...

  8. 在Ubuntu 16.04.3 LTS上运行go+https+json示例

    下面是我依据网上资料的实操过程,记录以作备忘.该示例给出了https通信并处理json文件的例子. 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY ...

  9. 在Ubuntu 16.04.3 LTS上安装Go 1.10

    升级Go新版本的原因 目前Ubuntu 16.04.3上最新的二进制Go版本是1.6.2,运行github上的一个大的go项目,发现context包在go版本1.6以上和以下的import方式有差异 ...

最新文章

  1. Ubuntu Server 更改hostname
  2. DOM方式动态加载数据
  3. Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
  4. ssh主机之间建立互信 --免密码
  5. payara 创建 集群_在Payara Server和GlassFish中配置密码
  6. Python爬虫之pyppeteer去除Chrome正受到自动测试软件的控制(反爬策略)
  7. VB.net SP1 的兼容性问题
  8. CentOS 6.5上安装Python 2.7.9
  9. 清除可恶的Search For ... [转载]
  10. win11怎么解除网络限制 windows11解除网络限制的设置方法
  11. python快速入门神器 知乎_Python爬虫偷懒神器!快速一键生成Python爬虫请求头
  12. DayDayUp:罗振宇—2018.12.31年终秀——《时间的朋友》跨年演讲重点概览【文字+视频】
  13. 物联网行业常用术语(含软件和硬件)
  14. android 模拟器 界面,详细了解雷电安卓模拟器的界面介绍让你更好的使用模拟器...
  15. ASCII、Unicode、UTF-8 和 Base64 等编码
  16. Linux——vi/vim文本编辑器、用户管理、关机重启的相关命令
  17. 【JavaWeb】JQuery实现广告显示和隐藏动画效果
  18. android判断通知铃声是否静音模式
  19. 【css】渐变-背景渐变、边框渐变、文字渐变
  20. 【01:转自知乎:关于 openSUSE 】

热门文章

  1. 微信支付开发(7) 告警通知
  2. 小杜 才疏学浅的医学数据分析资料
  3. 域控知识与安全02:初始访问
  4. 利用photoshop制作图片壁纸
  5. Babylonjs 最全demo集合 (内附源码)
  6. 珍爱生命,远离小米手机(上)
  7. solidworks绘制空间曲线的几种常见方法
  8. 财务自由之路:7年内赚到你的第一个1000万
  9. 手机上如何照出专业的证件照片
  10. 有什么好用的翻译外文工具?快来看看这个方法吧