i.MX6UL #0 - ubuntu根文件系统的修改与配置(从零开始的掉头发生活)

里先森:此篇为转载文章,原文来自:https://blog.csdn.net/sinat_37141443/article/details/80882219
已在此基础上进行Ubuntu 18.04.2移植,并加入部分笔记
注意: 本篇较为散乱,建议查看 基于ubuntu-base进行根文件系统的修改与打包_linux_里先森-CSDN博客

入门级文档。

由于工作需求,开始尝试移植ubuntu 16.04 根文件系统到i.MX6UL平台。以前主要从事一些单片机方面的开发,开始做linux上的开发也是有点摸不着头脑,到处搜索,尝试,在此做一下开发笔记。

开发环境:VMware Workstation 14 Player

操作系统:ubuntu 18.04.2 LTS

开发板:飞凌 OKMX6UL -C2 V1.0 ( i.MX6UL ) 

里先森:以上修改为我测试时的版本,没有什么差别,以下懒得改了,原博文使用的时ubuntu16.04.4的版本,我使用的是Ubuntu 18.04.2的版本(是的,和我开发环境上操作系统版本号一样,但是是用的armhf版本)

1.下载根文件系统

首先创建保存路径

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

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

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

,发现文件命名方式和以前不一样了,于是我选择了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是一个专门模拟不同机器架构的软件,在ubuntu中对其支持良好,若需要挂载ubuntu armhf版本的文件,必须安装qemu-user-static工具
QMEU wiki : https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap

安装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源,我选择的是中科大的源

里先森:实验过阿里的源,发现不支持armhf,apt更新失败,建议使用中科大的源

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

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  

里先森:为了之后使用insmod和lsmod,还需要
apt install kmod

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/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

由于我用的是i.mx6ul的平台,需要添加一个名为[email protected]的链接,连接到[email protected]服务。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文件中有这么一段

	
<CMD state=“Updater” type=“push” body="$ mkfs.ext3 -E nodiscard /dev/mmcblk%mmc%p2">Formatting rootfs partitionCMD>
<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/color:#990000;background-color:rgb(102,255,255);”>rootfs.tar.bz2span>” ifdev=“MX6UL MX7D”>Sending and writting rootfsCMD>
<CMD state=“Updater” type=“push” body=“frf”>Finishing qt4 writeCMD>
<CMD state=“Updater” type=“push” body="$ umount /mnt/mmcblk%mmc%p2">Unmounting rootfs partitionCMD>
<CMD state=“Updater” type=“push” body="$ echo Update Complete!">DoneCMD>
其中写了烧写rootfs文件的地址和文件名,也可修改它来更改下载镜像的名字。


解压

当后续需要从已压缩好的 tar.bz2 根文件解压到宿主机重新挂载的时候,使用下面的命令解压

sudo tar xvf 你压缩包名字 

里先森:后续添加图形系统,校准触摸屏
https://blog.csdn.net/sements/article/details/88108040

参考:

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

2.移植ubuntu core到Arm开发板:https://blog.csdn.net/kickxxx/article/details/15341079

你可能感兴趣的:(嵌入式,Linux,i.MX6)