编译安装LitmusRT遇到的问题

背景

最近在研究CPU-GPU异构,首要问题就是安装环境。我在三台机器(虚拟机、服务器、自己台式ubuntu)上安装了这套环境,遇到了一些问题,几经挫折竟然全部解决了,我以笔记的形式记录了编译过程、安装问题、遇到的问题及解决方法,并且逐渐写成博客分享给大家,因为这部分内容在网上实在不多。

我们的环境之一就是使用LitmusRT的调度器,那么就要编译安装这个内核。编译安装步骤其实按照官网指导http://www.litmus-rt.org/installation.html就可以了,运气好的话一次就可以成功用litmus重启。但是我以litmus重启时或重启后,遇到过三个比较棘手的问题

问题

问题一:Alert! /dev/sdax does not exist. dropping to a shell!

解决方法:

1)、按照这篇文章https://blog.csdn.net/pilot10/article/details/48788479使能磁盘加载

到litmus项目根目录下,输入命令make menuconfig,然后进入Device Drivers,使能SCSI device support和Fusion MPT device support下所有的子项,递归进行,然后再编译内核

2)、编辑/etc/default/grub文件时,把GRUB_DISABLE_LINUX_UUID=true的注释打开

3)、修改litmusRT启动时root要挂载的硬盘,这里是sdb1,因为找不到sda1

szc@ubuntu:~$ sudo vim /boot/grub/grub.cfg

找到其中echo litmusRT内核名字(此处是vmlinuz-4.9.30-litmus)中以linux打头的所有行,把sda1改成sdb1

    menuentry 'Ubuntu, with Linux 4.9.30-litmus' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.30-litmus-advanced-3ea2036d-f3ca-4b6c-af46-97ba860f52e4' {
        ......
        linux    /boot/vmlinuz-4.9.30-litmus root=/dev/sdb1 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
        ......
    }
    menuentry 'Ubuntu, with Linux 4.9.30-litmus (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.30-litmus-init-upstart-3ea2036d-f3ca-4b6c-af46-97ba860f52e4' {
        .....
        linux    /boot/vmlinuz-4.9.30-litmus root=/dev/sdb1 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet init=/sbin/upstart
        .....
    }
    menuentry 'Ubuntu, with Linux 4.9.30-litmus (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.30-litmus-recovery-3ea2036d-f3ca-4b6c-af46-97ba860f52e4' {
        .....
        linux    /boot/vmlinuz-4.9.30-litmus root=/dev/sdb1 ro recovery nomodeset find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US
        .....
    }

然后更新grub即可

szc@ubuntu:~$ sudo update-grub

如何确定自己要挂载的设备呢,在执行完第二步但没执行这一步时,重启进入litmusRT,会进入bash界面,且显示/dev/sda1找不到,此时输入命令

ls /dev/sd

然后按tab,会显示所有可用的设备.我这里没有sda1,只有sdb1,所以就选择挂载到sdb1上

问题二:the initrd is too large

解决方法:建议编译安装linux 4.9.30内核,然后在此内核下重新编译安装litmus

问题三:和英伟达驱动不兼容

解决方法:重启进入LitmusRT后,重装NVIDIA驱动(也就是再运行一遍NVIDIA-XXX.run文件)。

经过多次尝试在服务器上运行此文件报一堆错。先是

Unable to find the kernel source tree for the currently running kernel

然后加上参数--kernel-source-path运行驱动安装文件,还是报错,日志文件报错如下

ld:cannot find /tmp/selfgz9971/NVIDIA-Linux-x86_64-450.66/kernel/nvidia.o
................

简直无解。

在我自己的Ubuntu台式机上却一次成功,配置为:Ubuntu18.04 64位(跟服务器的版本一致),显卡版本是GTX 1070Ti(服务器的是GTX 1080Ti),安装文件一样,都是NVIDIA-Linux-x86_64-450.66.run。

在显卡都是虚拟出来的虚拟机上更是毫不犹豫的失败。

可能这是个玄学问题....

结语

LitmusRT是一个基于linux的实时性实验平台,官方手册其实就比较详细了,但还是遇到了一些问题,但是在台式机上还没有尝试复现(台式机前天才能用),我会进一步补全笔记并发布博客的。

猜你喜欢

转载自blog.csdn.net/qq_37475168/article/details/109195205