手斧Linux – 从LFS到Funtoo (134)

来源:互联网 发布:淘宝黑莓靠谱店铺 编辑:程序博客网 时间:2024/06/07 22:41

2. 如何手工将生成的initramfs包解开?

为什么要解开生成的包呢?因为在排错时,需要查验initramfs包里的内容,以验证思路,坚定决心。以gentoo官方livecd里的initramfs为例,这个initramfs的文件名为gentoo.igz,将它拷到一个临时目录里,然后用以下的命令解开它:

  mv gentoo.igz gentoo.gz

  gunzip gentoo.gz 

  cpio -idv <gentoo

  ls

3. 使用哪个linuxrc?

在genkernel时,可用--linuxrc=/usr/share/genkernel/defaults/linuxrc

指定使用的linuxrc是哪个文件,但在缺省情况下(也就是最原始的/usr/portage/sys-kernel/debian-sources/debian-sources-3.2.29.ebuild),并没有指定。genkernel会使用/usr/share/genkernel/下的多个sh脚本完成多项工作,从这些脚本中,可以知道,在没有指定linuxrc时,genkernel会优先使用/usr/share/genkernel/arch/x86_64/linuxrc,缺少这个文件时,则使用/usr/share/genkernel/default/linuxrc。在这个实验里,真正使用的正是default目录里的那个linuxrc。当需要时,就要在这个文件里修改,然后重新genkernel initramfs,使之生效。

4. 如何在linuxrc里调试?

当initramfs成功加载后,linuxrc会被执行(因在syslinux.cfg 或 isolinux.cfg里指定了init=/linuxrc),在执行的过程中,如果想停下来查看一下,可以在它的执行路径上加一上句

rundebugshell

这时可以进到busybox的shell里,查看当前的文件系统和内核的状态,如lsmod、dmesg等等。

5. initramfs里的busybox是哪里来的?

genkernel会单独给initramfs装配一个busybox,它和最后在rootfs里看到的busybox并不相同。ebuild后,这个专属的busybox的源码包在/var/cache/genkernel/src/busybox-1.20.1.tar.bz2,genkernel在生成initramfs时,会将这个包解开编译,将生成的结果存在/var/tmp/portage/sys-kernel/debian-sources-3.2.29/temp/cache/busybox-1.20.1-x86_64.tar.bz2里,这个cache包里有三个文件:

busybox

.config

.config.gk_orig

因此,如果要修改busybox的源代码,要将上面提到的 busybox-1.20.1.tar.bz2包解开,修改后要重新打包放在原来的位置上,还要将busybox-1.20.1-x86_64.tar.bz2删除,然后再用genkernel initramfs的命令来生成initramfs。

initramfs里的busybox不同于rootfs里的busybox,前者是static方式编译的,可以不依靠别的动态库的支撑就运行起来,这点很重要。

busybox-1.20.1-x86_64.tar.bz2里的.config是编译时使用的配置文件,那这个配置是由谁决定的呢?通过/usr/share/genkernel/的sh文件可以看到,可以在genkernel的命令参数里用--busybox-config来指定具体的config文件,如果显式指定,优先使用/usr/share/genkernel/arch/x86_64/busy-config,不存在时,改用


0 0
原创粉丝点击