簡體   English   中英

Linux內核模塊開發buildroot

[英]Linux kernel module development buildroot

我已經使用buildroot為beaglebone black構建了Linux內核。 現在,我想開發一個hello world Linux內核模塊應用程序:

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

問題是我仍然會丟失一些頭文件。 最終將它們全部收集之后,我得到一個代碼不可編譯的錯誤(很多錯誤,我不想全部粘貼)。 我想知道的是我是否真的包含了正確的文件?

目前,我有:

/home/lukasz/brl/Machine/beaglebone/build/linux-headers-a75d8e93056181d512f6c818e8627bd4554aaf92/include
/home/lukasz/brl/Machine/beaglebone/build/uboot-2018.01/arch/x86/include
/home/lukasz/brl/Machine/beaglebone/build/linux-headers-a75d8e93056181d512f6c818e8627bd4554aaf92/arch/arm/include/generated
/home/lukasz/brl/Machine/beaglebone/build/linux-headers-a75d8e93056181d512f6c818e8627bd4554aaf92/arch/arm/include
/home/lukasz/brl/Machine/beaglebone/build/linux-a75d8e93056181d512f6c818e8627bd4554aaf92/include

C包含文件和asm文件分散在目錄中,這對我來說有點奇怪。 我對這里的主題的理解是否有誤?

我的Linux版本:

# uname -a
Linux buildroot 4.9.59 #1 SMP Fri Oct 5 11:55:54 CEST 2018 armv7l GNU/Linux

要編譯內核模塊,您需要真實的內核源代碼,而不僅僅是內核頭文件。 您必須使用M=指向模塊源的內核源目錄進行構建。 當然,連同模塊源一起,您還需要一個有效的Makefile。 在許多如何編寫內核模塊指南中(例如指南),都對這些步驟進行了說明。

對於交叉編譯,您還需要傳遞適當的參數,以便內核知道要構建哪個體系結構以及使用哪個交叉編譯器。 至少,這意味着在構建時必須提供ARCH=CROSS_COMPILE=選項。 有時您需要其他選項(例如,指向適當的depmod工具)。

為了簡化此過程,Buildroot提供了內核模塊基礎結構 在最簡單的情況下,您可以只創建一個Config.in文件,其中包含

config BR2_PACKAGE_HELLOMOD
        bool "hellomod"
        depends on BR2_LINUX_KERNEL

和一個hellomod.mk文件,其中包含

HELLOMOD_SITE = /path/to/hellomod/source

$(eval $(kernel-module))
$(eval $(generic-package))

你還必須源Config.inpackage/Config.in在Buildroot里面的樹。 或者更好的是,使用外部樹,這樣就不必修改Buildroot本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM