如何将新设备添加到板初始化代码linux内核中

问题描述 投票:-1回答:1

您好,我正在用2.22.19版本自定义linux内核,它不支持设备树。因此,我必须使用板初始化代码来描述外围设备。我已经在板初始化代码中检查了“ spi节点”,如下所示:

   static struct resource c300v2evm_spi0_resources[] = {
    {
        .start  = COMCERTO_SPI0_BASE,
        .end    = COMCERTO_SPI0_BASE + SZ_4K - 1,
        .flags  = IORESOURCE_MEM,
    },
    {
        .start  = IRQ_SPI0,
        .flags  = IORESOURCE_IRQ,
    },
};
static struct platform_device c300v2evm_spi0 = {
    .name = "comcerto_spi",
    .id = 0,
    .num_resources = ARRAY_SIZE(c300v2evm_spi0_resources),
    .resource = c300v2evm_spi0_resources,
};

并且spi总线与控制器驱动程序匹配:

static int __init comcerto_spi_probe(struct platform_device *pdev)
{
...// probe function code
}
static struct platform_driver comcerto_spi_driver = {
    .driver = {
        .name   = "comcerto_spi",
        .owner  = THIS_MODULE,
    },
    .probe  = comcerto_spi_probe,
    .remove = __devexit_p(comcerto_spi_remove),
};

现在我有了设备的协议驱动程序(spi总线上的eeprom):

static int at25_probe(struct spi_device *spi)
{
... // probe function code
}
static struct spi_driver at25_driver = {
    .driver = {
        .name       = "at25",
        .owner      = THIS_MODULE,
    },
    .probe      = at25_probe,
    .remove     = __devexit_p(at25_remove),
};

static int __init at25_init(void)
{
    return spi_register_driver(&at25_driver);
}

[我有检查日志,看到该协议已使用init函数加载到内核,但我不知道如何在板init代码中添加节点以与协议驱动程序探测功能匹配。

c linux kernel driver porting
1个回答
0
投票

我已通过以下操作解决了该问题:首先,我在板初始化代码文件中定义一个描述我的spi设备的结构:

static struct legerity_platform_data c300v2evm_legerity0_platform_data = {
.type = 5,
.dummy = 0,
};

static struct spi_board_info spi0_info[] = {
{
    .modalias = "spi0",
    .chip_select = 1,
    .max_speed_hz = 1000*1000,
    .bus_num = 0,
    .irq = -1,
    .mode = SPI_MODE_3,
    .platform_data = &c300v2evm_legerity0_platform_data,
    },
};

使用字段“ .bus_num = 0”,内核将了解此spi设备属于spi0总线,其具有“ id = 0”。然后,我使用此功能向内核注册设备:

spi_register_board_info(spi0_info, 1);

我已经在我的电路板上进行了测试,并且协议驱动程序与我的设备匹配,将调用“探针”功能。此方法是在Linux内核版本2.x.x中注册新设备的基本方法,我已经检查过可以在较新版本中使用此方法。希望这对必须使用旧版本Linux内核的人们有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.