kernel build & preempt-rt patch & xenomai

提前准备好 linux 内核源代码,假设是 x86 系统。能够去下载原生内核(Vanilla kernel):

wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.17.tar.gz

假设是arm系统,或者其它系统,则下载厂商定制过的内核源代码。

假设有须要。patch内核。如 preempt-rt 补丁:(注意补丁版本号必须与内核版本号相应,此处均为 3.18.17 版本号。假设是定制过的内核。则必须找到相应定制过的补丁.)

wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.18/patch-3.18.17-rt14.patch.gz   // 注意 patch 和 patchs

cd linux-3.18.17    //内核源代码根文件夹
zcat ../patch-3.18.17-rt14.patch.gz | patch -p1     // 打补丁,假设.bz2压缩格式则使用 bzcat;
// 假设在源代码根文件夹的上层文件夹。则 patch -p0 < xxx.patch

在现有系统上改动配置:

make mrproper   //清理一下
scp [email protected]:/proc/config.gz .    //复制现有系统的配置文件,x86系统则能够找到 /boot/config-3.18.17-32-generic 文件

gunzip -c config.gz > .config

// 由于你的交叉编译器可能不叫gcc。而是 arm-linux-gnueabihf-gcc,所以:
export CCPREFIX=/home/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
// 这样子执行你的交叉编译器:
${CCPREFIX}gcc -v

//依据须要改动.config文件,或者 make menuconfig 图形化改动内核配置
ARCH=arm CROSS_COMPILE=${CCPREFIX} make menuconfig

ARCH=arm CROSS_COMPILE=${CCPREFIX} make -jx        // build kernel, 多核系统

mkdir module_build_directory
INSTALL_MOD_PATH=module_build_directory make modules_install  // build modules
// 这里是交叉编译。所以不能直接安装。假设是x86系统,直接 make && sudo make modules_install && sudo make install && sudo update-grub 就可以


复制新的内核到sd卡(树莓派2)

Copy arch/arm/boot/Image to /boot/kernel7.img on SD card.

Copy arch/arm/boot/dts/bcm2709-rpi-2-b.dtb to /boot/bcm2709-rpi-2-b.dtb on SD card

Copy (merge if necessary) kernel-rt/lib to / on SD card.

cd linux/arch/arm/boot
scp Image [email protected]:/tmp
scp dtb/bcm2709-rpi-2-b.dtb [email protected]:/tmp

cd module_build_directory
tar czf modules.tgz *
scp modules.tgz [email protected]:/tmp

// ssh to raspberry
ssh [email protected]_ip_address_to_rasp
cd /
sudo mv /tmp/Image /boot/kernel7.img        // 忽略属性不同的信息
scp mv /tmp/bcm2709-rpi-2-b.dtb /boot/bcm2709-rpi-2-b.dtb
sudo tar xzf /tmp/modules.tgz           // 解压后能够通过ls /lib/modules查看

关于内核配置

Symbol(s) Description:
[ ], [*]    Options in square brackets can be activated or deactivated. The asterisk marks the menu entry as activated. The value can be changed with the space key. It is also possible to press Y key (Yes) to activate or N key (No) to deactivate the selected entry.

If the option is activated, the selected feature/driver will be built into the kernel and will always be available at boot time.

< >, <M>, <*>   Options in angle brackets can be activated or deactivated, but also activated as module (indicated by a M). The values can be modified by pressing Y/N keys as before or by pressing the M key to activate the feature/driver as a module.

See the Kernel Modules article for differentiation.

{M}, {*}    Options in curly brackets can be activated or activated as module but not be deactivated. This happens because another feature/driver is dependent on this feature.
-M-, -*-    Options between hyphens are activated in the shown way by another feature/driver. There is no choice.
Tag Description:
(NEW)   This driver is new in the kernel and is maybe not stable enough.
(EXPERIMENTAL)  This driver is experimental and most likely not stable enough.
(DEPRECATED)    This driver is deprecated and not needed for most systems.
(OBSOLETE)  This driver is obsolete and should not be activated.

关于 x86 的 preemt-rt patch & kernel build,见 连接:

  1. t=2273355">https://ubuntuforums.org/showthread.php?

    t=2273355

  2. http://askubuntu.com/questions/72964/how-can-i-install-a-realtime-kernel
  3. https://sourceforge.net/p/emc/mailman/message/33665819/ 这个注意是使用 64 位系统还是 32位。可能须要改动 .config 文件。

假设有哪个 kernel config 不懂的话。能够在这个里头搜:

  1. https://cateee.net/lkddb/

preempt-rt kernel config:

CONFIG_PREEMPT_RT_FULL: Kernel Features > Preemption Model > Fully Preemptible Kernel (RT)
Enable HIGH_RES_TIMERS: General Setup > Timers subsystem > High Resolution Timer Support (already enabled)

去掉某些 ACPI 和 PowerManage 相关选项,不能所有去掉,由于高精度时钟可能会依赖当中某些配置
去掉 CPU 频率调整选项等
去掉 Device Driver 中的 Staging Drivers 选项
去掉 Kernel Hacking 中的某些 debug 选项(假设不须要debug内核的话)

推荐配置例如以下(xenomai-2.6.5):

 * General setup
  --> Local version - append to kernel release: -xenomai-2.6.5
  --> Timers subsystem
      --> High Resolution Timer Support (Enable)
 * Real-time sub-system
  --> Xenomai (Enable)
  --> Nucleus (Enable)
 * Power management and ACPI options
  --> Run-time PM core functionality (Disable)
  --> ACPI (Advanced Configuration and Power Interface) Support
      --> Processor (Disable)
  --> CPU Frequency scaling
      --> CPU Frequency scaling (Disable)
  --> CPU idle
      --> CPU idle PM support (Disable)
 * Pocessor type and features
  --> Processor family
      --> Core 2/newer Xeon (if \"cat /proc/cpuinfo | grep family\" returns 6, set as Generic otherwise)
 * Power management and ACPI options
  --> Memory power savings
      --> Intel chipset idle memory power saving driver

假设遇到问题,查看 linux log ( dmesg | grep -i xenomai ),查找相应问题 see link: http://www.xenomai.org/documentation/xenomai-head/TROUBLESHOOTING.txt

假设是 xeno latency 測试,发现 周期性高延时,那么非常可能是遇到了 SMI 的问题。

About how to fix it:

other ref link:

  1. http://stackoverflow.com/questions/17812548/cyclictest-for-rt-patched-linux-kernel
  2. https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO
  3. http://swift.siphos.be/linux_sea/kernelbuilding.html
  4. http://rtt-lwr.readthedocs.io/en/latest/rtpc/xenomai.html
时间: 2024-08-07 17:00:08

kernel build &amp; preempt-rt patch &amp; xenomai的相关文章

Lock-less buffer management scheme for telecommunication network applications

A buffer management mechanism in a multi-core processor for use on a modem in a telecommunications network is described herein. The buffer management mechanism includes a buffer module that provides buffer management services for one or more Layer 2

Lock-less and zero copy messaging scheme for telecommunication network applications

A computer-implemented system and method for a lock-less, zero data copy messaging mechanism in a multi-core processor for use on a modem in a telecommunications network are described herein. The method includes, for each of a plurality of processing

linux :vmware kernel update导致vmware无法打开,解决

kernel 4.7 and VMWare Workstation 12.1. # cd /usr/lib/vmware/modules/source # tar xf vmnet.tar # mv vmnet.tar vmnet.old.tar # sed -i -e 's/dev->trans_start = jiffies/netif_trans_update\(dev\)/g' vmnet-only/netif.c # tar cf vmnet.tar vmnet-only # vmwa

OpenWrt patch

Working with patches Prepare quilt configuration Adding a new patch Edit an existing patch Adding or editing kernel patches Adding or editing toolchain patches Naming patches Refreshing patches Iteratively modify patches without cleaning the source t

linux内核可以接受的参数 | Linux kernel启动参数 | 通过grub给内核传递参数

在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项. 2.当kernel启动之时,可以参数在kernel被GRUB或LILO等启动程序调用之时传递给kernel. 3.在kernel运行时,修改/proc或/sys目录下的文件. 这里我简单讲的就是第二种方式了,kernel在grub中配置的启动参数. 首先,kernel有哪些参数呢? 在linux的源代码中,有这样的一个文档Documentation/kern

[RK_2014_0919]Linux Kernel Hacking

KernelBuild Guide to building the Linux kernel. Where do I find the kernel? The latest source code for the Linux kernel is kept on kernel.org. You can either download the full source code as a tar ball (not recommended and will take forever to downlo

ret2dir:Rethinking Kernel Isolation(翻译)

前一段时间在网上找ret2dir的资料,一直没找到比较系统的介绍,于是干脆把这篇经典的论文翻译了,当然,第一次翻译(而且还这么长),很多词汇不知道到底该怎么翻译,而且最近事情也比较多, 翻译得挺烂的,如有错误,请指正. 后续如果有机会也会分享一些关于ret2dir利用的一些理解,和使用技巧. 翻译 by JDchen2016年12月7日 摘要 Return-to-user(ret2usr)攻击将被破坏的内核指针重定向到用户空间.为了获得一个更严格的地址空间隔离以应对这种攻击,我们采取一些内核加固

linux命令: patch

一. 针对单文件的patch: 我们以mkprj.sh.1和mkprj.sh两个文件为例: [[email protected] tst]# lsmkprj.sh.1  mkprj.sh 看两个文件的差异:[[email protected] tst]# diff mkprj.sh mkprj.sh.1 20,21c20< cd $workdir/fornew; mkdir crosstools kernel nfs_root uboot;< cd $workdir/farsight; mkd

kernel makefile

===Documentation/kbuild/makefiles.txt=== The Makefiles have five parts: Makefile                               the top Makefile. .config                                  the kernel configuration file. arch/$(ARCH)/Makefile         the arch Makefile.