没有开发板如何在Ubuntu中体验Linux驱动开发(无需下载和编译Linux内核)

Linux驱动开发一般都需要搭载Linux内核的开发板,但是相信很多人像我一样刚接触Linux驱动开发,想尽快动手实操体验一下Linux驱动是什么,但是碍于各种原因手上并没有一款合适的开发板该怎么办呢?这里给大家整理并总结了如何在PC机上跑最基本的Linux驱动代码。

第一步,下载虚拟机并安装Ubuntu系统

这一步网上有很多安装虚拟机和Ubuntu的教程大家可以参考,这里我用的是VirtualBox+Ubuntu 18.04

第二步,定位Ubuntu内核路径

打开终端,使用 uname -r 命令查看我们当前使用的Ubuntu的内核版本,随后使用 ls 命令查看 /usr/src/linux-headers-5.4.0-150-gerneric/ 目录是否为内核目录

第三步,编写Makefile文件

使用 mkdir test 命令创建test目录,并使用 touch 命令创建 helloworld.c 和 Makefile 文件

在终端下使用 cd /usr/src/linux-headers-5.4.0-150-gerneric/ 命令进入内核目录并使用 pwd 命令打印出内核路径,复制该路径并编写Makefile

obj-m += helloworld.o #名称与要编译的驱动程序文件对应
KDIR :=/usr/src/linux-headers-5.4.0-150-generic #ubuntu内核源码所在路径
PWD ?= $(shell pwd)
all:
    make -C $(KDIR) M=$(PWD) modules #make 操作
clean:
    make -C $(KDIR) M=$(PWD) clean #make clean 操作

注意这里make前面使用Table键隔开而不是空格!!!

第四步,驱动程序编写

编写helloworld驱动,功能为加载模块时在终端打印 helloworld_init 卸载模块时打印helloworld_exit

#include <linux/module.h>
#include <linux/kernel.h>

static int __init helloworld_init(void) //驱动入口函数
{
    printk("helloworld_init\r\n");//内核打印函数用 printk 而不是 printf
    return 0;
}

static void __exit helloworld_exit(void) //驱动出口函数
{
    printk("helloworld_exit\r\n");
}

module_init(helloworld_init); //驱动入口函数
module_exit(helloworld_exit); //驱动出口函数
MODULE_LICENSE("GPL v2"); //同意 GPL 开源协议
MODULE_AUTHOR("tester"); //作者信息

第五步,驱动编译及运行测试

驱动编写好以后直接在test目录下使用 make 命令进行编译,编译成功后会生成一系列文件

使用 insmod 命令加载驱动,如果出现权限问题则使用 sudo 

另开一个终端,使用 dmesg 命令查看终端打印信息

可以看出成功打印了 helloworld_init 说明驱动加载成功,使用 rmmod 命令卸载驱动

再次运行 dmesg 命令查看终端打印信息

成功打印 helloworld_exit,说明驱动卸载成功

总结:可以看出,在PC机上的Ubuntu虚拟机中进行简单的驱动功能验证是完全没有问题的,在此基础上就能开展其他驱动功能的验证。

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值