【Linux系统开发】x210开发板根目录文件系统构建(下)

简介: 【Linux系统开发】x210开发板根目录文件系统构建(下)

五、NFS挂载根文件系统

1.NFS简述

  • NFS 是Network File System的缩写,即网络文件系统。
  • 功能:通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据。

2.NFS服务器安装

sudo apt-get install nfs-kernel-server

3.NFS使用过程

启动NFS服务器->启动NFS客户端->挂载NFS目录

4.NFS配置

  • 输入命令vim /etc/exports

在最后一行修改

  • "文件挂载目录" *(rw,sync,no_root_squash,no_subtree_check)

  • 保存退出后,输入mount -t nfs -o nolock 192.168.240.33:/root/rootfs/x210_rootfs(根据实际情况修改)

  • 输入命令/etc/init.d/nfs-kernel-server restart重启NFS服务

六、开发板根目录配置

首先将etc目录放置到挂载根目录下

etc目录下载:

点击此处

1.inittab文件详解

<1>添加一个典型的inittab文件到etc目录下

inittab下载

<2>inittab格式解析

id:runlevels:action:process

解释:

  • id:标识符,即代表记录的名字
  • runlevels(可不填):用于指定该记录在哪些运行级别中运行,runlevel可以设定为单个运行级别,也可以设定多个运行级别

  • action:用于描述该级别该执行什么操作(部分说明)

  • process:具体执行的命令

<3>了解busybox init与inittab之间的关系

  • busybox init进程主要完成系统的初始化工作。

busybox init进程的工作流程:

为init设置信号处理过程->初始化控制台->剖析/etc/inittab文件->执行系统初始化命令行,缺省(默认)情况下会使用/etc/init.d/rcS->执行所有导致 init 暂停的 inittab 命令(动作类型: wait)->执行所有仅执行一次的 inittab(动作类型: once)

  • 一旦完成以上工作, init 进程便会循环执行以下进程:

<1>执行所有终止时必须重新启动的 inittab 命令(动作类型: respawn)

<2>执行所有终止时必须重新启动但启动前必须询问用户的 inittab 命令(动作类型: askfirst)

  • 简而言之,就是初始化控制台之后, BusyBox 会检查/etc/inittab 文件是否存在,如果此文件不存在, BusyBox 会使用缺省的inittab 配置,它主要为系统重引导,系统挂起以及 init 重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1 到 tty4)设置启动 shell 的动作。如果未建立这些设备文件, BusyBox 会报错。

注意:理解inittab的关键就是明白“当满足action的条件时就会执行process这个程序。” 去分析busybox的源代码就会发现,busybox最终会进入一个死循环,在这个死循环中去反复检查是否满足各个action的条件,如果某个action的条件满足就会去执行对应的process。

<4>配置

vi命令打开inittab模板文件

#first:run the system script file   注释
::sysinit:/etc/init.d/rcS    //在控制台初始化之前执行rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot  //执行控制台时的打印信息
#umount all filesystem  //同时按住3键可以重启
::shutdown:/bin/umount -a -r//关机时接触挂载init
#restart init process//重启时启动
::restart:/sbin/init

修改脚本:

2.rcS文件详解

<1>添加一个典型的rcS文件到etc目录下

rcS下载

<2>rcS文件解析

#!/bin/sh   需要继续添加环境变量,在后面:/new 即可
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
  • PATH=xxx

PATH这个环境变量是linux系统内部定义的一个环境变量,含义是操作系统去执行程序时会默认到PATH指定的各个目录下去寻找。如果找不到就认定这个程序不存在,如果找到了就去执行它。将一个可执行程序的目录导出到PATH,可以让我们不带路径来执行这个程序。

  • runlevel=

linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel。例如init 0就是关机,init 6 就是重启

  • umask=

umask是linux的一个命令,作用是设置linux系统的umask值,而umask值决定当前用户在创建文件时的默认权限。

  • mount -a

mount -a是挂载所有的应该被挂载的文件系统,在busybox中mount -a时busybox会去查找一个文件/etc/fstab文件,这个文件按照一定的格式列出来所有应该被挂载的文件系统(包括了虚拟文件系统)

3.rcS实战

首先将前面提供的etc压缩包模板下载至共享文件夹

<1>输入命令打开rcS脚本:vi etc/init.d/rcS。我们可以发现在每一行代码的后面都有一个^m,将其删除,这样开发板启动的时候就不会报错了

<2>mdev

udev/mdev的工作就是配合linux驱动生成相应的/dev目录下的设备文件。

rcS文件中没有启动mdev的时候,ls查看/dev目录下启动后是空的;在rcS文件中添加以下与mdev有关的2行配置项后:

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

再次启动系统后发现/dev目录下生成了很多的设备驱动文件

<3>hostname

我们进入etc目录下创建一个名为sysconfig的文件夹,并在该目录下再次touch创建一个名为HOSTNAME的文件,vi命令进入可修改当前系统主机名

hostname是linux中的一个shell命令。hostname xxx执行后可以设置当前主机名为xxx ,直接hostname不加参数可以显示当前系统的主机名。

  • 添加profile文件(该文件在前面etc提供的模板文件有)后,即可显示用户名和hostname

<4>ifconfig

(1)有时候我们希望开机后进入命令行时ip地址就是一个指定的ip地址(譬如192.168.240.40),这时候就可以在rcS文件中ifconfig eth0 192.168.240.40

<5>mount挂载测试

这时候我们在secureCRT中启动开发板,可以发现还是存在一些报错,例如

mount: mounting tmpfs on /var failed: No such file or directory
mount: mounting tmpfs on /tmp failed: No such file or directory
mount: mounting tmpfs on /dev failed: No such file or directory
......

这是由于我们的之前创建的根目录挂载文件中没有创建这些文件,输入mkdir命令在根目录依次创建即可

七、动态链接库的拷贝

1.静态编译链接测试

首先我们在开发板根目录下touch a.c文件,然后gcc编译一下它,可以发现在虚拟机中可以成功打印,但是在开发板端执行编译命令却并没有成功,这是因为在开发板中并没有交叉编译的相关文件

a.c file->
#include<stdio.h>
int main()
{
  printf("hello world!\n");
  return 0;
}

2.解决办法:

拷贝一份动态链接库文件到开发板根目录下

cp lib/*so* /root/rootfs/x210_rootfs/lib/ -rdf

3.解释:

这时候执行命令./a.out发现可以正常打印

4.strip工具

动态链接库so文件中包含了调试符号信息,这些符号信息在运行时是没用的(调试时用的),这些符号会占用一定空间。在传统的嵌入式系统中flash空间是有限的,为了节省空间常常把这些符号信息去掉。这样节省空间并且不影响运行。

去掉符号信息的命令:

arm-linux-strip *so*

八、ext2格式镜像烧录

1. 确定文件夹格式的rootfs可用

前面我们已经提前配置好,此处不再赘述

2.ext2镜像制作

  • 首先我们在~/rootfs目录下mkdir ext2_rootfs创建用于我们的挂载目录。
  • 然后输入以下命令:
dd if=/dev/zero of=rootfs.ext2 bs=1024 count=10240
losetup  /dev/loop1 rootfs.ext2
mke2fs -m 0 /dev/loop1 10240
mount -t ext2 /dev/loop1 ./ext2_rootfs/
  • 此时我们复制一份开发板根目录到ext2_rootfs下
cp rootfs.ext2 /mnt/hgfs/Myshare/ -f
  • 进入~/rootfs目录,执行清除卸载命令
umount /dev/loop1
losetup -d /dev/loop1

至此开发板根目录构建完成,其中也是遇到很多问题,也因此给自己挖了很多坑,然后又给自己填坑,虽然过程不尽人意,但是最后获得的都是自己的,大家在尝试这个实验的时候欢迎博客私信交流!

目录
相关文章
|
7月前
|
存储 Linux
Linux 目录名称
Linux系统目录结构简介:根目录(/)下包含各类功能目录,如/bin存放用户命令,/etc存储配置文件,/home为用户主目录,/var记录日志等可变数据,/usr存放用户工具,/tmp用于临时文件。各目录分工明确,保障系统有序运行。(238字)
328 5
|
8月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
721 3
Linux系统禁用swap
|
8月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1288 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
785 3
Linux系统初始化脚本
|
9月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
625 18
|
8月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
970 1
|
8月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1301 1
|
9月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
2354 10
|
9月前
|
安全 Linux 数据安全/隐私保护
为Linux系统的普通账户授予sudo访问权限的过程
完成上述步骤后,你提升的用户就能够使用 `sudo`命令来执行管理员级别的操作,而无需切换到root用户。这是一种更加安全和便捷的权限管理方式,因为它能够留下完整的权限使用记录,并以最小权限的方式工作。需要注意的是,随意授予sudo权限可能会使系统暴露在风险之中,尤其是在用户不了解其所执行命令可能带来的后果的情况下。所以在配置sudo权限时,必须谨慎行事。
1595 0
|
9月前
|
Ubuntu Linux 开发者
国产 Linux 发行版再添新成员,CutefishOS 系统简单体验
当然,系统生态构建过程并不简单,不过为了帮助国产操作系统优化生态圈,部分企业也开始用国产操作系统替代 Windows,我们相信肯定会有越来越多的精品软件登录 Linux 平台。
752 0