• 大小:
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-04
  • 语言: 其他
  • 标签: 实例源码  

资源简介

LINUX设备驱动程序(第3版)_含实例源码.zip

资源截图

代码片段和文件信息

/*
 * A virtual bus for LDD sample code devices to plug into.  This
 * code is heavily borrowed from drivers/base/sys.c
 *
 * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet
 * Copyright (C) 2001 O‘Reilly & Associates
 *
 * The source code in this file can be freely used adapted
 * and redistributed in source or binary form so long as an
 * acknowledgment appears in derived source files.  The citation
 * should list that the code comes from the book “Linux Device
 * Drivers“ by Alessandro Rubini and Jonathan Corbet published
 * by O‘Reilly & Associates.   No warranty is attached;
 * we cannot take responsibility for errors or fitness for use.
 *
 */
/* $Id: lddbus.cv 1.9 2004/09/26 08:12:27 gregkh Exp $ */

#include 
#include 
#include 
#include 
#include 
#include “lddbus.h“

MODULE_AUTHOR(“Jonathan Corbet“);
MODULE_LICENSE(“Dual BSD/GPL“);
static char *Version = “$Revision: 1.9 $“;

/*
 * Respond to hotplug events.
 */
static int ldd_hotplug(struct device *dev char **envp int num_envp
char *buffer int buffer_size)
{
envp[0] = buffer;
if (snprintf(buffer buffer_size “LDDBUS_VERSION=%s“
    Version) >= buffer_size)
return -ENOMEM;
envp[1] = NULL;
return 0;
}

/*
 * Match LDD devices to drivers.  Just do a simple name test.
 */
static int ldd_match(struct device *dev struct device_driver *driver)
{
return !strncmp(dev->bus_id driver->name strlen(driver->name));
}


/*
 * The LDD bus device.
 */
static void ldd_bus_release(struct device *dev)
{
printk(KERN_DEBUG “lddbus release\n“);
}

struct device ldd_bus = {
.bus_id   = “ldd0“
.release  = ldd_bus_release
};


/*
 * And the bus type.
 */
struct bus_type ldd_bus_type = {
.name = “ldd“
.match = ldd_match
.hotplug  = ldd_hotplug
};

/*
 * Export a simple attribute.
 */
static ssize_t show_bus_version(struct bus_type *bus char *buf)
{
return snprintf(buf PAGE_SIZE “%s\n“ Version);
}

static BUS_ATTR(version S_IRUGO show_bus_version NULL);



/*
 * LDD devices.
 */

/*
 * For now no references to LDDbus devices go out which are not
 * tracked via the module reference count so we use a no-op
 * release function.
 */
static void ldd_dev_release(struct device *dev)
{ }

int register_ldd_device(struct ldd_device *ldddev)
{
ldddev->dev.bus = &ldd_bus_type;
ldddev->dev.parent = &ldd_bus;
ldddev->dev.release = ldd_dev_release;
strncpy(ldddev->dev.bus_id ldddev->name BUS_ID_SIZE);
return device_register(&ldddev->dev);
}
EXPORT_SYMBOL(register_ldd_device);

void unregister_ldd_device(struct ldd_device *ldddev)
{
device_unregister(&ldddev->dev);
}
EXPORT_SYMBOL(unregister_ldd_device);

/*
 * Crude driver interface.
 */


static ssize_t show_version(struct device_driver *driver char *buf)
{
struct ldd_driver *ldriver = to_ldd_driver(driver);

sprintf(buf “%s\n“ ldriver->version);
return strlen(buf);
}


int register_ldd_driver(struct ldd_driver *driver)
{
int ret

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-06 18:09  examples\
     目录           0  2019-06-06 18:09  examples\include\
     文件         855  2005-02-01 04:31  examples\include\lddbus.h
     目录           0  2019-06-06 18:09  examples\lddbus\
     文件        4058  2005-02-01 04:31  examples\lddbus\lddbus.c
     文件         710  2005-02-01 04:31  examples\lddbus\Makefile
     文件        1091  2005-02-01 04:31  examples\LICENSE
     文件         289  2005-02-01 04:31  examples\Makefile
     目录           0  2019-06-06 18:09  examples\misc-modules\
     文件        2128  2005-02-01 04:31  examples\misc-modules\complete.c
     文件        2000  2005-02-01 04:31  examples\misc-modules\faulty.c
     文件         463  2005-02-01 04:31  examples\misc-modules\hello.c
     文件        1130  2005-02-01 04:31  examples\misc-modules\hellop.c
     文件        6194  2005-02-01 04:31  examples\misc-modules\jiq.c
     文件        7571  2005-02-01 04:31  examples\misc-modules\jit.c
     文件        2293  2005-02-01 04:31  examples\misc-modules\kdataalign.c
     文件        1489  2005-02-01 04:31  examples\misc-modules\kdatasize.c
     文件         987  2005-02-01 04:31  examples\misc-modules\Makefile
     文件        2044  2005-02-01 04:31  examples\misc-modules\seq.c
     文件        6200  2005-02-01 04:31  examples\misc-modules\silly.c
     文件        2161  2005-02-01 04:31  examples\misc-modules\sleepy.c
     目录           0  2019-06-06 18:09  examples\misc-progs\
     文件        1483  2005-02-01 04:31  examples\misc-progs\asynctest.c
     文件        2088  2005-02-01 04:31  examples\misc-progs\dataalign.c
     文件        1287  2005-02-01 04:31  examples\misc-progs\datasize.c
     文件         417  2005-02-01 04:31  examples\misc-progs\gdbline
     文件        3372  2005-02-01 04:31  examples\misc-progs\inp.c
     文件         925  2005-02-01 04:31  examples\misc-progs\load50.c
     文件         297  2005-02-01 04:31  examples\misc-progs\Makefile
     文件        1975  2005-02-01 04:31  examples\misc-progs\mapcmp.c
     文件        2170  2005-02-01 04:31  examples\misc-progs\mapper.c
............此处省略86个文件信息

评论

共有 条评论