手斧Linux – 从LFS到Funtoo (133)

原创 2015年07月09日 17:38:20

第17章 调试genkernel 和debian-souces

1. 如何直接用genkernel部分编译debian-souces?

在ebuild /usr/portage/sys-kernel/debian-sources/debian-sources-3.2.29.ebuild clean install来编译kernel+initramfs时,会使用genkernel这个工具完成编译过程。整个ebuild过程挺花时间的,有时出于实验的目的,所做的修改并不一定要完全编译,例如,需要修改initramfs里的linuxrc,则只要编译initramfs,并不要编译kernel和modules。

如何知道在ebuild过程中,genkernel在哪个工作目录下,用什么参数被调用呢?为了了解这个问题,使用了一个调试技巧。修改/usr/portage/sys-kernel/debian-sources/debian-sources-3.2.29.ebuild,在genkernel命令的前一行加上一行:

cat > templog <<EOF

在genkernel命令的后一行加上一行:

EOF

然后,再执行一次ebuild /usr/portage/sys-kernel/debian-sources/debian-sources-3.2.29.ebuild clean install,genkernel并不会真正执行起来,但它的命令参数被存到templog文件里了,而templog所在的目录就是它工作的当前目录,在这个实验里,我看到templog文件在/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/linux-3.2.29目录里。

因此,用下面的命令可以只编译生成initramfs:

cd /var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/linux-3.2.29

genkernel \

--linuxrc=/usr/share/genkernel/defaults/linuxrc \

  --no-save-config \

  --kernel-config="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/temp/config" \

--kernname="debian-sources" \

--build-src="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/linux-3.2.29" \

--build-dst=/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/build \

--makeopts="" \

--firmware-dst=/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/out/lib/firmware \

--cachedir="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/temp/cache" \

--tempdir="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/temp/twork" \

--logfile="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/genkernel.log" \

--bootdir="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/out/boot" \

--lvm --luks --iscsi --module-prefix="/var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/out" \

initramfs

成生的文件在 /var/tmp/portage/sys-kernel/debian-sources-3.2.29/work/out/boot/目录里。如果需要编译kernel,只要将initramfs换成kernel调用genkernel就可以了。这样做,可以在排错时,对kernel或initramfs的局部重构,加快排错的过程。

手斧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
  • 295

手斧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
  • 185

手斧Linux – 从LFS到Funtoo (64)

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

手斧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
  • 152

手斧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
  • 174

手斧Linux – 从LFS到Funtoo (10)

具体步骤在下一章里。
  • sanitywolf
  • sanitywolf
  • 2014年12月17日 21:48
  • 193

手斧Linux – 从LFS到Funtoo (19)

第7节 编译gcc  32位 pass1 (可选) 和之前的32位的binutils一样,这个步骤也是可选的,也是为了尽早获得相关的实验经验。 配置时,使用了32位的target和lib32。 ...
  • sanitywolf
  • sanitywolf
  • 2014年12月18日 20:19
  • 167

手斧Linux – 从LFS到Funtoo (4)

第2章 宿主机环境 这是一台安装了ubuntu 11.04的x86 64位系统。在整个实验过程中,最初使用了它的gcc编译器生成了目标系统用的编译器,之后还使用了它的内核来测试新生成的目标文件系统。...
  • sanitywolf
  • sanitywolf
  • 2014年12月17日 21:39
  • 261

手斧Linux – 从LFS到Funtoo (25)

统环境,需将它改向/tools/下的库文件目录,这个动作在后面的描述中讲解。 rm dummy.* a.out...
  • sanitywolf
  • sanitywolf
  • 2014年12月24日 21:00
  • 182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手斧Linux – 从LFS到Funtoo (133)
举报原因:
原因补充:

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