实验步骤

阅读和理解源代码

  • demo_read,demo_write 函数完成驱动的读写接口功能,do_write 函数实现将用户写入的数据逆序排列,通过读取函数读取转换后的数据。这里只是演示接口的实现过程和内核驱动对用户的数据的处理。

  • 代码:

    #define DEVICE_NAME  "demo"
    static ssize_t demo_write(struct file *filp,const char * buffer, size_t count)
    {
    char drv_buf[];
    copy_from_user(drv_buf , buffer, count);
    …
    }
    static ssize_t demo_read(struct file *filp,char *buffer,size_t count,loff_t *ppos)
    {
    char drv_buf[];
    copy_to_user(buffer, drv_buf,count);
    ….
    }
    static int demo_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg)
    {
    }
    static int demo_open(struct inode *inode, struct file *file)
    {
    }
    static int demo_release(struct inode *inode, struct file *filp)
    {
    MOD_DEC_USE_COUNT;
    DPRINTK("device release\n");
    return 0;
    }
    static struct file_operations demo_fops = {
    owner: THIS_MODULE,
    write:demo_write,
    read: demo_read,
    ioctl: demo_ioctl,
    open: demo_open,
    release:demo_release,
    };
    #ifdef CONFIG_DEVFS_FS
    static devfs_handle_t devfs_demo_dir, devfs_demoraw;
    #endif
    static int __init demo_init(void)
    {
    int result;
    #ifdef CONFIG_DEVFS_FS
    devfs_demo_dir = devfs_mk_dir(NULL, "demo", NULL);
    devfs_demoraw = devfs_register(devfs_demo_dir, "0", DEVFS_FL_DEFAULT,
    demo_Major, demo_MINOR, S_IFCHR | S_IRUSR | S_IWUSR,&demo_fops, NULL);
    #else
    SET_MODULE_OWNER(&demo_fops);
    result = register_chrdev(demo_Major, "scullc", &demo_fops);
    if (result < 0) return result;
    if (demo_Major == 0) demo_Major = result; /* dynamic */
    #endif
    printk(DEVICE_NAME " initialized\n");
    return 0;
    }
    static void __exit demo_exit(void)
    {
    unregister_chrdev(demo_major, "demo");
    kfree(demo_devices);
    printk(DEVICE_NAME " unloaded\n");
    }
    module_init(demo_init);
    module_exit(demo_exit);

Open方法

  • Open方法提供给驱动程序初始化设备的能力,从而为以后的设备操作做好准备,此外open操作一般还会递增使用计数,用以防止文件关闭前模块被卸载出内核。 •递增使用计数
  • 检查特定设备错误。
  • 如果设备是首次打开,则对其进行初始化。
  • 识别次设备号,如有必要修改 f_op 指针。
  • 分配并填写 filp->private_data 中的数据。

编译驱动模块及测试程序

  • 在 Makefile 中有两种编译方法,可以在本机上使用gcc 也可以使用交叉编译器进行编译,我们组采用交叉编译器进行编译。

测试驱动程序

  • 如果使用 gcc 编译的话,需要通过下面的命令来建立设备节点,如果使用交叉编译器的话,不需要建立设备节点。

修改makefile

make编译

实验结果

make错误,需要创建一个bin文件夹

20145209&20145309信息安全系统设计基础实验报告 (4)的更多相关文章

  1. 20145220&20145209&20145309信息安全系统设计基础实验报告(5)

    20145220&20145209&20145309信息安全系统设计基础实验报告(5) 实验报告链接: http://www.cnblogs.com/zym0728/p/6132249 ...

  2. 20145220&20145209&20145309信息安全系统设计基础实验报告(3)

    20145220&20145209&20145309信息安全系统设计基础实验报告(3) 实验报告链接: http://www.cnblogs.com/zym0728/p/6132243 ...

  3. 20145220&20145209&20145309信息安全系统设计基础实验报告(4)

    20145220&20145209&20145309信息安全系统设计基础实验报告(4) 实验报告链接: http://www.cnblogs.com/zym0728/p/6132246 ...

  4. 20145220&20145209&20145309信息安全系统设计基础实验报告(2)

    20145220&20145209&20145309信息安全系统设计基础实验报告(2) 实验报告链接: http://www.cnblogs.com/zym0728/p/6083664 ...

  5. 20145220&20145209&20145309信息安全系统设计基础实验报告(1)

    实验贡献:韩旭飞 刘一阳 李昊实验报告贡献:李昊 刘一阳 韩旭飞 PART1 一.实验原理 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码.同一个体系结构可以运行不同的操作系统:同样 ...

  6. 20145209&20145309信息安全系统设计基础实验报告 (5)

    班级:1452 1453 姓名:20145309李昊 20415209刘一阳 20145220韩旭飞 实验日期:2016.12.1 时间:10:10-12:30 实验序号:5 实验目的: 掌握在 AR ...

  7. 20145209&20145309信息安全系统设计基础实验报告 (3)

    实验内容.步骤与体会: 实验过程的理解,实验指导书中知识点的理解. (1)为什么在双击了GIVEIO和JTAG驱动安装文件后还需要手动进行配置? 因为安装文件只是将驱动文件释放了出来,并没有在系统中将 ...

  8. 20145215&20145307信息安全系统设计基础实验报告

    20145215&20145307信息安全系统设计基础实验报告 PART1 一.实验原理 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码.同一个体系结构可以运行不同的操作系统 ...

  9. 信息安全系统设计基础实验一:Linux开发环境的配置和使用

    北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础    班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩:       指导教师:娄家鹏      ...

随机推荐

  1. Python基础10- 函数之内部函数与强制转换

    #coding=utf-8 import mathimport osimport socket Python函数包括以下三类:内部函数.第三方函数和自定义函数内部函数包括:字符函数库.数学函数库.系统 ...

  2. c# 修饰词public, protected, private,internal,protected的区别

    public:  对任何类和成员都公开, 无限制访问;protected: 仅仅对该类以及该类的派生类公开;private: 仅仅对该类公开;internal: 只能值包含该类的程序集中访问该类(只是 ...

  3. aspx与ashx

    ashx在VS的中文版是新建“一般处理程序”,其实是一个实现类System.Web.IHttpHandler接口的类.而任何一个实现了IHttpHandler接口的类都能作为一个外部请求的目标程序.H ...

  4. BZOJ4116 : [Wf2015]Tours

    将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\gcd$的约数. 对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上.因 ...

  5. samba 挂载 问题

    link: http://www.minunix.com/2013/04/linux-mount-samba/ http://my.oschina.net/laopiao/blog/161648 最近 ...

  6. Codeforces Round #253 (Div. 2) D. Andrey and Problem

    关于证明可以参考题解http://codeforces.com/blog/entry/12739 就是将概率从大到小排序然后,然后从大到小计算概率 #include <iostream> ...

  7. CSS z-index 属性的使用方法和层级树的概念

    之前有一篇文章提到过z-index,我们知道只有在元素设置了position部位static时才生效,而且z-index也跟父元素有关系,今天就在ie7遇到类似问题,在网上查了一些资料,发现一篇好文章 ...

  8. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  9. 【FZU】1977 Pandora adventure

    http://acm.fzu.edu.cn/problem.php?pid=1977 题意:n×m的网格,有3种格子,'O'必须经过.'*'可以选择经过.'X'不能经过.现在要求路径经过所有'O'且是 ...

  10. 期望dp BZOJ3450+BZOJ4318

    BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...