Re: [PATCH v5] staging: axis-fifo: initialize timeouts in probe only

From: Fabio M. De Francesco
Date: Mon Mar 20 2023 - 10:10:07 EST


On lunedì 20 marzo 2023 07:00:28 CET Khadija Kamran wrote:
> On Thu, Mar 16, 2023 at 09:07:09PM +0100, Fabio M. De Francesco wrote:
> > On giovedì 16 marzo 2023 19:35:09 CET Khadija Kamran wrote:
> > > On Thu, Mar 16, 2023 at 05:17:47PM +0100, Fabio M. De Francesco wrote:
> > > > On giovedì 16 marzo 2023 16:09:08 CET Khadija Kamran wrote:
> > [snip]
> >
> > > Hey Fabio!
> > >
> > > Hope you are doing well. After spending a lot of time on this I am
> > > stuck now. Kindly help me resolve this issue or understand it better.
> > >
> > > Following your instructions I deleted my config file and copied one from
> > > the /boot/ directory. After that I enabled the dependencies(CONFIG_OF=y
> > > and CONFIG_HAS_IOMEM=y). I was successfully able to enable axis-fifo as
> > > a module.
> > >
> > > I then ran the following commands:
> > > - make drivers/staging/axis-fifo/
>
> Hey Fabio!
> Sorry for reaching out to you very late. For the past two days I have
> had problems with my Virtual Machine. It is stuck at boot, and this
> happened after it accidentally shut down. I have tried to resolve this
> problem but nothing is working. Currently I have boot into an older
> kernel version from the GRUB menu.
>
> I am also sharing the error here:
> Gave up waiting for root device. Common problems:
> -Boot args (cat /proc/cmdline)
> -Check rootdelay= (did the system wait long enough?)
> -Missing modules (cat /proc/modules; ls /dev)
> ALERT! UUID=718ed077-947d-4018-80ad-59825678e81d does not exist.
> Dropping to a shell!
> BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.2) built-in shell (ash)
> Enter 'help' for a list of built-in commands.
>
> I have Windows10 installed and I have created Ubunutu 22.04.1 VM on VMWare
> with 13GB RAM and 2 processors(4 cores each).
>
> (initramfs)_
>
> > No, this is not the right command... you are not invoking the linker to
make
> > the .ko object.
> >
> > Use "make M=drivers/staging/axis-fifo/"
> > or "make M=drivers/staging/axis-fifo/ W=1 -j8" (the latter to enable level
> > '1' warning and run on your 2 * 4 logical cores).
>
> This command gives error saying:
> scripts/Makefile.build:41: /drivers/staging/axis-fifo/Makefile:
> No such file or directory
> make[1]: *** No rule to make target '/drivers/staging/axis-fifo/Makefile'.
> Stop. make: *** [Makefile:2028: /drivers/staging/axis-fifo] Error 2
>
> > > - sudo make modules_install install(this command took hours) :'(
> >
> > This is odd, it shouldn't :-/
> >
> > As I said in another message, I'll set aside some time to help you check
if
> > you need to fine tune your VM and Hypervisor configuration.
> >
> > I'm returning on the same subject we have been talked about because you
said
> > at least twice that your builds and install are too slow. We'll try to
> > diagnose it in an IRC session on #kernel-outreachy (I'm pretty sure for
the
> > first days of next week - I'll send an invite).
>
> Yes I would love that. Kindly help me with this.
> Thank you!
>
> Regards,
> Khadija Kamran
>
> > > > When you are done with build, install, and final reboot to test if
your
> > > > module can "modprobe" or "insmod" (i.e. link with the running custom
> >
> > kernel
> >
> > > > you built, installed and boot), try to compare the output of the
> > > > following
> > > > commands:
> > > >
> > > > # uname -a
> > > > Linux suse 6.2.2-1-default #1 SMP PREEMPT_DYNAMIC Thu Mar 9 06:06:13
> > > > UTC
> > > > 2023 (44ca817) x86_64 x86_64 x86_64 GNU/Linux
> > >
> > > The above command works
> > >
> > > > AND
> > > >
> > > > # modinfo <name of the module you are testing here>
> > >
> > > On running 'modinfo axis-fifo' I get error saying module axis-fifo not
> > > found.
> >
> > Try again after building with "M=drivers/staging" (as said above). Don't
> > forget to run "make modules_install install" and then reboot into your
> > custom
> > built Kernel, not the distribution's kernel.
> >
> > While you are there, run "lsmod" to see all loaded modules. Pick one
> > randomly
> > from the output list and run "modinfo
> > name_of_the_module_you_want_info_about".>
> > > > I'm running "modinfo kvm" (but showing only two of many lines):
> > > >
> > > > # modinfo kvm
> > > > filename: /lib/modules/6.2.2-1-default/kernel/arch/x86/kvm/
> >
> > kvm.ko.zst
> >
> > > > vermagic: 6.2.2-1-default SMP preempt mod_unload modversions
> > > >
> > > > Can you see that the kernel in "uname -a" and the filename and
vermagic
> >
> > have
> >
> > > > the same "6.2.2-1-default"? Well, so I'm sure I'm running the right
> > > > Kernel
> > > > and inserted the appropriate "kvm" module.
> > > >
> > > > Furthermore, before rebooting your custom kernel, you may also look at
> > > > the
> > > > directory in the Kernel where you compiled your module and search for
> >
> > "*.o"
> >
> > > > "*mod*" and "*.ko" files. If you have them, you built your module
> >
> > properly.
> >
> > > There is a "*.o" file and "*.mod" file but there is no "*.ko" file in
> > > the axis-fifo directory.
> > >
> > > Kindly help me with this.
> > >
> > > Regards,
> > > Khadija
> > >
> > > > Thanks,
> > > >
> > > > Fabio
> >
> > Let me know if this time it works.
> >
> > Fabio
> >
> > P.S.: Have you had time to read that "Linux Kernel Module Programming"
guide
> > I sent you the link of? You can find a lot of information about modules
> > there. I'd strongly recommend you to read it.

Khadija,

I think that you are trying to skip some passages. Let me explain better...

Soon after copying from /boot your new .config you should run "make
menuconfig" or "make oldconfig" to re-create the necessary dependence and
other files which are required to build properly.

I'd suggest "make menuconfig" so that you can check if you enabled correctly
the module(s) you are interested to build and other built-in options you may
optionally need.

Then you must rebuild and install. So...

1) "make menuconfig" (don't forget to save before exiting),
2) "make W=1 -j8" (because you have 8 logical cores reserved to your VMWare
VM, correct?).
3) "make modules_install install".

At this point check that you have a fresh kernel image in /boot, that /boot/
grub/grub.conf contains a new entry with your freshly built custom kernel so
that you can boot it from selecting the proper entry in the menu that you'll
see after reboot. Also check that you have axis-fifo.ko under /lib/modules/
<the new kernel version>/build/drivers/staging/axis-fifo/.

For example in my VM for test I see axis-fifo with...

ls -l /lib/modules/6.3.0-rc2-x86-32-debug+/build/drivers/staging/axis-fifo/
total 564
-rw-r--r-- 1 1001 fsgqa 196 Mar 16 20:57 .Module.symvers.cmd
-rw-r--r-- 1 1001 fsgqa 275 Mar 17 15:39 .axis-fifo.ko.cmd
-rw-r--r-- 1 1001 fsgqa 183 Mar 12 20:29 .axis-fifo.mod.cmd
-rw-r--r-- 1 1001 fsgqa 50093 Mar 17 15:39 .axis-fifo.mod.o.cmd
-rw-r--r-- 1 1001 fsgqa 61110 Mar 17 15:37 .axis-fifo.o.cmd
-rw-r--r-- 1 1001 fsgqa 147 Mar 17 15:37 .modules.order.cmd
-rw-r--r-- 1 1001 fsgqa 0 Mar 16 20:57 Module.symvers
-rw-r--r-- 1 1001 fsgqa 255748 Mar 17 15:39 axis-fifo.ko
-rw-r--r-- 1 1001 fsgqa 38 Mar 12 20:29 axis-fifo.mod
-rw-r--r-- 1 1001 fsgqa 2354 Mar 17 15:38 axis-fifo.mod.c
-rw-r--r-- 1 1001 fsgqa 44604 Mar 17 15:39 axis-fifo.mod.o
-rw-r--r-- 1 1001 fsgqa 128156 Mar 17 15:37 axis-fifo.o
-rw-r--r-- 1 1001 fsgqa 38 Mar 17 15:37 modules.order

(as you can see, the last time I built and installed the kernel and the axis-
fifo driver's module was March 17, 15:39).

Please notice that my kernel has that "-x86-32-debug+" suffix after the kernel
version but this depends on a special option I need to set to differentiate
"debug" kernels from "production" kernels. You may have something else that
your distribution appends.

If you can't find the module run again "ls -l" one level up, like in /lib/
modules/6.3.0-rc2-x86-32-debug+/build/drivers/staging/ to see if at least you
have any of the drivers/staging/ modules. Go one more layer up if you don't
find them.

If everything I cited above is where it is supposed to be and grub.conf is
properly configured with the new entry, reboot and enjoy your module (try
modprobe, modinfo, lsmod, and the likes).

Fabio

Fabio