linux 系统移植(第二十四期)---- 根文件系统其他功能测试---- Ubuntu20.04根文件系统其他功能测试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、软件运行测试

二、中文字符测试

[1、设置 SecureCRT 使用 UTF-8 编码](#1、设置 SecureCRT 使用 UTF-8 编码)

2、创建中文文件

三、开机自启动测试

四、外网连接测试

总结


前言

上两期我们初步测试了BusyBox构建的根文件系统,并进一步完善了系统,这一期我们就要对根文件系统进行其他的测试。


一、软件运行测试

我们使用 Linux 的目的就是运行我们自己的软件,我们编译的应用软件一般都使用动态库, 使用动态库的话应用软件体积就很小,但是得提供库文件,库文件我们已经添加到了根文件系统中。我们编写一个小小的测试软件来测试一下库文件是否工作正常,在根文件系统下创建一 个名"drivers"的文件夹,以后我们学习 Linux 驱动的时候就把所有的实验文件放到这个文件夹里面。

在 ubuntu 下使用 vim 编辑器新建一个 hello.c 文件,在 hello.c 里面输入如下内容:

复制代码
#include <stdio.h>

int main(void)
{
    while(1) {
        printf("hello world!\r\n");
        sleep(2);
    }
    return 0;
}

hello.c 内容很简单,就是循环输出"hello world",sleep 相当于 Linux 的延时函数,单位为秒,所以 sleep(2)就是延时 2 秒。因为我们是要在 ARM 芯片上运行的, 所以要用交叉编译器去编译,也就是使用 arm-linux-gnueabihf-gcc 编译,命令如下:

复制代码
arm-linux-gnueabihf-gcc hello.c -o hello

这样便将 hello.c 编译为 hello 可执行文件。

那如果想检测这个 hello 可执行文件究竟是不是 ARM 使用的呢?使用"file"命令查看文件类型以及编码格式:

复制代码
file hello

从上图中可以看出,输入"file hello"输入了如下所示信息:

复制代码
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked......

hello 是个 32 位的 LSB 可执行文件,ARM 架构的,并且是动态链接的。所以我们编译出来的 hello 文件没有问题。将其拷贝到 rootfs/drivers 目录下,在开发板中输入如下命令来执行这个可执行文件:

复制代码
cd /drivers   //进入drivers目录
./hello       //执行hello

结果如下图所示:

可以看出,hello 这个软件运行正常,说明我们的根文件系统中的共享库是没问题的,要想终止 hello 的运行,按下"ctrl+c"组合键即可。

注意:此时大家应该能感觉到,hello 执行的时候终端是没法用的,除非使用"ctrl+c"来关闭 hello,那么有没有办法既能让 hello 正常运行,而且终端能够正常使用?

方法 hello 进入后台运行就行了,让一个软件进入后台的方法很简单,运行软件的时候加上"&"即可。

比如"./hello &"就是让 hello 在后台运行。在后台运行的软件可以使用"kill -9 pid(进程 ID)"命令来关闭掉。

想知道正在运行的软件的PID,可以使用"ps"命令来查看,ps 命令用于查看所有当前正在运行的进程,并且会给出进程的 PID,如下图所示:

从上图中·可以看出 hello 对应的 PID 为 166,因此我们使用如下命令关闭在后台运行的hello 软件:

复制代码
kill -9 166

hello 被 kill 以后会有提示,如下图 所示:

二、中文字符测试

1**、设置SecureCRT使用UTF-8编码**

因为 Linux 使用的编码格式为 UTF-8,因此要先设置 SecureCRT 的编码格式。打开 Options->Session Options...,打开"Session Options"对话框,选择左侧的"Appearance",然后在右侧的"Character encoding:"栏选择 UTF-8 编码,如下图所示:

2**、创建中文文件**

在 ubuntu 中向在 rootfs 目录新建一个名为"中文测试"的文件夹,并使用vim编辑器在其中输入:这是一个中文测试文件,来测试是否显示正常。

然后在 SecureCRT 下查看中文名能不能显示正确。输入"ls"命令,结果如下图所示:


接着在 SecureCRT 中使用" cat "命令来查看"测试文档.txt "中的内容,结果如下图 所示:

可以看出,"测试文档.txt"的中文内容显示正确,而且中文路径也完全正常,说明我们的根文件系统已经完美支持中文了。

三、开机自启动测试

在 第一小节测试 hello 软件的时候都是等 Linux 启动进入根文件系统以后手动输入命令 "./hello"来完成的。一般做好产品以后都是需要开机自动启动相应的软件。

本节就以hello 这个软件为例,来实现开机自启动。前面说过,进入根文件系统的时候会运行/etc/init.d/rcS 这个 shell 脚本,因此我们可以在这个脚本里面添加自启动相关内容。添加完成以后的/etc/init.d/rcS 文件内容如下:

复制代码
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
runlevel=S
umask 022
export PATH LD_LIBRARY_PATH runlevel

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

#开机自启动
cd /drivers
./hello &
cd /

第 16 行,进入 drivers 目录,因为要启动的软件存放在 drivers 目录下。

第 17 行,以后台方式执行 hello 这个软件。

第 18 行,退出 drivers 目录,进入到根目录下。

自启动代码添加完成以后就可以重启开发板,看看 hello 这个软件会不会自动运行。结果如下图所示:

hello 开机自动运行了,说明开机自启动成功。

四、外网连接测试

这里说的外网不是指国外的网站,而是百度、淘宝等这些网站的测试。也

就是说看看我们的开发板能不能上网,能不能和我们的局域网外的这些网站进行通信。测试方法很简单,就是通过 ping 命令来 ping 一下百度的官网:www.baidu.com。输入如下命令:

复制代码
ping www.baidu.com

结果如下图所示:


可以看出,测试失败,提示 www.baidu.com 是个" bad address ",也就是地址不对,显然我
们的地址是正确的。之所以出现这个错误提示是因为 www.baidu.com 的地址解析失败了,并没
有解析出其对应的 IP 地址。我们需要配置域名解析服务器的 IP 地址,一般域名解析地址可以
设置为所处网络的网关地址,比如 192.168.1.1 。也可以设置为 114.114.114.114 ,这个是运营商
的域名解析服务器地址。
在 rootfs 中新建文件 /etc/resolv.conf ,然后在里面输入如下内容:

复制代码
nameserver 114.114.114.114
nameserver 192.168.1.1

设置很简单,nameserver 表示这是个域名服务器,设置了两个域名服务器地址:114.114.114.114 和192.168.1.1,大家也可以改为其他的域名服务器试试。如果使用"udhcpc"命令自动获取 IP 地址,"udhcpc"命令会修改 nameserver 的值,一般是将其设置为对应的网关地址。修改好以后保存退出,重启开发板!重启以后重新ping一下百度官网,结果如下图所示:

可以看出 ping 百度官网成功了!域名也成功的解析了,至此!我们的根文件系统就彻底的

制作完成

总结

本期博客把各个功能都测试了,正式完成了根文件的构建。

相关推荐
十年编程老舅1 小时前
字节跳动 Linux C/C++ 后端 面经
linux·后端面试·八股文·字节跳动·面试八股文·服务器面试
济6171 小时前
linux 系统移植(第二十五期)---- 运用MfgTool 工具进行linux系统烧写---- Ubuntu20.04
linux·运维·服务器
EverydayJoy^v^1 小时前
RH134简单知识点——第10章——控制启动过程
linux·服务器·网络
lysine_1 小时前
实现ubuntu两个网口桥接
linux·服务器·网络·arm开发·ubuntu
翼龙云_cloud1 小时前
阿里云渠道商:弹性伸缩如何三步搭建跨可用区大模型服务?
服务器·阿里云·云计算
waves浪游2 小时前
Ext系列文件系统
linux·服务器·开发语言·c++·numpy
加油勇士2 小时前
服务器调优
运维·服务器
·云扬·2 小时前
MongoDB运维实战:性能排查、数据安全与监控技巧全解析
运维·数据库·mongodb
独自归家的兔2 小时前
CentOS 8 系统下的包依赖冲突问题
linux·运维·centos