Ubuntu-base18根文件系统的构建
前言
Petalinux工具可以完成fsbl、uboot、kernel的部署工作,但是基于Yocto搭建的根文件系统多少还是有些太过简陋了,很习惯于debian系的apt-get工具,所以一直在想着如何移植ubuntu根文件系统到zynq上。但是本文并不局限于zynq系统上,都是一些步骤性的内容,对于其他的嵌入式linux系统应该也适用。
准备
- 一个linux主机环境,这里是ubuntu16.04,需安装qemu工具
sudo apt install qemu-user-static
。 - Ubuntu-base镜像,这里用中科大镜像站的镜像https://mirrors.ustc.edu.cn/ubuntu-cdimage/ubuntu-base/releases/18.04.5/release/,可以用wget工具下载。
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 |
|
在命令行中exit
即可退出qemu,再执行以下umount.sh卸载:
1 |
|
相关配置
设置软件源
因为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 |
|
这些软件看自己需求就好了
命令行串口配置
这是一个比较大的坑,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
安装resolvconfapt install resolvconf
打开配置文件vim /etc/resolvconf/resolv.conf.d/head
添加DNS服务器配置
1 |
|
坐标四川,试了一下这两个DNS服务器ping起来确实快一点。
DNS服务器地址可以在这查https://ip.cn/dns.html。
执行resolvconf -u
,配置生效。
设置主机名称
1 |
|
配置用户
设置root密码
passwd root
添加一个用户
adduser zynq
编辑etc/sudoers
文件,找到root ALL=(ALL:ALL) ALL
,在这行下面添加zynq ALL=(ALL:ALL) ALL
。
完成 测试
退出
1 |
|
将整个根文件系统拷贝至开发板的根文件系统中,启动系统。
此时sudo命令还不能被zynq用户运行,需要先使用root命令登陆系统然后修改sudo权限:chmod u+s /usr/bin/sudo
logout
退出登陆后用zynq用户登陆.ls -l ../
如果发现zynq文件夹属于root用户组,就执行一下命令改变其用户组。sudo chown -R zynq:zynq ../zynq