首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

单片机和嵌入式系统linux的区别(三)

单片机和嵌入式系统linux的区别(三)

2.1.2 是否通用
有些单片机厂家也给客户提供了大量的驱动程序,比如USB HOST驱动程序,这可以让客户很容易就可以在它的上面编写程序读写U盘。但是客户写的这些程序,只能在这种芯片、这个驱动程序上使用;更换另一种芯片后,即使芯片公司也提供了驱动程序,但是接口绝对不一样,客户又得重新编写应用程序。
基于操作系统的驱动程序要遵循统一的接口,比如对于不同的芯片的USB HOST驱动,它们都要向上提供一个相同的数据结构,在里面实现了各自的USB操作。

下面是S3C2410/S3C2440的USB驱动向上层提供的数据结构:
static const struct hc_driver ohci_s3c2410_hc_driver = {
                .deion = hcd_name,
                .product_desc = "S3C24XX OHCI",
                .hcd_priv_size = sizeof(struct ohci_hcd),

        /*
                * generic hardware linkage
                */
                .irq = ohci_irq,
                .flags = HCD_USB11 | HCD_MEMORY,

        /*
                * basic lifecycle operations
                */
                .start = ohci_s3c2410_start,
                .stop = ohci_stop,
                .shutdown = ohci_shutdown,

        /*
                * managing i/o requests and associated device resources
                */
                .urb_enqueue = ohci_urb_enqueue,
                .urb_dequeue = ohci_urb_dequeue,
                .endpoint_disable = ohci_endpoint_disable,

        /*
                * scheduling support
                */
                .get__number = ohci_get_,

        /*
                * root hub support
                */
                .hub_status_data = ohci_s3c2410_hub_status_data,
                .hub_control = ohci_s3c2410_hub_control,
                .hub_irq_enable = ohci_rhsc_enable,
        #ifdef CONFIG_PM
                .bus_suspend = ohci_bus_suspend,
                .bus_resume = ohci_bus_resume,
        #endif
                .start_port_reset = ohci_start_port_reset,
        };

下面是ATMEL公司的ARM芯片的USB驱动向上层提供的数据结构:
/*-------------------------------------------------------------------------*/
static const struct hc_driver ohci_at91_hc_driver = {
                .deion = hcd_name,
                .product_desc = "AT91 OHCI",
                .hcd_priv_size = sizeof(struct ohci_hcd),

        /*
                * generic hardware linkage
                */
                .irq = ohci_irq,
                .flags = HCD_USB11 | HCD_MEMORY,

        /*
                * basic lifecycle operations
                */
                .start = ohci_at91_start,
                .stop = ohci_stop,
                .shutdown = ohci_shutdown,

        /*
                * managing i/o requests and associated device resources
                */
                .urb_enqueue = ohci_urb_enqueue,
                .urb_dequeue = ohci_urb_dequeue,
                .endpoint_disable = ohci_endpoint_disable,

        /*
                * scheduling support
                */
                .get__number = ohci_get_,

        /*
                * root hub support
                */
                .hub_status_data = ohci_hub_status_data,
                .hub_control = ohci_hub_control,
                .hub_irq_enable = ohci_rhsc_enable,
        #ifdef CONFIG_PM
                .bus_suspend = ohci_bus_suspend,
                .bus_resume = ohci_bus_resume,
        #endif
                .start_port_reset = ohci_start_port_reset,
        };
飞思卡尔汽车电子开发板专业研发团队 http://fxfreefly.taobao.com
返回列表