Re: How is it possible to build a loadable module from spi-altera.c ...?


jchludzinski
 

My problem is I have an 1553 chip (an avionic data bus) connected to the HPS master (an ARM processor) via an FPGA (soft) SPI controller. This is where the spi-altera.c comes in. It provides the driver/interface to the soft SPI controller on the Arria 10 SoC.
 
I need an interface now to communicate between the SPI slave (the 1553 chip) and the SPI master (the Arria 10 HPS/ARM).

When I load spi-altera.ko I get the udev files (/dev/spidevXX) but not when I load spidev.ko. Why? spi-altera.c doesn't have an init routine and consequently no call to register_chrdev(..) but spidev.c does. What's the relationship between spi-altera and spidev? What's the purpose of spi.c?


On 2021-03-20 18:14, jchludzinski wrote:
How is it possible to build a loadable module from _spi-altera.c_ when
it has no code for creating _udev_ files (i.e., _/dev/spidevXX_); it
has no:

static int __init spidev_init(void)
{
    int status;

    printk(KERN_ALERT "DEBUG: Passed %s %d \n", __FUNCTION__,
__LINE__);

    /* Claim our 256 reserved device numbers.  Then register a class
     * that will key udev/mdev to add/remove /dev nodes.  Last,
register
     * the driver which manages those device numbers.
     */
    BUILD_BUG_ON(N_SPI_MINORS > 256);
    status = register_chrdev(SPIDEV_MAJOR, "spi", &spidev_fops);

    printk(KERN_ALERT "DEBUG: Passed %s %d \n", __FUNCTION__,
__LINE__);

    if (status < 0)
        return status;

    printk(KERN_ALERT "DEBUG: Passed %s %d \n", __FUNCTION__,
__LINE__);

    spidev_class = class_create(THIS_MODULE, "spidev");
    if (IS_ERR(spidev_class)) {
        unregister_chrdev(SPIDEV_MAJOR,
spidev_spi_driver.driver.name);
        return PTR_ERR(spidev_class);
    }

    printk(KERN_ALERT "DEBUG: Passed %s %d \n", __FUNCTION__,
__LINE__);

    status = spi_register_driver(&spidev_spi_driver);
    if (status < 0) {
        class_destroy(spidev_class);
        unregister_chrdev(SPIDEV_MAJOR,
spidev_spi_driver.driver.name);
    }

    printk(KERN_ALERT "DEBUG: Passed %s %d \n", __FUNCTION__,
__LINE__);

    return status;
}
module_init(spidev_init);

The _printk_'s are of course mine.

---John

Join yocto@lists.yoctoproject.org to automatically receive all group messages.