如何安装实时内核?

我已经阅读了很多类似问题的主题,但在阅读完答案后,我感到非常困惑。 我在其中找到了许多带存储库的url但人们讨论了为一个或两个版本的ubuntu制作了哪些存储库,但我没有发现11.10版本。 还为时过早吗? 我应该降级我的ubuntu以获得实时内核吗?

RT内核项目的长期目标是最终在标准内核中拥有所有RTfunction,并且这一进展很顺利 。 RT补丁在过去发布过不规则版本,2011年8月对kernel.org的攻击导致3.0版本无法访问数月,但现在情况看起来很好:有3.0的补丁,3.2的补丁(与内核一致) Ubuntu 11.10和12.04中的版本,3.4的另一个版本,请参见此处 。

如果你使用的是Precise,你可以使用Alessio Bogani的Realtime PPA ,它已经将应用了RT补丁的香草内核打包好,并且与Precise中的版本号保持同步。

如果您希望手动构建RT内核,请首先安装所需的软件包:

sudo apt-get install kernel-package fakeroot build-essential libncurses5-dev 

然后获取vanilla内核和RT补丁 (版本号有些陈旧,根据需要进行调整):

 mkdir -p ~/tmp/linux-rt cd ~/tmp/linux-rt wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.bz2 # Alternatively, try http://mirror.be.gbxs.net/pub/linux/kernel/projects/rt/3.4/patch-3.4-rt7.patch.bz2 # if the following is not available: wget http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/patch-3.4-rt7.patch.bz2 tar xjvf linux-3.4.tar.bz2 cd linux-3.4 patch -p1 < <(bunzip2 -c ../patch-3.4-rt7.patch.bz2) 

然后使用以下配置内核:

 cp /boot/config-$(uname -r) .config && make oldconfig 

在出现提示时应选择“完全抢占”(选项5),并在每个提示时按Enter键将其他所有内容保留为默认值。 -lowlatency内核的配置可能是一个比-generic内核更好的起点。

然后用以下内容构建内核:

 sed -rie 's/echo "\+"/#echo "\+"/' scripts/setlocalversion make-kpkg clean CONCURRENCY_LEVEL=$(getconf _NPROCESSORS_ONLN) fakeroot make-kpkg --initrd --revision=0 kernel_image kernel_headers 

最后安装新内核:

 sudo dpkg -i ../linux-{headers,image}-3.4.0-rt7_0_*.deb 

此时您应该可以重新启动到RT内核。 如果内核无法启动,请确保仔细检查引导参数,并在引导加载程序中相应地编辑它们。 例如,ACPIfunction可能会影响您的实时系统(如rt.wiki.kernel.org所述)。 在这种情况下,添加acpi = off可能是一种解决方案。

请注意,虽然RT补丁与Nvidia二进制驱动程序不兼容(但请参阅下面的用户“rt-kernel”的post,以及解决方法的问题 ),并且Ubuntu内核补丁不会出现,所以你可能有您以前没有的硬件问题。 PPA包和编译内核都是如此。 当然,如果它们给你带来麻烦,你总是可以启动你的-generic内核并卸载实时内核包。

另一个选择是从KXStudio的repos安装RTKernel。 他保留了一套针对音频和音乐制作的软件包,他有一个实时和低延迟的软件包。

http://kxstudio.sourceforge.net/Main_Page https://launchpad.net/~kxstudio-team/+archive/kernel

据我所知,实时内核的开发跟不上Ubuntu发布周期。 如果必须运行实时内核,则可能必须运行旧版本。

有关更多信息,请参阅https://help.ubuntu.com/community/UbuntuStudio/RealTimeKernel 。

请注意,在低延迟内核上似乎至少有一些当前的工作: https : //launchpad.net/~abogani/+archive/ppa?field.series_filter = oneiric 。

如果您依赖于使用nvidia二进制驱动程序,则可以使用此修补程序修补原始驱动程序(仅适用于具有rt-patches的3.4+内核)此修补程序没有任何保证或保修! 使用它自担风险.->

 Index: kernel/conftest.sh =================================================================== --- kernel/conftest.sh.orig +++ kernel/conftest.sh @@ -95,7 +95,7 @@ fi fi - CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" + CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS -I$OUTPUT/arch/x86/include/generated $AUTOCONF_CFLAGS" test_xen @@ -126,7 +126,7 @@ CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then - CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$SOURCES/arch/x86/include/generated" + CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$OUTPUT/arch/x86/include/generated" elif [ "$ARCH" = "ARMv7" ]; then CFLAGS="$CFLAGS -I$SOURCES/arch/arm/include -I$SOURCES/arch/arm/include/generated" fi @@ -512,7 +512,12 @@ # and if it as an 'event' member. # echo "$CONFTEST_PREAMBLE - #include  + #include  + #if LINUX_VERSION_CODE > KERNEL_VERSION(3, 3, 0) + #include  + #else + #include  + #endif #include  void conftest_pm_message_t(pm_message_t state) { pm_message_t *p = &state; @@ -965,11 +970,12 @@ # echo "$CONFTEST_PREAMBLE #include  + #include  void conftest_acpi_walk_namespace(void) { acpi_walk_namespace(); }" > conftest$$.c - $CC $CFLAGS -c conftest$$.c > /dev/null 2>&1 + #CC $CFLAGS -c conftest$$.c > /dev/null 2>&1 rm -f conftest$$.c if [ -f conftest$$.o ]; then @@ -980,6 +986,7 @@ echo "$CONFTEST_PREAMBLE #include  + #include  void conftest_acpi_walk_namespace(void) { acpi_walk_namespace(0, NULL, 0, NULL, NULL, NULL, NULL); }" > conftest$$.c @@ -996,6 +1003,7 @@ echo "$CONFTEST_PREAMBLE #include  + #include  void conftest_acpi_walk_namespace(void) { acpi_walk_namespace(0, NULL, 0, NULL, NULL, NULL); }" > conftest$$.c @@ -1603,6 +1611,9 @@ fi fi fi + + RET=0 + SELECTED_MAKEFILE=Makefile.kbuild if [ "$RET" = "0" ]; then ln -s $SELECTED_MAKEFILE Makefile Index: kernel/nv-linux.h =================================================================== --- kernel/nv-linux.h.orig +++ kernel/nv-linux.h @@ -111,7 +111,11 @@ #include  #include  /* do_div() */ +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 3, 0) +#include  +#else #include  /* cli, sli, save_flags */ +#endif #include  /* ioremap, virt_to_phys */ #include  /* access_ok */ #include  /* PAGE_OFFSET */ @@ -291,17 +295,17 @@ #endif #endif -#if defined(CONFIG_PREEMPT_RT) -typedef atomic_spinlock_t nv_spinlock_t; -#define NV_SPIN_LOCK_INIT(lock) atomic_spin_lock_init(lock) -#define NV_SPIN_LOCK_IRQ(lock) atomic_spin_lock_irq(lock) -#define NV_SPIN_UNLOCK_IRQ(lock) atomic_spin_unlock_irq(lock) -#define NV_SPIN_LOCK_IRQSAVE(lock,flags) atomic_spin_lock_irqsave(lock,flags) +#if defined(CONFIG_PREEMPT_RT_FULL) +typedef raw_spinlock_t nv_spinlock_t; +#define NV_SPIN_LOCK_INIT(lock) raw_spin_lock_init(lock) +#define NV_SPIN_LOCK_IRQ(lock) raw_spin_lock_irq(lock) +#define NV_SPIN_UNLOCK_IRQ(lock) raw_spin_unlock_irq(lock) +#define NV_SPIN_LOCK_IRQSAVE(lock,flags) raw_spin_lock_irqsave(lock,flags) #define NV_SPIN_UNLOCK_IRQRESTORE(lock,flags) \ - atomic_spin_unlock_irqrestore(lock,flags) -#define NV_SPIN_LOCK(lock) atomic_spin_lock(lock) -#define NV_SPIN_UNLOCK(lock) atomic_spin_unlock(lock) -#define NV_SPIN_UNLOCK_WAIT(lock) atomic_spin_unlock_wait(lock) + raw_spin_unlock_irqrestore(lock,flags) +#define NV_SPIN_LOCK(lock) raw_spin_lock(lock) +#define NV_SPIN_UNLOCK(lock) raw_spin_unlock(lock) +#define NV_SPIN_UNLOCK_WAIT(lock) raw_spin_unlock_wait(lock) #else typedef spinlock_t nv_spinlock_t; #define NV_SPIN_LOCK_INIT(lock) spin_lock_init(lock) @@ -956,8 +960,8 @@ return ret; } -#if defined(CONFIG_PREEMPT_RT) -#define NV_INIT_MUTEX(mutex) semaphore_init(mutex) +#if defined(CONFIG_PREEMPT_RT_FULL) +#define NV_INIT_MUTEX(mutex) sema_init(mutex,1) #else #if !defined(__SEMAPHORE_INITIALIZER) && defined(__COMPAT_SEMAPHORE_INITIALIZER) #define __SEMAPHORE_INITIALIZER __COMPAT_SEMAPHORE_INITIALIZER 

将补丁保存为“nv295.33_for 3.3 + _rt.patch”。 应用补丁 – >

 sh NVIDIA-Linux-x86_64-295.33.run --apply-patch nv295.33_for 3.3+_rt.patch 

这将构建一个名为“NVIDIA-Linux-x86_64-295.33-custom.run”的新nvidia二进制安装程序。

运行安装程序

 sh NVIDIA-Linux-x86_64-295.33-custom.run 

此补丁没有保证或保修! 自行承担使用风险。

重新启动,玩得开心。

您可以在nv论坛中找到更多信息。 在那里你也可以找到295.40系列的解决方案。

http://www.nvnews.net/vbulletin/showthread.php?p=2546508