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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 从零开始构建根文件系统 -> 正文阅读

[系统运维]从零开始构建根文件系统

在前面分析的基础上,我们从零开始构建一个根文件系统。

一、弄清楚rootfs至少具备哪些目录与文件并创建空目录

根文件系统一般有/dev、/etc/lib、/usr、/var、/proc、/tmp、/home、/root、/mnt、/bin、/sbin、/sys等目录,以及/linuxrc文件。

我们先创建一个文件夹“rootfs_xjh”,然后在该文件夹内创建以上文件夹。

至于/bin、/sbin目录,以及/linuxrc文件,它们是由busybox生成的,可以生成后再拷贝到文件夹“rootfs_xjh”里。

二、使用busybox构建/bin、/sbin目录与/linuxrc文件

1、获取busybox源码

  • busybox是开源项目,版本差异不大;这里选择busybox-1.24.1版本。
  • 官方网站下载:Index of /downloads

2、解压后修改Makefile

  • ARCH = arm
  • CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-

3、配置busybox

  • 先“make defconfig”,然后“make menuconfig”,按照下面图示进行配置。

?

然后输入“make”出现错误如下。

?

解决方法:此文件和主功能无关,可以避开。

(1)先找到sync.c文件。在此目录下find -name "sync.c",知道其在./coreutils/sync.c。

(2)切换到coreutils目录,在Kbuild文件中查找“sync.o”,可知由宏CONFIG_SYNC来控制是否编译。

?

(3)在make menuconfig中,查找SYNC的位置,转到其位置,选择为N。?

4、输入make进行编译,然后输入make install进行安装

(1)make install,执行的是busybox顶层目录的一个目标install。

(2)安装目录默认在busybox/_install,里面有bin/、sbin/、linuxrc三个(目录)文件

?

5、将bin/、sbin/、linuxrc文件拷贝到rootfs_xjh文件夹下

cp?bin/ sbin/ linuxrc ~/iot/embedded_basic_course/rootfs/rootfs_xjh -ra

三、构建etc目录

主要是拷贝一些文件到etc/目录下,并进行一些修改

?

1、复制busybox中的etc目录内容并修改inittab文件

将busybox/examples/bootfloopy/etc/目录内容,全部拷贝到rootfs_xjh/etc/目录下,然后修改其中的inittab文件。

(1)如果想开机免登陆,直接进入shell,则设置如下。

#first:run the system script file
::sysinit:/etc/init.d/rcS   
::askfirst:-/bin/sh         
::ctrlaltdel:-/sbin/reboot  
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

或者

::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
#::respawn:-/bin/login
console::askfirst:-/bin/sh  //这个和上面一样,只是id明确给出而已
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

(2)如果想开机需要登陆验证密码,则设置如下。

::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
::respawn:-/bin/login
#console::askfirst:-/bin/sh
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

2、设置用户名与密码设置

将虚拟机ubuntu的/etc/passwd、/etc/group、/etc/shadow拷贝到rootf_xjh/etc/目录下,然后修改三个文件的相关内容。

(1)只保存与root相关项,修改passwd为root:x:0:0:root:/root:/bin/sh。

(2)只保存与root相关项,修改group为root:x:0:root。

(3)只保存与root相关项,shadow其他不需要更改(或者清除密码),登陆密码和拷贝源的密码一致。

3、修改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='[\u@\h \W]\# '
PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

4、修改fstab文件

在此文件中添加以下内容。注意,这些作为挂载点的空目录需要预先建立。

#<file system> 	<mount point> 	<type> 	<options>    <dump> 	<pass>
proc 		/proc 		proc 	defaults 	0 	0
sysfs 		/sys 		sysfs 	defaults 	0 	0
tmpfs 		/var 		tmpfs 	defaults 	0 	0
tmpfs 		/tmp 		tmpfs 	defaults 	0 	0
tmpfs 		/dev 		tmpfs 	defaults 	0 	0

5、修改etc/init.d/rc.S文件

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S
prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

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

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10

四、构建lib目录

将动态链接库拷贝到rootfs_xjh/lib/目录下。

动态链接库在虚拟机的/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/目录。

cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/*so* ~/iot/embedded_basic_course/rootfs/rootfs_xjh/lib/ -rdf

P.s.知识扩充

为什么复制的是交叉编译工具链的动态链接库,而非gcc的动态链接库呢?因为根文件系统是在板子上工作的,即动态链接库的使用是在arm体系架构中,而非虚拟机的Intel 80386。也就是说,如果使用gcc编译则可以在虚拟机中运行,但是不能在开发板运行;要在开发板运行需要用arm-linux-gcc来交叉编译,但是此时编译文件不能在虚拟机运行。

可以用“file xx”命令来查看一个可执行程序是哪个架构的。

从上可知,构建根文件系统,主要是先形式上创建一些空目录,然后利用busybox软件包来创建bin/、sbin/、linuxrc三个(目录)文件,接着构建etc目录并修改其中的文件(包括inittab文件、rcS文件、profile文件、fstab文件、shadow文件、passwd文件等等),然后再构建lib目录(即把交叉编译工具链的动态链接库拷贝到根文件系统的lib目录下)。至此,一个文件夹形式的根文件系统构建完成。

我们可以通过NFS方式来挂载这个制作好的、文件夹形式的根文件系统,来验证其是否可用。可用的话,接下来我们可以将它制作成镜像文件并烧录到Flash中。制作镜像文件的方法见博客:制作ext2格式的根文件系统镜像_天糊土的博客-CSDN博客

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-21 21:33:29  更:2022-06-21 21:34:12 
 
开发: 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年11日历 -2024/11/15 13:21:02-

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