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

时间:2016-08-19 11:57:43

标签: c linux linux-kernel embedded-linux

我有一个与系统连接的I2C存储CHIP,该CHIP的内核空间驱动程序正在运行系统中使用insmod / rmmod。

但是我想用内核源代码添加这个程序,这样在内核启动时(从zImage开始)它将从I2C CHIP中读取,并从中读取内容(例如Serial#)。

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

1 个答案:

答案 0 :(得分:0)

在搜索内核模块等时,你会发现成千上万的“hello_world.c”程序,它将描述你如何打印 hello_world在内核日志中,当你的内核和系统全部正常工作时。其中称为可加载内核模块,使用insmod等程序加载和rmmod卸载。

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

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

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

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

然后编译完整的内核并生成转移到SD卡的zImage。 在启动时,就在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是“已编程为已接收(包括读取)但不能永远离开”