gpt4 book ai didi

c - 如何编译内核模块

转载 作者:太空狗 更新时间:2023-10-29 16:46:55 25 4
gpt4 key购买 nike

我正在尝试按照 guide 编译一个简单的 hello world 模块我对 Makefile 实际在做什么感到困惑。

obj-m += hello-1.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我知道当我键入 make 命令时,它将运行 all 配方,该配方运行 make -C/lib/modules/$(shell uname - r)/build M=$(PWD) 模块。所以现在它运行在 -C 标志后给出的路径中找到的 Makefile,但是 M=$(PWD) 模块 做什么?

最佳答案

  1. 'obj-m' :- 指定构建为可加载的目标文件 内核模块。
  2. 'all and clean':- 如果您默认运行“make”,它将运行“all :”。 但是我们可以使用 all 和 clean with make。它只会运行那些特定的命令。

    Example :-
    'make all' will run "make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules"
    'make clean will run "make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean"

3.'uname -r' :- 获取当前内核的名称和信息。

 Example :- for me, my kernel is "4.6.0-rc1".
  1. 选项“-C dir”:- 在阅读 makefile 之前更改目录 dir。

    Example :- "make -C /lib/modules/$(shell uname -r)/build" will change to "make -C /lib/modules/4.6.0-rc1/build.
  2. '$pwd':- 获取当前目录的路径。

现在您想使用“ma​​ke -C/lib/modules/$(shell uname -r)/build M=$(PWD) modules”创建可加载模块。

您的源代码需要环境才能运行。这就是为什么我们必须使用 -C 选项来更改构建目录。其中包含所有需要的定义、头文件、宏等。现在,在更改到构建目录后,您需要告诉您的模块在哪里,这就是我们使用 M=$PWD 的原因。

关于c - 如何编译内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com