Linux驱动开发: Ubuntu(PC机)系统上编译驱动并加载测试

简介: Linux驱动开发: Ubuntu(PC机)系统上编译驱动并加载测试

一、环境介绍

操作系统: ubuntu18.04 64位

二、编写Makefile(PC机)

先输入uname -r命令查看当前系统的版本.

root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# uname -r
5.3.0-40-generic

查看系统内核的路径是否存在:

root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# ls /usr/src/
linux-headers-5.3.0-40          linux-headers-5.4.0-53-generic  linux-hwe-5.4-headers-5.4.0-47
linux-headers-5.3.0-40-generic  linux-hwe-5.4-headers-5.4.0-42  linux-hwe-5.4-headers-5.4.0-48
linux-headers-5.4.0-48-generic  linux-hwe-5.4-headers-5.4.0-45  linux-hwe-5.4-headers-5.4.0-53

根据当前系统的版本,确定对应的路径:  /usr/src/linux-headers-5.3.0-40

root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# ls /usr/src/
linux-headers-5.3.0-40          linux-headers-5.4.0-53-generic  linux-hwe-5.4-headers-5.4.0-47
linux-headers-5.3.0-40-generic  linux-hwe-5.4-headers-5.4.0-42  linux-hwe-5.4-headers-5.4.0-48
linux-headers-5.4.0-48-generic  linux-hwe-5.4-headers-5.4.0-45  linux-hwe-5.4-headers-5.4.0-53
root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# ls /usr/src/linux-headers-5.3.0-40
arch   certs   Documentation  fs       init  Kbuild   kernel  Makefile  net      scripts   sound  ubuntu  virt
block  crypto  drivers        include  ipc   Kconfig  lib     mm        samples  security  tools  usr

完整的编写Makefile如下:

Linux_ADD=/usr/src/linux-headers-5.3.0-40-generic
app_dev:
  make -C $(Linux_ADD) M=`pwd` modules clean
  make -C $(Linux_ADD) M=`pwd` modules
  gcc spectrometer_app.c -o app
obj-m +=spectrometer_usb_drv.o

编译安装测试:

root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# insmod spectrometer_usb_drv.ko 
root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# modinfo spectrometer_usb_drv.ko 
filename:       /mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu/spectrometer_usb_drv.ko
license:        GPL
author:         xiaolong
srcversion:     40F0CA1A1C1E3BA787F1B57
alias:          usb:v0661p294Bd*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v148Fp5370d*dc*dsc*dp*ic*isc*ip*in*
depends:        
retpoline:      Y
name:           spectrometer_usb_drv
vermagic:       5.3.0-40-generic SMP mod_unload 
root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# rmmod spectrometer_usb_drv.ko 

关于日志显示的问题:  驱动程序正常会使用printk向终端打印调试信息, 如果驱动安装之后当前终端没有反应,可以先使用dmesg命令查看日志里是否有输出。

root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# dmesg
[137747.993110] 总线名称:usb
[137747.993111] 端点号[0]:129
[137747.993111] 端点[0] 输入端点(设备到主机)
[137747.993112] 端点[0] 设备支持批量传输.
[137747.993112] 端点[0] 传输的数据大小:512
[137747.993112] probe:dev->bulk_in_endpointAddr=129
[137747.993113] 端点号[1]:1
[137747.993113] 端点[1] 输出端点(主机到设备)
[137747.993113] 端点[1] 设备支持批量传输.
[137747.993114] 端点[1] 传输的数据大小:512
[137747.993114] probe:dev->bulk_out_endpointAddr=1
[137747.993114] 端点号[2]:2
[137747.993115] 端点[2] 输出端点(主机到设备)
[137747.993115] 端点[2] 设备支持批量传输.
[137747.993115] 端点[2] 传输的数据大小:512
[137747.993115] 端点号[3]:3
[137747.993116] 端点[3] 输出端点(主机到设备)
[137747.993116] 端点[3] 设备支持批量传输.
[137747.993116] 端点[3] 传输的数据大小:512
[137747.993116] 端点号[4]:4
[137747.993116] 端点[4] 输出端点(主机到设备)
[137747.993117] 端点[4] 设备支持批量传输.
[137747.993117] 端点[4] 传输的数据大小:512
[137747.993157] USB光谱仪设备节点注册成功:/dev/spectrometer_usb_drv ,主设备号:10,次设备号:53
[137747.993173] usbcore: registered new interface driver spectrometer_usb_drv

三、顺便说下嵌入式Linux驱动Makefile编译方式

Linux_ADD=/home/wbyq/work/linux-3.5/linux-3.5
app_dev:
  make -C $(Linux_ADD) M=`pwd` modules clean
  make -C $(Linux_ADD) M=`pwd` modules
  cp *.ko /home/wbyq/project/ -fv
  arm-linux-gcc spectrometer_app.c -o app
  cp app /home/wbyq/project/ -fv
obj-m +=spectrometer_usb_drv.o


目录
相关文章
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
529 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
10月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
525 15
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
184 3
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
338 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
Ubuntu API Python
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
390 1
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
305 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
Web App开发 编解码 Linux
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
这篇文章介绍了使用Selenium自动化测试解决报告生成失败问题的方法,包括Linux环境下的部署指南和代码实现。
230 1
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
|
NoSQL Linux Android开发
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
本文介绍了如何在QEMU中挂载虚拟分区、创建和编译简单的Linux内核模块,并在QEMU虚拟机中加载和测试这些内核模块,包括创建虚拟分区、编写内核模块代码、编译、部署以及在QEMU中的加载和测试过程。
591 0
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
|
机器学习/深度学习 人工智能 并行计算
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
246 0
|
安全 Linux 开发者
在Linux中,内核模块是什么以及如何加载和卸载它们?
在Linux中,内核模块是什么以及如何加载和卸载它们?