私は、mpc8308 (PowerPC) ボードの割り込みを受信するカーネル モジュールを作成しています。Ubuntu と現在のカーネル バージョン用にコードを作成すると、キーボードの割り込みで正常に動作しますが、mpc8308 ボード (2.6.29.6 カーネル) 用にクロス ビルドし、insmod
コマンドを使用してカーネルにロードしようとすると、エラーが発生します。
insmod: cannot insert './intrpt.ko': Function not implemented
私のコードは次のとおりです:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#define DRIVER_AUTHOR "AVM"
#define DRIVER_DESC "A sample driver"
static irqreturn_t irq_handler(int irq, void *dev_id, struct pt_regs *regs)
{
printk(KERN_ALERT "Hello Interrupt world.\n");
return IRQ_HANDLED;
}
/*
* Initialize the module − register the IRQ handler
*/
int init_module()
{
free_irq(1, NULL);
return request_irq(1, irq_handler, IRQF_SHARED, "test_keyboard_irq_handler",
(void *)(irq_handler));
}
/*
* Cleanup
*/
void cleanup_module()
{
free_irq(1, NULL);
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_SUPPORTED_DEVICE("testdevice");
出力は次のmodinfo ./intrpt.ko
ようになります。
filename: ./intrpt.ko
description: A sample driver
author:
license: GPL
depends:
vermagic: 2.6.29.6-rt23 mod_unload
答え1
私もカーネルにモジュールを挿入しているときにこの問題に直面しました。現在のカーネルバージョンを正しく入力し、cd /lib/modules/your-kernel-version-gereric/ ディレクトリに移動して、ビルドディレクトリが存在するかどうかを確認します。存在する場合は、以下のコマンドを使用してモジュールを直接コンパイルできます。
make -C /lib/modules/$(shell uname -r)/build M=$(PWD)