(九)RTLinux补丁以及cyclictest

2019-07-13 03:36发布

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

一、向内核打RT-Linux补丁

1、下载内核补丁包 下载与自己内核相应的补丁包,以下是下载网址:https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/ 这里有各种内核版本的补丁包。 我用的内核版本是4.6.0的,因此找到4.6的目录下找对应的版本 哎?这里还没有,older里面看看,果然这才是4.6最全的。选择一个下载。 2、打补丁 将补丁包解压到源码目录下 打开终端,输入以下命令打入补丁: 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脚本。 autoreconfautoreconf工具将正在运行的其他自动工具,如护理 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架构的,基本可以用了。