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);