私はカーネルプログラミングを学んでおり、文字列を数値に変換するために使用している kstrtol を簡単に呼び出しています。ただし、このモジュールをコンパイルして insmod を使用してカーネルに配置するたびに、「バグ: f862b026 でカーネル ページング要求を処理できません」というメッセージが表示され、レジスタとスタック ダンプが表示されます。
ここからの定義に従っています: https://www.kernel.org/doc/htmldocs/kernel-api/API-kstrtol.html。それは本当に単純な呼び出しのようです。ここで何が間違っていますか?
#include <linux/kernel.h>
static int __init convert(void)
{
long myLong;
char *myNumber = "342";
myNumber[2] = '\0'; //Overwriting the '2', just so I know for sure I have a terminating '\0'
if (kstrtol(myNumber, 10, &myLong) == 0)
{
printk("We have a number!\n");
}
return 0;
}
static void __exit convert_exit(void)
{
printk("Module unloaded\n");
}
module_init(convert);
module_exit(convert_exit);