将内核编译到自定义的目录下

将内核编译到自定义的目录下

参考wiki: https://wiki.archlinux.org/index.php/Kernels/Traditional_compilation

使用ArchLinux作为构建Linux的环境

方法如下 假设我们的customized directory为kernel-build

我们必须在kernel-tree目录结构下对内核进行编译,假设kernel-tree目录名为linux-kernel

下面是具体的操作:

make menuconfig # Change the local version in General Settings
make -j8
make modules -j8 
sudo make modules_install

在 make menuconfig 的时候,最好对内核版本进行修改,使之不会在make modules_install的时候覆盖掉现有内核的modules

修改途径为General Setup里的Local Version项

这样执行之后,应该在arch/ARCH/boot/下面存在bzImage内核镜像,并且modules应该被安装在了/lib/modules/<linux-version>-<localversion> 下

下一步操作, 修改linux.preset文件,并创建initrd文件

## Change to kernel-build directory
cp ../arch/<arch>/boot/bzImage [image-name]
cp /etc/mkinitcpio.d/linux.preset .

修改linux.preset文件, 修改完毕后的内容类似下面

# mkinitcpio preset file for the 'linux' package

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/home/void001/linux-kernel/kernel-build/vmlinuz"

PRESETS=('default' 'fallback')

#default_config="/etc/mkinitcpio.conf"
default_image="/home/void001/linux-kernel/kernel-build/initramfs-linux.img"
#default_options=""

#fallback_config="/etc/mkinitcpio.conf"
fallback_image="/home/void001/linux-kernel/kernel-build/initramfs-linux-fallback.img"
fallback_options="-S autodetect"

我们需要修改ALL_kver, default_image, fallback_image三个选项,使其将image保存到指定的目录下

然后使用

mkinitcpio -p ./linux.preset

创建initrd, initrd-fallback,目前kernel-build目录应该有如下文件:

╰─➤  ls
initramfs-linux-fallback.img  initramfs-linux.img  linux.preset  vmlinuz

然后使用

qemu-system-* -kernel vmlinuz -initrd initramfs-linux.img

就可以运行我们自定义的Linux Kernel了,可以使用uname -a查看Kernel Version~

不过到这里我们仅仅完成了一个RAMDisk的Kernel,没有任何的文件系统被挂载,只有一个rescue filesystem和busybox的一些东西能使用,为了构建一个能够正常使用的Linux Image,包含一个Distro应该有的程序,下面将通过Linux From Scratch项目一步步构建一个可用的自己的Distro

Leave a Reply

Your email address will not be published. Required fields are marked *

18 − three =

This site uses Akismet to reduce spam. Learn how your comment data is processed.