本帖最后由 Alexan 于 2025-3-28 16:01 编辑
领航者ZYNQ移植Ubuntu桌面系统
我们领航者开发板出厂提供的Linux系统是使用petalinux编译的一个基本的系统,很多Linux社区的优势大家可能体会不到,比如像Ubuntu系统那样直接使用apt命令下载需要的软件包。于是,带有优美桌面环境的Ubuntu系统它来了,我们把它搬上了领航者开发板,大家可以利用apt自由下载软件使用,避免麻烦的软件移植过程;甚至可以使用gcc直接在开发板上编译你的代码,避免在虚拟机中交叉编译;看视频玩游戏自然也不在话下。
接下来将详细教大家怎么从头开始在领航者开发板上移植Ubuntu系统。(注:本教程跳过了内核镜像等启动文件的构建,如果不会编译镜像请参考正点原子领航者嵌入式Linux开发指南文档)
1.1 制作前准备工作1)、一款ZYNQ开发板:本次以领航者ZYNQ-7020开发板来演示; 2)、一块正点原子RGB LCD屏幕; 2)、一台运行Ubuntu系统的计算机(或者虚拟机),要能联网; 3)、一张SD卡和一个读卡器;
1.2 制作SD启动卡参考领航者ZYNQ嵌入式Linux开发指南第六章制作SD启动卡部分,制作一张空白的SD启动卡并分区。这里移植带有桌面的Ubuntu系统占用空间较大,所以建议第二个分区预留较大空间。
1.3 下载Ubuntu根文件系统压缩包由于领航者开发板是ARM32架构,所以这里选择下载的压缩包是armhf,如下图:
下载完成后解压到SD启动卡的第二个分区,并拷贝领航者出厂镜像(可从资料盘下载)的三个启动文件到第一个分区:
这个时候插入SD卡已经可以启动系统了,但是只能使用sh作为初始进程,并不是一个常用的Ubuntu系统,需要手动修改。
1.4 系统启动前配置
1.4.1 修改出厂内核驱动源码(5.4.0版本)这里为了后面显示环境的配置,需要对内核fb驱动进行部分修改,建议提前修改好并替换启动文件中的内核,避免后续再关机操作。 修改内核源码中drivers/video/fbdev/core/fbmem.c文件,在1102行添加return 0;
重新编译内核生成zImage,替换原来启动文件中的zImage,并拷贝到SD启动卡的第一个分区中。
1.4.2 安装systemd初始进程安装初始进程之前首先要对板子里面的文件进行一些修改,主要是修改APT下载源和DNS配置,方便我们后面chroot以及联网下载。 在虚拟机下新建一个文件sources.list文件,内容如下: 再新建一个resolv.conf文件,内容如下: nameserver8.8.8.8 nameserver8.8.4.4 然后把这两个文件拷贝到刚刚解压的根文件系统指定路径下:
这个时候板子还无法直接联网下载软件,所以需要依赖虚拟机chroot来下载一些必要的软件包,chroot切换到刚刚解压的根文件系统,然后执行apt update:
接下来执行apt install安装systemd:
下载过程需要选择时区,这里选择亚洲/上海:
注:如果出现下图错误,执行apt update –-fix-missing后再重新下载。 确认/lib/systemd/systemd文件存在说明已经下载好了,接下来建立一个启动进程的链接文件指向systemd:
到这里Ubuntu系统中用于初始化和管理系统服务的核心进程就下载完成了。
1.4.3 安装调试必要软件apt install vim net-tools iputils-ping isc-dhcp-client bash-completion sudo
1.4.4 设置host及root密码vim/etc/hosts #修改hosts文件添加如下内容
echo"zynq-ubuntu" > /etc/hostname
passwd root #这里设置root密码,要输入两次
1.4.5 开启串口服务领航者开发板默认PS端串口是ttyPS0,所以这里要特殊设置一下开启对应串口服务: - systemctl enable getty\@ttyPS0.service
复制代码
配置完成后ctrl+d可快速退出chroot,然后umount卸载启动卡。插入SD卡到开发板,拨码开关拨到SD卡启动模式,插入PS串口,上电。 启动到zynq-ubuntulogin,输入用户名root,密码是刚刚设置的,完成后进入系统如下:
注:登录之前可能会出现串口打印错乱的问题,这个时候关闭串口软件重新打开,再按回车就会恢复正常。 推荐大家直接使用root登录,可避免后续开发各种权限问题(由于使用root登录,后续所有命令都没有加sudo执行)。到这里已经成功进入Ubuntu系统了,接下来就可以利用Ubuntu系统开源软件包的优势,联网直接下载所需要的工具,但在这之前要先配置网络服务!
1.5 配置网络服务并下载软件进入系统后插入网线到PS网口,并在开发板中配置DNS和DHCP相关服务。 - vim /etc/systemd/resolved.conf #修改dns服务配置文件如下图
复制代码
修改完成后保存文件,输入命令systemctl restart systemd-resolved重启服务。 然后按照下图步骤首先打开PS网口,获取IP地址,获取成功后可以ping百度看看能不能通。
能ping通说明已经可以正常上网。 然后输入命令unminimize自动下载必要软件,时间较长,等待下载完成后再继续往下操作。
1.6 安装配置桌面环境首先我们要先选择窗口协议,在Linux环境中想使用桌面,目前最常用的窗口协议是X11和wayland,我们选择较为古老的X11协议。 其次还需要一个显示管理器,在我们虚拟机中常用的有lightdm、gdm3等软件,但是这里我们都不推荐使用,因为占用资源较多,领航者ZYNQ作为一款ARM端拥有双核A9的芯片,实在是有点为难。我们选择轻量级的显示管理器slim。 最后是桌面环境软件,Ubuntu系统可以选择的桌面环境软件还是比较多的,比如我们自己虚拟机的Ubuntu系统使用的是Gnome,这是一款设计非常不错的桌面软件,但是我们不建议使用,理由同上。我们仍然选择较为轻量级的桌面环境xfce4。 确定完了所需软件以后,我们需要确定用哪个接口显示桌面,领航者开发板上有HDMI和RGB LCD两种显示方式,我们这里采用RGB LCD显示,用排线连接好LCD屏幕。 综上,我们启动的桌面环境至少需要X11串口协议+slim显示管理器+xfce4桌面软件,接下来开始下载安装: - apt install xorg xserver-xorg slim xfce4
复制代码
这里需要下载工具较多,会占用较多内存(约1.5G左右),时间也较长。 中途可能会多次出现下图所示默认显示管理器选择,这里都选择slim。
等待下载完成后,首先我们要卸载其他桌面,防止出现选择错误,输入如下命令卸载gnome桌面相关工具: 接下来需要对桌面显示进行配置,首先创建修改/etc/X11/xorg.conf文件,写入如下内容后保存: Section"Device" Identifier "FB" Driver "fbdev" Option "fbdev" "/dev/fb0" EndSection 然后输入命令systemctl restart slim。这个时候LCD屏幕上就会显示登录界面,一个图形化界面,大大的Login,这是slim显示管理器提供的登录界面。插入键盘输入用户名root和自己设置的密码后即可登录到桌面环境,若无法登录可参考1.8.2解决方案。插入鼠标可以控制指针,也可以触屏控制指针。 到这里一个完整的桌面环境就安装完成了,在我们刚刚下载各种软件的过程中,包含了网络服务的配置,所以后续插入网线后不用再使用命令去使能网口和DHCP了,系统会自动获取IP地址。 有了网络和apt工具,利用Ubuntu开源软件社区的优势,大家可以自由探索Ubuntu系统了!
1.7 其他外设配置
1.7.1 领航者开发板音频配置移植好Ubuntu系统后,需要修改音频配置文件才能正常使用音频功能。创建修改/etc/asound.conf文件,添加如下内容: defaults.pcm.rate_converter"linear"
pcm.mmap0{ type mmap_emul
slave { pcm "hw:0,0" } }
pcm.!default{ type plug
slave { pcm mmap0 } }
ctl.!default{ type hw card 0 }
ctl.mixer0{ type hw card 0 }修改后保存文件重启开发板,可使用aplay播放.wav格式音频进行测试。找不到aplay命令怎么办?apt install alsa-utils下载即可。
1.7.2 U盘不能自动挂载?使用桌面系统,插入U盘到USB接口后使用df -Th命令发现并没有挂载,这是正常现象。因为在使用桌面系统时,桌面环境自带了存储设备挂载管理等功能,插入U盘后会在桌面UI显示,鼠标双击即可挂载。
1.7.3 网口配置桌面系统中使用systemd管理网络相关服务,插入网线到网口后会自动检测并动态获取IP地址,PS或PL端网口皆可。
1.8 问题及解决方法由于上述操作步骤大部分是笔者自己探索的结果,期间也出现了一些奇怪的问题,这里总结一下并附上解决方法。
1.8.1 重启开发板后串口错乱且登录失败问题问题描述:重启开发板后,串口打印到zynq-login,这时候输入正确的用户名和密码后会出现多余字符且显示登录失败,即使关闭串口重新打开也无法解决。如下图:
(不过这里多余的字符不一定是1,可能是因为笔者这里的密码是123) 原因分析:这里笔者推测是由于在下载桌面环境软件和unminimize过程中,重复配置了串口服务,导致多个登录相关服务重复启动,下述解决方案也是笔者自己探索的,如有更好的解决方案大家可以自由尝试解决。
解决方案:这个时候由于无法登录,串口已经不能使用了,于是关机拔出SD启动卡,插入读卡器连接到虚拟机中,利用chroot进入根文件系统中,然后输入命令systemctl disable getty@ttyPS0.service。再插入SD启动卡重新启动开发板即可恢复。
1.8.2 图形化登录界面无法进入桌面问题描述:在图形化登录界面输入正确用户名和密码后,屏幕出现短暂黑屏后又重新回到登录界面,重复输入用户名和密码无法解决。 原因分析:系统中可能存在多个桌面软件,登录界面完成进入桌面后选择了错误的桌面导致启动失败,比如选择了gnome错误配置导致启动失败。 解决方案:在串口终端中卸载多余的桌面软件,仅保留我们推荐的xfce4作为桌面UI即可。卸载方法前文有描述。
1.8.3 没有LCD屏幕想用HDMI显示?解决方案:买个LCD屏幕 
or修改软件配置。修改/etc/X11/xorg.conf文件,Option "fbdev""/dev/fb0"这一行fb0改为fb1即可,保存文件然后输入命令systemctl restart display-manager或者重启开发板即会在HDMI显示登录界面。这里笔者使用正点原子RGB LCD屏幕实测效果优于HDMI显示,且带有触屏操作,所以在我们提供的领航者Ubuntu镜像中,默认选择的是LCD屏幕显示。
1.8.4 配置桌面中文语言显示解决方案:安装完整的locales,然后dpkg配置中文语言zh_CN.UTF-8。 按照上图设置完成后重启开发板即可。
|