我有一个与系统连接的I2C存储CHIP,该CHIP的内核空间驱动程序正在运行系统中使用insmod / rmmod。
但是我想用内核源代码添加这个程序,这样在内核启动时(从zImage开始)它将从I2C CHIP中读取,并从中读取内容(例如Serial#)。
我的问题是,用kernel/Makefile
添加驱动程序对象是否足够
作为obj-y += ?
答案 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
是“已编程为已接收(包括读取)但不能永远离开”