当前位置:首页 » 编程软件 » 编译rootfs

编译rootfs

发布时间: 2022-07-25 06:11:56

A. rootfs 生成镜像 哪些可以删除

以静态方式编译, 即生成的 busybox 不需要共享库的...也可自己写这些文件。7、把rootfs做成镜像 #mkcramfs...文件,把二进制文件中的包含的符号表和调试信息删除...

B. linux用户程序如何编译到文件系统里去。

这个就类似于自己制作Linux发行版的rootfs了。不同系统不同环境制作方法是不同的。比如我有块板子我是用yocto自己生成rootfs的,随意加入任何东西,当然不只是简单改makefile。

最省事的方法是把已经做好的rootfs解包出来,把文件复制进去,然后再打包就完事了。

C. 请教linux启动rootfs挂载问题

1。linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做准备,mount 根文件系统有这么几种方式:

1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount。 这里有一个问题,在root文件系统本身还不存在的情况下,kernel如 何根据/dev/xxx来找到对应的设备呢?注意:根文件系统和其他文件系统的mount方式是不一样的,kernel通过直接解析设备的名称来获得设备的主、从设备号,然后就可以访问对应的设备驱动 了。所以在init/main.c中有很长一串的root_dev_names(如hda,hdab,sda,sdb,nfs,ram,mtdblock……),通过这个表就可以根据设备名称得到设备号。注意,bootloader或内核中设定的启动参数(root=/dev/xxx)只是一个代号,实际的根文件系统中不一定存在这个设备文件!

2)从软驱等比较慢的设备上装载根文件系统,如果kernel支持ramdisk,在装载root文件系统时,内核判断到需要从软盘(fdx)mount(root=/dev/fd0),就会自动把文件系统映象复制到ramdisk,一般对应设备ram0,然后在ram0上mount 根文件系统。 从源码看,如果kernel编译时没有支持ramdisk,而启动参数又是root=/dev/fd0, 系统将直接在软盘上mount,除了速度比较慢,理论上是可行的(没试过,不知道是不是这样?)

3)启动时用到initrd来mount根文件系统。注意理解ramdisk和initrd这两个概念,其实ramdisk只是在ram上实现的块设备,类似与硬盘操作,但有更快的读写速度,它可以在系统运行的任何时候使用,而不仅仅是用于启动;initrd(boot loader initialized RAM disk)可以说是启动过程中用到的一种机制,具体的实现过程也使用ramdisk技术。就是在装载linux之前,bootloader可以把一个比较小的根文件系统的映象装载在内存的某个指定位置,姑且把这段内存称为initrd(这里是initrd所占的内存,不是ramdisk,注意区别),然后bootloader通过传递参数的方式告诉内核initrd的起始地址和大小(也可以把这些参数编译在内核中),在启动阶段就可以暂时的用initrd来mount根文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上,但是也可以不再 重新mount(很多嵌入式系统就是这样)。 initrd的具体实现过程是这样的:bootloader把根文件系统映象装载到内存指定位置,把相关参数传递给内核,内核启动时把initrd中的内容复制到ramdisk中(ram0),把initrd占用的内存释放掉,在ram0上mount根文件系统。从这个过程可以看出,内核需要对同时对ramdisk和initrd的支持(这种需要都编入内核,不能作为模块)。

2。嵌入式系统根文件系统的一种实现方法:对于kernel和根文件系统都存储在flash中的系统,一般可以利用linux启动的initrd的机制。具体的过程前面已经比较清楚了,还有一点就是在启动参数中传递root=/dev/ram0,这样使得用initrd进行mount的根文件系统不再切换,因为这个时候实际的设备就是ram0。还有就是initrd的起始地址参数为虚拟地址,需要和bootloader中用的物理地址对应。
望采纳

D. rootfs 是编译到内核内还是另外加载

rootfs 是编译到内核内还是另外加载
linux内核中Kconfig文档的作用
2.6内核的源码树目录下一般都会有两个文文:Kconfig和Makefile。分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。在内核编译时,主Makefile调用这个.config,就知道了用户对内核的配置情况。
上面的内容说明:Kconfig就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改Kconfig来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的Makefile。

E. 如何不通过内核命令行rootfstype指定根文件系统类型

选定 busybox-1.9.2.tar.bz2 这个版本, 以静态方式编译, 即生成的 busybox 不需要共享库的支持就能运行。这样做我们就不需要布署程序库了。缺点是自己写的 arm-linux 程序在这个根文件系统中是不能运行的,因为缺少共享程序库的支持。不过不用担...

F. 自己编译的linux内核以及rootfs,制成可引导iso后.在虚拟机上启动成功,但是网卡不能用.

虚拟机网卡不能用你贴主机的有什么用。俩网卡没关系的。
你去看看虚拟机的网卡是什么型号吧。启动进系统后 lspci 应该有显示的。

还有,如果驱动你编译成了 mole 。你还要在 rootfs 上存放 moles 目录以及 udev 或者 mdev 程序,不然内核没地方找这个驱动去。

G. 64位UBUNTU 下 如何用GCC 编译出32位程序 求前辈指点

目测是32位的搜索路径下没有sys/cdefs.h
一般64位系统最好不要安装32位库的-dev,经常有冲突,强行安装会破坏64位环境,头文件并不像共享库分得那么完美。
我觉得比较好的做法是,重新把某一个文件夹当成rootfs,在里面安装各种32位的库和库-dev,然后给gcc传递参数"--sysroot=路径"就可以让gcc重新选取那个文件夹为rootfs,而不再认为/为rootfs。其实这样就变成交叉编译了。也可以在这个rootfs中安装32位的必要软件包如bash,gcc,coreutils等等,然后chroot进去就变成host编译了。其实有个比较简单的方法,就是虚拟机下安一个32位的ubuntu,然后装好各种软件包,然后直接对/打包,再拿出来解压就是rootfs了,后面最多就是缺啥安啥,工作量比较小。当然如果你不在意编译速度,直接虚拟机下编最简单

H. initramfs中用什么编辑文件

工作过程简述
在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是root filesystem的缩写)。rootfs是一个特殊的tmpfs,这个不能被删除或者是unmounted。很多使用2.6内核的系统通常都是挂载rootfs后什么都不做,然后启动另一个文件系统作为root filesystem。但是,这个不能掩盖rootfs存在的事实,你可以“cat /proc/mounts” 来查看,第一个挂载的肯定是rootfs。
rootfs被挂载后,kernel立马就解压了那个用gzip压缩的CPIO归档文件到rootfs。每个2.6的内核都会执行这一步,但是默认那个压缩档是空的,所以也就没有往rootfs内添加任何东西。接着kernel会尝试在rootfs去找寻/init,一旦找到init并执行,kernel也就完成了启动工作,然后便是刚刚执行的init程序接管了接下来的工作。如果kernel没法调用"/init"程序,可能就会回过头去,按照便准的做法去解析参数“root=”,试图找到另一个filesystem然后挂载它。
这里的使用initramfs是指,提供一个/init程序给rootfs使用,我们可以通过两种途径实现:使用编译进内核的cpio.gz档案,或者是一个独立的cpio.gz档案。以前的initrd就是编译一个独立的档案,很多使用initramfs的方式也是给它提供一个独立的档案。

开工啦!
为了不看起来那么乏味,我们尝试通过一个看的着的例子来展示这个过程。
唔,我们还是把“hello world”作为第一个要放到initramfs中去的程序。事实上,rootfs和其它的root filesystem并没有什么区别,如果你喜欢,你可以放/etc和/usr和/tmp和。。。然后还可以mount /proc 和/sysfs过去。但是这里我们只需要放/init过去。程序的最后我们使用sleeping而不是exiting,这主要是考虑如果PID 1的程序退出,kernel会panic,这会干扰我们的视线

热点内容
密码没改为什么解不开 发布:2025-02-06 07:42:45 浏览:93
方舟编译器可以开发应用程序么 发布:2025-02-06 07:26:59 浏览:297
什么导师配置好 发布:2025-02-06 07:19:23 浏览:476
263会议视频密码是多少 发布:2025-02-06 07:09:59 浏览:708
uc小说浏览器缓存 发布:2025-02-06 07:05:05 浏览:468
wifi路由手机怎么设置密码 发布:2025-02-06 07:00:57 浏览:986
nsurlsession上传 发布:2025-02-06 06:55:18 浏览:337
亚洲十帅exo访问 发布:2025-02-06 06:51:40 浏览:99
编程一首诗 发布:2025-02-06 06:45:04 浏览:529
惊声尖笑5下载ftp 发布:2025-02-06 06:33:16 浏览:529