zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175302 201752314 20175316 实验四 外设驱动的设计

    2019-2020-1 20175302 201752314 20175316 实验四 外设驱动的设计

    实验目的

    • 编写最简单的字符驱动程序
    • 实现简单的读写功能,并列出常用格式的Makefile以及驱动的加载和卸载脚本
    • 熟悉字符设备驱动的整个编写流程

    实验内容及步骤

    任务一

    • 学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章
    • 提交康奈尔笔记的照片(可以多张)
    笔记
    • 20175302
    • 20175314

      -20175316

    任务二

    任务要求

    • 在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
    • 提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)

    实验步骤

    • 在VMware虚拟机中创建文件夹

    • 将第十一章中关于字符设备的test实验中代码:test_drv.ctest.cMakefiletest_drv_loadtest_drv_unload敲入并保存在文件夹内

      要注意在Makefile中命令换行要用Tab键进行缩进

    实验结果及截图

    • 编译并加载驱动模块
      编译:make clean;make
      给脚本文件增加可执行权限:chmod +x ./test_drv_load
      以管理员身份运行加载脚本:sudo ./test_drv_load

    -编译并运行测试程序
    编译:gcc -o test test.c
    给文件增加可执行权限:chmod +x ./test
    以管理员身份运行:sudo ./test
    根据提示输入信息

    • 卸载驱动程序
      给脚本文件增加可执行权限:chmod +x ./test_drv_unload
      以管理员身份运行加载脚本:sudo ./test_drv_unload
      通过dmesg命令查看内核打印的信息
    $ dmesg|tail –n 10
    …… 
    The major of the test device is 250 
    This is open operation 
    This is release operation 
    Test device uninstalled 
    

    任务三

    任务要求

    • 在实验箱中通过交叉编译完成test实验
    • 提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)

    实验结果

    • 在实验室连接好实验箱,电脑与实验箱相互ping通后,成功将程序挂到在实验箱,但是无法运行,最终未能完成

    实验过程中遇到的问题及解决办法

    问题一

    • 在进行对驱动模块的编译时出现:
    • 解决办法:
      经过查阅才知道忽略了Makefile的语法规定:Makefile中的任何命令之前都必须要有一个tab缩进,否则make就会报错。

    问题二

    • 运行load脚本出现错误insmod: error inserting './test_drv.ko': -1 File exists
    • 解决办法:该错误翻译为InSimd:插入“./TestEdRv.Ko”的错误:存在1个文件,将虚拟机重新启动

    问题三

    • 在运行结束后再一次编译运行load输入sudo ./test_drv_unload后出错
    • 解决办法:重启虚拟机再次运行脚本

    问题四

    • 进程溢出
    • 解决办法:暂未找到解决办法

    实验心得与感悟

    • 设备驱动程序是内核的一部分。OS通过各种驱动程序来操作硬件设备,设备驱动程序是内核的一部分,硬件驱动程序是OS最基本的组成部分。Linux将最基本的核心代码编译在内核当中,其他代码编译到内核或者内核的模块文件,需要时再加载。常见的内核模块驱动程序比如声卡和网卡,linux基础驱动包括CPU,PCI总线,TCP/IP协议,APM(高级电源管理)等。lsmod列出当前系统中加载的模块。
    • 这次实验做了嵌入式linux开发的相关实验,增强了我们的动手能力、实践能力,加深了对于相关知识的理解。
  • 相关阅读:
    SpringBoot全局日志管理(AOP)
    SpringBoot集成Shiro
    MybatisPlus使用介绍
    SpringBoot集成MybatisPlus
    SpringBoot集成多数据源
    SpringBoot事务管理
    ETL 工具和 BI 工具
    oracle中行转列操作
    Oracle基本数据类型总结
    LINUX中lrzsz软件的使用
  • 原文地址:https://www.cnblogs.com/sms369/p/11962422.html
Copyright © 2011-2022 走看看