【ARM】使用Ubuntu-base构建根文件系统
创始人
2024-04-01 06:41:22
0

使用Buildroot构建根文件系统

    • 介绍
    • 资源下载
    • 配置根文件系统
      • 设置软件源
      • 安装必要软件
      • 添加新用户
      • 设置主机名称和本机IP
      • 设置终端串口
      • 网络DHCP
      • FTP服务器搭建
        • 串口无法登录
    • 开机启动信息显示 Failed to insert module ‘autofs4’
    • 开机直接登录账户
      • 修改/etc/passwd 去掉root后面的x
      • 修改/etc/shadow

介绍

刚开始学习嵌入式Linux的时候肯定很多人都是使用的ubuntu装在虚拟机中来运行开发,其中最方便的工具肯定就是下载软件直接使用apt工具就可以完成下载,这种方便比buildroot和busybox都是不能比的,Ubuntu是 Linux 系统的一种,可以简单的将 Ubuntu 理解为一个根文件系统,因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上;

资源下载

下载总地址:http://cdimage.ubuntu.com/ubuntu-base/releases//
RK3568使用到的包:ubuntu-base-18.04.5-base-arm64.tar.gz
IMX6ULL使用到的包:ubuntu-base-18.04.5-base-armhf.tar.gz

在这里插入图片描述
还是根据自己板子需求进行下载,rk3568为arm64所以我们下载结尾带arm64的,imx6ull是32位的所以只用armhf结尾的,这里择的ubuntu版本是ubuntu1804不一定要选择这个版本,和前面两章移植buildroot和busybox同理放在我们虚拟机环境中解压;

mkdir ubuntu_32 ubuntu_64
tar xvf ubuntu-base-18.04.5-base-armhf.tar.gz -C ./ubuntu_32/
tar xvf ubuntu-base-18.04.5-base-arm64.tar.gz -C ./ubuntu_64/

配置根文件系统

移植之前我们需要一个辅助工具,用来对根文件系统进行一个基本的搭建,在ubuntu下有有一个软件QEMU这么个软件专门模拟不同机器架构的软,也就是能够模拟出根文件系统运行的状态,然后在这个环境下我们配置这个根文件系统最基本的运行环境;

sudo apt-get install qemu-user-static

然后我们需要将安装好的qemu-user-static工具拷贝到ubuntu文件系统中

// 根据自己的系统执行以下命令
sudo cp /usr/bin/qemu-arm-static ./ubuntu_32/usr/bin/
sudo cp /usr/bin/qemu-aarch64-static ./ubuntu_64/usr/bin/

设置软件源

设置下载源和我们在PC端设置的方法是一样的,但是这里需要注意的是这里要用 ARM 源,不能复制我们本机的源;

sudo vim ./ubuntu_32/etc/apt/sources.list
sudo vim ./ubuntu_64/etc/apt/sources.list

使用中科大的下载源

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

为了保证上网我们需要复制本机的DNS客户机的配置文件,用于设置板子的DNS服务器的IP地址及DNS域名,这个文件同时还包含了主机的域名搜索顺序。

// 根据自己的系统执行以下命令
sudo cp /etc/resolv.conf ./ubuntu_32/etc/resolv.conf
sudo cp /etc/resolv.conf ./ubuntu_64/etc/resolv.conf

然后在/etc/resolv.conf文件中添加dns

sudo vim ./ubuntu_32/etc/resolv.conf
sudo vim ./ubuntu_64/etc/resolv.conf

添加内容如下

nameserver 8.8.8.8
nameserver 114.114.114.114

在这里插入图片描述

安装必要软件

要在PC端给根文件系统安装软件我们需要将这个根文件系统挂载到我们本机上,这里使用下面这个脚本来完成

vim ubuntu_mount.sh
#!/bin/bash
mnt () 
{echo "MOUNTING"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}devsudo mount -o bind /dev/pts ${2}dev/ptssudo chroot ${2}
}
umnt ()
{echo "UNMOUNTING"sudo umount ${2}procsudo umount ${2}syssudo umount ${2}dev/ptssudo umount ${2}devecho "UNMOUNT OK"
}if [ "$1" = "-m" ] && [ -n "$2" ];
thenmnt $1 $2
elif [ "$1" = "-u" ] && [ -n "$2" ];
thenumnt $1 $2
elseecho ""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
chmod 777 ubuntu_mount.sh
./ubuntu_mount.sh -m ./ubuntu_32/

当我们完成了配置过后使用exit退出然后执行下面的命令取消挂载

./ubuntu_mount.sh -u ./ubuntu_32/

在这里插入图片描述

更新源安装必要软件

# Couldn't create temporary file /tmp/apt.conf.xxxx for passing config to apt-key 这个报错是/tmp文件夹权限问题
chmod 777 /tmp/apt-get update
apt-get upgradeapt-get install ssh
apt-get install net-tools
apt-get install ethtool
apt-get install ifupdown
apt-get install psmisc
apt-get install nfs-common
apt-get install htop
apt-get install vim
apt-get install rsyslog
apt-get install iputils-ping
apt-get install language-pack-en-base
apt-get install sudo
apt-get install network-manager

添加新用户

使用命令“passwd root”设置root用户密码

passwd root

添加一个名为stylle的用户

adduser username

在这里插入图片描述
需要注意这里需要输入用户的一些信息,也可以直接回车保留默认值即可;默认情况下新用户是不能使用 sudo 命令的,
我们需要修改/etc/sudoers 文件,/etc/sudoers 文件默认是只读的,因此需要先修改此文件的写权限,使用如下命令:

chmod u+w /etc/sudoers

然后使用 vim 打开/etc/sudoers,找到“root ALL=(ALL:ALL) ALL”这一行,在这一行下面添加:

vim /etc/sudoersstylle	ALL=(ALL:ALL) ALL

修改完成以后保存退出,重新恢复/etc/sudoers 的只读属性,使用如下命令:

chmod u-w /etc/sudoers

设置主机名称和本机IP

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

设置终端串口

ubuntu 根文件系统在开发板上启动以后我们通常也希望串口终端正常工作,这里根据网友的介绍需要创建一个链接。首先确定自己所使用的串口设备文件,比如我们的imx6ull的串口1节点为ttymxc0,所以执行下面的指令

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

如果是我们的rk3568,窗口1对应节点ttyS0

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

到这里我们的根文件系统其实已经可以运行了,下面的操作可以放在我们的板子上操作;

网络DHCP

我们默认没有配置 DHCP,因为 ubuntu 启动以后不能直接联网,需要手动启动网卡并设置IP 地址。这里我们配置一下网络 DHCP,这样系统启动以后就会自动设置好网络,下面的eth0对应我们的网卡;

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

在实际测试中网口必须接入网线系统才能正常启动,就是在不联网的情况下,每次开机都要等待很久,卡在网络连接上5分钟,这里我们可以修改下面这个文件;

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

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

TimeoutStartSec=10sec

FTP服务器搭建

其他软件的安装配置是和这个类似的你可以将你的开发板当作一个PC主机

sudo apt-get install vsftpd

等待软件自动安装,安装完成以后使用 VI 命令打开/etc/vsftpd.conf,命令如下:

sudo vi /etc/vsftpd.conf

打开 vsftpd.conf 文件以后找到如下两行:

local_enable=YES
write_enable=YES

确保上面两行前面没有“#”,有的话就取消掉
在这里插入图片描述
然后当我们的根文件系统在板子上运行的时候我们就可以通过filez等软件连接刚刚创建的stylle用户进行文件传输了;
当我们都配置完成过后我们使用exit退出然后执行取消挂载再打包这个文件夹就可以了;
在这里插入图片描述

串口无法登录

这里出现串口无法登录的情况,不论输入什么样的用户名密码,即使完全正确,都会提示:验证错误,有可能是因为这个串口就不支持用户登录,需要添加终端支持,我们需要再下面这个文件中添加我们的串口节点支持;

sudo vim /etc/securetty## 添加
ttyS0
ttyS1

开机启动信息显示 Failed to insert module ‘autofs4’

在我们的内核中选中该配置
File Systems --> Kernel automounter version 4 support (also supports v3)
在这里插入图片描述

开机直接登录账户

开机取消用户名和密码直接登录,假定目前只有root用户:

修改/etc/passwd 去掉root后面的x

修改前:

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

修改后:

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

修改/etc/shadow

修改前

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

修改后

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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...