(九)RTLinux补丁以及cyclictest

RT-Preempt Patch是在Linux社区kernel的基础上,加上相关的补丁,以使得Linux满足硬实时的需求。

一、向内核打RT-Linux补丁

1、下载内核补丁包

下载与自己内核相应的补丁包,以下是下载网址:https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/

这里有各种内核版本的补丁包。

(九)RTLinux补丁以及cyclictest_第1张图片

我用的内核版本是4.6.0的,因此找到4.6的目录下找对应的版本

(九)RTLinux补丁以及cyclictest_第2张图片

哎?这里还没有,older里面看看,果然这才是4.6最全的。选择一个下载。

(九)RTLinux补丁以及cyclictest_第3张图片

2、打补丁

将补丁包解压到源码目录下

(九)RTLinux补丁以及cyclictest_第4张图片

打开终端,输入以下命令打入补丁:

xzcat ../patch-4.6-rt19.patch.xz | patch -p1

或者

patch -p(n) < [补丁包路径]patch_name

n=0时,从当前目录查找文件(夹)(直接使用补丁文件里指定的路径)

n=1时,忽略掉第一层目录,从当前目录查找(去掉补丁文件指定路径最左的第一个斜杠及前面的所有内容)

校验

编译内核后,上电启动系统,uname -a命令查看 有 RT 字样内核替换成功

打出补丁

patch -p1 -R < ../patch_name

二、编译RT-test进行Linux实时性测试(cortex9,arm7)

1、下载

git clone git:// git.kernel.org / pub / scm / utils / rt-tests / rt-tests.git

cd rt-tests

git checkout stable / v1.0

2、安装库

直接make会报错

报错: src/cyclictest/rt_numa.h:29:18: fatal error: numa.h: 没有那个文件或目录

解决:

1)安装apt-file 来找到依赖库

apt-get install apt-file

apt-file update #更新源

2)寻找 numa.h

apt-file install numa.h

3) 安装相应的库

apt-get install libnuma-dev

3、编译arm平台的cyclictest

直接make的话编译出的二进制文件是x86_64的,在zynq7平台将无法执行。在网上也看别人博客说修改makefile文件中的编译器选项,我修改之后编译的仍然是x86_64的。无奈之下,只得将cyclictest源文件拿出来单独编译。

4、在yocto下用poky_sdk,autotool编译

4.1 新建文件夹cyclictest

4.2 在上面下载的rt-tests中找到以下文件,复制到cyclictest文件夹下。

4.3 创建空的README文件,这是GNU编码标准所要求的:

touch README

4.4 使用autoscan生成一个configure.scan辅助编写configure.ac

4.5 创建configure.ac文件

AC_INIT(cyclictest, 2.69)
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS(config.h)

AM_PROG_CC_C_O
AC_PROG_INSTALL


AC_OUTPUT([Makefile])

2.69 就是从4.4步骤得来的。

4.6 创建Makefile.am文件

bin_PROGRAMS = cyclictest
cyclictest_SOURCES = cyclictest.c error.c rt-utils.c rt-sched.c

4.7 修改cyclictest.c,rt-utils.c文件

在头文件声明前增加       #define _GNU_SOURCE   #define __USE_GNU

因为要使用GNU的编译器,但是在编译的时候却发现一直报错,找不到features.h里面的定义,因此需手动在头文件声明之前加上以上内容。

5、获取跨工具链环境设置文件

source /home/jf-yt/poky_sdk/environment-setup-cortexa9hf-neon-poky-linux-gnueabi

6、创建configure脚本: 使用该autoreconf命令生成configure脚本。

autoreconf

autoreconf工具将正在运行的其他自动工具,如护理 aclocal, autoconf和 automake

注意:

如果出现错误的 configure.ac,它 autoreconf运行时,指示丢失的文件,使用“-i”选项,从而确保丢失的辅助文件复制到构建主机。

7、交叉编译项目:此命令使用交叉编译器编译项目。该 CONFIGURE_FLAGS 环境变量为GNU配置的最小参数:

$ ./configure $ {CONFIGURE_FLAGS}

8、修改Makefile文件

在CC = ....加入 -lpthread -lrt,分别链接线程库和rt库。

9、编译

make

10、验证二进制文件,运行该命令将打印可以运行二进制文件的体系结构。此体系结构应与已安装的跨工具链支持的体系结构相同。

 $ file ./cyclictest

输出如下

./cyclictest: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=c5d2416a3e22086474128ba1377e142b542a5353, not stripped

果然是ARM架构的,基本可以用了。

你可能感兴趣的:(Yocto)