根文件系统

根文件系统及Busybox详解之一

本小妞迷上赌 提交于 2019-12-04 12:40:31
根文件系统及Busybox简介 目录 1.根文件系统简介 ... 2 2.Busybox简介 ... 2 2.1Busybox简介 ... 2 2.2Busybox目录结构简介 ... 2 2.3init进程简介 ... 3 3.构建自己的根文件系统 ... 9 3.1编译Busybox . 9 3.2向Busybox中添加新命令 ... 19 4.附录 ... 26 4.1Busybox实现的简单分析 ... 26 4.2Busybox配置选项说明 ... 27 Powered By chenlong12580 chenlong12580@126.com 4/5/2013 1. 根文件系统简介 所谓制作根文件系统,就是创建各种目录,并且在目录里创建相应的文件。例如:在/bin目录下放置可执行程序,在/lib下放置各种库等等。 2.Busybox 简介 2.1Busybox 简介 Busybox是一个开源项目,遵循GPL v2协议。Busybox将众多的UNIX命令集合进一个很小的可执行程序中,可以用来替代GNU fileutils、shellutils等工具集。Busybox中各种命令与相应的GNU工具相比,所能提供的选项比较少,但是也足够一般的应用了。Busybox主要用于嵌入式系统。 Busybox在编写过程中对文件大小进行了优化,并考虑了系统资源有限(比如内存等)的情况

IMX6Q 制作根文件系统

匿名 (未验证) 提交于 2019-12-03 00:27:02
1 > :创建根文件系统目录结构,可以使用如下脚本: 在这里我将脚本命名为mkrootfs.sh,接下来给脚本加可执行权限(即chmod a+x mkrootfs)并运行脚本。我的脚本是在/home/fangxin 目录下运行的,所以我的根文件系统的根目录为/home/fangxin/rootfs,后面均以该目录为例阐述。 3> : make menuconfig /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi

《构建根文件系统(二)分析busybox源码》

匿名 (未验证) 提交于 2019-12-03 00:09:02
1.busybox   平时我们在开发板中输入ls、cp、mv等命令,都是在/bin文件中。而通过ls -l就可以发现      这些命令都是放在busybox中的。并且在内核启动后,通过ps命令,可以看到有一个init进程正在运行。    2.init进程分析 来源:博客园 作者: 一个不知道干嘛的小萌新 链接:https://www.cnblogs.com/zhuangquan/p/11557781.html

构建根文件系统

匿名 (未验证) 提交于 2019-12-02 23:55:01
在Linux中,是以树状结构管理所有目录、文件,其他分区挂接在某个目录上,这个目录被称为挂接点或者安装点,然后就可以通过这个目录来访问这个分区上的文件了; 在一个分区上存储文件时需要遵循一定的格式,这种格式称为文件系统类型,比如fat16、fat32、ext2、ext3、jffs2、yaffs等,除了这些实实在在的存储分区的文件系统类型外,Linux还有几种虚拟的文件系统类型,比如proc、sysfs等,它们的文件并不存储在实际的设备上,而是在访问它们 时由内核临时生成,比如proc文件系统下的uptime文件,读取它时可以得到两个时间值(用来表示系统启动后运行的秒数、空闲的秒数),每次读取都是由内核实时生成,每次读取到的结果都不一样; 内核启动的最后一步就是启动init进程,代码在init/main.c文件中,会调用init_post()函数; init进程是由内核启动的第一个(也是唯一的一个)用户进程(进程ID为1),它根据配置文件决定启动哪些程序,比如执行某些脚本、启动shell或者运行用户指定的程序等; init进程的执行程序通常是/sbin/init,也可以自己编写/sbin/init程序,或者通过bootloader传入命令行参数"init=xxxxx"指定某个程序作为init进程运行; 内核启动init进程的过程如下: static int noinline init

linux内核(三)文件系统

匿名 (未验证) 提交于 2019-12-02 21:59:42
1、为什么需要根文件系统 (1)init进程的应用程序在根文件系统上 (2)根文件系统提供了根目录/ (3)内核启动后的应用层配置(etc目录)在根文件系统上。几乎可以认为:发行版=内核+rootfs (4)shell命令程序在根文件系统上。譬如ls、cd等命令 总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的shell命令,还有/lib目录下的库文件等・・・)相配合才能工作。 下面是根文件系统顶层目录 根文件系统的实质是什么 (1)根文件系统是特殊用途的文件系统。 (2)根文件系统也必须属于某种文件系统格式。rootfstype= (3)究竟文件系统是用来干嘛的。ZnFAT 首先,存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时是按照块号(扇区号)来访问的。这就很麻烦。 其次, 文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录和文件名的访问 。我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问。 最后,不同的文件系统的差异就在于对这些扇区的管理策略和方法不同,譬如坏块管理、碎片管理。 2、根文件系统的形式 2.1镜像文件形式 (1

关于移植根文件系统时([\u@\h \W]\# )的处理方法

孤街浪徒 提交于 2019-12-02 15:27:07
我们经常用busybox生成根 文件 系统 ,可是根 文件 系统 起来以后命令行提示符只有一个“#”号,没有像linux发行版那样是[user@hostname currentpath] #,那么我们这里就说说如何让我们的根 文件 系统 按这个方式显示。 要修改命令行提示符,首先我们需要知道一个环境变量PS1,我们可以查看bash的帮助文档查看 关于 PS1的说明: bash有两级命令提示符,我们这里说的是第一级,这一级缺省的提示符是字符“$”(超级用户是“#”),我们可以通过修改PS1修改这个提示符,格式为: PS1=”command list” 命令列表有很多参数如下: \! 显示该命令的历史记录编号。 \# 显示当前命令的命令编号。 \$ 显示$符作为提示符,如果用户是root的话,则显示#号。 \\ 显示反斜杠。 \d 显示当前日期。 \h 显示主机名。 \n 打印新行。 \nnn 显示nnn的八进制值。 \s 显示当前运行的shell的名字。 \t 显示当前时间。 \u 显示当前用户的用户名。 \W 显示当前工作目录的名字。 \w 显示当前工作目录的路径 我们查看我们发行版linux中的PS1. $echo echo $PS1 [\u@\h \W] \$ 看了发行版是如何显示命令行提示符,那么我们再看一下为什么我们做的根 文件 系统 只显示一个#,用busybox生成的根

Linux根文件系统和目录结构及bash特性3

北城以北 提交于 2019-12-02 15:19:54
bash的基础特性: 命令补全: shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令 命令查找机制: 查找内部命令 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名 给定的打头字符串如果能惟一标识某命令程序文件,则直接补全;不能惟一标识某命令程序文件,按Tab键一次,会给出列表 路径补全: 在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件 tab: 如果能惟一标识,则直接补全 否则,再一次tab,给出列表 目录管理类的命令: mkdir,rmdir mkdir:mkdir [OPTION]... DIRECTORY... -p:自动按需创建父目录 -v:verbose,显示详细过程 -m:MODE,直接给定权限 注意:路径基名方为作用对象,基名之前的路径必须存在才可以成功 rmdir:remove empty directories rmdir [OPTION]... DIRECTORY... -p:删除某目录后,如果其父目录为空,则一并删除之 -v:显示过程 bash的基础特性之:命令行展开 ~:自动展开为用户的家目录,或指定的用户的家目录 {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径 例如:/tmp/{a,b} 相当于/tmp/a /tmp/b 问题1:mkdir -pv /tmp/x/

系统启动流程(不是很重要)

拈花ヽ惹草 提交于 2019-12-02 15:15:10
Centos5和6的启动流程 Linux:kernel+rootfs 系统运行起来之后,在某一时刻要么是运行内核代码,要么是执行rootfs上某个路径上的某个程序的用户代码; kernel:进程管理、内存管理、网络管理、驱动程序、文件系统等、安全功能; rootfs:用户空间 glibc:编写程序时需要发起系统调用,显然不是直接调用系统调用来实现的,而是通过调用库来实现的; Linux系统运行只需内核、应用程序以及库就可运行; 库:函数集合(function) 其实调用函数其实就是调用其某一块功能代码来实现某种功能,一般是通过函数的调用接口来调用它,所以为了方便我们会给它起个名称(函数名),这样更利于人类调用使用;为了函数拥有更灵活的功能,所以会给它设置一些参数来丰富其功能,不同的函数能接受的参数和类型不尽相同,所以每一个库有多少个函数,每个函数具有什么样的功能等特性,都会有一个文件来描述这些特性,这个文件就是所谓的头文件,所以在编写程序的时候为了让代码可以识别理解这些库,就会在程序代码首部声明头文件; 库也是二进制程序,但是它和/bin下的二进制程序的是有区别的,那就是库函数没有可执行入口,无法独立执行但是可以被调用执行; 库函数还可以分为是否有返回值: 过程调用(procedure)→无返回值就是调用函数执行来实现某些功能,实现完毕后就结束; 函数调用(function)

Linux根文件系统和目录结构及bash特性1

前提是你 提交于 2019-12-02 15:13:36
Linux文件系统: 内核并不真正负责具体的工作,这些工作是应用程序来负责的 Linux glibc 程序的编译方式: 动态链接式编译: 静态链接式编译: 进程的类型: 终端:硬件设备国,关联一个用户接口 与终端相关:通过终端启动 与终端无关:操作引导启动过程当中自动启动 操作系统的组成: 静态:kernel,application 文件系统:以层级结构划分,倒置的树状结构 https://blog.csdn.net/wzj0808/article/details/79136393 /bin:需要在单用户模式可用的必要命令(可执行文件);面向所有用户,例如: cat、 ls、 cp。 /sbin:必要的系统二进制文件,例如: init、 ip、 mount。 FHS:文件系统层次结构标准(英语:Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容。FHS由Linux基金会维护。 当前版本为3.0版,于2015年发布。 Filesystem Hierarchy Standard /bin:所有用户可用的基本命令程序文件 /sbin:供系统管理使用的命令程序文件 /boot:引导加载器必须用到的各静态文件:kernel,initramfs(initrd),grub等;当系统启动后这些文件就再不会用到,直到下次启动系统

改进根文件系统

穿精又带淫゛_ 提交于 2019-12-01 08:54:48
前面已经制作好了最小根文件系统,但是并不完善,下面来完善 一、增加 proc 虚拟文件系统,proc 是内核提供一个虚拟的文件系统,收集内核的信息   在串口中启动文件系统后可测试 用命令 ps 提示没有这个目录,那么我们创建一个 mkdir proc 再 ps 同样没有信息,手工挂载 mount -t proc none /proc 再次ps 可以看到有很多进程信息。   所以我们在制作根文件系统时就可以先做好,上面是手工挂载,我们做成自动挂载 进入根文件系统目录   mkdir proc   修改配置文件 在原来的基础上增加一项   vi etc/inittab   原来的内容是     console::askfirst:-/bin/sh   增加后的内容是     console::askfirst:-/bin/sh     ::sysinit:/etc/init.d/rcS   到这里我们增加了,但实际我们还没有,所以要他建     mkdir etc/init.d     vi etc/init.d/rcS       在这里可以把手工挂接的命令加进来,但我们采用另一种方法用 mount -a(这条命令就是去读etc/fstab这个配置文件的内容,去挂载) 所以我们这里写 mount -a 然后后面创建 etc/fstab       mount -a     vi