ubuntu 16.10 使用rtai补丁[linux-4.4.115+rtai-5.1]

本文详细介绍了在Ubuntu环境下从下载内核源码开始,应用一系列补丁,配置内核,编译和安装定制内核的过程,特别关注于如何将RTAI实时系统集成到Ubuntu中,包括配置关键内核选项以确保与RTAI兼容,以及编译和安装RTAI库及驱动。

1,下载ubuntu内核源码(https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.115/)和补丁

>cd ubuntu-kernel
>git clone git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack -b v4.4.115 v4.4.115

0001-base-packaging.patch
0002-UBUNTU-SAUCE-add-vmlinux.strip-to-BOOT_TARGETS1-on-p.patch
0003-UBUNTU-SAUCE-tools-hv-lsvmbus-add-manual-page.patch
0004-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch
0005-debian-changelog.patch
0006-configs-based-on-Ubuntu-4.4.0-113.136.patch

和
linux-image-4.4.115-0404115-generic_4.4.115-0404115.201802031230_amd64.deb

和rtai-5.1(目前的最高版本)(https://www.rtai.org/)并解压

>tar Jxf rtai-5.1.tar.bz2

2,打补丁:

>cd v4.4.115
>patch -p1 < ../0001-base-packaging.patch
>patch -p1 < ../0002-UBUNTU-SAUCE-add-vmlinux.strip-to-BOOT_TARGETS1-on-p.patch
>patch -p1 < ../0003-UBUNTU-SAUCE-tools-hv-lsvmbus-add-manual-page.patch
>patch -p1 < ../0004-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch
>patch -p1 < ../0005-debian-changelog.patch
>patch -p1 < ../0006-configs-based-on-Ubuntu-4.4.0-113.136.patch
>patch -p1 < ../rtai-5.1/base/arch/x86/patches/hal-linux-4.4.115-x86-10.patch

应该都能打成功

3,获得.config文件

>cd ..
>dpkg -x linux-image-4.4.115-0404115-generic_4.4.115-0404115.201802031230_amd64.deb ./configs
>cp ./configs/boot/config-4.4.115-0404115-generic ./v4.4.115/.config

4,配置内核:

>cd ./v4.4.115
>make menuconfig

按以下修改内核配置参数(见:https://github.com/relacs/makertai)

Basic kernel configuration

For making the Linux kernel work with RTAI you should check the following settings in the kernel configuration dialog.

This list is updated for RTAI 5.1. For other RTAI versions read /usr/local/src/rtai/README.CONF_RMRKS !

    "General setup":
        1,Disable "Enable sytem-call auditing support" (AUDITSYSCALL)
        2,Important: //重要,不改的话insmod rtai_sched.ko时会死机 
          set "Stack Protector buffer overflow detection" (at the bottom of the menu) to "Regular" (CC_STACKPROTECTOR_REGULAR) 
          - or even "None" (CC_STACKPROTECTOR_NONE) if the latency test crashes.

    "Power management and ACPI options":
        1,In "ACPI (Advanced Configuration and Power Interface) Support":
            Disable "Processor" (ACPI_PROCESSOR)
        2,Disable "CPU Frequency scaling" (CPU_FREQ)
        3,In "CPU Idle":
            Disable "CPU idle PM support" (CPU_IDLE)

    "Device Drivers":
        1,In "Staging drivers":
            Deselect "Data acquisition support (comedi)" (COMEDI)

    "Kernel hacking":
        1,In "Compile-time checks and compiler options":
            Disable "Compile the kernel with debug info" (DEBUG_INFO) Disabling debugging information makes the kernel much smaller. So unless you know that you need it disable it.
        2,Disable "Tracers" (FTRACE)

Leave the configuration dialog by pressing "Exit" until you are asked "Save kernel config?". Select "Yes".

Then the new kernel is being compiled - be patient.

 

5,编译:

>make -j8 LOCALVERSION=-rtai-5.1 deb-pkg

6,安装:

>cd ../
>sudo dpkg -i linux-headers-4.4.115-rtai-5.1+_4.4.115-rtai-5.1+-1_amd64.deb
>sudo dpkg -i linux-image-4.4.115-rtai-5.1+_4.4.115-rtai-5.1+-1_amd64.deb
>sudo reboot //启动新内核

一般都能成功启动新内核。

7,在新内核下编译rtai-5.1库和驱动

>cd  ubuntu-kernel/rtai-5.1
>make menuconfig
-----------------------
General --->
 (/opt/rtai-5.1_v4.4.115) Installation directory                                         
 (/usr/src/linux-headers-4.4.115-rtai-5.1+) Linux source tree
--------------------------------------------------------------
>make
>sudo make install
>cd /opt/rtai-5.1_v4.4.115/modules
>sudo insmod rtai_hal.ko
>sudo insmod rtai_sched.ko  //如果到这儿没死机就说明rtai安装成功了
>sudo insmod rtai_fifos.ko
>sudo insmod rtai_sem.ko
>sudo insmod rtai_shm.ko
>sudo insmod rtai_rtdm.ko
附上配置文件:
1,https://github.com/liuzq71/config_of_rtai5.1
2,https://github.com/liuzq71/v4.4.115-rtai5.1

 

<think> 我们正在处理一个IntelliJ IDEA启动时闪退的问题,错误信息是 EXCEPTION_ACCESS_VIOLATION (0xc0000005),并且用户提供了几个引用信息。根据引用,这个问题可能与JVM(Java虚拟机)有关,特别是jvm.dll模块。此外,引用[3]提到这可能与13代/14代CPU的设计缺陷有关,但用户的JRE版本是JBR-21.0.5+8,因此我们需要综合考虑。 错误原因分析: 1. 根据引用[1]和[2],错误是 EXCEPTION_ACCESS_VIOLATION,这通常表示JVM试图访问无效的内存地址。可能的原因包括: - 软件冲突(特别是第三方插件或DLL文件) - JVM本身的问题 - 硬件问题(如内存故障或CPU问题,引用[3]提到可能是13/14代CPU的设计缺陷,但用户并未明确说明自己的CPU型号) - 系统环境问题(如驱动程序问题) 2. 引用[5]提供了几种日志中可能出现的导致问题的DLL文件,并提到解决方案取决于具体的DLL。因此,我们需要先查看错误日志,确定是哪个模块导致的。 3. 用户当前使用的是JBR-21.0.5+8(对应JDK 21),而引用[3]提到通过限制CPU性能(降频或关闭超线程)可以避免这个问题,但这通常是针对13/14代CPU的临时解决方案。 解决方案步骤: 步骤1:检查错误日志 - 在IDEA的日志文件(通常位于用户目录下的某个位置,如`C:\Users\<用户名>\AppData\Local\JetBrains\IdeaIC\log`)或者系统临时目录下(如`C:\Users\<用户名>\AppData\Local\Temp`)查找名为`java_error_in_idea_*.log`的文件。 - 打开最新的日志文件,找到“Problematic frame”这一行,确定是哪个模块(DLL文件)导致的崩溃。 步骤2:根据日志中的问题模块采取相应措施 根据引用[5]: - 如果是第三方DLL(如`SrjdDll64.dll`或插件相关的DLL),则可能是插件冲突。尝试卸载或更新相关插件。 - 如果是`mybatisplugin*.tmp`或`jdk*.tmp`,可能是临时文件问题。尝试清除IDEA的缓存和临时文件。 步骤3:更新或更改JRE/JDK - 尝试更新IntelliJ IDEA到最新版本,因为新版本可能包含修复。 - 如果更新后问题依旧,可以尝试使用不同的JRE(例如,使用JetBrains Runtime的不同版本)。在IDEA的安装目录下,可以找到jbr目录,这是其自带的JRE。如果问题可能是JBR引起的,可以尝试替换为其他JDK版本(如OpenJDK 1117)。但注意,IDEA通常推荐使用自带的JBR。 步骤4:调整系统设置(特别是针对13/14代Intel CPU) 引用[3]提到,如果使用的是13代或14代Intel CPU,可能需要调整BIOS设置: - 进入BIOS,禁用超线程(Hyper-Threading)或启用Downclocking(降频),或者应用Intel针对此问题发布的微码更新(检查主板厂商是否有更新的BIOS)。 - 在操作系统中,可以尝试设置电源管理为“节能”模式,以降低CPU频率。 步骤5:其他通用解决方法 - 禁用所有插件启动:在启动IDEA时,通过添加`--disable-extensions`参数(或者通过安全模式启动)来排除插件问题。 - 重新安装IntelliJ IDEA:备份配置后,卸载并重新安装。 - 检查系统内存:运行内存诊断工具,确保内存没有问题。 - 更新操作系统和驱动程序(尤其是显卡驱动)。 由于用户的问题描述中提到了JRE版本为JBR-21.0.5+8,我们应优先考虑针对该版本的解决方案。同时,注意引用[4]提到的是JDK 17,而用户使用的是21,所以问题可能与版本无关。 根据引用[5]的解决方案,如果日志中显示是某个具体的.dll文件,我们可以采取以下措施: - 如果是插件引起的,例如日志中出现了某个插件的dll,那么卸载该插件。 - 如果是其他情况,可以尝试清除缓存:通过IDEA的欢迎界面(如果能够进入)选择“File -> Invalidate Caches / Restart”,或者直接删除缓存目录(位于`C:\Users\<用户名>\AppData\Local\JetBrains\IdeaIC\<version>\`下的`cache`和`index`目录)。 如果以上步骤都不能解决问题,可能需要收集更多的日志信息并寻求官方支持。 生成相关问题: 1. 如何找到IntelliJ IDEA生成的崩溃日志文件? 2. 如何更改IntelliJ IDEA使用的JVM? 3. 针对13/14代Intel CPU,如何调整BIOS设置以避免此类错误? 4. 如何安全地卸载或更新IntelliJ IDEA的插件? 5. 如何清除IntelliJ IDEA的缓存? 现在,我们按照用户要求的格式进行回答: </think> ### IntelliJ IDEA闪退(EXCEPTION_ACCESS_VIOLATION)解决方案 根据提供的错误日志(`java_error_in_idea_*.log`)和引用信息,该问题主要由**内存访问冲突**引起(错误码 `0xc0000005`),常见于JVM(`jvm.dll`)与系统环境冲突。以下是分步解决方案: --- ### **1. 定位问题根源** 首先检查日志文件(路径如 `C:\Users\<用户名>\AppData\Local\Temp\java_error_in_idea_*.log`): - 若出现 `[SrjdDll64.dll+0x15500]` 或 `[xxx.dll+0x...]` → 第三方插件冲突(引用[5])。 - 若出现 `[jvm.dll+0x6a3f10]` → JVM或硬件兼容性问题(引用[2][3])。 - 若日志包含 `VS2019/MS VC++` → 运行库缺失(引用[4])。 --- ### **2. 针对性解决方案** #### **情况1:第三方DLL冲突(插件问题)** ```markdown # 日志示例:C [SrjdDll64.dll+0x15500] 或 C [mybatisplugin*.tmp+0x...] ``` - **步骤**: 1. 删除冲突插件: - 关闭IDEA,进入插件目录:`C:\Users\<用户名>\AppData\Roaming\JetBrains\IdeaIC<版本>\plugins`。 - 移除可疑插件(如 `mybatisplugin`、`SrjdDll64` 相关文件)。 2. 清除临时文件: - 删除 `C:\Users\<用户名>\AppData\Local\Temp` 下所有 `java_error_in_idea_*.log` 和 `*.tmp` 文件。 3. 重启IDEA(引用[5])。 --- #### **情况2:JVM或硬件问题(CPU/内存)** ```markdown # 日志示例:Problematic frame: V [jvm.dll+0x6a3f10](引用[2][3]) ``` - **步骤**: 1. **更新JBR(JetBrains Runtime)**: - 下载新版JBR 21:[官网链接](https://github.com/JetBrains/JetBrainsRuntime/releases) - 替换IDEA安装目录下的 `jbr` 文件夹(备份原文件)。 2. **调整JVM参数**: - 编辑 `idea64.exe.vmoptions`(位于 `bin` 目录),添加: ```ini -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_crc32 # 禁用冲突指令(针对Intel 13/14代CPU) ``` 3. **BIOS设置(针对13/14代Intel CPU)**: - 禁用超线程(Hyper-Threading)或启用 `Intel Default Settings`(引用[3])。 4. **降低CPU电压**(进阶): - 使用工具如ThrottleStop,限制CPU频率至基准值。 --- #### **情况3:运行库缺失** ```markdown # 日志示例:vm_info: MS VC++ 16.10/16.11(引用[4]) ``` - 安装Visual Studio运行库: - 下载 [VC++ Redistributable 2019](https://aka.ms/vs/16/release/vc_redist.x64.exe)--- ### **3. 通用修复流程** 1. **清除缓存**: - 启动IDEA时按住 `Shift`,选择 **"Invalidate Caches / Restart"**。 2. **禁用插件**: - 临时移除所有插件(移动 `plugins` 文件夹),逐步排查。 3. **系统检查**: - 运行内存诊断工具(`mdsched.exe`)。 - 更新显卡驱动和主板BIOS。 --- ### **故障排除流程图** ```mermaid graph TD A[IDEA闪退] --> B{检查日志文件} B -->|第三方DLL| C[卸载插件+清缓存] B -->|jvm.dll| D[更新JBR+调整JVM参数] B -->|VC++缺失| E[安装运行库] C --> F[解决] D --> F E --> F ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值