瑞米派Ubuntu系统移植指南-米尔RemiPi

1.概述

Linux系统平台上有许多开源的系统构建框架,这些框架方便了开发者进行嵌入式系统的构建和定制化开发,目前比较常见的有Buildroot, Yocto, OpenEmbedded等等。

同时更多的传统的桌面系统也加入到嵌入式环境体系中,如Ubuntu,debian等,为嵌入式提供更方便实用的系统。本文主要介绍基于ubuntu22.04 core和米尔核心板定制一个完整的嵌入式ubuntu22.04系统的完整流程,其中包括开发环境的准备,ubuntu22.04系统的获取与移植, LXDE轻量级桌面管理等。

本文档并不包含Linux BSP系统相关基础知识的介绍,将直接使用米尔发布的myir-image-full提供的的BSP。如需了解BSP文件的制作请查看《Remi Pi_Linux软件开发指南

1.1. 软件资源

Remi Pi使用的Ubuntu系统基于ubuntu-base-22.04-base-arm64.tar.gz版本制作(下载地址如下),在此版本基础上添加了丰富的系统资源和其他软件资源。

Ubuntu Base 22.04.2 LTS (Jammy Jellyfish)

表1-1.资源列表

功能项

文件名

Ubuntu22.04 base

ubuntu-base-22.04-base-arm64.tar.gz

启动管理

Xinit

网络管理

network-manager

network-manager-gnome

⾳频管理

xine

视频播放器

xine

注意:米尔提供的ubuntu系统的登录名为:root 密码为:123456

2. 开发环境准备

基于ubuntu base系统在开发过程中所需的一些软硬件环境,包括必要的开发主机环境,必备的软件工具,代码和资料的获取等,具体的准备工作下面将进行详细介绍。

2.1. 开发主机环境

本节将介绍如何搭建适用于瑞萨Remi Pi平台的开发环境,该平台使用的RZ/G系列处理器是多核异构的处理器,RZ/G2L拥有两个2个ARM Cortex A53。通过阅读本章节,您将了解相关硬件工具,软件开发调试工具的安装和使用。并能快速的搭建相关开发环境,为后面的开发和调试做准备。

  • 主机硬件

整个SDK包项目的构建对开发主机的要求比较高,要求处理器具有双核以上CPU,8GB以上 内存,100GB硬盘或更高配置。可以是安装Linux系统的PC或服务器,也可以是运行Linux系统的虚拟机,Windows系统下的WSL2等。

  • 主机操作系统

一般选择在安装Fedora, openSUSE, Debian, Ubuntu, RHEL或者 CentOS等Linux发行版的本地主机上进行,这里推荐的是Ubuntu22.04 64bit桌面版系统,后续开发也是以此系统为例进行介绍。

  • 安装必备软件包

基础软件包请查看《Remi Pi_Linux软件开发指南》进行安装,这里只需安装一个软件包即可。

PC@system1:~$  sudo apt-get update
PC@system1:~$  sudo apt-get install qemu-user-static

3. Ubuntu 22.04 文件系统移植

3.1. 简介

ubuntu-base 是Ubuntu官方构建的ubuntu最小文件系统,包含debain软件包管理器,基础包大小通常只有几十兆,其背后有整个ubuntu软件源支持,ubuntu软件一般稳定性比较好,基于ubuntu-base按需安装Linux软件,深度可定制等,常用于嵌入式rootfs构建。

嵌入式常见的几种文件系统构建方法:busybox、yocto、buildroot,但Ubuntu方便,强大的包管系统,有强大的社区支持,可以直接apt-get install来安装新软件包。本文介绍了如何基于Ubuntu-base构建完整的ubuntu 系统。ubuntu支持很多架构,arm、X86、powerpc、ppc等,本文主要基于arm为例,构建一个较为完整的ubuntu系统。

3.2. 获取源码

我们提供两种获取源码的方式,一种是直接从米尔光盘镜像04-sources目录中获取压缩包,另外一种是使用wget获取位官方的上源码进行构建,请用户根据实际需要选择其中一种进行构建。

3.2.1. 通过wget获取源码

具体操作方法如下:

PC@system1:~$ sudo wget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-arm64.tar.gz

创建rootfs目录,然后将下载的ubuntu-base-22.04-base-arm64.tar.gz压缩包解压到rootfs目录下:(用户请根据自己实际路径和目录操作)

PC@system1:~$ mkdir rootfs
PC@system1:~$ tar -xf ubuntu-base-22.04.1-base-arm64.tar.gz -C rootfs/

解压出的目录内容如下:

PC@system1:~$ tree -d -L 1 rootfs
ubuntu_rootfs
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var

3.3. 准备chroot环境

3.3.1. 安装模拟器

PC@system1:~$ cp /usr/bin/qemu-aarch64-static ./rootfs/usr/bin/

(如果主机没有安装qemu-user-static工具包,可输入以下命令安装工具包)

PC@system1:~$ sudo apt install qemu-user-static

拷贝主机 DNS 配置文件到 arm 架构 Ubuntu 文件系统内(必须拷贝,否则可能会导致下面操作无法进行)。

PC@system1:~$ cp /etc/resolv.conf ./rootfs/etc/resolv.conf

3.3.2. 制作挂载脚本

将下列脚本代码拷贝到ch-mount.sh文件中,并改变权限(777)为可执行。

PC@system1:~$  vi ch-mount.sh
#!/bin/bash
function mnt() {
echo "MOUNTING"sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo mount -o bind /dev/pts ${2}dev/pts        
sudo chroot ${2}
}
function umnt(){
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or bothparameters were missing"
echo ""
echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m/media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi

3.4. 安装包文件

3.4.1. 挂载系统

首先使用ch-mount.sh将ubuntu文件系统挂载。

PC@system1:~$ ./ch-mount.sh -m ./rootfs/
MOUNTING
root@system1:/#
root@system1:/# ls
bin dev  home  media  opt   root  sbin  sys  usr
boot etc  lib   mnt    proc  run   srv   tmp  var

挂载成功即可配置ubuntu文件系统与安装一些必要的软件。

3.4.2. 基础包安装

可根据需要自行安装下列包文件,推荐全部安装。(请按照顺序安装,避免安装时出错)

root@system1:/# chmod 777 /tmp         (避免update时失败)
root@system1:/# apt update
root@system1:/# apt-get install language-pack-zh-hant language-pack-zh-hans
root@system1:/# apt install language-pack-en-base
root@system1:/# apt install dialog rsyslog
root@system1:/# apt install systemd avahi-daemon avahi-utils udhcpc ssh(必备安装)
root@system1:/# apt install sudo
root@system1:/# apt install vim
root@system1:/# apt install net-tools
root@system1:/# apt install ethtool
root@system1:/# apt install ifupdown
root@system1:/# apt install iputils-ping
root@system1:/# apt install htop
root@system1:/# apt install lrzsz
root@system1:/# apt install gpiod
root@system1:/# apt install wpasupplicant
root@system1:/# apt install kmod
root@system1:/# apt install iw
root@system1:/# apt install usbutils
root@system1:/# apt install memtester
root@system1:/# apt install alsa-utils
root@system1:/# apt install ufw
root@system1:/# apt install psmisc

添加log,用户调试ubuntu系统的调试

root@system1:/# touch /var/log/rsyslog
root@system1:/# chown syslog:adm /var/log/rsyslog
root@system1:/# chmod 666 /var/log/rsyslog
root@system1:/# systemctl unmask rsyslog
root@system1:/# systemctl enable rsyslog

安装网络和语言包支持

root@system1:/# apt-get install synaptic
root@system1:/# apt-get install rfkill
root@system1:/# apt-get install network-manager
root@system1:/# apt install -y --force-yes --no-install-recommends fonts-wqy-microhei
root@system1:/# apt install -y --force-yes --no-install-recommends ttf-wqy-zenhei

3.4.3. 桌面系统的安装

LXDE桌面系统安装

root@system1:/# apt-get install xinit
root@system1:/# apt-get install lxde

浏览器和音频安装

root@system1:/# sudo apt install epiphany-browser
root@system1:/# sudo apt install xine-ui

3.4.4. 创建用户

设置root密码: 123456

root@system1:/# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

可删除root用户密码登录

root@system1:/# passwd -d root

一定要执行下面的指令,不然会sudo报错sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

root@system1:/# chown root:root /usr/bin/sudo
root@system1:/# chmod 4755 /usr/bin/sudo

创建一个用户名为:myir 密码为:123456

root@system1:/# adduser myir
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "zh_CN.UTF-8",
LC_IDENTIFICATION = "zh_CN.UTF-8",
LC_TELEPHONE = "zh_CN.UTF-8",
LC_NUMERIC = "zh_CN.UTF-8",
LC_ADDRESS = "zh_CN.UTF-8",
LC_NAME = "zh_CN.UTF-8",
LC_MONETARY = "zh_CN.UTF-8",
LC_PAPER = "zh_CN.UTF-8",
LC_MEASUREMENT = "zh_CN.UTF-8",
LANG = "zh_CN.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Adding user `myir' ...
Adding new group `myir' (1000) ...
Adding new user `myir' (1000) with group `myir' ...
Creating home directory `/home/myir' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for myir
Enter the new value, or press ENTER for the default
Full Name []: cy  
Room Number []: 604
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y

设置权限

sudo vi /etc/sudoers
root ALL=(ALL:ALL) ALL
myir(根据自己添加的用户来添加) ALL=(ALL:ALL) ALL

上面添加用户的时候,中间出现的警告可使用下列命令:

root@system1:/# export LC_ALL=C

3.4.5. 其他配置

设置hosts和主机名称,添加127.0.0.1 myir

root@system1:/# vi /etc/hosts

清空hostname文件内容,添加myir(根据实际添加的用户名来添加)

root@system1:/# vi /etc/hostname

修改passwd文件

root@system1:/# vi /etc/passwd
找到这一行:_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
修改为:_apt:x:0:65534::/nonexistent:/usr/sbin/nologin

创建链接文件(一定要执行,不然执行二进制可执行程序时会报错)

root@system1:/# ln -s /lib /lib64

配置网卡接口,添加如下内容

root@system1:/# vi /etc/network/interfaces
auto eth0
iface eth0 inet dhcp

3.4.6. 卸载系统

以上步骤操作完成后即可卸载系统。直接在系统中输入exit退出系统,并使用命令来卸载

root@system1:/# exit
exit
PC@system1:~$
PC@system1:~$ ./ch-mount.sh -u ubuntu-rootfs/
UNMOUNTING

至此ubuntu 文件系统已经配置完成。

3.5. ubuntu系统打包

3.5.1. 制作ext4格式文件

根据以上步骤已经制作好了ubuntu-rootfs文件系统,此时要将它制作成.ext4格式的文件,用于刷写到开发板中。

PC@system1:~$ dd if=/dev/zero of=ubuntu22.04.ext4  bs=1M  count=3300

请用户根据实际情况来决定大小,这里以3.3G大小举例制作。

PC@system1:~$ mkfs.ext4 ubuntu22.04.ext4

创建一个临时目录temp,然后将ubuntu22.04.ext4文件挂载

PC@system1:~$ mkdir temp
PC@system1:~$ sudo mount ubuntu22.04.ext4 temp

将ubuntu-rootfs目录中的内容复制到挂载的文件系统中,然后卸载。

PC@system1:~$ sudo cp -avrf ubuntu-rootfs/* temp
PC@system1:~$ sudo umount temp

3.5.2. 制作SD启动镜像

先将下载资源的03_Tools/myir tools目录下的RemiPi_SDUpdate.tar.bz2解压到虚拟机中(用户请根据自己实际情况解压)

PC@system1:~$ tar -xf RemiPi_SDUpdate.tar.bz2
PC@system1:~$ cd RemiPi_SDUpdate/renesas-sd
PC@system1:~/RemiPi_SDUpdate/renesas-sd$ ls
image README.md   rzg2_bsp_scripts  fat16     output  rootfs

把打包好的ubuntu22.04文件系统替换到rootfs/home/root/g2l_images目录

PC@system1:~/RemiPi_SDUpdate/renesas-sd/rootfs/home/root/g2l_images$ tree -L 1
.
├── DDR_1G
├── Image
├── Manifest
├── mys-rzg2l-sdcard.dtb
├── mys-rzg2l-wifi.dtb
└── ubuntu22.04.ext4
1 directory, 5 files

修改Manifest文件

PC@system1:~/RemiPi_SDUpdate/renesas-sd/rootfs/home/root/g2l_images$ cat Manifest
bl2file="bl2_bp-myir-remi-1g_pmic.bin"
fipfile="fip-myir-remi-1g_pmic.bin"
imagefile="Image"
dtbfile="*.dtb"
rootfsfile="ubuntu22.04.ext4"
ledname="162"

修改自己实际路径的配置,这个请参考《RemiPi_Linux 软件开发指南》4.3章节,修改myir_config.ini配置文件,将里面的路径修改成自己实际的路径。

最后进入到下面目录,执行制作镜像的脚本即可。

PC@system1:~/RemiPi_SDUpdate/renesas-sd$ cd rzg2_bsp_scripts/image_creator/
PC@system1: ~/RemiPi_SDUpdate/renesas-sd/rzg2_bsp_scripts/image_creator$ ./create_image.sh myir_config.ini

烧录步骤请参考《RemiPi_Linux 软件开发指南》中4.2章节。

4. 认识LXDE

4.1. LXDE介绍

LXDE是一个轻量级和快速的桌面环境。它被设计为用户友好和占用资源少,同时保持资源使用率低。LXDE使用更少的内存和CPU来尽可能地展现功能丰富的桌面环境。与其它的桌面环境不同,LXDE努力成为模块化的桌面环境,所以每个组件可以独立使用。这使得移植LXDE不同分布和平台更容易。 

LXDE包含多个核心组件,可用于桌面环境下来管理整个系统资源。主要组件如下:

  • LXPanel:这是LXDE的面板系统,类似于GNOME的GNOME Panel或KDE的Kicker。它提供了快速访问应用程序、系统工具、文件夹和剪贴板的方式。 

  • LXSession:这是LXDE的会话管理器,它负责启动和终止LXDE桌面环境。

  • LXDE-OpenBox: 这是一个窗口管理器,提供窗口布局和导航。LXDE使用OpenBox作为其默认的窗口管理器。

  • PCManFM:这是一个轻量级的文件管理器,提供文件和目录的浏览、复制、移动、删除等操作

除了这些核心组件外,LXDE还有其他一些辅助工具,如LXAppearance(用于更改主题和图标)、LXTask(任务管理器)等。

4.2. 启动LXDE

开机启动后,可手动输入密码123456登录,或者在串口终端执行(startx /usr/bin/lxsession -s LXDE &)命令进行登录,如图4-1:

图4-1:lxde登录界面

登录成功后,由于默认背景是黑色的,可以点击鼠标右键后选择Desktop Preferences->Appearance->Wallpaper(/usr/share/lxde/wallpapers/lxde_blue.jpg)来选择背景图片,如图4-2:

图4-2:lxde背景图片修改

背景图片修改成功,如图4-3:

图4-3:lxde背景图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Marin说PCB之POC电路layout设计仿真案例---03

今天天中午午休的时候,我刚要打开手机的准备刷抖音看无忧传媒的学生们的“学习资料”的时候,看到CSDN -APP上有提醒,一看原来是一位道友发的一个问题: 本来小编最近由于刚刚从国外回来,手上的项目都已经结束了&#xf…

Matlab:音频处理

用Matlab绘制一段音频信号在时域上的波形图,然后用低通滤波器滤掉噪音并再次绘制 1、导入音频文件 filename X:\1.mp3; % 替换为你的音频文件路径 [x, Fs] audioread(filename); 2、获取音频信号长度 len length(x); 3、计算时间轴 t (0:len-1) / Fs; 4、…

小程序properties默认值定义及父子组件的传值

因经常写vue,很久没写小程序,容易串频道,现记录一下小程序的组件用法、监听传入值及父子传值方式 首先小程序中传值是没有:(冒号)的,其次properties中定义默认值不需要写default 1.自定义组件中,首先json…

踩坑——纪实

开发踩坑纪实 1 npm安装1.1 查看当前的npm镜像设置1.2 清空缓存1.3 修改镜像1.4 查看修改结果1.5 重新安装vue 2 VScode——NPM脚本窗口找不到3 springboot项目中updateById()失效4 前端跨域4.1 后端加个配置类4.2 CrossOrigin注解 5 路由出口6 springdoc openapi3 swagger3文件…

C语言函数递归

文章目录 一、递归1.递归的概念2.递归的思想3.递归的限制条件 二、递归的一些典型例子1.求一个数的阶乘2.顺序打印一个整数的每一位3.汉诺塔4.青蛙跳台阶5斐波那契数列递归和迭代的对比 一、递归 1.递归的概念 递归是学习C语言函数绕不开的一个话题,那什么是递归呢…

PyTorch中Tensor简介

PyTorch中所有的操作都是基于Tensor(张量)的,因此理解张量的含义并能够自由创建张量是十分必要的。 张量是PyTorch中最基本的操作对象。我们可以用数学中的概念来辅助理解一下张量,如图5-1所示。 标量(Scalar&#x…

c#数据库的增删改查

** 安装数据库包 ** 在使用 SQLite 数据库时,你需要安装适当的 NuGet 包来提供与 SQLite 的集成。 1.打开 Visual Studio 中的你的项目 2.在顶部菜单栏中选择 “项目” -> “管理 NuGet 包” 3.在 NuGet 管理器中搜索 “System.Data.SQLite” 4.找到适合你项目…

【openlayers系统学习】1.1渲染GeoJSON,添加link交互

一、渲染GeoJSON 在进入编辑之前,我们将看一下使用矢量源和图层进行基本要素渲染。Workshop在 data​ 目录中包含一个 countries.json​ GeoJSON文件。我们首先加载该数据并将其渲染在地图上。 首先,编辑 index.html​ 以便向地图添加深色背景&#xf…

使用llama.cpp实现LLM大模型的格式转换、量化、推理、部署

使用llama.cpp实现LLM大模型的量化、推理、部署 大模型的格式转换、量化、推理、部署概述克隆和编译环境准备模型格式转换GGUF格式bin格式 模型量化模型加载与推理模型API服务模型API服务(第三方)GPU推理 大模型的格式转换、量化、推理、部署 概述 llama.cpp的主要目标是能够在…

【软考中级 软件设计师】数据结构

数据结构是计算机科学中一个基础且重要的概念,它研究数据的存储结构以及在此结构上执行的各种操作。在准备软考中级-软件设计师考试时,掌握好数据结构部分对于通过考试至关重要。下面是一些核心知识点概览: 基本概念: 数据结构定义…

VBA_MF系列技术资料1-615

MF系列VBA技术资料1-615 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-0…

spring-boot集成slf4j(二)logback配置详解

一、configuration 根节点:configuration,作为顶级标签, 可以用来配置一些lockback的全局属性,常见的属性如下: (1)scan“true” :scan是否开启自动扫描,监控配置文件更…

el-table 组件实现 “合并单元格 + N行数据小计” 功能

目录 需求 - 要实现的效果初始代码代码升级(可供多个表格使用)CommonTable.vue 子组件 使用子组件1 - 父组件 - 图1~图3使用效果展示 使用子组件2 - 父组件 - 图4使用效果展示 注意【代码优化 - 解决bug】 需求 - 要实现的效果 父组件中 info 数据示例 …

内网安全之证书服务基础知识

PKI公钥基础设施 PKI(Public Key Infrastructure)公钥基础设施,是提供公钥加密和数字签名服务的系统或平台,是一个包括硬件、软件、人员、策略和规程的集合,用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。企业…

element-plus:踩坑日记

el-table Q:有fixed属性时,无数据时,可能出现底部边框消失的bug 现象: 解决方法: .el-table__empty-block {border-bottom: 1px solid var(--el-table-border-color); } el-collapse 折叠面板 Q:标题上…

云平台的安全能力提升解决方案

提升云平台的安全能力是确保数据和服务安全的关键步骤。针对大型云平台所面临的云上安全建设问题,安全狗提供完整的一站式云安全解决方案,充分匹配云平台安全管理方的需求和云租户的安全需求。协助大型云平台建设全网安全态势感知、统一风险管理、统一资…

PCIE协议-4-物理层逻辑模块

4.1 简介 物理层将事务层和数据链路层与用于链路数据交换的信令技术隔离开来。物理层被划分为逻辑物理层和电气物理层子模块(见图4-1)。 4.2 逻辑物理层子模块 逻辑子模块有两个主要部分:一个发送部分,它准备从数据链路层传递过…

v-md-editor和SSE实现ChatGPT的打字机式输出

概述 不论是GPT还是文心一言,在回答的时候类似于打字机式的将答案呈现给我们,这样的交互一方面比较友好,另一方面,当答案比较多、生成比较慢的时候也能争取一些答案的生成时间。本文后端使用express和stream,使用SSE将…

Boosting Cache Performance by Access Time Measurements——论文泛读

TOC 2023 Paper 论文阅读笔记整理 问题 大多数现代系统利用缓存来减少平均数据访问时间并优化其性能。当缓存未命中的访问时间不同时,最大化缓存命中率与最小化平均访问时间不同。例如:系统使用多种不同存储介质时,不同存储介质访问时间不同…

【C++初阶】—— 类和对象 (上)

📝个人主页🌹:EterNity_TiMe_ ⏩收录专栏⏪:C “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 类和对象 1. 初步认识C2. 类的引入3. 类的定义声明和定义全部放在类体中声明和定义分开存放 4.…