如何将我的源代码添加到内核源代码树

How to add my source code to Kernel source tree

我有一个与系统相连的 I2C 存储芯片,该芯片的内核 space 驱动程序正在使用来自 运行 系统的 insmod / rmmod 运行。

但我想用内核源代码添加这个程序,以便在内核启动时(从 zImage)它将从 I2C 芯片读取,并从中打印一些东西(例如序列号)。

我的问题是,用 kernel/Makefile 添加驱动程序对象是否足够 作为 obj-y += ?

在搜索内核模块编写等时,您会找到数十万个 "hello_world.c" 程序,这些程序将描述如何打印 hello_world 在内核日志中,当您的内核和系统都在运行时。称为可加载内核模块,使用 insmod 等程序加载,使用 rmmod 卸载。

但是,我正在搜索如何在内核启动时加载我自己的脚本(即 hello_world.c),并且想在控制台上看到启动时正好来自内核的内容,然后 [=38= 】 几乎是无声。

嗯,这并不难,而且很容易。我自己为在内核启动时获取 printk() 消息所做的是 -

hello_world.c 程序保存在 ./kernel/driver 中(您几乎可以将其保存在内核源文件夹中的任何位置,也可以创建您自己的文件夹,但这需要您自己的 Makefile)。

并编辑 ./kernel/driver/Makefile 添加 obj-y += hello_world.o 在 Makefile 的末尾。

然后编译完整的内核并将生成的zImage传输到sd卡。 启动时,就在 USB HID 核心驱动程序之后,我可以看到来自 hello_world printk() 的自定义消息。

[    3.652944] usbcore: registered new interface driver usbhid
[    3.657253] usbhid: USB HID core driver
[    3.660152] HELLO: HELLOING WORLD from KERNEL BINARY

注意:- 与可加载模块不同,当相关代码内置于内核源代码中时,使用 __exit 创建的函数将永远不会被编译调用。

即在这种情况下 hello_world.c 是 "Programmed to received (read include) but can't never leave"