【Tiny6410 And Linux】—(1.4)—device 设备模型——代码

原创 2012年05月05日 13:48:24

这三个程序本是一体的!

但是一开始写的时候有这个顺序,所以也就来这个顺序吧!!

 

1、内核代码

 

①、bus.c

这个代码跟上一篇文章的代码一样,我也就是拷贝的!

 

②、device.c

#include <linux/device.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/string.h>


MODULE_AUTHOR("_Justin");
MODULE_LICENSE("GPL");

extern struct device my_bus_dev;
extern struct bus_type my_bus_type;

static void my_dev_release(struct device *dev)
{
	printk("[Call my_dev_release!]\n");
}

struct device my_dev = 
{
	.init_name = "my_dev",
	.bus = &my_bus_type,
	.parent = &my_bus_dev,
	.release = my_dev_release,		/* 这个函数必须有,可以为空 */
};

/* 属性文件的读操作 */
static ssize_t mydev_show(struct device *dev,struct device_attribute *attr,
				char *buf)
{
	return sprintf(buf,"%s\n","This is my device!");
}

/* 创建结构描述的属性文件 */
static DEVICE_ATTR(dev,S_IRUGO,mydev_show,NULL);

static int __init my_device_init(void)
{
	int ret = 0;
	printk("[Call my_device_init!]\n");	

	/* 注册设备 */
	ret = device_register(&my_dev);
	if(ret)
		return ret;

	/* 创建属性文件 */
	ret = device_create_file(&my_dev,&dev_attr_dev);

	return ret;
}

static void __exit my_device_exit(void)
{
	printk("[Call my_device_exit!]\n");	
	device_unregister(&my_dev);
}

module_init(my_device_init);
module_exit(my_device_exit);


③、Makefile

ifneq ($(KERNELRELEASE),)
obj-m := device.o

else
KDIR := /home/_Jana/linux-2.6.38

all:
	make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-

clean:
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order

endif


2、测试结果

 

 

 

 

相关文章推荐

【Tiny6410 And Linux】—(1.4)—device 设备模型——原理

上一节原理中有一个特别重要的东西: 总线也是一个设备,必须按照设备注册! 1、设备描述结构 在 Linux 设备模型中,总线由 device 结构表示,定义在 中。 其中 relea...

【Tiny6410 And Linux】—(1.3)—bus 设备模型——代码

又是一个周六,放假! 无所事事,干脆整整代码吧,谁知道这也遇到不少问题,各种内核异常!!!!不过最后还是查出问题来了,主要是内核版本的更新,有的元素不再包含了!   1、驱动程序   ①、b...

【Tiny6410 And Linux】—(1.5)—driver 设备模型——代码

三个中的最后一个!   1、内核代码   ①、bus.c 还是跟上面的文章的一样,我依旧粘贴!!   ②、driver.c #include #include #include...

【Tiny6410 And Linux】—(1.5)—driver 设备模型——原理

外边阴天了,看来避免不了一场大雨的降临!!在宿舍,挺爽的,喜欢雨,喜欢大雨!!   1、驱动描述结构   在 Linux 设备模型中,总线由 device_driver 结构表示,定义在 中...

【Tiny6410 And Linux】—(1.3)—bus 设备模型——原理

今天能解决那个 kset,完全出乎自己所料,本来想以后遇到再说,呵呵。 既然解决了,然后按照进程是 bus 设备模型!   首先,要明确,总线,设备,驱动,三者不分家!!就是说,这节写的总线,以...

【Tiny6410 And Linux】—(2.1)—platform 总线、设备、驱动——代码

platform 无非就是内核中有一条总线而已,方便移植!个人感觉没有跟自己创建总线是木有区别的!当然相关的函数内核就自己处理了,省事,呵呵!   1、内核代码   ①、device.c #...

【Tiny6410 And Linux】—(2.1)—platform 总线、设备、驱动——原理

后天就要考试了,PLC,呵呵,这个还不算什么事情,所以呢,继续!   1、platform 总线介绍   一个现实的 Linux 设备和驱动通常都需要挂载在一种总线上,对于本身依附于 P...

【Tiny6410 And Linux】—(2.4)—实现 input 模型按键驱动——原理

电脑的电源那特别烫!!! 最讨厌的就是电脑出毛病了了,现在还得用别人的电脑,哎~~伤不起啊! 回头又得花钱、花时间修电脑了!一想到这里就不爽! 不过今天的学习进度还是要跟上的,通过 input ...

【Tiny6410 And Linux】—(5.2)—RamDisk 驱动实现(自己绑定 make_request_fn() )——代码

直接来吧!   1、驱动程序   ①、blk.c #include #include #include #include #include /* printk() */ #incl...

【Tiny6410 And Linux】—(2.3)—使用工作队列处理按键中断——代码

做了做用工作队列处理按键中断的实验,对中断开始明白~~ 呵呵~~其实今天就是加了个全局变量(虽然这在驱动程序中不是很合适吧),还有就是加了个消抖(就是通过延时等待而已)!   1、驱动程序  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Tiny6410 And Linux】—(1.4)—device 设备模型——代码
举报原因:
原因补充:

(最多只允许输入30个字)