我为 Linux 编写了一个简单的字符设备驱动程序。
它是一个简单的消息存储/检索系统,其中消息存储在内核空间中。
我应该能够做这样的事情:
echo "message 1" > /dev/mydevice
然后检索消息
cat /dev/mydevice
消息存储在队列中。
当我尝试检索我硬编码用于测试的消息(消息是“hello”)时,我得到以下命令行输出:
cat /dev/mydevice
hellocat: /dev/mydevice: Resource temporarily unavailable
所以我按预期收到了你好消息,但显然我做的事情不太正确。
这是处理设备读取的函数。
static ssize_t device_read(struct file *filp, char *buffer,
size_t length, loff_t * offset) {
unsigned long result;
int message_size;
struct message_list* message = pop_message(&global_message_list);
if (!message) return -EAGAIN;
message_size = message -> message_length;
result = copy_to_user(buffer, message -> message, message_size);
printk(KERN_ALERT "res: %lu, msg_size: %d, len: %d\n", result, message_size, length);
if (result == 0) return message_size;
else return message_size - result;
}