Skip to content

Latest commit

 

History

History
91 lines (82 loc) · 4.36 KB

linux内核编译.md

File metadata and controls

91 lines (82 loc) · 4.36 KB

下载

mirrors.kernel.org 这儿可以下载到各个版本的linux内核 在/usr/src/下解压

tar xzvf linux-x.x-xx.tar.gz

准备编译环境

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

编译前需要准备好gcc环境,在编译2.6内核时候因为gcc问题一直在报错,因此要先安装一个低版本的gcc

gcc环境不存在降级,而是多版本并存

ubuntu为例,安装gcc-3.4,先修改源,将如下内容添加到/etc/apt/sources.list

deb http://snapshot.debian.org/archive/debian/20070730T000000Z/ lenny main
deb-src http://snapshot.debian.org/archive/debian/20070730T000000Z/ lenny main
deb http://snapshot.debian.org/archive/debian-security/20070730T000000Z/ lenny/updates main
deb-src http://snapshot.debian.org/archive/debian-security/20070730T000000Z/ lenny/updates main

执行apt-get update,可能会出现如下信息:

W: GPG error: http://snapshot.debian.org lenny/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A70DAF536070D3A1

无视直接安装:

sudo apt-get install gcc-3.4 g++-3.4

这样通过dpkg --list | grep compiler就能看到我们已经安装好了两个gcc环境,然后就是修改gcc的命令链接

使用update-alternative可以非常方便的更换链接

安装好链接

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 40 --slave /usr/bin/g++ g++ /usr/bin/g++-3.4

然后选取

sudo update-alternatives --config gcc

现在gcc -v看一下,当前是否为3.4版本

编译

make mrproper
make clean

先执行下净化下原始源码。 接着执行

make menuconfig
make defconfig 

这儿到底该怎么配,建议看鸟哥linux私房菜

往往这时候会出错,请参考编译一个gcc 4.8cannot find crti.o: No such file or directory我是libc的问题,这儿建议一个个谷歌错误,反正问题真的多,一度想放弃

其中我用的gcc 3.4.6存在一个文件未能链接到正常库文件的问题

make   //编译

等待一个电影的时间,编译完成。

出现unsupported instruction 'mov'的报错,这是因为在x64架构的机器上编译,需要给编译器指定用32位,即在Makefile所有的AS指令后面加上--32,在所有的CC后面加上-m32,但是还是存在各种问题,没办法,更换成gcc-4.4,需要重新修改链接,同时我也修改了我的源码从2.6.0换成了2.6.32.1,现在make没啥问题

编译完成没有报错的话,安装先前启用的那些模块

make modules_install

都结束后,安装内核

make install

最后就是将安装好的内核作为引导了,如果是grub的话则设置后更新下grub

sudo update-initramfs -c -k 2.6.32.1
sudo update-grub

然后我就还是进入到了当前的内核里!!查看下grub.cfg中,发现2.6.32.1是写进去的,然后我是虚拟机的问题,因此要修改默认的入口,这个属于Advanced options,因此修改/etc/default/grub变成GRUB_DEFAULT="Ubuntu, with Linux 2.6.32.1",然后有可能会提示Warning: Please don't use old title Ubuntu, with Linux 2.6.32.1'`,这样按照后面的提示修改了就行。

参考