i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、
【公众号】迅为电子
【粉丝群】258811263
第八十章 busybox文件系统构建
配套资料在网盘资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\4.文件系统构建配套资料\1 busyvox文件系统构建配套资料”目录下。
一个完整的Linux系统包含uboot、kernel和根文件系统。前面的章节已经介绍了uboot和内核,本章我们来学习一下根文件系统的组成和如何构建根文件系统。根文件系统构建成功后,我们就拥有了一个可运行的最小文件系统,只不过这个文件系统还不够完善。后面我们会在这个系统上编写测试Linux驱动,移植一些第三方软件,逐渐将这个文件系统打造成一个功能强大的操作系统。
80.1 根文件系统简介
在NXP原厂的BSP包中,提供的文件系统为yocto文件系统,yocto文件系统集成度高,开发很容易,但是集成度高利于开发,不利于我们学习,所以在制作文件系统这里,我们选用busybox,因为busybox文件系统集成度很低,而且非常精简,在后面移植其他东西的时候我们可以学习到很多细节。而且buildroot里面也是集成了busybox的。buildroot文件系统也会在后面给大家进行单独介绍。
内核是Linux的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件。
Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。这种机制有利于用户和操作系统的交互。
根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,而且相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。
根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。
80.2 根文件系统目录介绍
在构建根文件系统之前,我们先来看一下根文件系统里面大概都有些什么内容,以 Ubuntu虚拟机为例,根文件系统的目录名字为‘/’(如果不理解这个/,大家可以回看一下我们在相对路径和绝对路径的知识点),命令如下:
cd / //进入到根目录下
ls //打印当前目录下的文件
进入根目录后,ls查看的内容如下图所示:
上图我们可以看到根目录下有很多的目录和文件,这些都是Ubuntu系统所需要的,有一些目录和文件在嵌入式Linux根文件系统中是不存在的。在这里讲解一下常用的目录文件(可参考第14章节Linux目录结构讲解)。
- /bin目录
系统存放可执行文件的目录,在/bin目录下的指令可以被root和一般用户所使用。主要有:cat,chmod,ls,cp等常用的指令。
- /dev目录
在Linux系统下,任何外设与接口设备都是以文件的形式存在于这个目录当中,对这个目录下文件的操作就相当于操作外部设备。
- /etc目录
系统主要的配置文件几乎都放置在这个目录下,例如人员的账号密码文件、各种服务的启始档等等。一般来说,这个目录下的文件属性是可以让一般使用者查阅的,但是只有root有权利修改。
- /lib目录
此目录下存放着 Linux 所必须的库文件。这些库文件是共享库,命令和用户编写的应用程序要使用这些库文件。
- /mnt目录
临时挂载目录,一般为空目录,临时挂载某些额外的装置,例如U盘、sd卡等。
- /opt目录
这个是给第三方软件放置的目录。一般来说,第三方软件都安装到这个目录下。
- /proc目录
当Linux系统启动后,会将此目录作为proc文件系统的挂载点。proc是一个虚拟文件系统,存放的数据都在内存当中,例如系统核心、外设的状态和网络状态等内容。因为这个目录下的数据都是在内存中当中,不占用任何硬盘空间。比较重要的文件例如:/proc/cpuinfo,
/proc/interrupts等。
- /usr目录
usr 不是 user 的缩写,而是 Unix Software Resource 的缩写,也就是 Unix 操作系统软件资源目录,而不是用户的数据。所有系统默认的软件都会放置到/usr下。
- /sbin目录
Linux有非常多的指令是用来设定系统环境的,这些指令只有root才能使用,其他用户只能用来查询。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。
- /var目录
此目录存放一些可以改变的数据。
- /sys目录
此目录和/proc目录非常类似,也是一个虚拟的文件系统。主要记录核心与系统硬件相关的信息。包括目前已加载的核心模块与核心检测到的硬件设备信息等等。
80.3 BusyBox构建根文件系统
制作根文件系统有专门的工具可以使用,叫做BusyBox,BusyBox是标准Linux工具的一个单个可执行实现。BusyBox包含了一些简单的工具,例如cat和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将BusyBox称为Linux工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令。在本节我们使用BusyBox来制作一个根文件系统。
80.3.1 获取BusyBox源码
BusyBox可以从官网下载,官网地址为:https://busybox.net/,如下图所示:
在官网左侧的“Get BusyBox”栏有一行“Download Source”,点击“Download Source”即可打开BusyBox的下载页,如下图所示:
从上图可以看出,目前最新的BusyBox 版本是 1.33.1。大家可以选择其中的一个版本下载使用。。BusyBox源码路径:iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\4.文件系统构建配套资料\1 busyvox文件系统构建配套资料\001-busybox源码。准备好源码之后就可以构建根文件系统了。
80.3.2 编译BusyBox构建根文件系统
将准备好的BusyBox源码上传到Ubuntu虚拟机下并解压。使用下列命令解压:
tar -vxf busybox-1.33.1.tar.bz2
解压完成后得到busybox-1.33.1目录,如下图所示:
下面几个步骤开始配置busybox源码并编译。
80.3.2.1指定平台和交叉编译工具
输入以下命令设置交叉编译器,如下图所示:
export PATH=/opt/fsl-imx-xwayland/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux:$PATH
打开 busybox 的顶层 Makefile,修改CROSS_COMPILE(第164行)和ARCH(第190行)的值,如下所示。如下图所示:
CROSS_COMPILE ?= aarch64-poky-linux-
ARCH ?= arm64
80.3.2.2修改Busybox源码支持中文
直接编译busybox源码,使用串口电脑终端时中文显示不正常。需要修改busybox源码,取消busybox 对中文显示的限制。
修改文件:busybox-1.33.1/libbb/printable_string.c,找到函数 printable_string,修改如下:
12 const char* FAST_FUNC printable_string2(uni_stat_t *stats, const char *str)
13 {
14 char *dst;
15 const char *s;
16
17 s = str;
18 while (1) {
......
30 if (c < ' ')
31 break;
32 /* 注释掉下面这个两行代码 */
33 /* if (c >= 0x7f)
34 break; */
35 s++;
36 }
37
38 #if ENABLE_UNICODE_SUPPORT
39 dst = unicode_conv_to_printable(stats, str);
40 #else
41 {
42 char *d = dst = xstrdup(str);
43 while (1) {
44 unsigned char c = *d;
45 if (c == '\0')
46 break;
47 /* 修改下面代码 */
48 /* if (c < ' ' || c >= 0x7f) */
49 if( c < ' ')
50 *d = '?';
51 d++;
52 }
......
59 #endif
60 return auto_string(dst);
61 }
第 33 和 34 行,当字符大于 0X7F 以后就跳出去了。
第 48 ,如果支持 UNICODE 码的话,当字符大于 0X7F 就直接输出‘?’
因此针对这几行进行修改。红色部分的代码就是被修改以后的,主要就是禁止字符大于 0X7F 以后 break 和输出‘?’。
文件 busybox-1.33.1/libbb/unicode.c,修改内容如下所示:
1003 static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t
*stats, const char *src, unsigned width, int flags)
1004 {
1005 char *dst;
1006 unsigned dst_len;
1007 unsigned uni_count;
1008 unsigned uni_width;
1009
1010 if (unicode_status != UNICODE_ON) {
1011 char *d;
1012 if (flags & UNI_FLAG_PAD) {
1013 d = dst = xmalloc(width + 1);
......
1022 /* 修改下面一行代码 */
1023 /* *d++ = (c >= ' ' && c < 0x7f) ? c : '?'; */
1024 *d++ = (c >= ' ') ? c : '?';
1025 src++;
1026 }
1027 *d = '\0';
1028 } else {
1029 d = dst = xstrndup(src, width);
1030 while (*d) {
1031 unsigned char c = *d;
1032 /* 修改下面一行代码 */
1033 /* if (c < ' ' || c >= 0x7f) */
1034 if(c < ' ')
1035 *d = '?';
1036 d++;
1037 }
1038 }
......
1044 return dst;
1045 }
......
1047
1048 return dst;
1049 }
第1024和1034行代码是被修改以后的,同样主要是禁止字符大于 0X7F 的时候设置为‘?’。busybox 中文字符支持跟代码修改有关的就改好了。
80.3.2.3使用menuconfig进行配置
在进行配置之前先创建rootfs文件夹用于busybox源码编译后安装的目录。可以自己选择适合的目录下进行创建。使用下列命令:
mkdir rootfs
如下图所示:
创建文件夹后,我的绝对路径是:/home/topeet/busybox
然后开始进行busybox源码配置,在/home/topeet/busybox/busybox-1.33.1目录下执行下列命令:
make menuconfig
命令执行后如下图所示:
- 指定安装目录
Settings --->
--- Installation Options ("make install" behavior)
(/home/topeet/busybox/rootfs ) Destination path for 'make install'
填写自己的rootfs文件夹的绝对路径(也就是我们在上一步创建的rootfs的路径)。填写完成后如下图所示:
- 去掉简要安装
Linux Module Utilities --->
[ ] Simplified modutils
[*] depmod (26 kb) (NEW)
[*] insmod (22 kb) (NEW)
...
默认会选中“Simplified modutils”,这里我们要取消勾选。结果如下图所示:
- 选择动态编译busybox
Settings --->
[] Build static binary (no shared libs)
检查默认是不是没有选中“Build static binary”,如果选择了,则取消选中。如下图所示:
- 设置命令行风格和网络配置
Settings --->
[*] Support /etc/networks
[*] vi-style line editing commands
这两个选项默认没有选中,修改后如下图所示:
- mdev配置
Linux System Utilities --->
[*] mdev (17 kb)
[*] Support /etc/mdev.conf
[*] Support subdirs/symlinks
[*] Support regular expressions substitutions when renaming device
[*] Support command execution at device addition/removal
[*] Support loading of firmware
确保这几个都会选中,默认都是选中的。如下图所示:
- busybox支持中文显示
使能busybox 的 unicode 编码
Settings --->
[*] Support Unicode
[*] Check $LC_ALL, $LC_CTYPE and $LANG environment variables
修改后如下图所示:
- 交叉编译器设置,设置为aarch-poky-linux-
Settings
->Cross compiler prefix
设置sysroot,如下图所示:
Settings
->(/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux) Path to sysroot
按需求配置好选项后,要保存退出。
因为修改过默认配置会有下列提示,是否保存修改,选择“yes”,保存并退出。
busybox 的配置就到此结束了,大家也可以根据自己的实际需求选择配置其他的选项,不过对于初学者笔者不建议再做其他的修改,可能会出现编译出错的情况发生。
80.3.2.4编译busybox
配置好busybox后就可以编译了,前面的menuconfig配置中已经指定了编译结果的存放目录。执行下面的命令进行编译:
make -j4 //源码编译
make install //编译结果存放到指定目录
执行结果如下图所示:
编译完成:
安装完成结果:
编译完成以后会在 busybox 的所有工具和文件就会被安装到 rootfs 目录中,rootfs目录文件内容如下图所示:
rootfs 目录下有 bin、sbin 和 usr 这三个目录,以及 linuxrc 这个文件。Linux内核init进程最后会查找用户空间的init程序,找到以后就会运行这个用户空间的init程序,从而切换到用户态。如果bootargs设置 init=/linuxrc,那么linuxrc就是可以作为用户空间的init程序,所以用户态空间的init程序是busybox来生成的。
busybox的工作就完成了,但是此时的根文件系统还不能使用,还需要一些其他的文件,我们继续来完善 rootfs。
80.3.3 构建整个根文件系统
在上一个小节中,编译完成busybox源码后,生成了几个根文件系统下的文件夹,我们还需要手动创建其他剩余的文件夹。如dev、etc、lib、mnt、proc、root、sys、tmp。创建完成后如下图所示:
mkdir dev etc lib mnt proc root sys tmp
我们需要向lib和usr/lib文件夹下拷贝一些库文件。
- 向/lib文件夹下添加库文件
因为我们在编译busybox的时候是动态编译的,所以Linux 中的应用程序是需要动态库才可以运行,当然你也可以编译成静态的,但是静态的可执行文件会很大。所以我们需要向根文件系统lib文件夹中添加动态库。(如不理解可以回看手册第34章节库的制作与使用)
lib库文件从交叉编译器中获取,前面搭建交叉编译环境时,交叉编译器的路径就是我们在编译busybox时候的用的bsp源码包里面的交叉编译器的绝对路径。交叉编译器中有很多库文件,制作简单的根文件系统,只需要把这些库文件放到根文件系统中就可以了。
交叉编译库文件路径(大家依据自己交叉编译器所在的实际路径为准):
/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/lib
此目录下有许多so和.a文件,这些就是库文件,我们进到交叉编译器所在路径,将此目录下的所有so和.a文件拷贝到rootfs/lib目录中,拷贝命令如下:
cp ./* /home/topeet/busybox/rootfs/lib/ -d -r
后面的“-d”表示拷贝符号链接。
如下图所示:
拷贝完成后,rootfs/lib目录下文件如下图所示:
至此,根文件系统的库文件全部添加完毕。整个根文件系统就已经准备好了。
80.4 完善根文件系统
80.4.1 创建eth0-setting文件
使用“cd etc” 命令进入到刚才创建的“etc” 文件夹,如下图所示:
然后命令建立“eth0-setting” 文件,并在“eth0-setting” 文件里输入下面的内容:
IP=192.168.1.230
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90
如下图所示:
保存并退出“ eth0-setting” 文件, 使用“ chmod 755 eth0-setting”命令修改文件的权限,如图所示:
80.4.2 创建 init.d文件
在 etc 目录下用“ mkdir init.d” 命令建立“ init.d” 文件夹,如下图
使用“ cd init.d” 命令进入到“ init.d”文件夹,如下图
在“ init.d”文件夹下面使用“ vi ifconfig-eth0” 命令建立“ ifconfig-eth0” 文件,如下图
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttymxc1
if [ -f /etc/eth0-setting ] ; then
source /etc/eth0-setting
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttymxc1
else
ifconfig eth0 down
ifconfig eth0 hw ether $MAC
ifconfig eth0 $IP netmask $Mask up
route add default gw $Gateway
fi
echo nameserver $DNS > /etc/resolv.conf
else
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttymxc1
else
/sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
fi
fi
echo Done > /dev/ttymxc1
如下图所示:
保存并退出“ ifconfig-eth0” 文件, 使用“ chmod 755 ifconfig-eth0” 命令修改权限,如下图
在“ init.d” 文件夹下使用“ vi rcS” 命令建立“ rcS” 文件,如下图:
在“ rcS” 文件输入下面的内容(注意每行前面的行号不要复制) :
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
trap ":" INT QUIT TSTP
/bin/hostname RK3399
[ -e /proc/1 ] || /bin/mount -n -t proc none /proc
[ -e /sys/class ] || /bin/mount -n -t sysfs none /sys
[ -e /dev/tty ] || /bin/mount -t ramfs none /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
mkdir -p /dev/pts
mkdir -p /dev/shm
/bin/mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/log/boa
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
syslogd
/etc/rc.d/init.d/netd start
mkdir /mnt/disk
sleep 1
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0
如下图所示:
保存并退出“rcS” 文件, 使用“chmod 755 rcS” 命令修改“rcS” 文件的权限, 如下图:
80.4.3 创建passwd 文件
回到etc目录下,使用“vi passwd” 命令建立文件“passwd” , 如下图
在新建立的“passwd” 文件中输入下面的内容
root:x:0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
如下图所示:
保存并退出“passwd” 文件,使用“chmod 755 passwd” 命令修改“passwd” 文件的权限,如下图
80.4.4 创建profile文件
使用“vi profile” 命令在“etc” 目录建立“profile” 文件,如下图:
在“profile” 文件中输入下面的内容
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
保存并退出“ profile” 文件, 使用“ chmod 755 profile”命令修改“ profile” 文件的权限,如下图
80.4.5 创建其余文件
使用“ mkdir rc.d” 命令在“ etc” 目录建立文件夹“ rc.d” ,如下图所示:
使用“cd rc.d” 命令进入到刚才建立的“ rc.d” 文件夹,如下图:
在“ rc.d” 目录下使用“ mkdir init.d” 命令建立“ init.d” 文件夹,如下图
使用“ cd init.d” 命令进入到刚才建立的“ init.d” 文件夹,如下图:
在“ init.d” 文件夹, 使用“ vi netd” 命令建立“ netd” 文件,如图
在“ netd” 文件里面输入下面的内容
#!/bin/sh
base=inetd
# See how we were called.
case "$1" in
start)
/usr/sbin/$base
;;
stop)
pid=`/bin/pidof $base`
if [ -n "$pid" ]; then
kill -9 $pid
fi
;;
esac
exit 0
如下图所示:
保存并退出“netd” 文件, 使用“chmod 755 netd” 命令修改“netd” 文件的权限,如下图所示:
80.4.6 生成文件系统镜像
经过前面的步骤我们已经制作完成了一个最小linux文件系统,我们在文件系统目录下(/home/topeet/busybox/rootfs)下的就是我们自己制作的文件系统,接下来我们需要把它打包成iMX8MM开发板的镜像。
- 将rootfs文件夹拷贝到Linux源码里面,这里使用的源码是“iTOP-i.MX8MM开发板\01-i.MX8MM开发板光盘资料\20210830\06-源码_Linux系统”。作者的Linux源码在Ubuntu上的路径是:/home/topeet/linux 一定要根据自己源码的位置修改命令,作者使用以下命令将制作好的文件系统拷贝到源码里面。
cp -rfp rootfs/ /home/topeet/linux/
- 修改Linux源码的编译脚本build.sh
添加如下代码:
export DESTDIR=$SDK_PATH/rootfs
echo DESTDIR:$DESTDIR
#generate rootfs.sdcard
function generate_rootfs()
{
set -e
rawsize=8192
fatsize=65536
#ext4size=3145728
#ext4size=1845728
ext4size=2145728
totalsize=`expr $rawsize + $fatsize + $ext4size + $rawsize`
dd if=/dev/zero of=$RESULT_OUT/rootfs.ext4 bs=1K count=0 seek=$ext4size
echo "totalbytes:$totalsize"
#chown -h -R 0:0 $DESTDIR
$SDK_PATH/bin/mkfs.ext4 -F -i 4096 $RESULT_OUT/rootfs.ext4 -d $DESTDIR
$SDK_PATH/bin/fsck.ext4 -pvfD $RESULT_OUT//rootfs.ext4
fatstart=$rawsize
fatend=`expr $rawsize + $fatsize`
ext4start=$fatend
ext4end=`expr $fatend + $ext4size`
echo $ext4end
dd if=/dev/zero of=$RESULT_OUT/rootfs.sdcard bs=1K count=0 seek=$totalsize
parted -s $RESULT_OUT/rootfs.sdcard mklabel msdos
parted -s $RESULT_OUT/rootfs.sdcard unit KiB mkpart primary fat32 $fatstart $fatend
parted -s $RESULT_OUT/rootfs.sdcard unit KiB mkpart primary $ext4start $ext4end
parted $RESULT_OUT/rootfs.sdcard print
dd if=$RESULT_OUT/flash.bin of=$RESULT_OUT/rootfs.sdcard conv=notrunc seek=33 bs=1K
echo $fatstartbytes
echo $ext4startbytes
dd if=$RESULT_OUT/boot.img of=$RESULT_OUT/rootfs.sdcard conv=notrunc,fsync seek=1K bs=$fatstart
dd if=$RESULT_OUT/rootfs.ext4 of=$RESULT_OUT/rootfs.sdcard conv=notrunc,fsync seek=1K bs=$ext4start
}
elif [ "$build_type" = "rootfs" ]
then
make -C $LINUXKERNEL_INSTALL_DIR LDFLAGS="" INSTALL_MOD_PATH=$DESTDIR INSTALL_MOD_STRIP=$INSTALL_MOD_STRIP modules_install
#exit 1
elif [ "$1" = "rootfs" ]
then
build_atf
build_uboot
build_kernel
generate_rootfs
#exit 1
修改好的build.sh在网盘资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\4.文件系统构建配套资料\1 busyvox文件系统构建配套资料\002-修改好的build.sh”目录下。
- 然后编译文件系统,输入./build.sh rootfs。编译完后会在result文件夹生成镜像。
80.4.7 最小系统功能测试
烧写编译好的镜像,系统启动后如下图所示:
80.4.7.1 U盘挂载和卸载
我们在平时测试程序或者传输数据时经常会用到 U 盘,开发板其实和电脑相同,U 盘插入电脑后需要挂载 U 盘,在拔掉 U 盘前需要先卸载。 首先启动开发板,我们将 U 盘插入 USB 口,可以看到开发板打印信息提示。如下图:
然后使用命令“fdisk -l”,我们可以看到,U 盘设备为/dev/sda4,在插入 U 盘是也可以看到这一信息。如下图所示:
接着使用命令“mount /dev/sda4 /mnt/disk/”将 U 盘挂载到“/mnt/disk/”,使用命令“df -Th”命令可以查看挂载的目录,然后使用命令“ls /mnt/disk/” 即可查看 U 盘内容,如下图所示:
80.4.7.2广域网连接测试
首先将网线插入 etherent口,启动开发板。我们使用“ifconfig”查看当前网络配置,如下图所示:
这个 eth0 的配置是之前构建最小文件系统时添加的,配置信息在“/etc/eth0-setting”文件中,我们可
以使用命令“vi /etc/eth0-setting”对其进行修改(根据我们自己局域网的环境,主要修改下 IP,Gateway,
DNS),如下图所示:
修改之后保存退出,使用命令“/etc/init.d/ifconfig-eth0”即可重启网络。如下图所示:
最后我们使用命令“ping qq.com”,ping 一下 QQ 的网站,测试局域网外的连接情况,如下图所示:
80.4.7.3 中文显示测试
这里我们先修改下MobaXterm_Professinal_20.3_Preview4的相关设置,点击状态栏“设置”,如下图所示:
然后我们将“字符集”修改为“UTF-8”。如下图所示:
最后启动开发板,我们使用命令“mkdir 北京迅为”创建文件夹,如下图所示: