免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1247 | 回复: 0
打印 上一主题 下一主题

Arch Linux 下编译内核 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-29 16:15 |只看该作者 |倒序浏览

                                                记得刚开始使用 Linux ,看一些入门的指导书的时候,书上总是提到编译内核。当时感觉这个好高级,我等新手是不敢贸然尝试。
前几天在安装 Gentoo 的过程中,不得已自己编译了一次内核,感觉不是很难嘛。所以我就在 Arch 下也自己编译了一下。
主要参考了这两篇文章:
http://wiki.archlinux.org/index.php/Kernel_Compilation_From_Source
http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
大体过程如下:
  1. 获取最新的内核源码$ wget -c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.1.tar.bz2
(刚刚去看了一下, linux-2.6.29.2 已经发布了)
  2. 解压到编译目录
$ mkdir ~/src
$ tar xjvf linux-2.6.29.1.tar.bz2 -C ~/src/
$ cd ~/src/linux-2.6.29.1
  3. 编译前清洁一下
$ make mrproper
  4. 获取当前系统内核的 config 文件,在这个基础上修改配置信息
$ zcat /proc/config.gz > .config
  5. 更改配置信息(这一步是最关键,也是最耗时的)
$ make oldconfig
$ make menuconfig
  6. 编译和安装
我采用了 makepkg + pacman 的方式,这种方法更加简洁。编译,安装和卸载都很方便。
在内核源代码目录下创建两个文件: PKGBUILD 和 kernel26.install
$ cat PKGBUILD
               
               
                pkgname=kernel26-custom
basekernel=2.6.29.1
pkgver=2.6.29.1
pkgrel=0428 # 我用日期来表示
pkgdesc="The Linux Kernel and modules"
arch=('i686')
url="http://www.kernel.org"
depends=('module-init-tools')
provides=(kernel26)
install=kernel26.install
build() {
  # build!
  cd ..
  _kernver="${basekernel}${CONFIG_LOCALVERSION}"
  make || return 1
  mkdir -p $startdir/pkg/{lib/modules,boot}
  make INSTALL_MOD_PATH=$startdir/pkg modules_install || return 1
  cp System.map $startdir/pkg/boot/System.map26-custom
  cp arch/x86/boot/bzImage $startdir/pkg/boot/vmlinuz26-custom
  install -D -m644 .config $startdir/pkg/boot/kconfig26-custom
  # set correct depmod command for install
  sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" $startdir/kernel26.install
}
$ cat kernel26.install
post_install () {
  echo ">>> Updating module dependencies. Please wait ..."
  KERNEL_VERSION=2.6.29.1
  /sbin/depmod -A -v $KERNEL_VERSION > /dev/null 2>&1
}
post_upgrade() {
  echo ">>> Updating module dependencies. Please wait ..."
  KERNEL_VERSION=2.6.29.1
  /sbin/depmod -A -v $KERNEL_VERSION > /dev/null 2>&1
}
op=$1
shift
$op $*
执行 $ makepkg -c ,自动编译,并生成内核安装包(在我的机器上约需要40分钟),文件名类似于:
kernel26-custom-2.6.29.1-0428-i686.pkg.tar.gz

然后就可以用 pacman 安装之了:
# pacman -U kernel26-custom-2.6.29.1-0428-i686.pkg.tar.gz
  7. 创建 ramdisk
# mkinitcpio -k 2.6.29.1-custom -g /boot/kernel26-custom.img
  8. 修改 /boot/grub/menu.lst ,添加一项启动项。
title  Arch Linux-2.6.29.1-CUSTOM
root   (hd0,0)
kernel /vmlinuz26-custom root=/dev/sda2 ro
initrd /kernel26-custom.img
  9. Reboot
整个过程最关键的一部在于 make menuconfig 。我第一遍几乎把所有的项目都 check 了一次,把自认为不需要用到的功能和模块全部去除了,结果进不了系统,卡在挂载分区上了。肯定是因为我把必要的功能都去除了的缘故。
第二遍我不理会那些多余的模块了,只修改了关键几处,比如 CPU 型号,开启 KMS 等。下面是成果:
$ diff config-origin config-custom
3,4c3,4
# Linux kernel version: 2.6.29.1
> # Tue Apr 28 13:59:58 2009
61c61
CONFIG_LOCALVERSION="-CUSTOM"
206c206
# CONFIG_M686 is not set
224c224
CONFIG_MCORE2=y
231d230
CONFIG_DRM_I915_KMS=y
3929,3932d3926
还有,我发现如果在 High Memory Support 里选择 off 的话,我 1GB 的内存只能识别 880MB ,所以最好选择 4GB 那一项。
现在我的系统信息:
$ uname -a
Linux Homo 2.6.29.1-CUSTOM #1 SMP PREEMPT Tue Apr 28 14:33:42 CST 2009 i686 Intel(R) Core(TM) Duo CPU T2350 @ 1.86GHz GenuineIntel GNU/Linux
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93312/showart_1914367.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP