在32位Linux内核上编译内核模块会导致
"__udivdi3" [mymodule.ko] undefined!
"__umoddi3" [mymodule.ko] undefined!
Run Code Online (Sandbox Code Playgroud)
在64位系统上一切都很好.据我所知,原因是32位Linux内核不支持64位整数除法和模数.
如何找到发出64位操作的代码.它们很难手动找到,因为我无法轻易检查"/"是32位宽还是64位宽.如果"正常"函数未定义,我可以grep它们,但这不可能在这里.还有另一种搜索引用的好方法吗?某种"机器代码grep"?
该模块由几千行代码组成.我真的不能手动检查每一行.
如何在linux内核中将char []转换为int
验证输入的文本实际上是一个int?
int procfile_write(struct file *file, const char *buffer, unsigned long count,
void *data)
{
char procfs_buffer[PROCFS_MAX_SIZE];
/* get buffer size */
unsigned long procfs_buffer_size = count;
if (procfs_buffer_size > PROCFS_MAX_SIZE ) {
procfs_buffer_size = PROCFS_MAX_SIZE;
}
/* write data to the buffer */
if ( copy_from_user(procfs_buffer, buffer, procfs_buffer_size) ) {
return -EFAULT;
}
int = buffer2int(procfs_buffer, procfs_buffer_size);
return procfs_buffer_size;
}
Run Code Online (Sandbox Code Playgroud) 从Java Garbage Collection跳转,我遇到了NUMA的JVM设置.奇怪的是我想检查我的CentOS服务器是否具有NUMA功能.是否有可以获取此信息的*ix命令或实用程序?
我正在试图弄清楚哪个进程占据了unix域套接字的另一端.在某些strace输出中,我已经确定了一个给定的文件描述符,它涉及我正在调试的问题,而且我想知道哪一个进程在另一端.由于与该套接字有多个连接,因此只需按路径名进行操作即可.
lsof 向我提供以下信息:
dbus-daem 4175 mvg 10u unix 0xffff8803e256d9c0 0t0 12828 @/tmp/dbus-LyGToFzlcG
Run Code Online (Sandbox Code Playgroud)
所以我知道一些地址("内核地址"?),我知道一些套接字号,我知道路径.我可以在其他地方找到相同的信息:
$ netstat -n | grep 12828
unix 3 [ ] STREAM CONNECTED 12828 @/tmp/dbus-LyGToFzlcG
$ grep -E '12828|ffff8803e256d9c0' /proc/net/unix
ffff8803e256d9c0: 00000003 00000000 00000000 0001 03 12828 @/tmp/dbus-LyGToFzlcG
$ ls -l /proc/*/fd/* 2>/dev/null | grep 12828
lrwx------ 1 mvg users 64 10. Aug 09:08 /proc/4175/fd/10 -> socket:[12828]
Run Code Online (Sandbox Code Playgroud)
但是,这些都没有告诉我套接字连接的另一端是什么.如何判断哪个进程占据另一端?
我有个问题.我过去4-5周一直在Eclipse中使用Android,从未遇到过VM的问题(它们很慢,是的.但从未崩溃).
现在,我相信自从4.2开始为uni开始新项目(下周截止日期)时,由于"Kernel Panic"(最后的resport),我的4.2 VM突然开始崩溃.
我想问一下我能做什么,也许下载一个修补程序或任何东西.API和Eclipse都是最新的,或者我的计算机可能有问题?(不知何故,甚至我的旧VM(2.3.3,3.1和4.1)在99%的时间内都会在启动时崩溃)
任何建议都将受到高度赞赏.这里是Crash-Log的开头:
进程:emulator64-arm [1334]路径:
/Users/USER/*/emulator64-arm标识符:emulator64-arm版本:??? 代码类型:X86-64(Native)父进程:eclipse [1156]用户ID:501日期/时间:2012-12-01 00:25:27.469 +0100操作系统版本:Mac OS X 10.8.2(12C2034)报告版本:10
自上次报告以来的间隔时间:130686秒自上次报告以来崩溃:自上次报告以来每次应用程序崩溃:32匿名UUID:ABE51F99-F7A9-2595-016E-C47FFD1F6C50
崩溃的线程:0调度队列:com.apple.main-thread
异常类型:EXC_BAD_ACCESS(SIGSEGV)异常代码:KERN_INVALID_ADDRESS位于0x0000000000000000
VM区域接近0: - > __TEXT 0000000100000000-0000000100247000 [2332K] rx/rwx SM = COW/Users/USER/*
线程0 Crashed :: Dispatch queue:com.apple.main-thread
我完全是opencl的初学者,我在互联网上搜索并为opencl项目找到了一些"helloworld"演示.通常在这种最小的项目中,有一个*.cl文件包含某种opencl内核,而*.c文件包含main函数.那么问题是如何使用命令行编译这种项目.我知道我应该在linux上使用某种-lOpenCL标志,在mac上使用-framework OpenCL.但我不知道将*.cl内核链接到我的主源文件.感谢您提供任何意见或有用的链接.
我是初学者,我正在尝试linux中的一些内核编程基础知识.今天早上我在VIM中打开了module.h文件,关闭后也没有保存任何更改.之后,我无法编译任何代码.我收到以下错误消息
[root@localhost helloworld]# cc helloworld.c
helloworld.c:1:25: error: linux/module.h: No such file or directory
[root@localhost helloworld]#
Run Code Online (Sandbox Code Playgroud)
这是一个成功运行到最后一天的示例代码.
#include<linux/module.h>
#include<linux/kernel.h>
int init_module(void)
{
printk("HELLO WORLD");
return 0;
}
void cleanup_module(void)
{
printk("GOODBYE");
}
Run Code Online (Sandbox Code Playgroud)
我搜索了module.h文件,如下所示,它确实存在
[root@localhost usr]# find . -name module.h
./src/kernels/2.6.18-194.el5-i686/include/asm-x86_64/module.h
./src/kernels/2.6.18-194.el5-i686/include/asm-i386/module.h
./src/kernels/2.6.18-194.el5-i686/include/linux/module.h
./include/sepol/policydb/module.h
./include/sepol/module.h
./include/kde/kunittest/module.h
[root@localhost usr]#
Run Code Online (Sandbox Code Playgroud)
请帮帮我.我在虚拟盒子里使用CentOS.
我想通过ls命令知道linux中使用哪个系统调用来显示文件夹(或文件的名称)?特别是以"."开头的文件/文件夹.(点)
我执行了strace ls -a命令来查看系统fstat调用.对于所有其他属性(inode到permisisons),会发生很多调用.哪一个实际上给它的名字?
execve("/bin/ls", ["ls", "-a"], [/* 37 vars */]) = 0
brk(0) = 0x1762000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1c14025000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=109464, ...}) = 0
mmap(NULL, 109464, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f1c1400a000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libselinux.so.1", …Run Code Online (Sandbox Code Playgroud) 我正在寻找有关linux系统上文件/ proc/net/nf_conntrack和/或/ proc/net/ip_contrack内容的详细文档.
是的,我知道,有许多实用工具可以用人类可读的格式向我展示这些文件的内容,但是......我想在SOHO路由器上使用Tomato USB固件(Shibby).软件AFAIK已弃用且entware不包含任何实用程序,因此我想编写脚本而不是它们,但我没有找到这些文件的详细说明.:(
好吧,我运行这个命令
aptitude purge~o
要删除所有能够显示我错误的Obsoletes文件,我想在我更新系统后一切正常但是当我重新启动系统并且我想加载虚拟机时我得到了这个错误
WARNING: The vboxdrv kernel module is not loaded. Either there is no module
available for the current kernel (3.14-kali1-amd64) or it failed to
load. Please recompile the kernel module and install it by
sudo /etc/init.d/vboxdrv setup
You will not be able to start VMs until this problem is fixed.
Run Code Online (Sandbox Code Playgroud)
该程序仍在运行,但我无法加载虚拟机,所以我运行该命令,然后输出.
sudo /etc/init.d/vboxdrv setup
Stopping VirtualBox kernel modules ...done.
Recompiling VirtualBox kernel modules ...failed!
(Look at /var/log/vbox-install.log to find out what went wrong)
Run Code Online (Sandbox Code Playgroud)
我只发布文件的一部分,因为vbox-install.log有很多行.
./install.sh: 343: ./install.sh: …Run Code Online (Sandbox Code Playgroud) kernel ×10
linux ×7
c ×3
linux-kernel ×3
android ×1
compilation ×1
eclipse ×1
jvm ×1
ls ×1
macos ×1
numa ×1
opencl ×1
processor ×1
python ×1
system-calls ×1
unix-socket ×1
virtualbox ×1