Articles of 模块

如何在Linux中包含Python模块?

我发现这个xgoogle python模块http://github.com/pkrumins/xgoogle ,非常有趣。 我到底应该如何在Linux中包含或安装这些文件? 如果我想用xgoogle python模块做这样的事情? >>from xgoogle.search import GoogleSearch 我知道我们可以使用from,import来使用模块,但是要包含一个外部模块,我该怎么做? 我应该需要安装模块还是什么?

劫持系统调用

我正在写一个内核模块,我需要劫持/包装一些系统调用。 我很强制sys_call_table地址,我正在使用cr0来禁用/启用页面保护。 到目前为止,这么好(我会公布整个代码,所以我可以更新这个问题,如果有人想要的话)。 无论如何,我注意到,如果我劫持__NR_sys_read当我卸载内核模块,并且所有konsoles(KDE)崩溃时,我得到一个内核oops。 请注意, __NR_sys_open或__NR_sys_write不会发生这种情况。 我想知道为什么会发生这种情况。 有任何想法吗? PS:请不要去KProbe的方式,我已经知道了它,我不能使用它,因为最终产品应该是可用的,无需重新编译整个内核。 编辑 :(添加信息) 卸载前我恢复原来的function。 另外,我创build了两个testing用例,一个用_write而另一个用_read 。 用_write那个卸载好了,但是带有_read那个卸载然后崩溃了内核)。 编辑 :(源代码) 我现在在家,所以我现在不能发布源代码,但如果有人想要,我可以发布一个示例代码,只要我开始工作。 (约5小时)

如何重命名内核模块名称,而不重命名传递给insmod的.ko。

我需要重命名已有驱动程序的内核模块(使用lsmod显示的名称),而不更改源文件的名称。 例如 # insmod xxx.ko <<module loads successfully>> # lsmod Module Size Used by Tainted: P xxx 191527 0 # 我想把xxx重命名为yyy 。 现在我知道更改驱动程序源文件的名称(当涉及单个文件时)会更改模块的名称。 但我不想更改源文件的名称。

insmod和modprobe有什么区别?

我知道insmod和modprobe是用来插入模块到内核。 但是,它们之间有什么区别呢? 而且,为什么在modprobe中插入带有force选项的模块是危险的?

如何安排一个Makefile来编译一个具有多个.c文件的内核模块?

如何安排一个Makefile来编译一个具有多个.c文件的内核模块? 这是我目前的Makefile。 它是由KDevelop自动生成的 TARGET = nlb-driver OBJS = nlb-driver.o MDIR = drivers/misc EXTRA_CFLAGS = -DEXPORT_SYMTAB CURRENT = $(shell uname -r) KDIR = /lib/modules/$(CURRENT)/build PWD = $(shell pwd) DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR) obj-m += $(TARGET).o default: make -C $(KDIR) M=$(PWD) modules $(TARGET).o: $(OBJS) $(LD) $(LD_RFLAG) -r -o $@ $(OBJS) ifneq (,$(findstring 2.4.,$(CURRENT))) install: su -c "cp -v […]

内核模块找不到debugging符号

我加载linux内核模块后 user@c4:$ insmod mmaptest.ko 我可以validation它是通过加载 user@c4:$ cat /proc/modules mmaptest 12727 0 – Live 0x0000000000000000 (OF) 但是所有段都以0x00地址列出。 user@c4$:$ systool -vm mmaptest Module = "mmaptest" Attributes: coresize = "12727" initsize = "0" initstate = "live" refcnt = "0" srcversion = "EABEF6F90BEAAD0D15B576A" taint = "OF" uevent = <store method only> Parameters: count = "0" Sections: .bss = "0x0000000000000000" […]

内核中的地址

当我在内核中find地址时,我有一个问题。 我在内核中插入一个hello模块,在这个模块中,我把这些东西: char mystring[]="this is my address"; printk("<1>The address of mystring is %p",virt_to_phys(mystring)); 我想我可以得到mystring的物理地址,但是我发现在syslog中,它的打印地址是0x38dd0000。 但是我把内存倒了,发现它的真实地址是dcd2a000,与前者有很大的不同。 如何解释这个? 我做错事情了? 谢谢 PS:我用一个工具来转储整个内存,物理地址。

简单的中断处理程序:request_irq返回错误代码-22

我正在写一个简单的内核模块,它可以注册一个中断并处理它。 但是,当我尝试通过调用request_irq函数来注册中断时,它将返回错误代码-22: 错误:无法请求IRQ 30 – 代码-22,EIO 5,EINVAL 22 我相信,这个错误代码等于EINVAL(无效的参数) 请告诉我,我做错了什么。 这里是一个模块: #include <linux/init.h> #include <linux/module.h> #include <linux/irq.h> #include <linux/io.h> #include <linux/irqdomain.h> #include <linux/interrupt.h> #include <linux/of.h> #include <linux/of_address.h> #include <asm/exception.h> #include <asm/mach/irq.h> void int068_interrupt(int irq, void *dev_id, struct pt_regs *regs) { printk("Interrupt should be handled there\n"); } static int __init clcdint_init(void) { unsigned int irq; unsigned […]

什么是内核部分不匹配?

当编译一个内核模块时,我得到了一个警告和一个注释来添加一个编译选项CONFIG_DEBUG_SECTION_MISMATCH = y 。 它给了我更多有关问题的详细信息: WARNING: \**\*path to module\***(.text+0x8d2): Section mismatch in reference from the function Pch_Spi_Enable_Bios_Wr() to the variable .devinit.data:ich9_pci_tbl.22939 The function Pch_Spi_Enable_Bios_Wr() references the variable __devinitdata ich9_pci_tbl.22939. This is often because Pch_Spi_Enable_Bios_Wr lacks a __devinitdata annotation or the annotation of ich9_pci_tbl.22939 is wrong. 我找不到什么内核部分不匹配 ,更不用说如何去解决它。

Linux可加载模块和内置模块之间的区别

可加载模块和内置(静态链接)模块有什么区别? 我find了这个问题,同时find了系统调用subsys_initcall()和module_init()之间差异的答案。