我學習內核編程,並有一個簡單的調用kstrtol我使用的字符串轉換爲數字。但是,每次我編譯這個模塊並使用insmod將其放入內核時,我會收到「BUG:無法在f862b026處理內核分頁請求」,然後出現寄存器和堆棧轉儲。Linux內核:爲什麼這個調用kstrtol會崩潰?
我從這裏下了定義: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);
該問題可能是與覆蓋2.字面不應該被修改。 – Barmar