Chinaunix首页 | 论坛 | 博客
  • 博客访问: 202557
  • 博文数量: 22
  • 博客积分: 641
  • 博客等级: 上士
  • 技术积分: 756
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-27 00:41
文章分类

全部博文(22)

文章存档

2014年(1)

2013年(1)

2012年(20)

分类: LINUX

2012-07-21 19:29:34

本篇文章系个人实践总结,基于网上的资料进行实践整理。

背景:
在Ubuntu Linux 环境下,我们编译Linux内核时,通常要经历的步骤:配置内核--config的配置;编译内核和模块--“make”、“make modules”、“make modules_install”、“make install”,如果前面的配置没有问题,需要等待一段时间就可以编译好模块和内核了;生成initramfs并配置Grub--经过第二个步骤的“make install”,kbuild系统会把生成的内核镜像拷贝到INSTALL_PATH路径下(默认这个路径是/boot),但这时并不能使用,我们必须配置手动Grub才可以。另外,还要会使用initramfs来做引导之用,我们还需要为我们的新内核手动生成initramfs镜像。
从上面步骤来看,稍显繁琐。在实际工作中,我碰到这样一个情况,做的产品跟Ubuntu10.04 64bit的内核因为某些原因存在冲突。需要先把Linux系统的内核重新配置好,再编译,才可以完整安装开发的产品,而目前产品交付给客户的时候,是需要客户根据指导书进行内核的重新编译后,再安装开发的产品,这样带来很多的不方便。

解决方法:
1、我们可以使用make-kpkg简化这个流程,而且还能带来其他额外的好处
2、make-kpkg可以使内核deb化安装,在交付客户产品的时候,可以直接给予deb进行dpkg安装就可以进行内核的替换安装,从而带来极大的便捷。
3、下面用一个例子,来简单讲解如何制作内核deb包,事先要装好kernel-package、build-essential包。
4、准备一个内核源码包,解压出来
  1. root@huang-VirtualBox:/usr/src# ls
  2. linux-3.4.6 linux-headers-3.0.0-22 
  3. linux-3.4.6.tar.bz2 linux-headers-3.0.0-22-generic
5、进入源码目录,将配置文件配置好。这里为了示例,我用原来系统的config配置文件,将/boot下的config文件拷贝到当前目录,然后用make-kpkg进行出包。

  1. root@huang-VirtualBox:/usr/src/linux-3.4.6# cp /boot/config-3.0.0-22-generic ./.config
  2. root@huang-VirtualBox:/usr/src/linux-3.4.6#make-kpkg --initrd kernel-image
  3. ###编译的过程,挺久的
  4. ###make-kpkg命令的简单使用介绍
  5. ###通常我们会看到这样的命令
  6. ###make-kpkg --initrd --revision huang.001 --append-to-version -20110107 kernel_image
  7. ###--initrd选项会让make-kpkg自动帮我们生成initramfs;
  8. ###--revision会给生成的deb文件加上一个版本信息。这个参数只是影响到文件名,如果不指定,默认会是“10.00.Custom”;
  9. ###--append-to-version也是一种版本信息,它不仅出现在deb安装包的文件名里,也会影响到kernel的名称,比如本例中,内核更新完成之后,用“uname -r”察看会得到“3.4.6-20110107”,不指定的话,默认内核版本号;
  10. ###kernel_image表示生成内核和默认模块的安装包,另外您也可以加上kernel_headers,这样make-kpkg会再生成一个内核头文件的安装包。
  11. ###本例中make-kpkg --initrd kernel-image
  12. ###产生的deb包为linux-image-3.4.6_3.4.6-10.00.Custom_i386.deb

  13. root@huang-VirtualBox:/usr/src# ls
  14. linux-3.4.6          linux-headers-3.0.0-22          linux-image-3.4.6_3.4.6-10.00.Custom_i386.deb
  15. linux-3.4.6.tar.bz2  linux-headers-3.0.0-22-generic
  16. ###是不是就这样直接安装deb就好了,完成内核的安装替换了呢
  17. ###这里我碰到了一个问题,/boot目录下没有生成initrd.image文件,只有vmlinuz文件,怎么回事呢,有问题就得解决么,继续谷歌,百度么
  18. ###google了一把,找到资料说ubuntu10.04开始,用上面命令生成deb包,安装后不会生成initrd,说kernel-package作者是故意这样做的,现在是要通过hook来完成initrd的生成,没办法我刚好是ubuntu10.04之后,继续解决
  19. ###需要copy一个initramfs脚本到你要安装的rootfs的/etc/kernel/postinst.d/ 目录里,然后在安装kernel的时候post-install脚本会通过hook来完成initrd 的生成

  20. root@huang-VirtualBox:/usr/src#cp /usr/share/kernel-package/examples/etc/kernel/postinst.d/initramfs  /etc/kernel/postinst.d/
  21. ###拷贝过来,保持此目录下只有此脚本,下面对deb进行安装
  22. ###直接dpkg -i linux-image-3.4.6_3.4.6-10.00.Custom_i386.deb
  23. ###安装完去看一下?

  24. root@huang-VirtualBox:/boot# ls
  25. initrd.img-3.4.6  System.map-3.4.6  vmlinuz-3.4.6 config-3.4.6 
  26. ###看到没!!!!!!这里省略了其他信息,再看看grub信息??
  27. root@huang-VirtualBox:/boot#cat grub/grub.cfg
  28. menuentry 'Ubuntu, with Linux 3.4.6' --class ubuntu --class gnu-linux --class gnu- 
  29. -class os {
  30.         recordfail
  31.         set gfxpayload=$linux_gfx_mode
  32.         insmod gzio
  33.         insmod part_msdos
  34.         insmod ext2
  35.         set root='(hd0,msdos1)'
  36.         search --no-floppy --fs-uuid --set=root be22009d-e2b0-40c5-b179-7f19a900c758
  37.         linux   /boot/vmlinuz-3.4.6 root=UUID=be22009d-e2b0-40c5-b179-7f19a900c758 ro   quiet splash vt.handoff=7
  38.         initrd  /boot/initrd.img-3.4.6
  39. }
  40. menuentry 'Ubuntu, with Linux 3.4.6 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
  41.         recordfail
  42.         insmod gzio
  43.         insmod part_msdos
  44.         insmod ext2
  45.         set root='(hd0,msdos1)'
  46.         search --no-floppy --fs-uuid --set=root be22009d-e2b0-40c5-b179-7f19a900c758
  47.         echo    'Loading Linux 3.4.6 ...'
  48.         linux   /boot/vmlinuz-3.4.6 root=UUID=be22009d-e2b0-40c5-b179-7f19a900c758 ro recovery nomodeset
  49.         echo    'Loading initial ramdisk ...'
  50.         initrd  /boot/initrd.img-3.4.6
  51. }
  52. ###有木有!!!!成功了,有木有,呵呵,省略了其他信息








 
阅读(7874) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~