Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为用户模式Linux编译程序_C_Linux_Linux Kernel_Linux Device Driver_User Mode Linux - Fatal编程技术网

C 为用户模式Linux编译程序

C 为用户模式Linux编译程序,c,linux,linux-kernel,linux-device-driver,user-mode-linux,C,Linux,Linux Kernel,Linux Device Driver,User Mode Linux,我刚刚实现了一个“伪”设备驱动程序,并想对其进行测试。作为测试,我能做的只是: echo "something"> /dev/mydev cat /dev/mydev 我的驱动程序支持更高级的功能,我实现了一个测试程序来测试这些功能。但是,我无法在UML上运行它(错误:浮点异常)。我相信有一种为UML编译用户程序的“特殊”方法 你能给我一个起点吗?我应该如何编译测试程序 p、 美国的测试程序非常简单,上面的错误不是由程序中的错误引起的。 p、 另外,编译模块时,我已经准备好Makefil

我刚刚实现了一个“伪”设备驱动程序,并想对其进行测试。作为测试,我能做的只是:

echo "something"> /dev/mydev
cat /dev/mydev
我的驱动程序支持更高级的功能,我实现了一个测试程序来测试这些功能。但是,我无法在UML上运行它(错误:浮点异常)。我相信有一种为UML编译用户程序的“特殊”方法

你能给我一个起点吗?我应该如何编译测试程序

p、 美国的测试程序非常简单,上面的错误不是由程序中的错误引起的。 p、 另外,编译模块时,我已经准备好Makefile,所以很容易:)

提前谢谢

编辑:主机和UML内核的版本都是2.6.35

编辑:我认为我需要显示内核源代码目录,加上一些编译器选项,还有一些类似ARCH=um的东西


编辑:目前我正在编译,没有任何选项。gcc测试。即使是“Hello world”程序也不能在UML上工作。也许我必须对UML编译进行一些更改?

如果你想从你的设备读/写,你必须实现,然后在你的程序上使用,至少系统调用
open()
read()
write()
close()
,就像你Linux上的任何其他设备一样。对于您给出的示例,您的程序如下(语法可能包含一些错误):


问题的解决方案已经找到(感谢我的同学和教授):

编译环境的glibc版本应该与UML相匹配。所以编译
--静态选项解决了这个问题。

重新标记
uml
->
用户模式linux
,标签
uml
是用于统一建模语言的。是什么让您认为问题在于用户模式linux的编译方法,而不仅仅是代码中的错误?代码非常简单。它只是打开、写入/读取、关闭。它在我的主机操作系统中工作。(在不同的文件上)如果你把代码放在这里,会更容易帮助你。我已经实现了这种测试程序。但我最初的问题是如何编译它以便在UML上运行。使用gcc-ansi test.c进行正常编译不起作用。我认为我需要显示内核源代码,加上一些选项,再加上ARCH=um。@user502515:尽管这不是必需的,但为了准确地知道从
malloc
返回的内容,这是很好的;这更多的是从开发人员的角度来看,而不是编译器的问题(因为我知道C内存就是内存)。
char* string = "something";
char* result = (char*)malloc(sizeof(char) * strlen(string) + 1);

int fd = open("/dev/mydev", O_RDWR);

write(fd, "something", strlen(string));

read(fd, result, strlen(string));
printf("result = %s\n", result);

close(fd);