在三星S9设备上加载内核模块

发布于 2025-01-19 13:26:52 字数 2397 浏览 3 评论 0原文

我试图在没有成功的情况下加载简单的内核模块,例如“ Hello World”程序。 文件helloworld.c看起来像:

#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */

int init_module(void)
{
        printk(KERN_INFO "Hello world\n");

        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye world\n");
}

MODULE_LICENSE("GPL");
MODULE_INFO(intree, "Y");

makefile看起来如下:

obj-m += helloworld.o

ARCH := arm64
CROSS := /home/user/Desktop/toolchains/standalone/aarch64-linux-android-4.9/bin/aarch64-linux-android-
KDIR := ../..
PWD := $(shell pwd)

default:
        $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) -C $(KDIR) M=$(PWD) modules

clean:
        $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) -C $(KDIR) M=$(PWD) clean

不幸的是,当我加载helloworld.ko二进制文件时,我会得到页面错误异常。这就是我在“/proc/last_kmsg”中看到的:

                   [2:         insmod:12311] Unable to handle kernel paging request at virtual address ffffff8000e48004
 
<2>[ 1924.769921]  [2:         insmod:12311]
sec_debug_set_extra_info_fault = KERN / 0xffffff8000e48004

<1>[ 1924.770135]  [2:         insmod:12311] pgd = ffffffc030d50000

<1>[ 1924.772303]  [2:         insmod:12311] [ffffff8000e48004]
*pgd=0000000000000000, *pud=0000000000000000

<0>[ 1924.781553]  [2:         insmod:12311] Internal error: Oops:
8600000f [#1] PREEMPT SMP

<4>[ 1924.789431]  [2:         insmod:12311] Modules linked in:
helloworld(+)

<0>[ 1924.795773]  [2:         insmod:12311] exynos-snapshot: core
  register saved(CPU:2)

<0>[ 1924.803319]  [2:         insmod:12311] DISR_EL1:
  0000000000000000

<0>[ 1924.809402]  [2:         insmod:12311] 1st : ERXSTATUS_EL1:
  0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1:
  0000000000000000

<0>[ 1924.821900]  [2:         insmod:12311] 2nd : ERXSTATUS_EL1:
  0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1:
  0000000000000000

<0>[ 1924.834397]  [2:         insmod:12311] exynos-snapshot: context
saved(CPU:2)

<6>[ 1924.841553]  [2:         insmod:12311] exynos-snapshot: item -
  log_kevents is disabled

<6>[ 1924.849330]  [2:         insmod:12311] TIF_FOREIGN_FPSTATE: 1,
FP/SIMD depth 0, cpu: 0

也许我需要将任何内容传递给添加/删除功能的kcflags?

I trying to load simple kernel module like "hello world" program without success.
The file helloworld.c looks like:

#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */

int init_module(void)
{
        printk(KERN_INFO "Hello world\n");

        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye world\n");
}

MODULE_LICENSE("GPL");
MODULE_INFO(intree, "Y");

The Makefile looks like the following:

obj-m += helloworld.o

ARCH := arm64
CROSS := /home/user/Desktop/toolchains/standalone/aarch64-linux-android-4.9/bin/aarch64-linux-android-
KDIR := ../..
PWD := $(shell pwd)

default:
        $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) -C $(KDIR) M=$(PWD) modules

clean:
        $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) -C $(KDIR) M=$(PWD) clean

Unfortunately, while I loading the helloworld.ko binary file I'm getting page fault exception. This is what I see in "/proc/last_kmsg":

                   [2:         insmod:12311] Unable to handle kernel paging request at virtual address ffffff8000e48004
 
<2>[ 1924.769921]  [2:         insmod:12311]
sec_debug_set_extra_info_fault = KERN / 0xffffff8000e48004

<1>[ 1924.770135]  [2:         insmod:12311] pgd = ffffffc030d50000

<1>[ 1924.772303]  [2:         insmod:12311] [ffffff8000e48004]
*pgd=0000000000000000, *pud=0000000000000000

<0>[ 1924.781553]  [2:         insmod:12311] Internal error: Oops:
8600000f [#1] PREEMPT SMP

<4>[ 1924.789431]  [2:         insmod:12311] Modules linked in:
helloworld(+)

<0>[ 1924.795773]  [2:         insmod:12311] exynos-snapshot: core
  register saved(CPU:2)

<0>[ 1924.803319]  [2:         insmod:12311] DISR_EL1:
  0000000000000000

<0>[ 1924.809402]  [2:         insmod:12311] 1st : ERXSTATUS_EL1:
  0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1:
  0000000000000000

<0>[ 1924.821900]  [2:         insmod:12311] 2nd : ERXSTATUS_EL1:
  0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1:
  0000000000000000

<0>[ 1924.834397]  [2:         insmod:12311] exynos-snapshot: context
saved(CPU:2)

<6>[ 1924.841553]  [2:         insmod:12311] exynos-snapshot: item -
  log_kevents is disabled

<6>[ 1924.849330]  [2:         insmod:12311] TIF_FOREIGN_FPSTATE: 1,
FP/SIMD depth 0, cpu: 0

Maybe I need to pass anything to KCFLAGS of add/remove feature to the kernel?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文