0

我在我的操作系统课程中有一项任务是制作一个简单的伪堆栈 Linux 设备驱动程序。举个例子,如果我要向设备驱动程序写入“Hello”,当我读取它时它会返回“olleH”。我们必须用 C 语言构建一个测试程序来调用设备驱动程序的读/写函数来证明它以 FILO 方式运行。我已经完成了所有这些,我认为我的测试程序证明了任务的目的;但是,出于好奇,在 BASH 中,我执行了以下命令:

回声“测试”> /dev/driver

猫/开发/驱动程序

其中 /dev/driver 是我使用“mknod”创建的特殊文件。但是,当我这样做时,我会得到一个充满错误的黑屏。在我使用 CNTRL+ALT+F7 切换回 GUI 视图后,我看到 BASH 已返回“Killed”。

有谁知道可能导致这种情况发生的原因?我很困惑,因为我的测试程序调用了 open()、read() 和 write(),并且一切正常。

如果我需要显示一些代码,请问。

4

1 回答 1

1

设备驱动程序中写入您提供的缓冲区的函数很可能导致此问题。

要调试,您可以执行以下操作:

  • 首先,确保读取部分没问题。printk从输入中读取后,您可以使用内部缓冲区来确保这一点。

  • 其次,在您的写入功能中,printk一些信息而不是实际写入任何内容并确保一切正常。

另外,请确保作者清楚地表明写入已经结束。我对设备驱动程序不是特别确定,但是您要么需要返回 0 作为第二次调用时写入的字节数,要么设置一个 eof 变量(如果这是您的函数的参数之一)

于 2012-04-18T15:44:42.147 回答