Linux学习例子

#include <stdio.h>

main()
{
    printf("hello world\n");
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
	int fd;
	char *leds = "/dev/leds";
	char *test1 = "/bin/test1";
	char *test2 = "/bin/test2";
	
	if((fd=open(leds,O_RDWR|O_NOCTTY|O_NDELAY))<0)
	{
		printf("open %s is failed %d\n",leds,fd);
	}
	printf("open %s is OK %d\n",leds,fd);
	
	if((fd=open(test1,O_RDWR,0777))<0)
	{
		printf("open %s is failed %d\n",test1,fd);
	}
	printf("open %s is OK %d\n",test1,fd);


	if((fd=open(test2,O_RDWR|O_CREAT,0777))<0)
	{
		printf("open %s is failed %d\n",test2,fd);
	}
	printf("open %s is OK %d\n",test2,fd);

	return 0;
}
1.我们这节课要讲的杂项设备驱动是属于我们这三大设备驱动里面的哪个呢?
杂项设备是字符设备的一种。可以自动生成设备节点。
//目录下设备节点。
cat /dev 

系统里面有很多杂项设备。我们可以输入

//目录下d 杂项设备。
cat /proc/misc 
2.杂项设备除了比字符设备代码简单,还有别的区别吗?
杂项设备的主设备号是相同的,均为 10,
次设备号是不同的。
主设设备号相同就可以节省内核的资源。

主设备号可以比做成电话号码的区号。
比如北京的区号是010,
次设备号可以比作成电话号码。

//查看的都是主设备号
cat /proc/devices
4 杂项设备的描述

定义在内核源码路径:

vim include/linux/miscdevice.h
struct miscdevice{
	int minor; //次设备号
	const char *name; //设备节点的名字
	const struct file_operations *fops; //文件操作集
	。。。。。。}

file operations 文件操作集在定义在

include/linux/fs.h 

下面。里面的一个结构体成员都对应一个调用。
注册杂项设备

extern int misc register(struct miscdevice *misc);

注销杂项设备

extern int misc deregister(struct miscdevice *misc);
5 注册杂项设备的流程
(1)填充 miscdevice 这个结构体
(2)填充file operations 这个结构体
(3)注册杂项设备并生生成设备节点。
#include<linux/init.h>
#include<linux/module.h>
#include<linux/miscdevice.h>
#include <linux/fs.h>
struct file_operations misc_fops ={
	.owner=THIS MODULE
	}
struct miscdevice misc_dev={
	.minor=MISC_DYNAMIC_MINOR,
	.name="hello misc",
	.fops= &misc_fops
}
static int misc_init(void)
{
	int ret;
	ret = misc_register(&misc_dev);
	if(ret < 0)
	{
		printk("misc registe is error\n");
		return -1;
	}
	printk("misc registe is succeed\n");
	return 0;
}
static void misc exit(void)
{
	misc_deregister(&misc_dev);
	printk("misc byb byb \n");
}
module init(misc_init);
module exit(misc_exit);
MODULE LICENSE("GPL");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值