IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux驱动模块编译 -> 正文阅读

[系统运维]Linux驱动模块编译

1.makefile

1.1.modules模块上层makefile

?1.2.内核模块makefile

2.?makefile解析

2.1 定义变量:

KERNELDIR内核top makefile所在路径。

CURRENT_PATH模块所在的文件夹路径。

ATOS_KCROSS_COMPILE定义编译工具链。

ATOS_ARCH处理器类型。

INCLUDE内核中应用的头文件所在的路径。

EXTRA_CFLAGS表示在编译模块时,需要添加的目录。编译器会从这些目录中找到所需要的头文件。

补充:如果在模块中引用了其他模块导出到内核符号表的函数,则需要包含该模块产生的符号表文件Module.sysvers。例如,modules模块中如果引用了同级文件夹中另一模块的函数则需要在modules模块makefile增加这一行定义:KBUILD_EXTRA_SYMBOL=$(obj)/../add_sub/Module.symvers

2.2 指定编译的目标文件

obj-m += module.o或obj-y? += module.o?(假设模块名为module)

obj-m表示把文件module.o作为"模块"进行编译,不会编译到内核,但是会生成一个独立的 "module.ko" 文件;obj-y表示把module.o文件编译进内核;

如果有一个模块名为 module.ko, 是来自多个源文件(如?file1.c 和 file2.c ), 正确的书写应当是:

obj-m := module.o

module-objs := file1.o file2.o

第19行即是定义模块peripheral_modules.ko 。

2.3 模块编译

第10行 ~ 11行,编译模块。

2.4 模块装载

第12行 ~ 13行,modules_install指令是把编译的ko拷贝到根目录下的/lib/modules/4.1.15/目录中。

2.5 清除编译中间文件和编译结果

第15行 ~ 16行,modules_install指令是清除编译中间文件和编译结果。相当于以下指令:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order

2.6 PHONY

.PHONY是一个伪目标,可以防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突,提高执行makefile时的效率。

2.6 makefile执行逻辑

这个 makefile 在一次执行中要被读 2 次。

KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读入、执行ifeq之后的内容,如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为all时,-C $(KERNELDIR)指明跳转到内核源码目录下读取那里的Makefile;M=$(CURRENT_PATH) 表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之后的内容。else之后的内容为kbuild语法的语句,指明模块源码中各文件的依赖关系,以及要生成的目标模块名。obj-m := peripheral_modules.o表示编译连接后将生成peripheral_modules.o模块。

3. obj-m等在/kbuild/modules.txt中的定义

3.1 ?obj-m := <module_name>.o

在modules.txt中提到:

The kbuild system will build <module_name>.o from <module_name>.c,

and, after linking, will result in the kernel module <module_name>.ko.

The above line can be put in either a "Kbuild" file or a "Makefile."

When the module is built from multiple sources, an additional line is

needed listing the files:

<module_name>-y := <src1>.o <src2>.o ...

3.2 ?-C $KDIR and M=$PWD

-C $KDIR

The directory where the kernel source is located.

"make" will actually change to the specified directory

when executing and will change back when finished.

M=$PWD

Informs kbuild that an external module is being built.

The value given to "M" is the absolute path of the

directory where the external module (kbuild file) is

located.

3.3 ?modules

When building an external module, only a subset of the "make"targets are available.

make -C $KDIR M=$PWD [target]

The default will build the module(s) located in the current

directory, so a target does not need to be specified. All

output files will also be generated in this directory. No

attempts are made to update the kernel source, and it is a

precondition that a successful "make" has been executed for the

kernel.

modules

The default target for external modules. It has the

same functionality as if no target was specified. See

description above.

3.4 ?modules_install

Install the external module(s). The default location is

/lib/modules/<kernel_release>/extra/, but a prefix may

be added with INSTALL_MOD_PATH (discussed in section 5).

3.5 ?clean

Remove all generated files in the module directory only.

3.6 ?help

List the available targets for external modules.

参考:https://blog.csdn.net/u012247418/article/details/83684214

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 12:08:50  更:2021-10-15 12:09:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:30:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码