bst*_*rre 4 c linux valgrind initialization driver
valgrind报告来自以下代码的未初始化的内存错误:
unsigned char buf[100];
struct driver_command cmd;
cmd.len = sizeof(buf);
cmd.buf = buf;
ioctl(my_driver_fd, READ, &cmd);
for(i = 0; i < sizeof(buf); i++)
{
foo(buf[i]); /* <<--- uninit use error from valgrind */
}
Run Code Online (Sandbox Code Playgroud)
如果我在驱动程序调用之前memset()buf,则错误消失.
valgrind可以检测linux驱动程序是否正确写入缓冲区?(我查看了驱动程序代码,它似乎是正确的,但也许我错过了一些东西.)
或者只是通过驱动程序调用,无法知道缓冲区已写入内核?
谢谢.
Valgrind显然无法跟踪执行内核,但它确实知道大多数系统调用的可见语义.但ioctl
太难以预测了.如果你已经对你的驱动程序进行了编码,那么这就是一个read
电话,那就可以了.无论如何,这是更好的做法.