前言

此文填上篇文章【移植Linux-5.4+内核到4412开发板移植】的坑,在前面的文章移植完uboot,内核后,接下来就是文件系统的移植了。博主的其他几篇博文里面也有自己构建根文件系统的教程,那样需要自己交叉编译busybox,各种库等等,对于4412开发板来说,资源完全足够,移植个ubuntu上去他不香吗?这里得感谢下讯为法师的文章-【I.MX6ULL终结者开发板移植ubuntu】,感谢大佬们知识的分享。

说明

大家不要看着ubuntu就怕了,其实移植里面ubuntu是相对最简单,步骤最少的了。Ubuntu官方针对不同的CPU架构提供相应的ubuntu base根文件系统,有amd64(64位X86)、armhf、i386(32位X86)、powerpc、ppc64el等,我们只需要修改下相关配置下即可放到板子上运行。

下面是移植好的仓库地址,欢迎fork、start~
https://github.com/jason416/ubuntu-base-20

一、下载ubuntu-base

这里我们直接用目前最新的版本-Ubuntu Base 20.04 LTS (Focal Fossa)。首先进入ubuntu官方网站所提供的链接:
http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/。针对ITOP-4412开发板,为ARM Cortex-A9 32bit SOC,我们需要选择armhf的压缩包,如下图所示:
在这里插入图片描述

二、安装工具

QEMU是专门模拟不同机器架构的软件,在ubuntu中对其支持良好,若需要挂载识别ubuntu armhf版本的文件,必须安装qemu-user-static工具,安装方法如下:

jason@jason-vm2:~$ sudo apt install qemu-user-static 

三、配置

1. 解压

现将文件拷贝到ubuntu虚拟机,然后切换到root账户,将步骤一中的压缩包解压,示例如下:

root@jason-vm2:~# ls
ubuntu-base-20.04-base-armhf.tar.gz
root@jason-vm2:~# mkdir ubuntu-base
root@jason-vm2:~# cd ubuntu-base/
root@jason-vm2:~/ubuntu-base# tar -xvf ../ubuntu-base-20.04-base-armhf.tar.gz 
...
var/mail/
var/opt/
var/run
var/spool/
var/spool/mail
var/tmp/
root@jason-vm2:~/ubuntu-base# 
root@jason-vm2:~/ubuntu-base# ls
bin   dev  home  media  opt   root  sbin  sys  usr
boot  etc  lib   mnt    proc  run   srv   tmp  var
root@jason-vm2:~/ubuntu-base#  cp /usr/bin/qemu-arm-static usr/bin/

Note:最后一步需要将qemu-arm-static拷贝到解压后的usr/bin目录下。

2. 配置DNS

Ubuntu安装软件是通过名apt-get从网上下载安装的,为了制作成功的根文件系统能够联网,可以直接拷贝本机的dns配置文件到根文件系统的相应位置如所示:

root@jason-vm2:~/ubuntu-base# cp /etc/resolv.conf etc/resolv.conf

3. 修改软件源

这里将修改软件源放到前面来说,相信大家用过全新安装的ubuntu虚拟机过后不作任何配置,用apt安装软件一定特别慢吧!那是因为默认的apt源服务器在国外,需要修改为国内的源,这里我们用清华大学的源。需要修改下解压后目录etc/apt/source.list文件,只需要将主机名全部替换成mirrors.tuna.tsinghua.edu.cn即可,修改内容如下所示:
在这里插入图片描述

4. 其他配置

说明

接下来的配置都需要在以解压的目录作为根文件系统的环境下操作,先贴出挂载和解挂的脚本。

  • 挂载
root@jason-vm2:~# cat mount.sh 
#!/bin/bash

echo "Mounting file system"

mount -t proc	/proc	 /root/ubuntu-base/proc
mount -t sysfs	/sys	 /root/ubuntu-base/sys
mount -o bind	/dev	 /root/ubuntu-base/dev
mount -o bind	/dev/pts /root/ubuntu-base/dev/pts

echo "Change root"

chroot  /root/ubuntu-base/
root@jason-vm2:~# 
  • 解挂载
root@jason-vm2:~# cat umount.sh 
#!/bin/bash

echo "Umounting file system"

umount /root/ubuntu-base/proc
umount /root/ubuntu-base/sys
umount /root/ubuntu-base/dev/pts
umount /root/ubuntu-base/dev
root@jason-vm2:~# 

4.1挂载并chroot

执行上面的mount.sh脚本,操作如下:

root@jason-vm2:~# ./mount.sh 
Mounting file system
Change root
root@jason-vm2:/# ls
bin   dev  home  media  opt   root  sbin  sys  usr
boot  etc  lib   mnt    proc  run   srv   tmp  var
root@jason-vm2:/# 

4.2 设置用户和账户密码

设置root账户的密码,这里的密码一定要记住! 博主都忘了设置的啥了,后来进不去系统。。这个时候重新操作一遍设置下,然后放到板子上运行就OK了,博主仓库的默认密码为root

root@jason-vm2:/# passwd root
New password: 
Retype new password: 
passwd: password updated successfully
root@jason-vm2:/# 

4.3 设置主机名和host

root@jason-vm2:~# echo "jason416'"> /etc/hostname
root@jason-vm2:~# echo "127.0.0.1 localhost" > /etc/hosts

4.4 安装常用命令和软件

root@jason-vm2:~# export LC_ALL=C
root@jason-vm2:~# apt update
root@jason-vm2:~# apt install sudo
root@jason-vm2:~# apt install language-pack-en-base
root@jason-vm2:~# apt install ssh
root@jason-vm2:~# apt install net-tools
root@jason-vm2:~# apt install ethtool
root@jason-vm2:~# apt install ifupdown
root@jason-vm2:~# apt install iputils-ping
root@jason-vm2:~# apt install rsyslog
root@jason-vm2:~# apt install htop
root@jason-vm2:~# apt install vim
root@jason-vm2:~# chmod 0400 /etc/ssh/ssh_host_*key
root@jason-vm2:~# echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config

Note: chmod操作是设置SSHD的本机私钥,必须设置其他用户不可修改,否则SSHD会启动不成功。echo操作是把运行root账户登录写到SSHD的配置文件中,如果不开启的话得手动增加个用户。

4.5 配置串口终端

针对iTop-4412精英版,其调试串口为ttySAC2,需要为其添加一个systemd的服务。这里只需要创建一个getty@ttySAC2.server的链接,链接到getty@.service即可,操作如下:

root@jason-vm2:~# ln -s /lib/systemd/system/getty\@.service /etc/systemd/system/getty.target.wants/getty\@ttySAC2.service 

4.6 配置网络

可以先把IP配置好,也可以等启动之后再配置,但ubuntu启动过程还是挺慢的,先配置好较好,配置如下:

root@jason-vm2:~# echo auto eth0 > /etc/network/interfaces.d/eth0
root@jason-vm2:~# echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0

4.7 退出并解挂

到这一步我们就移植好了基本的ubuntu文件系统,可以退出并解挂了,如下所示:

root@jason-vm2:/# exit
exit
root@jason-vm2:~# ./umount.sh 
Umounting file system
root@jason-vm2:~# ls
mount.sh  ubuntu-base  umount.sh
root@jason-vm2:~# 

四、开发板验证

这里展示下效果图,如下所示:
在这里插入图片描述

1. NFS方式验证

2. EMMC方式验证

3. squahfs方式验证

TO BE CONTINUE…

Logo

更多推荐