rootfs实战

合集下载

bootload、kernel、rootfs

bootload、kernel、rootfs

嵌入式Linux系统的构建一、嵌入式Linux系统中的典型分区结构Root filesystemKernel二、各个结构的分析1、从咱们所学的硬件知识能够明白,在系统上电后需要一段程序来进行初始化(关闭WATCHDOG、改变系统时钟、初始化存储器操纵器、将更多的代码复制到内存中)。

简单的说bootload确实是这么一段小程序(相当于PC机中的BIOS),初始化硬件设备、预备好软件环境,最后挪用操作系统内核。

从某个观点上来看Bootload能够分为两种操作模式:启动模式和下载模式。

启动模式:上电后bootload从板子上的某个固态存储器上将操作系统加载到RAM中运行,整个进程并无效户的介入下载模式:在这种模式下,开发人员能够利用各类命令,通过串口连接或网络连接等通信手腕从主机下载文件,将它们直接放在内存运行或是烧入Flash类固态存储设备中。

Bootload能够分为两个时期:第一时期实现的功能:硬件设备初始化、为加载Bootload的第二时期代码预备RAM空间、复制Bootload的第二时期代码到RAM空间中、设置好栈、跳转到第二时期代码的C入口点第二时期:初始化本时期要利用的硬件设备、检测系统内存映射、将内核镜像和根文件映像从Flash上读到RAM空间中、为内核设置启动参数、挪用内核2、内核的结构:Linux内核文件数量快要2万,除去其他构架CPU的相关文件,支持S3C2410、S3C2440这两款芯片的完整内核文件有1万多个。

这些文件组织结构并非复杂,他们别离位于顶层目录下的17个子目录,各个目录功能独立Linu内核Makefile文件分类3、根文件系统嵌入式Linux 中都需要构建根文件系统,构建根文件系统的规那么在FHS(FilesystemHierarchy Standard)文档中,下面是根文件系统顶层目录。

三、根文件系统的制作一、进入到/opt/studyarm 目录,新建成立根文件系统目录的脚本文create_rootfs_bash,利用命令chmod +x create_rootfs_bash 改变文件的可执行限,./create_rootfs_bash 运行脚本,就完成了根文件系统目录的创建。

根文件系统(rootfs)

根文件系统(rootfs)

根文件系统(rootfs)展开全文一、根文件系统的作用是linux挂载的第一个文件系统,rootfs包含shell命令、linux系统配置文件(文件系统的挂载、网络服务、用户名、主机名、用户密码、环境变量...)、linux应用程序、应用程序处理的数据、独立的驱动模块(*.ko)。

根文件系统,相当于linux内核外围的一个应用环境。

====================================== ========================================= =========================二、控制台输出:[ 4.183226] yaffs: dev is 32505860 name is "mtdblock4" rw //存放rootfs的设备名字mtdblock4 ,rw可读写[ 4.183291] yaffs: passed flags ""[ 4.337878] VFS: Mounted root (yaffs filesystem) on device 31:4. //31:4 --》主设备:次设备号[ 4.338028] Freeing init memory: 536K ---->rootfs挂载成功,释放内核中一些初始化函数所占用的内存[ 4.357023] usb 1-1: New USB device found, idVendor=1a40, idProduct=0101[ 4.357083] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0[ 4.357145] usb 1-1: Product: USB 2.0 Hub[ 4.357747] hub 1-1:1.0: USB hub found[ 4.357852] hub 1-1:1.0: 4 ports detected[ 5.886184] smdkc110-rtc smdkc110-rtc: rtc disabled, re-enabling[ 6.086924] eth0: link down[ 6.087198] ADDRCONF(NETDEV_UP): eth0: link is not ready[root@YueQian /]#[root@YueQian /]#[root@YueQian /]#[root@YueQian /]#最小的根文件系统的内容:# ls /bin home media proc sys usrdev lib mnt root tmp varetc lost+found opt sbin====================================== ========================================= =========================三、根文件系统启动过程1、uboot的启动参数:init=/linuxrcinit是linux运行时的第一个进程,该进程执行的是/linuxrc 其中linuxrc -> bin/busyboxinit=/sbin/init 其中:init -> ../bin/busybox--------------------------------------------------------------------------------------------------------2、内核启动后,首先通过vfs去挂在rootfs,然后再执行init=/linuxrc ,linuxrc是busybox这个工作生成的文件。

glusterfs 用法

glusterfs 用法

glusterfs 用法
GlusterFS是一个可扩展的开源分布式文件系统,其常见的使用方式如下:
1. 安装GlusterFS服务端和客户端程序包。

2. 在多台服务器上启动GlusterFS服务,形成存储池。

3. 创建卷(V olume),指定复制或分布模式,选择子目录作为Brick。

4. 挂载卷,可通过本地挂载点或网络挂载使用。

5. 通过挂载的卷目录来读写文件,访问具有高可用和scalability的分布式存储。

6. 通过命令行或Web管理界面查看状态、添加卷等。

7. 支持多种访问协议,如NFS、SMB、Object Storage等。

8. 按需扩展capacity和throughput,添加新服务器作为Brick。

GlusterFS还支持高级功能如数据密集、配额、灾备、文件锁等。

总体来说,GlusterFS 可以提供简单易用的可扩展分布式存储。

Tiny210v2( S5PV210 )平台下 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)

Tiny210v2( S5PV210 )平台下 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)

0. 准备工作1. 编译uboot2. 将uboot写入SD卡3. 编译kernel,设置其可以通过NFS挂载根文件系统4. 开发环境安装TFTP服务器5. 开发环境安装NFS服务器6. 目标环境设置uboot参数7. 制作根文件系统(optional)。

8. 完整的启动LOG。

有几位网友发信问我uboot挂载文件系统的方法,其实这个部分也不是我原创的,大部分都是参考其他网友的方法,现在将我的手顺记录下来,希望对大家有所帮助。

整体思路大概是这样:* 将uboot烧写到SD卡。

* 从SD卡启动系统,SD卡中的uboot通过TFTP协议将远程的的Kernel下载到内存中。

* uboot将内核参数设定为ROOT分区为远程的NFS-SERVER共享的一个目录,并JUMP到内核的START ADDRESS。

* kernel自解压,并JUMP 到解压后的新的内核START ADDRESS,内核正常启动。

* 最后通过内核通过uboot设置的ROOTFS参数得知根文件系统在远程,并通过NFS 挂载ROOTFS。

* 根文件系统挂载完了以后,就会去执行init程序,init程序被uboot指定为/linuxrc。

我的开发环境是ubunto 12.04LTS。

目标系统的内核是3.0.8 ,源代码位于/opt/S5PV210/rootfs/usr/src/linux-3.0.8。

uboot的源代码位于/opt/S5PV210/rootfs/usr/src/opencsbc-u-boot。

目标环境的根文件系统位于/opt/S5PV210/rootfs。

交叉编译器位于/opt/linaro-gcc473-eglibc216-armv7a-neon。

0. 准备工作编译uboot和linux内核都需要使用到交叉编译器,所以需要确保shell 的PATH 环境中包含了你的交叉编译器的路径。

比如我的PATH为:(通过export查看)declare -xPATH="/usr/lib/lightdm/lightdm:/opt/linaro-gcc473-eglibc216-armv7a-neon/bin:/usr/local/s bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"这样,就可以直接查找到arm-linux-gcc这条命令了,不许要输入arm-linux-gcc的绝对路径。

手动构建rootfs及文件功能分析

手动构建rootfs及文件功能分析

手动构建rootfs及文件功能分析这份笔记记录了从0开始构建一个最小根文件系统的流程,从而达到分析其目录结构及文件的目的,基于的kernel版本为2.6.351.结构总览如图•/linuxrc:由busybox安装,就是kernel执行的init程序,本质是指向busybox的符号链接•/bin:由busybox安装,里面是通用命令,如ls•/sbin:由busybox安装,里面是root权限命令,如shutdown •/usr:由busybox安装,里面是共享、开放的内容(意思是任意用户都可以使用)•bin:由busybox安装,里面是共享、开放的命令,如whoami •sbin:由busybox安装,里面是不重要的系统命令,如deluser •/etc:里面是各个程序的配置文件,众多程序在运行时需要根据配置文件来指导它们的行为o inittab:busybox的配置文件,busybox运行时将根据/etc/inittab来指导自己的行为,可以用它实现应用程序的开机自启动,此外它还调用了rcSo fstab:配置文件,被busybox的mount -a 指令读取,指定了系统初始化时应该挂载的文件系统o profile:一个脚本程序,被busybox调用,作用是在控制台中显示用户的名字o passwd:配置文件,里面记录了用户和密码的设置o shadow:配置文件,里面是所有用户的密码(加密过的)o init.d:此目录包含了很多系统服务启动时需要运行的脚本▪rcS:控制台初始化程序,在进入控制台前被busybox调用执行,可以利用它实现应用程序的开机自启动•sysconfig:o HOSTNAME:配置文件,里面存放用户的名字,会被rcs读取•/proc:系统的虚拟文件系统的挂载点,要自己创建,里面是虚拟的文件,表示了系统的一部分状态•/sys:系统的虚拟文件系统的挂载点,要自己创建,里面是虚拟的文件,非常全面的表示了系统状态•/tmp:系统的虚拟文件系统的挂载点,要自己创建,用于存放临时生成的文件,一般是空的•/var:系统的虚拟文件系统的挂载点,要自己创建,用于存放一些数据•/dev:系统的虚拟文件系统的挂载点,要自己创建,用于存放设备文件•/lib:里面存放了很多库文件,应用程序会进去加载需要的动态链接库2.安装busybox可以从官网下载到源码,我们使用2015年的1.24.1版本。

linux fakeroot用法

linux fakeroot用法

linux fakeroot用法fakeroot是一个用于在用户态下模拟root权限的工具,它可以让普通用户在安装软件或编译代码时拥有root权限而不需要实际获得root权限。

这在Linux系统中非常有用,特别是对于那些不希望将root权限授予普通用户的系统管理员来说。

本文将一步一步回答关于linux fakeroot用法的问题,并介绍其背后的原理。

第一步:安装fakeroot工具在绝大多数Linux发行版中,fakeroot都是作为一个软件包存在的。

因此,我们需要首先安装它。

可以使用包管理工具,例如APT(Debian或Ubuntu),DNF (Fedora)或YUM(CentOS / Red Hat),来安装fakeroot。

例如,在Ubuntu/Debian中,使用以下命令来安装:sudo aptget install fakeroot第二步:了解fakeroot的使用方式fakeroot的基本使用方式非常简单:只需在要执行的命令前添加"fakeroot"即可。

例如,如果我们想使用fakeroot模拟root权限来安装一个软件包,可以运行以下命令:fakeroot make install这将在模拟的root环境中执行"make install"命令,并使其认为当前用户具有root权限。

第三步:探索fakeroot的原理fakeroot的原理是通过动态链接器的技巧实现的。

当fakeroot调用库函数时,它会拦截关键的系统调用(例如`open`,`unlink`等)并以模拟的方式处理。

换句话说,fakeroot在用户态下提供了一个虚拟的文件系统层次结构,它在运行时截获系统调用,并在虚拟文件系统中模拟它们的行为。

第四步:深入了解fakeroot的实现方式实际上,fakeroot的实现是通过将一个动态链接器预加载库注入到要执行的命令中来完成的。

在普通的Linux命令行中,我们可以将其视为通过LD_PRELOAD环境变量加载一个库。

rootfs制作

rootfs制作

Root file system 制作方法什么是根文件系统?根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

什么是busybox?BusyBox就好像是个大工具箱,它集成压缩了Linux 的许多工具和命令。

移植步骤1.创建必要的根文件系统目录Mkdir rootfsCd rootfsMkdir bin dev etc lib proc sbin sys usr mnt tmp varMkdir usr/bin usr/lib usr/sbin lib/modules2.创建控制台设备文件和null设备文件Sudo Mknod –m 666 console c 5 1Sudo Mknod –m 666 null c 1 33.安装必要的初始化文件Tar zxvf etc.tar.gz –C xx/rootfs4.配置busybox首先解压busybox包,然后进入busybox 目录执行Sudo Make menuconfig进入busybox settings->build options选上”build busy as a static binary”Cross compiler prefix(arm-linux-)Installation options->选中”Don’t use /usr”**选中可以避免busybox被安装到宿主机系统中的/usr目录下,破坏宿主机系统Busybox Installation prefix(xx/rootfs)设置编译后的bosybox的安装位置5.编译、安装bosyboxMake ARCH=armMake install6.移植相应的C库到根文件系统中Cp –a /usr/local/arm/4.2.2-eabi/lib/ xx/rootfs/lib/7.最后一步,通过nfs挂载制作好的根文件系统。

linux sysfs kobject kset例子

linux sysfs kobject kset例子

linux sysfs kobject kset例子什么是linux sysfs?在Linux操作系统中,sysfs是一个伪文件系统,它提供了对Linux内核的运行时状态的访问。

sysfs在/sys目录下提供了一组目录和文件,可以以类似于文件的方式读取和修改内核参数。

sysfs是一个虚拟文件系统,它并不是真正的文件系统,而是通过一些内核模块和数据结构来提供对内核对象的访问。

通过sysfs,用户可以以一种结构化的方式,访问和管理内核对象,比如设备、驱动程序、总线等等。

sysfs提供了一种以一种层次结构的形式来表示内核对象的方式,通过目录和文件的方式来表示内核对象的属性、状态和配置。

这样用户就可以通过文件的方式读取和修改内核对象的相关属性。

什么是kobject?在Linux内核中,kobject是一种提供与C编程相关特性的数据结构。

它是一种抽象类型,表示内核中的一个对象。

kobject提供了一组方法,允许用户对对象进行管理,包括创建、销毁、添加和删除属性等。

kobject是被用来连接内核对象、驱动程序和总线驱动的桥梁。

通过kobject的引入,内核对象和总线驱动可以通过内核API进行通信,而独立于具体的对象或驱动程序的实现细节。

在sysfs中,kobject用于表示一个特定的内核对象,并为其提供一个唯一标识符和属性。

内核对象的创建和销毁都会导致一个相应的kobject对象的创建和销毁。

这使得在sysfs中可以通过目录和文件的形式来访问和管理内核对象。

kobject对象是由内核维护的一种数据结构,它包含了指向父kobject的指针,以及指向子kobject的指针。

这样在sysfs中,可以通过目录的嵌套结构来表示不同内核对象之间的关系。

什么是kset?kset是kobject的一种特殊形式,它是一组kobject的集合。

kset 提供了一组方法,可用于添加、移除和查找kobject。

kset通常与文件、目录和属性一起使用,以提供对内核对象的访问和管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Rootfs 实战经验
1.编译busybox,要先把它的CROSS_COMPILE的改为需要的交叉编译工具或在menuconfig中也可以配置在build options中,把arch结构修改为目标板上的型号.
2.修改menuconfig,参考《BusyBox的配置与编译》主要是配置它的输出目录的位置,还有需要哪些的命令,init等
3.Make make install
编译busybox 执行
make CONFIG_PREFIX=/opt/linux-top-pub/ui_ref/trunk/bld_7266_h_64x2/rootfs install 在目录下生成bin,sbin,usr目录和linuxrc文件。

目录可以根据需要修改
4.修改/opt/linux-top-pub/ui_ref/trunk/bld_7266_h_64x2/rootfs/bin/busybox的属性。

为4755 #chmod 4755 /opt/linux-top-pub/ui_ref/trunk/bld_7266_h_64x2/rootfs /bin/busybox 必须要修改属性,否则在busybox中很多命令会受限制,比如:$ su su: must be suid to work properly
5.创建必须的文件夹及设备文件# cd rootfs
# mkdir dev etc lib mnt proc sys root
#mkdir tmp var #chmod 1777 tmp。

在内核启动时并不能自动创建设备节点,固需手动创建console和null两个启动过程必须的设备节点。

我们将采用busybox中内置的mdev,一个简化的udev版本。

# mknod -m 660 dev/console c 5 1 # mknod -m 660 dev/null c 1 3
6.创建etc目录下文件
(1)在rootfs/etc目录下创建一个inittab文件,参考busybox 源码下面的“examples/inittab”
文件
(2)创建etc/init.d/rcS文件
最后还要改变它的属性使它能够执行。

#chmod +x etc/init.d/rcS
(3)创建etc/fstab文件
(4)增加为SHELL导入全局变量的文件/etc/profile
7.复制主机/etc/下面的文件passwd, group, shadow文件到/etc
[root@centos etc]# cp /etc/group .
[root@centos etc]# cp /etc/passwd .
[root@centos etc]# cp /etc/shadow .
所需要的文件都已经建立ok了这3个文件是从Host中拷贝过来的,只留下root帐号。

那么现在root的登陆密码和Host的登陆口令一致了,可以登录后再修改以及创建新用户。

8.因为是编译的时候使用的是动态链接。

所以先看看/busybox/_install/bin/busybox使用了哪些lib,然后从glibc复制相应的lib到roofs/lib中。

9.对几个文件的说明
“etc”目录用来存放系统的配置文件。

在“etc”目录下面有如下常用的文件:fstab:指明需要挂载的文件系统;group:用户组;inittab:init 进程的配置文件;passwd:密码文件;profile:用户环境配置文件;mdev.conf:因为2.6.18 版本开始linux 放弃使用devfs 而采用udev(mdev 是udev 的简化版本),这里的mdev.conf 文件可以是空,也可以按照一定规则来编写,这里我采用了为空;
resolv.conf:存放DNS 信息的文件,访问外网时需要DNS 的信息。

常用的目录有:init.d 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时配置以及自启动加载的进程等;“lib”目录常用的库文件,获取库文件的方法:#cp -f /usr/local/arm/3.4.5/arm-linux/lib/*so* lib –a 这里拷贝了常用的库文件,如果需要特殊的库,需要再从相应的位置复制过来。

“mnt”目录我们一般用来挂载的U 盘之类的外设,这里建立两个目录“udisk”和“sd”,分别用来挂载U 盘和SD卡。

“opt”目录空“proc”目录提供一些目录和虚拟文件系统。

“root”目录超级用户的目录。

“sys”目录“tmp”目录存放临时文件的目录。

“var”目录存放临时文件的目录。

10.我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux 的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作:(参考<<构建嵌入式LINUX系统>> p201)
1.为init设置信号处理过程
2.初始化控制台
3.剖析/etc/inittab文件
4.执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5.执行所有导致init暂停的inittab命令(动作类型:wait)
6.执行所有仅执行一次的inittab(动作类型:once)
一旦完成以上工作,init进程便会循环执行以下进程:
1. 执行所有终止时必须重新启动的inittab命令(动作类型:once)
2. 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)
初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。

如果未建立这些设备文件,BusyBox会报错。

inittab文件中每一行的格式如下所示:(busybox的根目录下的example 文件夹下有详尽的inittab文件范例)
11 制作yaffs文件系统映像文件
(1)修改制作yaffs映像文件的工具
在yaffs源码中有个utils目录(假如/cvs/yaffs2/utils),里面是工具mkyaffsimage 和mkyaffs2image的源代码。

前者用来制作yaffs1映像文件,后者用来制作yaffs2映像文件。

具体的过程,,等需要时再看了。

(2)
在amlogic中,TOOLS_DIR=${COMMON_DIR}/trunk/tools/
$(TOOLS_DIR)/mkyaffsimage ${B_ROOTFS_DIR} ${RELEASE_DIR}/rootfs.yaffsimage
到这一个完整的文件系统就这样做出来了。

相关文档
最新文档