• 20145305 《信息安全系统设计基础》实验四 驱动程序设计


    结对小伙伴博客链接

    20145327高晨

    实验报告封面

    实验内容、步骤与体会

    1、阅读和理解源代码

    进入/arm2410cl/exp/drivers/01_demo,使用vi 编辑器或其他编辑器阅读理解源代码。

    2、编译驱动模块及测试程序

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

    如果编译的时候出现问题,可能是在/usr/src 下没有建立一个linux 连接,可以使用下面的命令:

    [root@zxt 01_demo]# cd /usr/src/
    
    [root@zxt src]# ln -sf linux-2.4.20-8 linux
    
    [root@zxt src]# ls
    
    debug linux linux-2.4 linux-2.4.20-8 redhat
    

    3、测试驱动程序

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

    #mknod /dev/demo c 254 0
    

    首先要插入驱动模块demo.o,然后可以用lsmod 命令来查看模块是否已经被插入,在不使用该模块的时候还可以用rmmod 命令来将模块卸载。

    实验过程的理解,实验指导书中知识点的理解

    (1)什么是驱动程序设计,它有何作用?

    驱动程序的作用是应用程序与硬件之间的一个中间软件层,驱动程序应该为应用程序展现硬件的所有功能,不应该强加其他的约束,对于硬件使用的权限和限制应该由应用程序层控制。但有时驱动程序的设计是跟所开发的项目相关的,这时就可能在驱动层加入一些与应用相关的的设计考虑,主要是因为在驱动层的效率比应用层高,同事为了项目的需要可能只强化或优化硬件的某个功能,而弱化或关闭其他一些功能;到底需要展现硬件的哪些功能全都由开发者根据需要而定。驱动程序有时会被多个进程同时使用,这时我们要考虑如何处理并发地问题,就需要调用一些内核的函数使用互斥量和锁等机制。

    (2)怎样测试驱动程序?

    首先要插入驱动模块demo.o,然后可以用lsmod 命令来查看模块是否已经被插入,在不使用该模块的时候还可以用rmmod 命令来将模块卸载。然后运行测试程序,查看和预期结果是否一致。

    实验过程中遇到的问题以及解决方案

    (1)使用Makefile文件编译未能成功,提示头文件中的函数出错。
    根据错误解释,应该是在Makefile路径未找到头文件中的库函数,于是在Redhat系统中找到存放内核头文件的路径,将其替换掉原先在Makefile文件中的路径,在执行make命令编译,成功。

    (2)在编译测试文件test_demo.c时,使用gcc编译不成功, 使用armv4l-unknown-linux-gcc编译也不成功。
    在使用gcc编译时未建立设备节点,建立结点后编译成功。

    (3)当实验进行当编译那一步时总是出错,无法显现出指导书上那样正确的情况。
    在实验中,编译我们使用了make的方法。我们错误认为使用交叉编译,但是应该用GCC编译,补上相关语句,修改MAKEFILE即可成功。

  • 相关阅读:
    递归判断多维数组中对象是否有值
    Web前端开发 --》 如何实现页面同时在移动端和pc端的兼容问题
    使用 yield 减少内存消耗
    git 中断 merge
    laravel 命令行测试 Uncaught ReflectionException: Class config does not exist
    laravel 单元测试设置模拟时间
    laravel 单元测试设置模拟时间
    php Mockery 错误 "call_user_func_array() expects parameter 1 to be a valid callback, class 'MockeryExpectation' does not have a method"
    git 创建空提交
    RabbitMQ 客户端开发向导
  • 原文地址:https://www.cnblogs.com/summerharper/p/6052313.html
Copyright © 2020-2023  润新知