Linux下的hello驱动开发

文章介绍了学习内核编程的一种方法,即编写内核模块。通过创建一个简单的hello模块,展示了驱动程序的构建过程,包括创建项目路径、编写C文件、定义加载和卸载函数,以及使用__init和__exit宏。还详细说明了Makefile的用途和加载、卸载模块的命令insmod和rmmod。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习内核编程的最简单的方式也许就是写个内核模块:一段可以动态加载进内核的代码。模块所能做的事是有限的——例如,他们不能在类似进程描述符这样的公共数据结构中增减字段(LCTT译注:可能会破坏整个内核及系统的功能)。但是,在其它方面,他们是成熟的内核级的代码,可以在需要时随时编译进内核(这样就可以摒弃所有的限制了)。完全可以在Linux源代码树以外来开发并编译一个模块(这并不奇怪,它称为树外开发),如果你只是想稍微玩玩,而并不想提交修改以包含到主线内核中去,这样的方式是很方便的。


模块的构造

由于大多数的Linux内核模块是用C写的(除了底层的特定于体系结构的部分),所以推荐你将你的模块以单一文件形式保存(例如,kernel.c)。
开始时,我们先要包含一些常见的文件头,并用预定义的宏来描述模块:
这里一切都直接明了,除了MODULE_LICENSE():它不仅仅是一个标记。内核坚定地支持GPL兼容代码,因此如果你把许可证设置为其它非GPL兼容的(如,“Proprietary”[专利]),某些特定的内核功能将在你的模块中不可用。

2.、编写测试内核hello模块

2.1.先创建项目驱动程序路径

在imx6ull项目路劲下创建驱动模块路径,并创建kernel_dirver_hello.c文件
在这里插入图片描述

2.2.驱动模块的加载和卸载

Linux驱动有两种运行方式,第一种就是将驱动编译进Linux内核中,这样当Linux内核启动时就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux下模块扩展名为.ko),在Linux内核启动以后使用”insmod”命令加载驱动模块。(我们一般选择编译成模块)

在调试的时候一般编译成模块,这样不需要编译整个Linux代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。最大的好处就是方便。

  • 驱动加载:insmod(调用xxx_init函数)
  • 卸载命令:rmmod(调用xxx_exit函数)
  • 查看加载的驱动命令:lsmod

驱动模块的加载和卸载注册函数:

1.module_init(xxx_init); //注册模块加载函数
2.module_exit(xxx_exit); //注册模块卸载函数

__init、 __exit这两个宏是定义在include/linux/init.h中:
__init和__exit宏是 Linux 内核宏。用于指示初始化、退出函数。当一个驱动程序或内核模块被加载时

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林同学_ioT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值