当前位置:  技术问答>linux和unix

platform很奇怪的问题!求高手围观!!!急。。。。。。。。。。。

    来源: 互联网  发布时间:2017-02-12

    本文导语:  定义一个平台设备的时候,把代码和资源加入平台文件,系统应该就会帮我们注册吧!但是我看到内核中的RTC驱动,它在probe中又注册了一个设备!这不是重复了吗?为什么呢!求高手解救!!!!probe代码如下: ds1511...

定义一个平台设备的时候,把代码和资源加入平台文件,系统应该就会帮我们注册吧!但是我看到内核中的RTC驱动,它在probe中又注册了一个设备!这不是重复了吗?为什么呢!求高手解救!!!!probe代码如下:
ds1511_rtc_probe(struct platform_device *pdev)
{
struct rtc_device *rtc;
struct resource *res;
struct rtc_plat_data *pdata = NULL;
int ret = 0;

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
return -ENODEV;
}
pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
if (!pdata) {
return -ENOMEM;
}
pdata->size = res->end - res->start + 1;
if (!request_mem_region(res->start, pdata->size, pdev->name)) {
ret = -EBUSY;
goto out;
}
pdata->baseaddr = res->start;
pdata->size = pdata->size;
ds1511_base = ioremap(pdata->baseaddr, pdata->size);
if (!ds1511_base) {
ret = -ENOMEM;
goto out;
}
pdata->ioaddr = ds1511_base;
pdata->irq = platform_get_irq(pdev, 0);

/*
 * turn on the clock and the crystal, etc.
 */
rtc_write(0, RTC_CMD);
rtc_write(0, RTC_CMD1);
/*
 * clear the wdog counter
 */
rtc_write(0, DS1511_WD_MSEC);
rtc_write(0, DS1511_WD_SEC);
/*
 * start the clock
 */
rtc_enable_update();

/*
 * check for a dying bat-tree
 */
if (rtc_read(RTC_CMD1) & DS1511_BLF1) {
dev_warn(&pdev->dev, "voltage-low detected.n");
}

/*
 * if the platform has an interrupt in mind for this device,
 * then by all means, set it
 */
if (pdata->irq > 0) {
rtc_read(RTC_CMD1);
if (request_irq(pdata->irq, ds1511_interrupt,
IRQF_DISABLED | IRQF_SHARED, pdev->name, pdev) dev, "interrupt not available.n");
pdata->irq = 0;
}
}

rtc = rtc_device_register(pdev->name, &pdev->dev, &ds1511_rtc_ops,
THIS_MODULE); if (IS_ERR(rtc)) {
ret = PTR_ERR(rtc);
goto out;
}
pdata->rtc = rtc;
platform_set_drvdata(pdev, pdata);
ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1511_nvram_attr);
if (ret) {
goto out;
}
return 0;
 out:
if (pdata->rtc) {
rtc_device_unregister(pdata->rtc);
}
if (pdata->irq > 0) {
free_irq(pdata->irq, pdev);
}
if (ds1511_base) {
iounmap(ds1511_base);
ds1511_base = NULL;
}
if (pdata->baseaddr) {
release_mem_region(pdata->baseaddr, pdata->size);
}

kfree(pdata);
return ret;
}

 

|
虚拟总线的探测过程,实在不配称为设备探测。因为需要程序员手动注册device和设备上的资源

pci总线和usb总线有真实的物理的探测设备的能力,不需要程序员手动注册设备
要再具体,就只有去读pci和usb的标准

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.tools枚举standardlocation的类成员方法: platform_class_path定义及介绍
  • platform_driver_register和of_register_platform_driver
  • Cisco Open Network Environment Platform拒绝服务漏洞
  • platform_device和platform_driver注册顺序
  • platform驱动的疑惑
  • ioctl和platform的原理
  • 教你如何使用platform密钥对apk进行签名
  • Espresso Game Platform
  • Candle App Platform
  • Andrisoft WANGuard Platform
  • 关于platform平台设备驱动操作的问题
  • 持久层框架 DataNucleus Access Platform
  • 企业门户平台 eXo Platform
  • udev cdev platform device的问题,大家指教
  • /sys/devices/platform/usb_mass_storage/lun0/file求提示!
  • 企业服务总线 Petals Service Platform
  • Web安全测试平台 Vega Platform
  • linux 驱动开发问题platform_driver_register
  • common-software-platform
  • Facebook Open Platform
  • 问个问题,在平台设备(platform_driver)注册以后,在应用层如何调用呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,