快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms
精通initramfs构建stepbystep(十二)

精通initramfs构建stepbystep(十二)

三十五、测试一下 通过前十一节的内容,我们可以说已经完全掌握了init ramfs构建的方法,那么现在就测试一下,拿一个实际的init ramfs来分析,看我们是否能理解多少。 我们选择Debian 4.0 AMD64 版本的init ramfs作为目标进行分析,它的init ramfs文件是initrd.img-2.6.18-6-amd64。首先用cpio命令把init ramfs文件解开,然后打开其中的init脚本文件具体分析。好了,大家利用前面各节的知识开始吧。 作为提示,在这里转载一篇文章,来自...

精通initramfs构建stepbystep(十一)

精通initramfs构建stepbystep(十一)

三十二、编译klibc (1)在linux/libs/klibc/">http://www.kernel.org/pub/linux/libs/klibc/下载klibc的源码,目前最新版本是1.5。 (2)解开源码,并在顶层目录建立一个符号链接linux,指向linux的内核源码。注意,内核源码必须已通过make menuconfig等命令配置好。 (3)执行 make命令,编译klibc。编译完成后,在klibc源码目录树中的usr/dash 和 usr/utils 目录中有shell和一些常用的命...

精通initramfs构建stepbystep(十)

精通initramfs构建stepbystep(十)

二十九、toolchain 在init ramfs中使用uclibc库,关键是构建uclibc的工具链toolchain。构建uclibc 的 toolchain 有两种主要方式:(1)用buildroot工具( http://buildroot.uclibc.org/)自动构建,这也是uclibc的官方标准做法。(2)用CLFS Embedded手册的方法手工创建。目前CLFS Embedded还在开发中,可在http://cross-lfs.org/view/clfs-embedded/x86/中查...

精通initramfs构建stepbystep(九)

精通initramfs构建stepbystep(九)

二十七、直接把cpio打包文件编译进内核 如果我们有一个已经做好的cpio格式的init ramfs,可以在内核编译时直接编译进内核。回忆一下第一节的内容,我们在内核配置参数中的init ramfs sources配置项下输入构建init ramfs的目录路径。其实我们也可以直接输出现成的init ramfs的文件名,这样在内核编译时,就可以把它编译进内核了。 使用这种方法,有两点需要注意: (1)cpio文件不能压缩。一般作为initrd的cpio文件都经过了压缩,所以编译前需要先把压缩过的文件解压。...

精通initramfs构建stepbystep(八)

精通initramfs构建stepbystep(八)

二十五、udev的coldplug模式 内核在启动时已经检测到了系统的硬件设备,并把硬件设备信息通过sysfs内核虚拟文件系统导出。sysfs文件系统由系统初始化脚本挂载到/sys上。udev扫描sysfs文件系统,根据硬件设备信息生成热插拔(hotplug)事件,udev再读取这些事件,生成对应的硬件设备文件。由于没有实际的硬件插拔动作,所以这一过程被称为coldplug。我们的init ramfs就是利用这一机制,加载硬件设备的驱动程序模块。 udev完成coldplug操作,需要下面三个程序: u...

精通initramfs构建stepbystep(七)

精通initramfs构建stepbystep(七)

二十二、内核模块支持 到目前为止,我们在构建init ramfs时还没有涉及内核模块的支持,所用到的硬件驱动程序都是直接编译到内核中。现在我们就看看如何使init ramfs支持内核模块。 首先,内核配置要支持模块,并支持内核模块的自动加载功能:在内核配置菜单中的激活下面的配置项,编译进内核 Load module support / Enable loadable module support / Automatic kernel loading ; 然后把需要的硬件驱动程序配置模块形式,比如把我的机...

精通initramfs构建stepbystep(六)

精通initramfs构建stepbystep(六)

二十、switch_root 命令 除了基于init ramfs的系统(如第四节的mini linux),通常init ramfs都是为安装最终的根文件系统做准备工作,它的最后一步需要安装最终的根文件系统,然后切换到新根文件系统上去。以往的基于ramdisk 的initrd 使用pivot_root命令切换到新的根文件系统,然后卸载ramdisk。但是init ramfs是rootfs,而rootfs既不能pivot_root,也不能umount。为了从init ramfs中切换到新根文件系统,需要作如...

精通initramfs构建stepbystep(五)

精通initramfs构建stepbystep(五)

十七、配置内核支持initrd 到目前为止,我们的init ramfs都由内核编译系统生成的,并链接到内核中。其实我们也可以用cpio命令生成单独的init ramfs,与内核编译脱钩,在内核运行时以initrd的形式加载到内核,以增加灵活性。 首先配置内核使用单独的initrd:在 Device Driver / Block device / 配置目录下,选择 RAM filesystem and RAMdisk ( init ramfs/initrd ) support 配置项;再到 General...

精通initramfs构建stepbystep(四)

精通initramfs构建stepbystep(四)

十一、自动生成/dev下的设备文件 上节用chroot方法试验busybox时,为了简单,是用“绑定”的方式把主机的/dev中的设备文件映射到image目录下的dev目录。在init ramfs上,这种方法显然不能使用。 生成系统的设备文件,现在通常都是用udev动态生成,而init ramfs为了做到通用,动态生成的要求是必须的。在busybox中有一个mdev命令,就是用来动态生成设备文件,填充到/dev目录的。 在系统启动时,用 mdev -s 命令可以根据内核的sysfs文件系统在/dev目录中...

精通initramfs构建stepbystep(三)

精通initramfs构建stepbystep(三)

七、什么是busybox busybox号称是嵌入式Linux中的瑞士军刀——小巧、功能齐全。它把许多常用的Linux命令都集成到一个单一的可执行程序中,只用这一个可执行程序(即busybox)加上Linux内核就可以构建一个基本的Linux系统。busybox程序非常小巧,包含全部命令可执行文件大小也只有750多K。busybox是完全模块化的,可以很容易地在编译时增加、删除其中包含的命令。 由于busybox的这些特点,它广泛应用于LiveCD、应急修复盘、安装盘等系统中。我们也是以它为基础,构建i...

精通initramfs构建stepbystep(二)

精通initramfs构建stepbystep(二)

四、什么是rootfs和ramfs 所有的2.6版本linux内核都有一个特殊的文件系统rootfs,是内核启动的初始始根文件系统,init ramfs的文件会复制到rootfs。如果把init ramfs比作种子,那么rootfs就是它生长的土壤。大部分linux系统正常运行后都会安装另外的文件系统,然后忽略rootfs。 rootfs是ramfs文件系统的一个特殊实例。ramfs是一种非常简单的文件系统,是基于内存的文件系统。ramfs文件系统没有容量大小的限制,它可以根据需要动态增加容量。 ram...

精通initramfs构建stepbystep(一)

精通initramfs构建stepbystep(一)

一、init ramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,然后执行/sbin/init程序完成系统的后续初始化工作...