Difficulty seeing NVMe
Hi, trying to install Slackware64-current on an ASUS VivoBook 15 which uses NVMe, but the installer can't see it. It shows up in the output of lspci, but nowhere else that I can find.
Interestingly, I succeeded in installing Slackware64-current on an ASUS M570DD, which as far as I can tell is basically the same thing as the VivoBook 15. NVMe was no trouble at all. Even more interestingly, CloneZilla Live 20201102 is able to access NVMe on the ASUS VivoBook 15. What's the difference between Slackware64-current and CloneZilla Live? Why can the latter see NVMe but not the former on this laptop? Slackware64-current definitely has NVMe support: Code:
CONFIG_NVME_CORE=y Hmm, just took a look around, and I see there's a newer version of CloneZilla Live available (20210127). I'll give it a try to check if it also can access my NVMe. If not, then maybe my issue is due to some recent kernel bug or incompatibility. My ChangeLog.txt's date is Tue Feb 2 20:16:43 UTC 2021. |
Have never had issues seeing NVMe's on servers (Intel & Samsung) or installing Slackware on them. Maybe some kind of laptop specific issue not sure.
A few things to check: - Make sure BIOS config for the laptop is correct, NVMe drive enabled - Check if the device shows up, for ex. as /dev/nvme0n1 - Make sure to partition and format the NVMe before running the Slackware installer. For ex: Code:
$ gdisk /dev/nvme0n1 After correct partitioning you should see something like the following: Code:
/dev/nvme0 |
I have noticed for SoC platforms it is mandatory to turn on GPIO options in kernel or many things won't work.
When you boot with Clonezilla, do you see GPIO modules loaded? |
I've seen bios/uefi image upgrades as late as December 2020 for that machine. It's probably wise to be certain you have the newest.
|
Quote:
The newer Clonezilla works just as well as the old one, so there's not been a kernel regression. The problem is isolated to Slackware itself. Apparently there's something it's not doing at boot time that's needed in order to enable NVMe. Clonezilla does load these modules with Asus in the name:
None of these modules are present in the Slackware installer. |
Quote:
|
Experimenting to figure out how best to add a module to the installer...
First, I got the latest slackware64-current to be the baseline for my local customizations. This was a minor update to the mirror I already maintain for my home network. I have scripts for all this, but in this post I'll just spell out the underlying commands for parsimony. Code:
cd /home/ftp Code:
slackpkg update I proceeded to unpack the initrd.img file, to which I'll be adding modules. Code:
mkdir /tmp/initrd-tree Code:
find -name '*.ko.xz' | xargs unxz Code:
sed -n '/[^:]*\<asus\>.*: /s///;T;s/ /\n/g;p' /lib/modules/5.10.13/modules.dep | With that, I recreated initrd.img with the additional modules: Code:
find | cpio -o -H newc | lzma > /home/ftp/slackware64/isolinux/initrd.img Code:
xorriso -as mkisofs \ I'm considering comparing the contents of dmesg between Clonezilla and Slackware to see what's different. This could get annoying to do with no network and no common storage. I will have to hunt up a USB memory stick for each one to write to. |
I finally got a chance to compare the CloneZilla and Slackware dmesg outputs. The only USB memory stick I could find turned out to be totally dead, so I scrounged up one of those weird combination USB/SD memory cards which did the job.
Here's CloneZilla's dmesg, in part: Code:
i2c i2c-0: 2/8 memory slots populated (from DMI) Code:
i2c i2c-0: 2/8 memory slots populated (from DMI) Procedure version 2.0: Code:
# Extract Pat's initrd |
This round, I tried to use a big hammer and see if I got results. I went ahead and put every *.ko file I have into the initrd.
Code:
# Import all modules Next, I will try to track down which modules are actually required to make this work, since we should probably include them in the installer by default. |
Can you check lsmod in the installer and see what's loaded? That might give you a starting point that you can then use to tweak your initrd.
|
Can try looking at the output of `lsmod` and comparing with output of lsmod when something was missing. That should help id which modules were additionally loaded when it does work.
|
I compared the stock Slackware dmesg with my Christmas Tree-edition Slackware (i.e. includes every module), and the main thing that jumped out at me was vmd.
modules.dep reveals that vmd.ko doesn't depend on anything, so the command to put it into the initrd is much simpler than any of the above. Tested it, and yup! vmd.ko is the only thing I needed to add in order to get /dev/nvme*. I'm writing a much longer procedure to show exactly how I set up the laptop. I'll post it later (when everything possible is working). |
Quote:
Code:
CONFIG_NVME_CORE=y |
Quote:
Quote:
|
Quote:
The unmodified huge kernel had no problems booting up an older laptop with an nvme/PCIe ssd but would panic on the new laptop. I've tested with 5.13.x and 5.14-rc, haven't tried 5.12.x though. |
All times are GMT -5. The time now is 02:24 AM. |