手斧Linux – 从LFS到Funtoo (134)

原创 2015年07月09日 17:41:16

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,不存在时,改用


手斧Linux – 从LFS到Funtoo (2)

第1章 前言 2012年春节前,我开始学习LFS,详尽的LFS手册,让我有依有据地体验了一个系统的构造过程,漫长而劳累。接下来,我开始着迷于另一个问题:如何自己动手从源码开始构造出ubuntu的发行...
  • sanitywolf
  • sanitywolf
  • 2014年12月17日 21:36
  • 329

手斧Linux – 从LFS到Funtoo (136)

第18章 虚拟机的使用 1. virtualbox 主页:https://www.virtualbox.org/。ubuntu 10.04里自带的virtualbox是32位的,不支持x86_64...
  • sanitywolf
  • sanitywolf
  • 2015年07月09日 17:43
  • 294

手斧Linux – 从LFS到Funtoo (97)

第3节 安装第一批软件包 接下来,可以用ebuild...qmerge来安装软件包了,portage系统将完成源码包的定位、下载、解开、编译、安装、管理等工作。 1. ebuild /usr/...
  • sanitywolf
  • sanitywolf
  • 2015年06月27日 05:16
  • 216

手斧Linux – 从LFS到Funtoo (21)

第8节 安装linux header 在以后的编译中,需要这些头文件,要在这里将它们安装到编译依惯例搜索的地方。 tar xvf ../linux_3.2.29.orig.tar.xz cd...
  • sanitywolf
  • sanitywolf
  • 2014年12月24日 20:46
  • 182

手斧Linux – 从LFS到Funtoo (64)

第7节 编译安装 glibc 32位 glibc是充分自给自足的代码,但是,i686的glibc要用i686的gcc来编译。前面,我们己经做好了准备,现在开始编译i686的glibc 。 命令...
  • sanitywolf
  • sanitywolf
  • 2015年06月26日 23:03
  • 150

手斧Linux – 从LFS到Funtoo (68)

file img-64/lib64/libz.so.1.2.5  img-64/lib64/libz.so.1.2.5: ELF 64-bit LSB shared object, x86-64, ...
  • sanitywolf
  • sanitywolf
  • 2015年06月26日 23:09
  • 151

手斧Linux – 从LFS到Funtoo (78)

第20节 编译安装ppl  32位 64位 命令如下: tar xvf ../ppl_0.11.2.orig.tar.bz2 先编译32位版本, mkdir ppl-build-32 c...
  • sanitywolf
  • sanitywolf
  • 2015年06月27日 04:29
  • 173

手斧Linux – 从LFS到Funtoo (89)

cd .. 第3节 修改doebuild.py里的搜索路径 让portage工作时能搜/tools/下的工具,否则会因找不到脚本里调用的程序报错而不能工作。 用手工编辑,直观可靠,红色的...
  • sanitywolf
  • sanitywolf
  • 2015年06月27日 04:39
  • 204

手斧Linux – 从LFS到Funtoo (153)

wget http://mirrors.xmu.edu.cn/gentoo/distfiles/realdev-1.0.tar.bz2 wget http://mirrors.xmu.edu.cn/...
  • sanitywolf
  • sanitywolf
  • 2015年07月09日 18:04
  • 328

手斧Linux – 从LFS到Funtoo (82)

接着编译64位版本。 mkdir cloog-build-64 cd cloog-build-64 CC="gcc -B/usr/bin" LD="ld" \ ../cloog-0.16....
  • sanitywolf
  • sanitywolf
  • 2015年06月27日 04:32
  • 238
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手斧Linux – 从LFS到Funtoo (134)
举报原因:
原因补充:

(最多只允许输入30个字)