嵌入式Ubuntu根文件系统移植带桌面

2023-05-16

1、为什么要移植Ubuntu根文件系统

相信到达这一步的人,都已经对根文件系统有了个充分的认识,已经自己从无到有创建过根文件系统了,玩过busybox的了,也可能移植过别的嵌入式文件系统了。但是,那些根文件系统要么哪个命令不支持,要么一些功能不支持,总之,达不到当前项目的需求了。
于是,上网一查,顿时惊为天人,原来嵌入式设备也可以这么强了,可以移植使用Ubuntu根文件系统了,经过了网上资料,结合当前的项目需求对Ubuntu根文件系统做了一个了解,然后就记录自己移植的步骤。

1.1 移植步骤

1.1.1 Ubuntu获取

当然了Ubuntu已提供了基本的可移植到嵌入式设备的根文件系统,因此我们去官网下载即可,并选取版本。
官网地址:http://cdimage.ubuntu.com/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后点击下载,将下载好的文件放入到linux系统中。

1.1.2 移植之前的准备

移植之前我们需要一个辅助工具,用来对根文件系统进行一个基本的搭建,有那么个借鸡生蛋的那个味。我的理解就是能够模拟出根文件系统运行的状态。

sudo apt-get install qemu-user-static

1.1.3 开始移植

解压Ubuntu系统
mkdir rootfs

sudo tar -vzxf ubuntu-base-16.04.6-base-armhf.tar.gz -C rootfs/

32位arm:

sudo cp /usr/bin/qemu-arm-static ./rootfs/usr/bin/

64位arm64:

sudo cp /usr/bin/qemu-aarch64-static ./rootfs/usr/bin/
sudo cp /etc/resolv.conf ./rootfs/etc/resolv.conf

1.1.4 增加DNS服务

sudo vim ./rootfs/etc/resolv.conf

加入以下内容:

nameserver 8.8.8.8

退出保存

1.1.5 挂载VFS

根文件系统要运行起来,还需要虚拟文件系统,也就是说现在需要模拟根文件系统的运行环境,因此需要挂载proc, sys, dev, dev/pts等目录。操作完成还需要卸载。
所以将挂载和卸载的命令编写成一个脚本,方便操作,脚本内容如下:

#!/bin/bash
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}    
}
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
    echo "mnt -m pwd"
elif [ "$1" = "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
    echo "mnt -u pwd"
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 rootfs path"
    echo ""
    echo "For example: ./mk.sh -m ./rootfs/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi

可以创建一个mk.sh脚本,将内容拷贝进去。
增加可执行权限:

chmod 777 mk.sh

执行命令:

./mk.sh -m ./rootfs/

挂载成功后,当前终端已经将根文件系统切换到了我们上面制作的rootfs根文件系统中。

1.1.6 安装常用的命令和软件

由于 ubuntu base 是一个最小根文件系统,很多命令和软件都没有,因此我们需要先安装一
下常用的命令和软件,输入如下命令:

apt update
apt install sudo
apt install vim
apt install kmod net-tools ethtool ifupdown language-pack-en-base rsyslog htop iputils-ping

我们就先安装这些命令和软件,保证 ubuntu base 根文件系统能够在开发板上正常启动即
可,等启动以后再根据实际情况继续安装其他的命令和软件。

1.1.7设置 root 用户密码

设置一下 root 用户的密码,这里我设置简单一点, root 用户密码也设置为“root”,相当于用户名和密码一样,命令如下:

passwd root 

输入“passwd root”以后会让你输入 root 用户密码,输入两次。

1.1.8 创建用户

添加一个用户 sdr

useradd -s '/bin/bash' -m -G adm,sudo sdr

给用户 sdr 设置密码

passwd sdr

输入“passwd sdr”以后会让你输入用户密码,输入两次。

1.1.9 设置主机名和IP

输入如下命令设置本机名称和 IP 地址:

echo "sdr" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 sdr" >> /etc/hosts

1.1.10 终端设置

因为我们的开发板是使用串口作为终端的,所以需要设置一下,比如我们开发板使用的UART1对应的串口设备文件为ttyPS0,我们输入如下命令:

ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyPS0.service

1.1.11 退出配置

这样基本配置我们就设置好了,我们退出这个根文件系统,然后取消挂载。
设置好以后就可以退出根文件系统了,输入如下命令退出:

exit

退出以后再执行一下脚本取消挂载,命令如下:

../mk.sh -u ./rootfs/

至此, ubuntu base 根文件系统就已经制作好了,接下来就是挂载到开发板上去测试。

1.2 测试

1.2.1 制作SD卡启动

我这边是以一个sd卡启动的镜像为例子。
sd卡分为BOOT(fat32)和rootfs(ext4)两个区域,将生成的系统拷贝到sd卡rootfs区。

umount /dev/sdb2
sudo mkfs.ext4 -L rootfs /dev/sdb2

sudo chmod 755 /media/sdr/rootfs
sudo chmod 755 /media/sdr/rootfs/*

sudo chown root:root /media/sdr/rootfs
sudo chown root:root /media/sdr/rootfs/*

sudo rm -rfd /media/sdr/rootfs/*
sudo cp -a -r ./rootfs/* /media/sdr/rootfs/
sync

然后弹出卡。

1.2.2 上机验证

将设备设置为SD卡启动

Ubuntu 16.04.6 LTS sdr ttyPS0

sdr login: root
Password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.14.0-xilinx armv7l)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@sdr:~#

1.3 安装图形界面

1.3.1 图形界面各个模块说明

图形程序安装,我安装的桌面是xubuntu-desktop,只需要下面一条指令即可:

apt install xubuntu-desktop

我这个安装是在嵌入式设备上安装的。但是在linux系统中安装也是一样的。

1.3.2 安装桌面提示重复登录,且密码不正确

图形程序安装,安装完成后,串口居然登录不上了,说实话啊,心里瞬间不信邪啊,重新安装了一次,结果还是不行啊,废了。
先说一下现象是什么?就是反复输入用户名和密码,结果提示无效的,提示重新输入,有时候还会出现接连出现两次登录提示,而且等一会之后,突然可以登录上了,也就是说shell终端已经登录上了。但是啊,还提示登录,我就郁闷了,咋回事。

又测试了几次,根据日志的信息,怀疑是不是有两个终端登录选项,是不是同时需要登录,结果导致数据串味了。交叉了,然后就查看了启动信息确实有两个。然后就更改根文件系统的配置信息去掉了一个。

我删除的:

/lib/systemd/system/getty-static.service
/lib/systemd/system/getty@.service

我使用的是这个:

/lib/systemd/system/serial-getty@.service

然后串口可以正常登录了。

1.3.3 Ubuntu关闭软件更新器开机提醒弹窗

删除更新通知程序

sudo apt-get remove update-notifier

然后登录桌面就没有提示了。

2、常见配置

2.1 无法登录

不论输入什么样的用户名密码,即使完全正确,都会提示:
验证错误
是因为这个串口就不支持用户登录,需要添加终端支持:
打开文件:

sudo vim /etc/securetty

添加:

# Xilinx uartlite - port
ttyPS0
ttyPS1

然后重新上电即可登录。

2.2 网络超时异常

就是启动网络服务后,若是没有插网线将会等很长时间。
就是在不联网的情况下,每次开机都要等待很久,卡在网络连接上5分钟
解决办法:
进入系统后修改文件/etc/systemd/system/network-online.target.wants/networking.service
输入命令:

sudo vim /lib/systemd/system/networking.service

将里面的TimeoutStartSec=5min 修改为:

TimeoutStartSec=10sec

重启,即可。
然后重新上电即可登录。

2.3 网络 DHCP 配置

我们默认没有配置 DHCP,因为 ubuntu 启动以后不能直接联网,需要手动启动网卡并设置IP地址。这里我们配置一下网络 DHCP,这样系统启动以后就会自动设置好网络。在 linux 系统下的网卡名字为 eth0 和 eth1,我们以 eth0 为例,讲解一下如何配置其 DHCP,输入如下命令:

echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
/etc/init.d/networking restart

设置好以后重启开发板, eth0 网卡就会默认打开,可以直接上网。 eth1 网卡同理,支持将上述命令中的 eth0 换为 eth1 即可。
然后重新上电即可登录。

2.4 开机Failed to insert module ‘autofs4’

开机启动信息显示 Failed to insert module ‘autofs4’
把File Systems --> 里的 Kernel automounter version 4 support (also supports v3) 选上

2.5 开机取消用户名和密码直接登录

假定目前只有root用户:
1.修改/etc/passwd 去掉root后面的x
修改前:

root:x:0:0:root:/root:/bin/bash

修改后:

root::0:0:root:/root:/bin/bash

2.修改/etc/shadow
修改前:

root:$6$KSC.MN5x$d9LfhYpxXPAkrbXbv7uP1df/duNTjqkEiy8BHLJxTOuSrBkwCgcVYS8N/Tvn6fEE
WAqtzKir7uN6a/xozgZQ0C.:17381:0:99999:7:::

修改后:

root::17381:0:99999:7:::

3.修改/lib/systemd/system/serial-getty@.service

#ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
ExecStart=-/sbin/agetty --autologin root 115200,38400,9600 %I $TERM
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Ubuntu根文件系统移植带桌面 的相关文章

  • 记一次C++ std::cout未定义及大量报错处理

    原因是什么并不清楚 但无论怎么处理 xff0c cout lt lt xxxxx 都会报 cout 未定义 xff0c 并且强行编译会一直报错 我最终处理方法是把MinGW给卸载 xff0c 然后重新下载安装 结果是此方法完全可行
  • ubuntu16.04 针对rosdep init初始化报错的解决方案(一针见血版)

    Ubuntu16 04 ros安装以及出现的问题 一 更换国内源 二 添加ROS源 三 添加密钥 四 安装ROS 五 初始化ROS 一 更换国内源 先复制一份源文件 再更换源地址 sudo cp etc apt sources list e
  • Linux使用gcc编译报错对pthread_create未定义的引用

    在包含pthread h头文件后 还是报错未定义的引用 span class token operator span tmp span class token operator span cc6zqi5F span class token
  • 狂神说java java基础篇 学习笔记

    java基础的视频内容笔记都在这了前言等字数非常长的章节 xff0c 使用了AI语音识别成文字后修改的 xff0c 有错漏欢迎提出面对对象模块的按照自己的理解进行了内容修改 xff0c 可以对比原视频内容理解 xff0c 如有建议欢迎提出
  • 解决Ubuntu没有wifi图标的问题

    在配置过程中输入命令后就没有wifi图标了 xff0c 不能上网了 xff08 可能是删除了网卡驱动 xff09 后续使用命令查询网卡 hardware of Internet 状态 lshw C network 查看网卡状态发现 无线网被
  • 2022-11-15日Linux安装csitools问题及解决办法

    问题一 xff1a 执行完这三步后电脑没有wifi图标了 xff0c 不能联网了 sudo modprobe r iwldvm iwlwifi mac80211 sudo modprobe r iwlwifi mac80211 cfg802
  • win10扩展c盘容量(2022-11-17)亲测可用

    个人经验 xff1a 想要通过右键我的电脑 管理 磁盘管理 xff0c 将紧挨着C盘的E盘压缩一100G扩展给C盘 这种做法试了不行 xff0c 即使让可用空间挨着C盘 xff0c C盘的扩展卷选项也是灰色的 解决 xff1a 下载傲梅分区
  • S-V信道模型理解

    Saleh和Valenzuela提出的S V信道模型是基于大量室内信道测试构建的 xff0c 更加符合室内真实路径的传播规律 xff0c 可以用来进行信道建模与仿真 下图显示了具有多簇射线的S V信道模型 xff0c 该模型中多径以簇形式达
  • wifi收发数据包分析

    根据802 11n协议WIFI每次发送64字节数据 Intel5300网卡接收的数据包大小为213字节或者393字节或者573字节 说明接受的数据包包含多个发送的包 猜想每个数据包是由多个主体重复加上固定的标志位组成 x 61 1 2 3
  • 清华大学 | 摄像头-激光雷达的时空在线集成标定方法

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 后台回复 多模态综述 获取论文 xff01 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 xff01 后台回复 领域综述
  • 操作系统-硬件结构(小林coding笔记)

    控制和管理整个计算机系统的硬件和软件资源 xff1b 提供给用户和其他软件方便的接口和环境 xff1b 主要包括进程管理 内存管理 文件系统 设备管理和网络系统 图灵机的工作方式 基本思想就是用机器模拟人类用纸笔进行数学运算的过程 主要包含
  • 操作系统-三、操作系统结构(小林coding笔记)

    3 1Linux内核和Windows内核 Windows和Linux是常见的两款操作系统 xff0c 操作系统最核心的东西就是内核 内核 内核作为应用连接硬件设备的桥梁 内核的四个基本功能 xff1a 进程调度 内存管理 硬件通信 系统调用
  • 操作系统-四、内存管理(小林coding笔记)

    虚拟内存 防止内存运行多个程序时崩溃 把进程所使用的地址隔离开 xff0c 让操作系统为每个进程分配一套独立的虚拟地址 操作系统会提供一种机制 xff0c 将不同进程的虚拟地址和不同内存的物理地址映射起来 内存分段 程序时由若干逻辑分段组成
  • libcurl库

    目录 1 libcurl简介2 libcurl的使用3 libcurl的安装Libcurl库等第三方库的通用编译方法 3 调用libcurl访问百度主页4 libcurl 相关API解读1 curl global init 2 curl g
  • ERROR: cannot launch node of type: rplidar_ros

    1首先使用rospack find 命令查找该功能包 xff0c 如果输出功能包路径则该功能包存在 xff0c 如果提示没有则说明我们需要下载一个rplidar ros rospack find rplidar ros 2使用sudo ap
  • 【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型

    目录 jetson nano环境配置 43 yolov5部署 43 tensorRT加速模型致谢主机和jetson nano环境jetson系统开机烧录 系统设置 换源python环境配置conda环境yolov5环境matplotlib和
  • MDK仿真出现NOT IN SCOPE(不在范围内)

    这两天刚拿到一套GD32F1系列的开发板 xff0c 想着测试一下 xff0c 看和STM32的有啥不同 xff0c 自己仿真时候 xff0c 想要在窗口观察一下数值 xff0c 结果总是提示NOT IN SCOPE没办法 xff0c 就查
  • Keil调试局部变量显示“not in scope“的问题解决

    Keil调试局部变量显示 34 not in scope 34 的问题解决 参考文章 xff1a xff08 1 xff09 Keil调试局部变量显示 34 not in scope 34 的问题解决 xff08 2 xff09 https
  • MPU6050可以读取ID值,温度值和原始数据值为零问题解决

    MPU6050可以读取ID值 xff0c 温度值和原始数据值为零问题解决 参考文章 xff1a xff08 1 xff09 MPU6050可以读取ID值 xff0c 温度值和原始数据值为零问题解决 xff08 2 xff09 https w
  • 英伟达Jetson Xavier NX部署YOLO5

    1 查看JetPack版本 新到手的NX首先需要确定一下JetPack的版本 xff1a sudo apt span class token operator span cache show nvidia span class token

随机推荐

  • 史上最全 | BEV感知算法综述(基于图像/Lidar/多模态数据的3D检测与分割任务)...

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 BEV综述 获取论文 xff01 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文
  • matlab-字符串的处理操作

    建立一个字符串向量 xff0c 然后对该向量做如下处理 xff1a 取第1 5个字符组成的子字符串 将字符串倒过来重新排列 将字符串中的小写字母变成相应的大写字母 xff0c 其余字符不变 统计字符串中小写字母的个数 代码 ch 61 39
  • curl发送带有Authorization的POST请求

    一 参数说明 格式 xff1a curl H 请求头 d 请求体 X POST 接口地址 参数内容格式 H header 请求头 Content Type application json d请求内容 remote host 10 163
  • AStar寻路算法 (C#)

    一 介绍 A星算法其实并不是最短路径算法 xff0c 它找到的路径并不是最短的 xff0c 它的目标首先是能以最快的速度找到通往目的地的路 B星实际上是A星的优化 但是B星的缺点是不能向后查找 所以会有问题 还有一种D星的可以用来找最短路径
  • 深度相机介绍(TOF、RGB双目、结构光参数对比)

    一 深度相机的介绍 随着计算机视觉与人工智能技术的飞速发展 xff0c 采用深度相机进行场景三维重建 目标检测 环境感知等应用越来越广泛 xff0c 与传统的2D相机不同 xff0c 深度相机可以通过拍摄空间来获得景深信息 xff0c 从而
  • 网络编程——UDP

    目录 UDP的服务器端 UDP的echo客户端代码 UDP的echo服务器端代码 UDP的服务器端 先运行服务器端 xff0c 再运行客户端 服务端 xff1a 开发者 xff1a Virtuous 开发版本 xff1a 1 0 开发时间
  • HTTP 完全解析

    Http 详解 HTTP 的定义 HTTP即是 xff1a Hypertext Transfer Protocol xff0c 超文本传输协议 xff0c 种 络传输协议 xff0c 位于 TCP IP 协议族的最顶层 应 层 URL 说到
  • STM32 自定义串口协议

    STM32 自定义串口协议 1 串行通信1 1 原理与优缺点1 2 分类1 2 1 按通信方向1 2 2 按通信方式 1 3 异步串行引脚连接1 3 1 串口外设之间1 3 2 ARM与PC之间 1 4 字符帧格式1 5 串口通信过程1 6
  • 无人机——电机篇(一)

    文章目录 1 电机的定义 2 电机的分类 3 电机的参数 4 电机效率 5 电机的选择 1 电机的定义 电机俗称 马达 是无人机的动力来源 无人机通过改变电机的转速来改变无人机的飞行状态 即改变每个电机的速度 使得无人机能够盘旋空中 上升或
  • HTTP请求/响应报文结构

    HTTP请求报文 一个HTTP请求报文由四个部分组成 xff1a 请求行 请求头部 空行 请求数据 1 请求行 请求行由 请求方法字段 URL字段 和 HTTP协议版本字段 3个字段组成 xff0c 它们用空格分隔 比如 GET data
  • AStar寻路算法

    概述 AStar算法是一种图形搜索算法 xff0c 常用于寻路 他是以广度优先搜索为基础 xff0c 集Dijkstra算法和最佳优先 best fit 于一身的一种算法 示例1 4向 示例2 8向 思路 递归的通过估值函数找到最佳路径 x
  • ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 xff01 说在前面的话 标题 xff1a
  • 什么是地址映射

    ARM体系结构 地址映射 一 什么是地址映射 1 ARM Cortex A8架构 xff0c 32位CPU xff0c CPU设计时就有32根地址线和32根数据线 2 32根地址线决定了CPU的地址空间为4G xff0c 那么这4G空间如何
  • 寄存器和GPIO

    一 什么是GPIO 1 GPIO的英文全称General Purpose Input Output Ports 中文意思是通用I O端口 2 GPIO就是芯片的引脚 xff08 芯片上的引脚有些不是GPIO xff0c 只有一部分是 xff
  • 什么是I2C通信

    ARM体系 I2C通信 一 什么是I2C 1 I2C总线是由Philips公司开发的一种简单 双向二线制同步串行总线 它只需要两根线即可在连接于总线上的设备之间传送信息 2 主设备用于启动总线传送数据 xff0c 并产生时钟以开放传送的设备
  • 什么是AD转换

    ARM体系 ADC 一 什么是ADC 1 ADC xff1a analog digital converter xff0c AD转换 xff0c 模数转换 xff08 也就是模拟转数字 xff09 2 模拟信号只有通过A D转化为数字信号后
  • 什么是SPI通信

    ARM体系 SPI通信 一 什么是SPI通信 1 SPI是串行外设接口 Serial Peripheral Interface xff0c 可以理解为一种通信协议 xff0c 也就是用来传输数据的 2 SPI 是由摩托罗拉 Motorola
  • petalinux uboot源码在哪的问题

    petalinux uboot源码在哪的问题 提出问题解决问题注意 xff1a 要知道自己的版本 1 uboot2 kernel 提出问题 petalinux 源码目录存放在哪里的问题 xff0c 也就是petalinux工程的uboot和
  • petalinux uboot源码怎么打补丁

    petalinux的源码 petalinux工程对于我来说 xff0c 就是有一点不能直接起修改源码 xff0c 你需要间接的修改源码的内容 xff1f 这个修改你还需要遵从petalinux的规章流程 当你不知道的时候你会感到无从下手 x
  • 嵌入式Ubuntu根文件系统移植带桌面

    1 为什么要移植Ubuntu根文件系统 相信到达这一步的人 xff0c 都已经对根文件系统有了个充分的认识 xff0c 已经自己从无到有创建过根文件系统了 xff0c 玩过busybox的了 xff0c 也可能移植过别的嵌入式文件系统了 但