此文填上篇文章【移植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 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
现将文件拷贝到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目录下。
Ubuntu安装软件是通过名apt-get从网上下载安装的,为了制作成功的根文件系统能够联网,可以直接拷贝本机的dns配置文件到根文件系统的相应位置如所示:
root@jason-vm2:~/ubuntu-base# cp /etc/resolv.conf etc/resolv.conf
这里将修改软件源放到前面来说,相信大家用过全新安装的ubuntu虚拟机过后不作任何配置,用apt安装软件一定特别慢吧!那是因为默认的apt源服务器在国外,需要修改为国内的源,这里我们用清华大学的源。需要修改下解压后目录etc/apt/source.list文件,只需要将主机名全部替换成mirrors.tuna.tsinghua.edu.cn即可,修改内容如下所示:
接下来的配置都需要在以解压的目录作为根文件系统的环境下操作,先贴出挂载和解挂的脚本。
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:~#
执行上面的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:/#
设置root账户的密码,这里的密码一定要记住! 博主都忘了设置的啥了,后来进不去系统。。这个时候重新操作一遍设置下,然后放到板子上运行就OK了,博主仓库的默认密码为root。
root@jason-vm2:/# passwd root
New password:
Retype new password:
passwd: password updated successfully
root@jason-vm2:/#
root@jason-vm2:~# echo "jason416'"> /etc/hostname
root@jason-vm2:~# echo "127.0.0.1 localhost" > /etc/hosts
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的配置文件中,如果不开启的话得手动增加个用户。
针对iTop-4412精英版,其调试串口为ttySAC2,需要为其添加一个systemd的服务。这里只需要创建一个[email protected]的链接,链接到[email protected]即可,操作如下:
root@jason-vm2:~# ln -s /lib/systemd/system/getty\@.service /etc/systemd/system/getty.target.wants/getty\@ttySAC2.service
可以先把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
到这一步我们就移植好了基本的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:~#
TO BE CONTINUE…