Linux enc28j60网卡驱动移植(硬件spi和模拟spi)(3)

/* [cgw]: 分配一个平台设备 */
static struct platform_device spi_platform_dev = {
    .name        = "s3c2410-spi",        /* [cgw]: 设置平台设备名,和平台驱动名对应 */
    .id          = 1,
    .num_resources      = ARRAY_SIZE(s3c_spi1_resource),
    .resource      = s3c_spi1_resource,
    .dev = {
        .release = spi_dev_release,
        .platform_data = &spi_info,
        //.dma_mask = &s3c_device_spi1_dmamask,
        //.coherent_dma_mask = 0xffffffffUL
    },
};


static int spi_dev_init(void)
{
    /* [cgw]: 注册spi_platform_dev平台设备 */
    platform_device_register(&spi_platform_dev);
    return 0;
}

static void spi_dev_exit(void)
{
    /* [cgw]: 注销spi_platform_dev平台设备 */
    platform_device_unregister(&spi_platform_dev);
}

module_init(spi_dev_init);
module_exit(spi_dev_exit);

MODULE_LICENSE("GPL");

makefile:


复制代码
KERN_DIR = /work/system/linux-2.6.22.6

all:
    make -C $(KERN_DIR) M=`pwd` modules

clean:
    make -C $(KERN_DIR) M=`pwd` modules clean
    rm -rf modules.order

obj-m    += spi_platform_dev.o
obj-m    += spi_s3c24xx.o
obj-m    += spi_bitbang.o
obj-m    += enc28j60.o

加载spi平台设备时(platform_device),应注意模拟spi时应加载spi_s3c24xx_gpio.c,硬件spi时应加载spi_s3c24xx.c

如:

模拟spi:

1 # insmod spi_bitbang.ko
2 # insmod spi_platform_dev.ko
3 # insmod spi_s3c24xx_gpio.ko
4 # insmod enc28j60.ko

硬件spi:

1 # insmod spi_bitbang.ko
2 # insmod spi_platform_dev.ko
3 # insmod spi_s3c24xx.ko
4 # insmod enc28j60.ko

其中spi_bitbang.c , spi_s3c24xx_gpio.c , spi_s3c24xx.c为内核原生源文件,不需要改动。

硬件spi时,加载驱动的实例:

Linux enc28j60网卡驱动移植(硬件spi和模拟spi)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f35ac51569f8836409444b2e674f14c2.html