IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 根文件系统构建 -> 正文阅读

[系统运维]Linux 根文件系统构建

根文件系统一般也叫做 rootfs
以下内容部分参考正点原子。
操作系统:Ubuntu 16
交叉编译工具:gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf
BusyBox版本:1.29.0.
使用平台,正点原子开发板 ALPHA V2.2

1、/bin 目录
看到“bin”大家应该能想到 bin 文件,bin 文件就是可执行文件。所以此目录下存放着系统
需要的可执行文件,一般都是一些命令,比如 ls、mv 等命令。此目录下的命令所有的客户都可
以使用。
2、/dev 目录
dev 是 device 的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备
文件。在 Linux 下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如
/dev/ttymxc0(I.MX6ULL 根目录会有此文件)就表示 I.MX6ULL 的串口 0,我们要想通过串口 0
发送或者接收数据就要操作文件/dev/ttymxc0,通过对文件/dev/ttymxc0 的读写操作来实现串口
0 的数据收发。
3、/etc 目录
此目录下存放着各种配置文件,大家可以进入 Ubuntu 的 etc 目录看一下,里面的配置文件
非常多!但是在嵌入式 Linux 下此目录会很简洁。
4、/lib 目录
lib 是 library 的简称,也就是库的意思,因此此目录下存放着 Linux 所必须的库文件。这些
库文件是共享库,命令和用户编写的应用程序要使用这些库文件。
5、/mnt 目录
临时挂载目录,一般是空目录,可以在此目录下创建空的子目录,比如/mnt/sd、/mnt/usb,
这样就可以将 SD 卡或者 U 盘挂载到/mnt/sd 或者/mnt/usb 目录中。
6、/proc 目录
此目录一般是空的,当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点,proc
是个虚拟文件系统,没有实际的存储设备。proc 里面的文件都是临时存在的,一般用来存储系
统运行信息文件。
7、/usr 目录
要注意,usr 不是 user 的缩写,而是 Unix Software Resource 的缩写,也就是 Unix 操作系统
软件资源目录。这里有个小知识点,那就是 Linux 一般被称为类 Unix 操作系统,苹果的 MacOS
也是类 Unix 操作系统。关于 Linux 和 Unix 操作系统的渊源大家可以直接在网上找 Linux 的发
展历史来看。既然是软件资源目录,因此/usr 目录下也存放着很多软件,一般系统安装完成以
后此目录占用的空间最多。
8、/var 目录
此目录存放一些可以改变的数据。
9、/sbin 目录
此目录页用户存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,
主要用户系统管理。
10、/sys 目录
系统启动以后此目录作为 sysfs 文件系统的挂载点,sysfs 是一个类似于 proc 文件系统的特
殊文件系统,sysfs 也是基于 ram 的文件系统,也就是说它也没有实际的存储设备。此目录是系
统设备管理的重要目录,此目录通过一定的组织结构向用户提供详细的内核数据结构信息。
11、/opt
可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中。
关于 Linux 的根目录就介绍到这里,接下来的构建根文件系统就是研究如何创建上面这些子目
录以及子目录中的文件。
下面我们开始使用 BusyBox 进行构建根文件系统
我这里使用的是
busybox-1.29.0.tar.bz2
拿到busybox-1.29.0.tar.bz2后解压文件

tar -vxjf busybox-1.29.0.tar.bz2

最后得到
在这里插入图片描述

busybox 中文字符支持
修改 busybox 源码,取消 busybox 对中文显示的限制,打开文件 busybox-
1.29.0/libbb/printable_string.c,找到函数 printable_string,缩减后的函数内容如下

const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)
{
	char *dst;
	const char *s;

	s = str;
	while (1) {
		unsigned char c = *s;
		if (c == '\0') {
			/* 99+% of inputs do not need conversion */
			if (stats) {
				stats->byte_count = (s - str);
				stats->unicode_count = (s - str);
				stats->unicode_width = (s - str);
			}
			return str;
		}
		if (c < ' ')
			break;
	/*	if (c >= 0x7f)
			break;*/
		s++;
	}

#if ENABLE_UNICODE_SUPPORT
	dst = unicode_conv_to_printable(stats, str);
#else
	{
		char *d = dst = xstrdup(str);
		while (1) {
			unsigned char c = *d;
			if (c == '\0')
				break;
		/*	if (c < ' ' || c >= 0x7f)*/
                        if(c < ' ')
				*d = '?';
			d++;
		}
		if (stats) {
			stats->byte_count = (d - dst);
			stats->unicode_count = (d - dst);
			stats->unicode_width = (d - dst);
		}
	}
#endif
	return auto_string(dst);
}

接着打开文件 busybox-1.29.0/libbb/unicode.c
找到 unicode_conv_to_printable2 这个函数更改这两处
在这里插入图片描述
下面就是配置了

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm defconfig
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm menuconfig

找到
Location:
-> Settings
-> Build static binary (no shared libs)
确保该项没有选中

在这里插入图片描述
Location:
-> Settings
-> vi-style line editing commands
选中该项
在这里插入图片描述
Location:
-> Linux Module Utilities
-> Simplified modutils
默认会选中“Simplified modutils”,这里我们要取消勾选!!
在这里插入图片描述
Location:
-> Linux System Utilities
-> mdev (16 kb) //确保下面的全部选中,默认都是选中的
在这里插入图片描述
最后就是使能 busybox 的 unicode 编码以支持中文,配置路径如下:
Location:
-> Settings
-> Support Unicode //选中
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中

在这里插入图片描述
最后 退出 保存!
开始编译。

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm

在这里插入图片描述
编译完成
下面将编译结果保存到我们所需的目录

make  install CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm CONFIG_PREFIX=/home/dwh/linux/nfs/rootfs

在这里插入图片描述
编译完成以后会在 busybox 的所有工具和文件就会被安装到 rootfs 目录中,内容如图所示。
在这里插入图片描述
下面开始完善根文件系统
向lib添加库文件
首先建一个lib目录
进入到交叉编译器的目录复制库文件到根文件系统

mkdir lib
cd /usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/
cp cp *so* *.a /home/dwh/linux/nfs/rootfs/lib/ -d

因为 ld-linux-armhf.so.3文件是个链接文件 因此我们要删掉它,并且重新复制该文件

rm ld-linux-armhf.so.3
cp ld-linux-armhf.so.3 /home/dwh/linux/nfs/rootfs/lib

然后进入/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib目录

cd /usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
cp *so* *.a /home/dwh/linux/nfs/rootfs/lib/ -d

然后向 usr/lib目录添加文件
首先先创建一个目录

mkdir /usr/lib
cd /usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib
cp *so* *.a /home/dwh/linux/nfs/rootfs/usr/lib/ -d

接着创建别的目录

mkdir dev
mkdir proc
mkdir mnt
mkdir sys
mkdir tmp
mkdir root
mkdir etc

添加 rcS文件
创建/etc/init.d/rcS
在etc/init.d/rcS下写入

 #!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH

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


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

创建/etc/fstab 文件
添加以下代码

# <file system> <mount point> <type> <options> <dump> <pass>
proc            /proc proc    defaults    0     0

tmpfs            /tmp tmpfs   defaults    0     0

sysfs            /sys sysfs    defaults    0    0

创建创建/etc/inittab 文件
添加以下代码

#etc/inittab

::sysinit:/etc/init.d/rcS

console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

下面我们开始测试文件系统。
我们使用网络挂载的方式
在uboot启动时设置命令

setenv bootargs 'console=ttymxc0,115200 rw root=/dev/nfs nfsroot=192.168.0.9:/home/dwh/linux/nfs/rootfs ip=192.168.0.20:192.168.0.9:192.168.0.1:255.255.255.0::eth0:off'
saveenv

在这里插入图片描述

最后成功进入文件系统,大功告!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:29:14  更:2021-08-07 12:29:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 4:29:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计