Linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录

本文将进一步介绍如何在内核中新增驱动代码目录和子目录。

在上一篇文章中,我们已经了解到了 Linux 内核驱动的基本知识和编写方法。本文将进一步介绍如何在内核中新增驱动代码目录和子目录。

对于大型项目而言,如果所有的驱动代码都放在一个文件夹下面,会显得比较混乱。因此,为了更好地管理和组织代码,我们需要将不同类型的驱动分别放置到不同的文件夹下面。

首先,在 Linux 内核源码树(例如 /usr/src/linux)下创建一个新文件夹(例如 mydriver),并且将其添加到 Makefile 文件中。Makefile 文件是用来指示编译器如何编译程序的脚本文件。

具体操作如下:

1. 进入 Linux 内核源码树所在路径

“`

cd /usr/src/linux

2. 创建新文件夹 mydriver

mkdir mydriver

3. 将新建立的 mydriver 添加到 Makefile 中

打开 Makefile 文件,在 obj-y 或者 obj-m 后面添加相对路径。

如果想要静态链接,则选择 obj-y;如果想要模块化,则选择 obj-m。

例如:

obj-$(CONFIG_MYDRIVER) += mydriver/

4. 在刚才创建的 mydriver 文件夹下创建子目录(例如 mynet、myusb 等)和对应的驱动代码文件(例如 mynet.c、mynet.h 等)。

cd mydriver

mkdir mynet

cd mynet

touch mynet.c

在编写驱动代码时,需要注意以下几点:

Linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录

1. 驱动代码必须遵循 Linux 内核的规范,包括函数名、参数等方面。可以参考内核源码中已有的驱动代码进行编写。

2. 驱动代码需要包含头文件 linux/module.h 和 linux/init.h。其中 module.h 包含了一些与模块相关的宏定义和函数声明;init.h 包含了 init_module 和 cleanup_module 函数声明,这两个函数分别用于初始化和卸载模块。

3. 在编写 Makefile 文件时,需要将新添加的文件夹和驱动代码文件添加到相应位置。如果新增加了一个子目录,则需要在 Makefile 中指定其路径。

obj-$(CONFIG_MYDRIVER) +=

mydriver/

mydriver-y :=

mynet/

mynet-y :=

mynet.o

obj-m +=

myusb.o

4. 编译模块时,可以使用 make 命令进行编译。如果只想要编译某个特定的模块,则可以使用 make 模块名.ko 命令。

make modules # 编译所有模块

make mydriver.ko # 编译 mydriver 模块

make mynet.ko # 编译 mynet 子模块

5. 安装模块时,可以使用 insmod 命令进行安装。如果想要卸载某个模块,则可以使用 rmmod 命令。

insmod mydriver.ko # 安装 mydriver 模块

rmmod mydriver # 卸载 mydriver 模块

通过以上步骤,我们就可以在 Linux 内核中新增驱动代码目录和子目录了。

总之,在编写 Linux 驱动时,良好的代码组织和管理是非常重要的。只有将不同类型的驱动代码放置到对应的文件夹下面,并且按照规范编写 Makefile 文件和驱动代码文件,才能更好地维护、管理和扩展项目。