LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Kernel (https://www.linuxquestions.org/questions/linux-kernel-70/)
-   -   Printk won't "print" from probe() ::::A hello world module-pci device (https://www.linuxquestions.org/questions/linux-kernel-70/printk-wont-print-from-probe-a-hello-world-module-pci-device-662335/)

knockout_artist 08-12-2008 06:24 PM

Printk won't "print" from probe() ::::A hello world module-pci device
 
Good Day,

A very simple hello world kind of module.
It does print message from init and exit routine but from with in probe() function it won't print ant thing.

I suspect probe wont get executed.

Code:

#include <linux/module.h>      /* Needed by all modules */
#include <linux/kernel.h>      /* Needed for KERN_INFO */
#include<linux/pci.h>

#define MY_VENDOR_ID  0x109e
#define MY_DEVICE_ID  0x036e

struct pci_device_id my_driver_pci_table[] __devinitdata = {
  {
  MY_VENDOR_ID,
  PCI_ANY_ID,
  MY_DEVICE_ID,
    0,0
  }, {0},
};

static int __devinit  my_driver_probe(struct pci_dev *pdev, const struct pci_device_id *id)
    {
        pci_enable_device(pdev);
        printk("--------------------------------\n");
        printk("message from inside of probe function \n\n");
        printk("--------------------------------\n");

      }


struct pci_driver  my_pci_driver = {
    .name = "mydrv",
    .probe = my_driver_probe,
//  .remove = __devexit_p(my_driver_remove),
    .id_table = my_driver_pci_table,
    };

static int __init my_driver_init(void)
    {
        pci_register_driver(&my_pci_driver);
        printk("--------------------------------\n");
        printk("Msg from init fonction\n\n");
        printk("--------------------------------\n");
        return 0;
    }

static void __exit my_driver_exit(void)
    {
    pci_unregister_driver(&my_pci_driver);
    printk("un registering hello-1\n");
    }


module_init(my_driver_init);
module_exit(my_driver_exit);
MODULE_DEVICE_TABLE(pci,my_driver_pci_table);

output from /var/log/message

Code:

[root@ku backup]# tail -n 10 /var/log/messages
Aug 12 14:45:36 ku kernel: --------------------------------
Aug 12 14:46:39 ku kernel: un registering hello-1--------------------------------
Aug 12 14:46:39 ku kernel: Msg from init fonction
Aug 12 14:46:39 ku kernel:
Aug 12 14:46:39 ku kernel: --------------------------------
Aug 12 14:55:12 ku kernel: un registering hello-1
Aug 12 14:56:49 ku kernel: --------------------------------
Aug 12 14:56:49 ku kernel: Msg from init fonction
Aug 12 14:56:49 ku kernel:
Aug 12 14:56:49 ku kernel: --------------------------------
[root@ku backup]#

Thanks.

giri_blr 08-14-2008 03:41 AM

Quote:

Originally Posted by knockout_artist (Post 3245297)
Good Day,

A very simple hello world kind of module.
It does print message from init and exit routine but from with in probe() function it won't print ant thing.

I suspect probe wont get executed.

Code:

#include <linux/module.h>      /* Needed by all modules */
#include <linux/kernel.h>      /* Needed for KERN_INFO */
#include<linux/pci.h>

#define MY_VENDOR_ID  0x109e
#define MY_DEVICE_ID  0x036e

struct pci_device_id my_driver_pci_table[] __devinitdata = {
  {
  MY_VENDOR_ID,
  PCI_ANY_ID,
  MY_DEVICE_ID,
    0,0
  }, {0},
};

static int __devinit  my_driver_probe(struct pci_dev *pdev, const struct pci_device_id *id)
    {
        pci_enable_device(pdev);
        printk("--------------------------------\n");
        printk("message from inside of probe function \n\n");
        printk("--------------------------------\n");

      }


struct pci_driver  my_pci_driver = {
    .name = "mydrv",
    .probe = my_driver_probe,
//  .remove = __devexit_p(my_driver_remove),
    .id_table = my_driver_pci_table,
    };

static int __init my_driver_init(void)
    {
        pci_register_driver(&my_pci_driver);
        printk("--------------------------------\n");
        printk("Msg from init fonction\n\n");
        printk("--------------------------------\n");
        return 0;
    }

static void __exit my_driver_exit(void)
    {
    pci_unregister_driver(&my_pci_driver);
    printk("un registering hello-1\n");
    }


module_init(my_driver_init);
module_exit(my_driver_exit);
MODULE_DEVICE_TABLE(pci,my_driver_pci_table);

output from /var/log/message

Code:

[root@ku backup]# tail -n 10 /var/log/messages
Aug 12 14:45:36 ku kernel: --------------------------------
Aug 12 14:46:39 ku kernel: un registering hello-1--------------------------------
Aug 12 14:46:39 ku kernel: Msg from init fonction
Aug 12 14:46:39 ku kernel:
Aug 12 14:46:39 ku kernel: --------------------------------
Aug 12 14:55:12 ku kernel: un registering hello-1
Aug 12 14:56:49 ku kernel: --------------------------------
Aug 12 14:56:49 ku kernel: Msg from init fonction
Aug 12 14:56:49 ku kernel:
Aug 12 14:56:49 ku kernel: --------------------------------
[root@ku backup]#

Thanks.

Give a function call to my_driver_probe() from my_driver_init(). Even my_driver_init() is not needed. You can do all your operations from module_init() as follows...
Code:

static int module_init(void)
{
        pci_register_driver(&my_pci_driver);
        printk("--------------------------------\n");
        printk("Msg from init fonction\n\n");
        printk("--------------------------------\n");
        pci_enable_device(pdev);
        printk("--------------------------------\n");
        printk("message from inside of probe function \n\n");
        printk("--------------------------------\n");
        return 0;

}


cheers,
Giri


All times are GMT -5. The time now is 08:23 PM.