Hi,欢迎来到中国优发娱乐手机版高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养13年!
  • 全国咨询热线:400-611-6270
  • 新浪微博
  • 微信
  • 北京
    校区
  • 上海
    校区
  • 深圳
    校区
  • 成都
    校区
  • 南京
    校区
  • 武汉
    校区
  • 西安
    校区
  • 广州
    校区
  • 沈阳
    校区
  • 济南
    校区
  • 重庆
    校区
  • 长沙
    校区
  • 研发
    中心
  • 当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > 如何编写块设备驱动
    如何编写块设备驱动
    时间:2017-05-12作者:华清远见
     首先参考内核代码中的z2ram.c    用内存模拟一个块设备驱动  具体的块设备驱动流程: 1、向内核注册块设备 int register_blkdev(unsigned int major, const char *name) 参数1:major写0表示自动获取主设备号 参数2:注册的名称 返回值:当参数1写0时 返回申请的主设备号 2、分配disk个数 struct gendisk *alloc_disk(int minors) 返回值: 通用的块设备数据结构指针  3、初始化alloc_disk返回的gendisk指针成员 1) major  主设备号的初始化 2) first_minor 第一个次设备号的初始化 一般为0 3) struct block_device_operations *fops; 向上提供的接口 4) disk_name 名称的初始化 5) 设置disk容量  static inline void set_capacity(struct gendisk *disk, sector_t size) 6) struct request_queue *queue; 请求队列的初始化 使用如下函数进行初始化: struct request_queue *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock) 参数1:回调函数   参数2:用于解决竞态的  回调函数 request_fn_proc *rfn 1.获取请示 req = blk_fetch_request(q); 2.根据请求判断读和写操作 进行相应的memcpy blk_init_queue ---->blk_init_queue_node ----> blk_init_allocated_queue ---> blk_queue_make_request(q, blk_queue_bio); --->blk_queue_bio 电梯优化算法 4、将已初始化好的gendisk指针添加到内核  add_disk(struct gendisk *) 5、  blk_register_region 在dev目录下创建设备结点 名称为disk_name 6、 反向操作 blk_unregister_region 销毁设备结点 unregister_blkdev 注销块设备 del_gendisk(z2ram_gendisk); 删除gendisk put_disk(z2ram_gendisk); 释放disk blk_cleanup_queue(z2_queue); 释放请求队列 测试方法: 1、mkdosfs /dev/fs_blk0 2、mount /dev/fs_blk0 /mnt 3、cd /mnt  touch 1.c 2.c 3.c 4、cd .. umount /mnt ls查看/mnt下内容  5、再次挂载查看mnt下内容 有1.c 2.c 3.c

    发表评论
    全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966 在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497) 企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300) Copyright 2004-2017 华清远见教育集团 版权所有 ,沪ICP备10038863号,京公海网安备110108001117号

    优发娱乐手机版

    百度360搜索搜狗搜索

    优发娱乐手机版

    百度360搜索搜狗搜索