linux 清空编译配置,Linux kernel编译指南

郭阳曜
2023-12-01

最近帮一个项目编译内核,特别学习了一下,记下了过程。如果问题,可以及时联系我

编译命令

1.清理工作目标

make clean: 删除编译中间文件,但是保留配置

make mrproper:删除包括配置文件的所有构建文件

make distclean:执行mrproper所做的一切,并删除备份文件

2.配置内核

make menuconfig:文本图形方式配置内核

make oldconfig:基于当前的.config文件提示更新内核

make defconfig:生成默认的内核配置

make allmodconfig:所有的可选的选项构建成模块

make allyesconfig:生成全部选择是内核配置

make noconfig:生成全部选择否的内核配置

3.构建内核目标

make all:构建所有目标

make bzImage:构建内核映像

make modules:构建所有驱动

make dir/:构建指定目录

make dir/file.[s|o|i]:构建指定文件

make dir/file.ko:构建指定驱动

4.安装内核

make install:安装内核

make modules_install:安装驱动

5.打包工具

make rpm:生成内核的RMP包

make rpm-pkg:生成带源码的RPM包

make binrpm-pkg:生成包含内核和驱动的RMP包

make deb-pkg:生成包含内核和驱动的debian包

6.生成文档工具

make xmldocs:生成xml文档

make pdfdocs:生成pdf文档

maek htmldocs:生成html文档

获得内核源码

直接去www.kernel.org官网下载。如果在Ubuntu下,可以通过apt-get install linux-source下载,下载后的目录为/usr/src

解压文件

tar xvf linux-source-3.13.0.tar.bz2

清理环境

make mrproper

首次编译不需要这次操作

创建内核配置

make menuconfig

保存后会在当前目录下生成.config的隐藏文件

构建内核

一定要用root权限编译内核,不然会产生很多诡异问题。

make all -j 4

编译完成时间要看编译主机的配置,强大的机器大概20分钟就能编译完成。配置差可能需要数小时时间。编译完成后,主要生成了./arch/x86/boot/bzImage和initrd.image文件。

安装内核

make install

默认会把vmlinuz-3.16.0ydoing, initrd.img-3.16.0ydoing, System.map-3.16.0ydoing, config-3.16.0ydoing文件安装到路径是/boot。

修改启动项

我是在Ubuntu14.04的机器上操作的,引导的工具是grub2。这个是默认安装好的,注意不是grub1,所以要修改/boot/grub/grub.cfg。我之前以为是grub1,修改了menu.list,发现根本没用,郁闷了很久。grub.cfg默认是不可写的,所以修改之前要更改文件权限。

chmod +x grub.cfg

vim grub.cfg

模仿已有的menuentry 增加如下:

menuentry 'Ubuntu, with Linux 3.16.0ydoing' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0ydoing-advanced-e65c8b88-8698-45a3-8420-384d43b37119' {

recordfail

load_video

gfxmode $linux_gfx_mode

insmod gzio

insmod part_msdos

insmod ext2

set root='hd0,msdos6'

if [ x$feature_platform_search_hint = xy ]; then

search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos6 --hint-efi=hd0,msdos6 --hint-baremetal=ahci0,msdos6 e65c8b88-8698-45a3-8420-384d43b37119

else

search --no-floppy --fs-uuid --set=root e65c8b88-8698-45a3-8420-384d43b37119

fi

echo 'Loading Linux 3.16.0ydoing ...'

linux /boot/vmlinuz-3.16.0ydoing root=UUID=e65c8b88-8698-45a3-8420-384d43b37119 ro quiet splash $vt_handoff

echo 'Loading initial ramdisk ...'

initrd /boot/initrd.img-3.16.0ydoing

}

注意要修改有3个地方,一个是menuentry ‘Ubuntu, with Linux 3.16.0ydoing’ ,第二个是linux /boot/vmlinuz-3.16.0ydoing ,第三个是initrd /boot/initrd.img-3.16.0ydoing。

重新启动后就可以在grub的菜单中看到Ubuntu, with Linux 3.16.0ydoing的选项

可以将initrd.img编译进入bzImage

可以将initrd.img和bzImage合二为一,只要在make menuconfig

配置initramfs的路径就再编译一次就行了。

 类似资料: