arch Linux 内核编译

Arch Linux 内核编译

主要参考文章:
http://wiki.archlinux.org/index.php/Kernel_Compilation_From_Source
http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
大体过程如下:
1. 获取最新的内核源码
( linux内核首页地址:http://www.kernel.org/pub/linux/kernel/)
$ wget -c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.1.tar.bz22. 解压到编译目录
$ 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 > .config5. 更改配置信息(这一步是最关键,也是最耗时的)
$ 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.img8. 修改 /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
< # Wed Mar 25 07:07:20 2009
---
> # Linux kernel version: 2.6.29.1
> # Tue Apr 28 13:59:58 2009
61c61
< CONFIG_LOCALVERSION="-ARCH"
---
> CONFIG_LOCALVERSION="-CUSTOM"
206c206
< CONFIG_M686=y
---
> # CONFIG_M686 is not set
224c224
< # CONFIG_MCORE2 is not set
---
> CONFIG_MCORE2=y
231d230
< # CONFIG_X86_PPRO_FENCE is not set
357d355
< CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
2993c2991
< # CONFIG_DRM_I915_KMS is not set
---
> CONFIG_DRM_I915_KMS=y
3929,3932d3926

< #
< # Layered filesystems
< #
3968,3979d3961
< # CONFIG_AUFS_FS is not set
< CONFIG_AUFS_FS=m
< CONFIG_AUFS_BRANCH_MAX_127=y
< # CONFIG_AUFS_BRANCH_MAX_511 is not set
< # CONFIG_AUFS_BRANCH_MAX_1023 is not set
< # CONFIG_AUFS_BRANCH_MAX_32767 is not set
< # CONFIG_AUFS_HINOTIFY is not set
< # CONFIG_AUFS_EXPORT is not set
< # CONFIG_AUFS_BR_RAMFS is not set
< # CONFIG_AUFS_DEBUG is not set
< CONFIG_AUFS_BDEV_LOOP=y
< CONFIG_AUFS_INO_T_64=y


还有,我发现如果在 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



类似2:
编译内核</p>
<p>  (一)、建立编译时所需的从属文件,生成依赖(dependency)信息</p>
<p>  # cd /usr/src/linux</p>
<p>  # make dep</p>
<p>   (二)、清除任何老的"编译结果"</p>
<p>  # make clean</p>
<p>   (三)、编译内核</p>
<p>  # make zImage</p>
<p>   内核编译成功后,会在/usr/src/linux/arch/<WBR>i386/<WBR>boot目录中生成一个新内核 的映像文件zImage。<WBR>如果编译的内核很大的话,系统会提示你使用make bzImage命令来编译。这时,<WBR>编译程序就会生成一个名叫bzImage的内核映像文件。</p>
<p>   (四)、编译可加载模块</p>
<p>  如果用户在配置内核时设置了可加载模块,<WBR>则需要对 这些模块进行编译,<WBR>以便将来使用insmod命令进行加载。</p>
<p>  # make modules</p>
<p>  # make modelus_install</p>
<p>   编译成功后,系统会在/lib/<WBR>modules目录下生成一个2.3.14子目录,<WBR>里面存放着新内核的 所有可加载模块。</p>
<p>  五、 启动新内核</p>
<p>  (一)、将新 内核和System.map文件拷贝到/<WBR>boot目录下</p>
<p>  # cp /usr/src/linux/arch/i386/boot/<WBR>bzImage /boot/vmlinuz-2.3.14</p>
<p>  # cp /usr/src/linux/System.map /boot/System.map-2.3.14</p>
<p>   # cd /boot</p>
<p>  # rm -f System.map</p>
<p>   # ln -s System.map-2.3.14 System.map</p>
<p>  (二)、配置 /etc/lilo.conf文件。<WBR>在该文件中加入下面几行:</p>
<p>   default=linux-2.3.14</p>
<p>   image=/boot/vmlinuz-2.3.14</p>
<p>   label=linux-2.3.14</p>
<p>  root=/dev/hda1</p>
<p>   read-only</p>
<p>  (三)、使新配置生效</p>
<p>  # /sbin/lilo</p>
<p>  (四)、重新启动系统</p>
<p>  # /sbin/reboot</p>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值