背景
最近在研究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的实时性实验平台,官方手册其实就比较详细了,但还是遇到了一些问题,但是在台式机上还没有尝试复现(台式机前天才能用),我会进一步补全笔记并发布博客的。