【问题标题】:Compiling a program for user mode Linux为用户模式 ​​Linux 编译程序
【发布时间】:2011-05-30 21:02:43
【问题描述】:

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

echo "something"> /dev/mydev
cat /dev/mydev

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

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

附言测试程序非常简单,以上错误不是程序中的错误引起的。 pps为了编译模块,我已经准备好了 Makefile,所以很容易 :)

提前致谢。

编辑:主机和 UML 内核的版本相同 2.6.35

编辑:我相信我需要显示内核源目录,以及一些编译器选项,还有类似 ARCH=um 之类的东西?

编辑:目前我正在编译没有任何选项。 gcc test.c.甚至“Hello world”程序也不能在 UML 上运行。也许我必须更改 UML 编译的一些内容?

【问题讨论】:

  • 重新标记uml->user-mode-linux,标记uml 用于统一建模语言。
  • 是什么让您认为问题在于用户模式 ​​Linux 的编译方法,而不仅仅是代码中的错误?
  • 代码很简单。它只是打开、写入/读取、关闭。它在我的主机操作系统中运行。 (在不同的文件上)
  • 把代码放在这里会更容易帮助到你。

标签: c linux linux-kernel linux-device-driver user-mode-linux


【解决方案1】:

问题的解决方法找到了(感谢我的同学和教授):

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我已经实现了这种测试程序。但我最初的问题是如何编译它以便在 UML 上运行。使用 gcc -ansi test.c 进行正常编译不起作用。我相信我需要在某处显示内核源代码,以及一些选项以及 ARCH=um。
    • @user502515:尽管没有必要,但最好知道你从malloc返回了什么;从开发人员的角度来看,这更像是编译器的问题(因为 C 内存就是内存,我知道)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多