Ubuntu-base18根文件系统的构建

前言

Petalinux工具可以完成fsbl、uboot、kernel的部署工作,但是基于Yocto搭建的根文件系统多少还是有些太过简陋了,很习惯于debian系的apt-get工具,所以一直在想着如何移植ubuntu根文件系统到zynq上。但是本文并不局限于zynq系统上,都是一些步骤性的内容,对于其他的嵌入式linux系统应该也适用。

准备

qemu挂载镜像

将根文件系统解压到某个文件夹中,sudo tar -xvf ubuntu-base-18.04.5-base-armhf.tar.gz -C <file name>,进入该文件夹。
拷贝qemu可执行文件至ubuntu-base根文件系统中。
sudo cp /usr/bin/qemu-arm-static usr/bin/
执行以下mount.sh脚本即可直接启动qemu挂载ubuntu-base根文件系统:

1
2
3
4
5
6
#!/bin/bash
sudo mount -t proc /proc $(pwd)/proc
sudo mount -t sysfs /sys $(pwd)/sys
sudo mount -o bind /dev $(pwd)/dev
sudo mount -o bind /dev/pts $(pwd)/dev/pts
sudo chroot $(pwd)

在命令行中exit即可退出qemu,再执行以下umount.sh卸载:

1
2
3
4
5
#!/bin/bash
sudo umount /$(pwd)/dev/pts
sudo umount /$(pwd)/dev
sudo umount /$(pwd)/sys
sudo umount /$(pwd)/proc

相关配置

设置软件源

因为ubuntu-base里几乎啥应用也没有,所以要从外部配置。
可以将ubuntu-base内的etc/apt/source.list拷贝出来,然后将http://ports.ubuntu.com/ubuntu-ports/全部替换为中科大源的链接http://mirrors.ustc.edu.cn/ubuntu-ports/
最后给sudo权限再将source.list再拷回ubuntu-base中即可。
回到qemu中执行apt update
再安装一些软件

1
2
3
4
5
6
7
8
9
10
apt install sudo
apt install vim
apt install net-tools
apt install ethtool
apt install ifupdown
apt install wireless-tools
apt install rsyslog
apt install htop
apt install iputils-ping
apt install udhcpc

这些软件看自己需求就好了

命令行串口配置

这是一个比较大的坑,ubuntu-base18里居然没有安装systemctl。
没有systemctl没有办法把命令行连接到硬件串口上。
apt install systemd
已知zynq的串口名为ttyPS0,别的开发板可能会不一样,可以看一眼设备树的bootarg里面是怎么写的,连接串口与命令行。
ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyPS0.service

网络配置

DNS

安装resolvconf
apt install resolvconf
打开配置文件
vim /etc/resolvconf/resolv.conf.d/head
添加DNS服务器配置

1
2
nameserver 61.139.2.69
nameserver 218.6.200.139

坐标四川,试了一下这两个DNS服务器ping起来确实快一点。
DNS服务器地址可以在这查https://ip.cn/dns.html
执行resolvconf -u,配置生效。

设置主机名称

1
2
3
echo "ZYNQ" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.1.1 ZYNQ" >> /etc/hosts

配置用户

设置root密码

passwd root

添加一个用户

adduser zynq
编辑etc/sudoers文件,找到root ALL=(ALL:ALL) ALL,在这行下面添加zynq ALL=(ALL:ALL) ALL

完成 测试

退出

1
2
exit
./umount.sh

将整个根文件系统拷贝至开发板的根文件系统中,启动系统。



此时sudo命令还不能被zynq用户运行,需要先使用root命令登陆系统然后修改sudo权限:
chmod u+s /usr/bin/sudo
logout退出登陆后用zynq用户登陆.
ls -l ../
如果发现zynq文件夹属于root用户组,就执行一下命令改变其用户组。
sudo chown -R zynq:zynq ../zynq