linux文件系统制作(一)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

文件制作4步骤
一、准备制作(创建系统目录)
二、编译busybox(制作文件系统的必备工具)
三、制作文件系统(添加必备的文件,制作镜像)
四、完善文件系统(根据需要,移植更多的应用程序)

step1:准备制作
创建根文件系统目录,主要包括以下目录:
/bin,/etc,/dev,/home,/lib,/mnt,/opt,/proc,/root./sbin,/sys,/tmp,/usr,/var.
建一个名为root_2.6.31的文件
#mkdir root_2.6.31
在该文件夹下创建以上目录
#mkdir bin etc dev ...

step2:编译busybox
获取busybox-1.15.2源码,在
http://www.busybox.net/downloads/找到busy-1.15.2.tar.gz这个压缩包,下载,解压:
#tar xjvf busybox-1.15.2

进入源码目录,修改Makefile
第164行,CROSS_COMPILE=arm-linux-
第194行,ARCH=arm

执行#make menuconfig进行配置busybox
配置选项大部分是保持默认的,只需要注意选择一下这几个选项,其他的选项都不动:
Busybox Setting --->
   Build Options --->
 [*]Build Busybox as a static binary (no shared libs)
 [*]Build with Large File Support (for accessing files > 2GB)
   Installation Options --->
 (./_install) Busybox installation prefix
 进入这个选项,输入busybox的安装路径,如../rootfs
   Busybox Library Tuning --->
 [*]vi-style line editing commands
 [*]Fancy shell prompts
 要选择这个选项:“Fancy shell prompts”,否则挂起文件系统后,无法正常显示命令提示符:“[\u@\h \W]#”

配置完成后,执行#make

(注:如果出现找不到crypt m库的错误提示Trying libraries: crypt m Library crypt is needed, can't exclude it (yet) Library m is needed, can't exclude it (yet) Final link with: crypt m,可以不必理会,直接make install,然后在../rootfs下可以找到bin sbin usr三个目录以及linuxrc。)
make install
然后就会在上一级目录下生成rootfs文件夹,里面包含几个文件夹/bin/sbin/usr/linuxrc,把这些文件全部都复制到刚建好的root_2.6.31目录下,#cp -rf * ../root_2.6.31


setp3:制作文件系统
在系统启动后至少要用到这两个设备文件。
在dev目录中,创建两个设备节点:
#mknod console c 5 1 //console指控制台,也就是串口,这条命令意思是创建一个名为console的设备文件,c指字符类型设备,5是主设备号,1是从设备号
#mknod null   c 1 3

进入etc目录,添加文件:
拷贝Busybox-1.15.2/examples/bootfloopy/etc/* 到当前目录下。
#cp -r ../../busybox-1.15.2/examples/bootfloopy/etc/* ./
包括文件:fstab init.d inittab profile

拷贝/etc/passwd,/etc/group,/etc/shadow到当前目录下
#cp /etc/passwd ./
#cp /etc/group ./
#cp /etc/shadow ./
把passwd文件中的第一行:root:x:0:0:root:/root:/bin/bash中的/bin/bash,改成/bin/ash.因为文件系统的bin目录下没有bash这个命令,而是用ash代替bash,所以在用用户名密码登录时候(如telnet),会出现“cannot run /bin/bash: No such file or directory”的错误。

内核启动过程:内核完成初始化后就会启动系统的第一个进程init,它的进程ID号为1,我们可以使用命令ps -e查看系统所有进程。可以看到第一就是init进程,他的作用就是根据配置文件决定启动哪些程序。而嵌入式linux中它的执行程序就是sbin中的init,busybox中init程序的代码在busybox-1.15.2/init/init.c,它主要是解析/etc/inittab这个文件

inittab文件中每个条目都用来定义一个子进程并确定它的启动方法
::sysinit:/etc/init.d/rcS    /*sysinit系统启动后最先执行的,也就是/etc/init.d/rcS
文件*/
::respawn:-/bin/sh        /*respawn当发现子进程退出时,重启命令解析器-/bin/sh*/
tty2::askfirst:-/bin/sh     /*askfirst当文件系统挂载后按回车才进入-/bin/sh命令解析器*/
::ctrlaltdel:/bin/umount -a -r     /*ctrlaltdel按下这三个组合键后所执行的程序/bin/umount -a -r */

修改inittab文件:
内容如下:
 console::sysinit:/etc/init.d/rcS
 ttyS0::respawn:-/bin/sh
 s3c2410_serial0::askfirst:-/bin/sh
 ::once:/usr/sbin/telnetd -l /bin/login
 ::ctrlaltdel:/bin/umount -a -r

fstab中是存放系统中文件系统的信息,这些信息是用来控制mount命令的行为
proc          /proc     proc           defaults    0  0
要挂载的设备   挂载点   文件系统的类型  挂载参数 dump(备份程序) fsckorder(检查磁盘程序)

修改fstab文件,内容如下:
proc  /proc  proc defaults 0 0
tmpfs /tmp  tmpfs defaults 0 0
sysfs /sys  sysfs defaults 0 0
tmpfs /dev  tmpfs defaults 0 0
var   /dev  tmpfs defaults 0 0

修改init.d/rcS文件(系统最先执行的,也可称为初始化脚本)
内容如下:
#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin
runlevel=S
prevlevel=N
umask 022

export PATH runlevel prevlevel

mount -a
mkdir /dev/pts                                 /*dev/pts用来支持外部网络连接(telnet)的虚拟终端*/
mount -t devpts devpts /dev/pts    
echo /sbin/mdev > /proc/sys/kernel/hotplug  /*设置内核,当有设备插拔时调用/sbin/mdev程序*/
mdev -s                 /*在/dev目录下生成内核支持所有设备的结点*/
mkdir -p /var/lock

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

修改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'   
echo "Processing /etc/profile..."
echo "Done"

export USER LOGNAME PS1 PATH

其中HOSTNAME 即为 命令提示符前面所显示的名字[root@localhost etc]中的root。而在init.d/rcS脚本中
/bin/hostname -F /etc/sysconfig/HOSTNAME
指定到/etc/sysconfig/HOSTNAME中找这个名称。

故,在/etc下新建sysconfig文件夹,在里面新建HOSTNAME文件,内容为:TX2440


拷贝库文件:(因为程序运行时需要依赖动态库文件,就是lib目录下的文件)
进入lib目录,拷贝交叉编译器的库文件到lib目录下。
这里需要注意:我们不能使用当前系统下的lib目录中的文件,必须是用哪个交叉编译器编译编译的busybox就使用哪个交叉编译器下的lib文件

#cp -f -a
/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib/*.so.* ./

由于交叉编译器的库文件比较多,体积较大,所以需要裁减一下库文件,只保留常用的库文件,具体的裁减方法可以参考我们提供的文件体统的源码。

到这里,文件系统的框架已经做好了,我们需要把文件系统制作成可以烧写进Nandflash中的yaffs2镜像文件。
使用mkyaffs2image工具,制作yaffs2镜像,这个工具是在yaffs2源码包中utils目录下的mkyaffs2image.c文件编译得到的,如果使用的是大页NAND,需要修改源码。
可以使用我们提供的编译好的mkyaffs2image工具(位置:光盘资料/linux平台工具/mkyaffs2image.tar.gz)

把解压出来的可执行文件复制到/usr/bin目录下
#cp mkyaffs2iamge /usr/bin
制作文件系镜像:
#mkyaffs2image root_2.6.31 root_2.6.31.bin
root_2.6.31.bin就是yaffs2文件系统镜像,要先修改它的权限,否则该文件无法被复制:
#chmod 777 root_2.6.31.bin

把root_2.6.31.bin下载到nandflash中的文件系统分区中,如果文件系统能正常挂载,终端会打印出:
Please press Enter to activate this consoole(按回车)
Processing /etc/profile
Done
[root@TX2440A /]#

 

step4:完善文件系统
在/mnt目录下创建件一下文件夹,用来挂起NFS,SD卡和U盘
nfs sd udisk1 udisk2 udisk3 udisk4
设置开发板IP地址:
方法一、ifconfig eth0 10.28.42.111(开发板的ip)
方法二、在init.d/rcS文件中加入:
ifconfig lo 127.0.0.1
ifconfig eth0 10.28.42.111 netmask 255.0.0.0 up
route add default gw 10.28.42.1
这样在开机时,就自己设置了IP地址为:10.28.42.111

在/etc/profile中加入
alias ll='ls -l'
alias mntnfs ='mount -t nfs -o nolock'
alias mntud1 ='mount /dev/sda1 /mnt/udisk1'
alias umntud1='umount /mnt/udisk1'
alias命令的作用是给一个命令取个别名,可以根据自己的需要在这里天剑
也可以像想上述的方法一,在命令行中输入,但是那只是临时的

nfs出现挂载出现mount: RPC: Unable to send; errno = Network is unreachable解决办法:重新设置开发板ip地址,并与虚拟机、主机在同一网段。

基于ubuntu19.10的嵌入式linux文件系统制作() 在嵌入式Linux应用中存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk,initramfs, ramfs/tmpfs,ubifs等。 阅读详情

相关推荐

基于Linux的Buildroot 制作文件系统(rootfs)

基于Linux的Buildroot 制作文件系统(rootfs)1.需要条件2.安装交叉编译链3.下载Buildroot代码包4.开始buildroot 制作文件系统5.配置文件系统 menuconfig5.1、Target options —> 配置说明5.2.Build options —> 配置说明5.3.Toolchain —> 配置说明5.4.System configuration —> 配置说明5.5Kernel —> 配置说明5.6.Target packa

qq_39721016的博客 9989

Linux文件系统的创建与实现

通过选择合适的文件系统类型、格式化磁盘分区、挂载文件系统,并配置fstab文件,可以功创建个新的文件系统。在Linux中,文件系统采用层次化的树状结构,以根目录(/)为起点,通过目录和子目录的方式来组织和管理文件。上述示例代码中的"创建文件系统逻辑"部分需要根据具体需求进行编写,可以使用Linux系统调用来操作文件系统,如创建目录、创建文件、读写文件等。完文件系统创建:完以上步骤后,新的文件系统功创建并可以使用了。下面是个简单的示例代码,演示了如何使用C语言创建个简单的文件系统

LogicODER的博客 814

Linux必学知识点:文件系统的构建

文件系统是用于组织、存储和管理计算机文件的结构和方法。它定义了文件如何在存储设备上布局,以及如何访问和操作这些文件。常见的文件系统类型包括NTFS、FAT32、ext4等,每种文件系统都有其特点和用途。

qq_1033275663的博客 2148

Linux文件系统构建

我们需要在etc 目录下创建mtab文件,/etc/mtab是当前的分区挂载情况,记录的是当前系统已挂载的分区。文件系统个用来组织和管理文件的系统,有了文件系统之后,就可以轻松操作存储在存储介质上的文件,比如文件的增、删、查、改等基本操作。语句,启动/bin/sh 的时候会启动 /etc/profile 文件的配置信息,后面我们也会创建 inittab文件,这里我们先来编写 profile 文件.使用“首先返回到文件系统源码所在文件下的上级目录,在这个目录下创建个rootfs文件,然后输入命令。

qq_39993800的博客 1815

Linux驱动开发笔记(十九)文件系统的构建

上节我们在mdev实验进行配置时,利用了busybox,这里着重对这部分进行学习。文件系统可直观的理解为Windows上的文件资源管理器,Linux启动后定要挂载文件系统,这样程序才能被执行。文件系统可大可小,通过构造文件系统可衍生QT,ubuntu,android等系统。Linux还有个重要思想:切皆文件,像串口,led,按键等这些硬件设备,都可以归结为像文件样的操作,如read,write,open,close。

sincerelover的博客 1625

15-最小 linux 文件系统制作及烧写

我们总说linux系统,但到底什么是linux系统?又什么是最小linux系统?个操作系统宏观上分为两个部分:kernel和shell(核和壳)。kernel就是操作系统内核,shell在kernel之上,提供与用户交互的界面,包括CLI(命令行界面)和GUI(图形用户界面),除此之外还有基础运行库(如c库、posix)等基础软件。最小Linux系统(Minimal Linux System)是种超小型系统,它是种使用Linux系统内核和些必要的包(程序,驱动程序等)来替换复杂操作系统的方法。

Eva20192020的博客 7844

如何制作linux文件系统,linux文件系统制作

文件制作4步骤、准备制作(创建系统目录)二、编译busybox(制作文件系统的必备工具)三、制作文件系统(添加必备的文件制作镜像)四、完善文件系统(根据需要,移植更多的应用程序)step1:准备制作创建根文件系统目录,主要包括以下目录:/bin,/etc,/dev,/home,/lib,/mnt,/opt,/proc,/root./sbin,/sys,/tmp,/usr,/var.建个名为r...

weixin_30666427的博客 1599

LINUX移植——根文件系统制作

篇文章当中,说了说怎样搭建nfs服务器的过程,这也是制作文件系统前必须的准备工作,当然也可以用其他方法,但从调试的角度来说,还是nfs最适合了。这篇文章咱们正式开始制作文件系统,主要内容如下: 1.制作文件系统; 2.测试制作的根文件系统.制作文件系统      所谓制作文件系统,就是创建各种目录,并且在里面创建各种文件。要是你对linux主机下的根目录比较了解的话,你

xie0812的专栏 6528

linux文件系统制作——step by step(

前段时间好好的研究了跟文件系统制作方法和过程。以前

大空天,小奔马 533

Linux 4.10.8 根文件系统制作)---环境搭建

、工具   制作工具为busybox   下载地址:https://busybox.net/   解压:    二、制作文件系统   进入目录,执行make menuconfig:    2.1 busybox setting 2.1.1 设定交叉编译器      改为      保存退出,然后执行 make 编译。   编译完后创建文件系统存放目录: ...

dongbipi3785的博客 206

Linux内核移植和根文件系统制作

1.1 Linux内核基础知识  在动手进行Linux内核移植之前,非常有必要对Linux内核进行定的了解,下面从Linux内核的版本和分类说起。  1.1.1  Linux版本  Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中:  VERSION = 2  PATCHLEVEL = 6  SUBLEVEL = 2

yufeng1108的专栏 618

. Linux学习:制作busybox根文件系统-基于Kernal 4.9.229和Busybox 1.36.0

Ramdisk和Ramfs都是基于内存的文件系统技术,它们提供了快速的数据访问能力。Ramdisk适合需要固定大小且对性能要求极高的场景,而Ramfs则更适合需要动态调整大小且对性能有较高要求的场景。在实际应用中,可以根据具体需求选择合适的技术。需要注意的是,由于Ramdisk和Ramfs都使用内存作为存储介质,因此它们都具有易失性。在电源切断或系统重启后,存储在其中的数据会丢失。因此,在使用这些技术时,需要确保重要数据有可靠的备份和恢复机制。可见两个都是用RAM模拟硬盘,区别是。

weixin_45417939的博客 1261

Linux-2.6.28内核移植及Yaffs文件系统制作 for FL2440(

开发板:FL2440 交叉编译工具:arm-linux-gcc-3.3.2 编译平台:rhel-server-6.0 Linux内核:linux-2.6.28.7 busybox-1.1.3 文件系统:Yaffs2 文件系统制作工具:http://arm9download.cncncn.com/linux/mkyaffs2image.tgz 内

jacob的专栏 2745

制作ext4文件系统linux,制作ext2/ext3根文件系统的两种方法

1.利用buildroot自动生A。确保自己已经建立好了可以使用的buildroot具体如何建立,请参考其他相关资料B。配置使buildroot支持ext2的rootfsmake menuconfigTarget filesystemoptions --->| | [*] ext2 rootfilesystem| |...

weixin_34740753的博客 1128

详解制作文件系统

详解制作文件系统   2011-03-17 13:04:20|  分类: Linux文件系统 |  标签: |字号大中小 订阅 、FHS(Filesystem Hierarchy Standard)标准介绍 当我们在linux下输入ls  / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS

wocao1226的专栏 706

详解Linux内核编译配置(menuconfig)、文件系统制作

Linux内核编译流程(Menuconfig图形化方式)Menuconfig配置内核原理:在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析Kconfig。  通常会在Kconfig里面编写以下四项:   1、模块的名字,用module开头;   2、选项,通常设为bool

HowieXue 薛永浩的博客 6万+

Linux文件系统——ramdisk根文件系统制作

ram disk介绍   ram disk顾名思义,内存磁盘。我们平常接触的些存储介质,如:nor flash、nand flash、emmc、ufs、以及机械硬盘固态硬盘等,都是用来存储数据的,同理内存也是可以当磁盘来存储数据的,唯不同的就是ram是掉电不保存的,而前面提到的那些存储介质掉电都是保存数据的。   我们都知道,在linux中,上面介绍的flash这些存储介质,都是需要有对应的...

深海 1万+

嵌入式Linux文件系统制作

个完整的嵌入式Linux系统,包含uboot,Linux内核,根文件系统三个部分。其启动顺序为,在系统刚上电的时候,先执行uboot,由uboot引导内核,内核启动功之后挂载根文件系统。根文件系统挂载功以后,嵌入式Linux系统就启动功了。在开发板上看到的现象是:用户可以在串口控制台上输入命令与Linux系统进行交互。可以将文件系统在字面上分为俩部分来理解,部分是文件部分是系统。那文件系统是不是可以理解是组织和管理文件个系统呢。

wei_Embedded_z的博客 1424
上一篇: QPixmap/QImage/QPicture
下一篇: linux文件系统制作(二)
chyxwzn
博客等级 码龄14年 22粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值