如何将我的源代码添加到内核源代码树
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"
我有一个与系统相连的 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"