当我的机器上已经运行 Ubuntu 时,我该如何修改内核?

当我的机器上已经运行 Ubuntu 时,我该如何修改内核?

抱歉,如果这是一个非常愚蠢的问题,但我是 Linux 新手,我想尝试弄清楚如何修改自己的系统。从我目前对 Linux 的了解来看,我想我真正寻找的是内核的源代码。我知道有一些资源可以让我下载内核的副本(例如 kernel.org),但大概那只是一个副本,我必须在修改后从当前内核切换到新内核才能看到我所做的更改生效。有没有办法避免这样做,而只修改我已经拥有的内核?如果没有,我该如何告诉 Ubuntu 使用我下载的新内核而不是原始内核?我怎么知道我的更改是否会搞砸系统?提前感谢您的帮助!

答案1

您的问题可以分为两部分,因为您可以在运行时调整一些内核参数以及字节修补,但作为初学者,我强烈建议您尝试字节修补。

就你的情况而言,我强烈建议你先修改源代码,然后重新编译、安装并测试。确实也存在在模拟器中测试内核的方法,例如,无需重新启动系统。QEMU 是其中之一...

进行内核开发的方法有很多种,如果你有使用 ubuntu 的经验,这里有一种比较简单的方法。

快速而肮脏(您需要完成一些参数\路径):

sudo apt-get install libncurses5-dev binutils-dev linux-source 
sudo apt-get install fakeroot build-essential crash kernel-wedge kernel-package  

mkdir ~/src
cd ~/src
apt-get source linux-image-$(uname -r)
cd linux-3._LINUX_SRC_FOLDER_

如果您愿意,只需进入菜单进行调整,或者直接退出并保存。

make menuconfig

编译时的并行级别。(处理器核心数 +1)

export CONCURRENCY_LEVEL=5

选择目标系统,用谷歌搜索或忽略它。两个例子

export CHOST="x86_64-pc-Linux-gnu"
export CHOST="i686-pc-linux-gnu"

如果您希望编译器优化例如。

export CFLAGS="-march=native -O2 -pipe"
export CXXFLAGS="$CFLAGS"

进行调整,例如。

vim ~/src/LINUX_SRC_FOLDER/include/linux/hid.h 
cd  ~/src/LINUX_SRC_FOLDER

编译内核并制作deb包,并报告所用时间。

time fakeroot make-kpkg --initrd --append-to-version=-tweak-CUSTOM-NAME kernel-image kernel-headers

安装已编译的内核和头文件。

sudo dpkg -i ../linux-image-3._YOUR_DEB_FILE_
sudo dpkg -i ../linux-headers-3._YOUR_DEB_FILE_

您的内核应该已安装并显示在 grub-boot-menu 中。重新启动。

sudo reboot

启用 grub 启动菜单或在启动期间点击 shift 几次。

选择您想要启动的内核。

如果您使用本指南,请随意改进它。

答案2

有几种不同的方法可以做到这一点,但最好尽可能多地了解您的计算机(硬件方面)。我使用了此处的说明:http://www.howtogeek.com/howto/ubuntu/how-to-customize-your-ubuntu-kernel/。我不得不做一些不同的事情,因为网站上的内核版本比我拥有的版本要旧。

答案3

Ubuntu Wiki 有一篇关于此的文章:内核/编译

这篇文章有点过时了,但与其他方法的重要区别在于,它们解释了如何从内核的 Git 存储库获取源代码,如果您计划将工作树更新到新版本,这一点很重要。

相关内容