rootfs与linuxrc-详解Linux进程 (micewine怎么设置rootfs)

教程大全 2025-07-12 22:30:13 浏览

内核启动的最后阶段启动了三个进程 进程0:进程0其实就是刚才讲过的idle进程,叫空闲进程,也就是死循环。 进程1:kernel_init函数就是进程1,这个进程被称为init进程。 进程2:kthreadd函数就是进程2,这个进程是linux内核的守护进程。这个进程是用来保证linux内核自己本身能正常工作的。 在嵌入式操作系统中一般会指定/linuxrc为init进程

1、/linuxrc是一个可执行的应用程序

(1)/linuxrc是应用层的,和内核源码一点关系都没有

(2)/linuxrc在开发板当前内核系统下是可执行的。因此在ARM SoC的linux系统下,这个应用程序就是用arm-linux-gcc编译链接的;如果是在PC机linux系统下,那么这个程序就是用gcc编译连接的。

(3)/linuxrc如果是静态编译连接的那么直接可以运行;如果是动态编译连接的那么我们还必须给他提供必要的库文件才能运行。但是因为我们/linuxrc这个程序是由内核直接调用执行的,因此用户没有机会去导出库文件的路径,因此实际上这个/linuxrc没法动态连接,一般都是静态连接的。

(1)操作系统启动后在一系列的自己运行配置之后,最终会给用户一个操作界面(也许是cmdline,也许是GUI),这个用户操作界面就是由/linuxrc带出来的。

(2)用户界面等很多事并不是在/linuxrc程序中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或者间接的被/linuxrc调用执行的。用户界面程序和其他的应用程序就是进程2、3、4·····,这就是我们说的进程1(init进程,也就是/linuxrc)是其他所有应用程序进程的祖宗进程。

3、/linuxrc负责系统启动后的配置

(1)就好像一个房子建好之后不能直接住,还要装修一样;操作系统启动起来后也不能直接用,要配置下。

(2)操作系统启动后的应用层的配置(一般叫运行时配置,英文简写etc)是为了让我们的操作系统用起来更方便,更适合我个人的爱好或者实用性。

(1)busybox是一个C语言写出来的项目,里面包含了很多.c文件和.h文件。这个项目可以被配置编译成各个平台下面可以运行的应用程序。我们如果用arm-linux-gcc来编译busybox就会得到一个可以在我们开发板linux内核上运行的应用程序。

(2)busybox这个程序开发出来就是为了在嵌入式环境下构建rootfs使用的,也就是说他就是专门开发的init进程应用程序。

(3)busybox为当前系统提供了一整套的Shell命令程序集。譬如vi、cd、mkdir、ls等。在桌面版的linux发行版(譬如ubuntu、redhat、CentOS等)中vi、cd、ls等都是一个一个的单独的应用程序。但是在嵌入式linux中,为了省事我们把vi、cd等所有常用的shell命令集合到一起构成了一个shell命令包,起名叫busybox。

根目录rootfs中还应该有什么

1、/linuxrc

2、dev目录下的设备文件。在linux中一切皆是文件,因此一个硬件设备也被虚拟化成一个设备文件来访问,在linux系统中/dev/xxx就表示一个硬件设备,我们要操作这个硬件时就是open打开这个设备文件,然后read/write/ioctl操作这个设备,最后close关闭这个设备。

在最小rootfs中/dev目录也是不可少的,这里面有一两个设备文件是rootfs必须的。

3、sys和proc目录。在最小rootfs中也是不可省略的,但是这两个只要创建了空文件夹即可,里面是没东西的,也不用有东西。这两个目录也是和驱动有关的。属于linux中的虚拟文件系统

4、usr是系统的用户所有的一些文件的存放地,这个东西将来busybox安装时会自动生成。

micewine怎么设置fs

5、etc目录是很关键很重要的一个,目录中的所有文件全部都是运行时配置文件。/etc目录下的所有配置文件会直接或者间接的被/linuxrc所调用执行,完成操作系统的运行时配置。etc目录是制作rootfs的关键,所以后面下一个课程专门讲这个etc目录。

6、lib目录也是rootfs中很关键的一个,不能省略的一个。lib目录下放的是当前操作系统中的动态和静态链接库文件。我们主要是为了其中的动态链接库。


QT4如何移植到ARM-LINUX目标板

一、准备busybox 1.14.1qt-embedded-linux-opensource-src-4.5.1tslib 1.4gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)构建一个新的根文件系统目录,路径为/root/rootfs二、具体步骤:1、编译安装busybox在官网下载最新版。 可以参考如下几处要修改的地方:Busybox Settings ---> Build Options ---> (arm-linux-)Cross Compiler prefixBusybox Settings---> Installation Options --->[]Dontt use /usrBusybox Settings---> Installation Options --->(/root/rootfs) BusyBox installation prefixBusybox Settings --->Busybox Library Tuning --->[*] Fancy Shell prompts输入如下命令,编译并安装。 # make;make install2、编译安装tslib# ./# ./configure -prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes# make;make install安装目录指明为 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/主要是为了在编译QTE时,不用指定tslib的头文件和库文件,方便以后程序开发。 注意:在做这一步前,需要做一个目录链接在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/目录下# ln -s ../../usr/include ./3、编译安装QTE1)、最基本的配置# ./configure -prefix /usr -embedded arm -xplatform qws/linux-arm-g++ -depths 16-qt-mouse-tslib-prefix /usr使用这个配置,编译后的QTE库文件即可放在目标文件系统的/usr/lib下,而不是默认/usr/local/Trolltech/QtEmbedded-4.5.1 这个很深的目录2)、编译# make# cp lib/* /root/rootfs/usr/lib -rd将QTE库文件拷贝到根文件系统的目录# cp plugins /root/rootfs/usr -rd 将QTE插件目录拷贝到根文件系统的目录4、根文件系统的设置1)、这时/root/rootfs/usr下应该有 bin etc include lib sbin目录tslib生成的etc目录,包含一个tslib的配置文件 nf,编辑此文件,去掉module_raw input前的注释# mv etc ../ 移动到rootfs的根目录2)、进行一次清理操作#arm-linux-strip lib/*#arm-linux-strip usr/lib/*3)、编辑etc/profile,添加以下内容export QWS_MOUSE_PROTO=Tslib:/dev/event0export TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export TSLIB_TsdeVICE=/dev/event0export TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONFFILE=/etc/nfexport TSLIB_PLUGINDIR=/usr/lib/ts最后,通过mkyaffs2image 制作镜像,烧写镜像,启动ts_calibrate校验触屏即可。

如何查看镜像文件类型

查看镜像文件类型linux中文件类型是与文件后缀无关的,不能从文件后缀判断文件类型。 要想对镜像操作就要知道它的类型,可以通过file命令实现。 gzip文件示例: # file : gzip compressed Data, from Unix, last modified: Sat Mar 19 14:51:10 2011cpio文件示例 #file : ASCII cpio archive (SVR4 with no CRC)块文件 file redhat-initrd redhat-initrd: Linux rev 1.0 ext2 filesystem data数据文件 file : data解压查看initrd镜像initrd类型的镜像一般是一个dd出的块文件再通过gzip压缩而成。 所以先查看文件类型,如果是gzip文件对其进行解压。 sudo tar -xvf filename解压出来的文件再mount到指定位置就可以看到了。 mount -o loop filename /mnt但不能更改,要想更改其中的内容,就要复制出来,更改后再重新生成initrd镜像。 解压查看initramfs镜像首先查看文件是不是gzip文件,是的话先解压: sudo tar -xvf filename再查看解压出来的是不是cpio文件,是的话用下面命令解压: cpio -id < filename这个命令会将filename中的...可以直接查看查看镜像文件类型linux中文件类型是与文件后缀无关的, from rootfs,可以通过file命令实现: data解压查看initrd镜像initrd类型的镜像一般是一个dd出的块文件再通过gzip压缩而成。 gzip文件示例: Sat Mar 19 。 mount -o loop filename /:10 2011cpio文件示例#file tinycore,要想更改其中的内容 initramfs: ASCII cpio archive (SVR4 with no CRC)块文件file redhat-initrd redhat-initrd,这样也可以:cpio -id <。 如果在桌面环境下。 解压查看initramfs镜像首先查看文件是不是gzip文件:sudo tar -xvf filename再查看解压出来的是不是cpio文件:# file initramfs; filename这个命令会将filename中的文件解压到当前文件夹(若压缩时是以相对目录压缩的),可以双击cpio文件,会出现一个和硬盘并列的位置: Linux rev 1。 要想对镜像操作就要知道它的类型, last modified;mnt但不能更改。 sudo tar -xvf filename解压出来的文件再mount到指定位置就可以看到了.0 ext2 filesystem data数据文件file tinycore,更改后再重新生成initrd镜像,是的话用下面命令解压: gzip compressed ,是的话先解压。 所以先查看文件类型:51,就要复制出来,如果是gzip文件对其进行解压,不能从文件后缀判断文件类型

initramfs什么意思

最初的想法是Linus提出的: 把cache当作文件系统装载。 他在一个叫ramfs的cache实现上加了一层很薄的封装,其他 内核 开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到 交换分区 ,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。 initramfs就是tmpfs的一个应用。 优点:(1)tmpfs随着其中数据的增减自动增减容量.(2)在tmpfs和page cache/ dentrycache之间没有重复数据.(3)tmpfs重复利用了Linux caching的代码, 因此几乎没有增加 内核 尺寸, 而caching的代码已经经过良好测试, 所以tmpfs的代码质量也有保证.(4)不需要额外的文件系统驱动.另外,initrd 机制被设计为旧的root=机制的前端,而非其替代物,它假设真正的根设备是一个 块设备 , 而且也假设了自己不是真正的根设备,这样不便将NFS等作为 根文件系统 。 最后/linuxrc不是以PID=1执行的, 因为1这个进程ID是给/sbin/init保留的。 initrd 机制找到真正的根设备后将其设备号写入/proc/sys/kernel/real-root-dev, 然后控制转移到 内核 由其装载 根文件系统 并启动/sbin/init。 initramfs则去掉了上述假设, 而且/init以PID=1执行, 由init装载 根文件系统 并用exec转到真正的/sbin/init, 这样也导致一个更为干净漂亮的设计。 生成initramfs镜像命令若镜像根目录为/ initrd ,执行下面命令在当前用户主文件夹中生成镜像。 cd / initrdfind .|cpio -o -H newc|gzip>~/ 生成的 镜像文件 是gzip压缩过的。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐