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


目录
相关文章
|
9月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
857 3
Linux系统禁用swap
|
9月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1436 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
924 3
Linux系统初始化脚本
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
749 17
|
Ubuntu Linux 网络安全
如何在Ubuntu 22.04或20.04 Linux上安装MobaXterm
虽然直接在Ubuntu 22.04或20.04上安装MobaXterm是不可能的任务,因为它是专为Windows设计的,但Ubuntu系统提供了丰富的原生工具和替代方案,足以满足远程管理、文件传输等需求。如果你对MobaXterm的特定功能有强烈需求,考虑采用Windows子系统或虚拟机方案作为折衷方案,不失为一种可行之道。在追求高效工作流的同时,不妨也探索和熟悉Linux原生工具,它们往往能提供更为无缝的集成体验。
5561 0
|
Ubuntu Java Linux
Ubuntu20.04下载jdk遇到各种奇怪问题大集,Linux如何将默认的OpenJDK切换成自己安装的JDK版本(以JDK1.8为例),无需卸载原有OpenJDK,Some packages co
Ubuntu20.04下载jdk遇到各种奇怪问题大集,Linux如何将默认的OpenJDK切换成自己安装的JDK版本(以JDK1.8为例),无需卸载原有OpenJDK,Some packages co
|
消息中间件 网络协议 Ubuntu
在Ubuntu Linux系统上安装RabbitMQ服务并解决公网远程访问问题
在Ubuntu Linux系统上安装RabbitMQ服务并解决公网远程访问问题
|
存储 Ubuntu 安全
在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL
在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL
3483 1
|
Ubuntu Linux 数据安全/隐私保护
百度搜索:蓝易云【Ubuntu Linux 系统上怎么使用 SNAP 安装 Docker?】
现在,你已经使用SNAP成功安装了Docker。你可以使用Docker命令在Ubuntu系统上管理和运行容器化应用程序。记得在进行Docker操作时,可能需要使用 `sudo`命令以管理员权限运行。
543 0
|
Ubuntu Unix Linux
如何在 Ubuntu16.04(或其他Linux系统) 安装 source insight 4.0.0086
如何在 Ubuntu16.04(或其他Linux系统) 安装 source insight 4.0.0086
2320 0
如何在 Ubuntu16.04(或其他Linux系统) 安装 source insight 4.0.0086