- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为 Linux 开发了一个外围驱动程序。 .probe 函数执行常见的错误检查,如内存分配失败,并尝试与硬件通信,并在任何类型的错误中解除分配任何内存并返回错误代码,如 -ENOMEM 或 -EIO。
问题是,虽然模块探测函数在硬件不可达时返回 -EIO,但我仍然看到模块在 lsmod
中列出输出。是否可以确定 insmod
初始化出现问题时完全失败?
这是我当前的探测功能。所有特定于设备的函数在失败时都会返回适当的错误代码,通常是 -EIO。
static int mlx90399_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
int err;
struct mlx90399_data *data;
data = kzalloc(sizeof(*data), GFP_KERNEL);
if (!data) {
dev_err(&client->dev, "Memory allocation fails\n");
err = -ENOMEM;
goto exit;
}
i2c_set_clientdata(client, data);
data->client = client;
mutex_init(&data->lock);
data->mode = MLX90399_MODE_OFF;
err = mlx90399_reset(client);
if (err < 0)
goto exit;
msleep(1); /* nominal 0.6ms from reset */
err = mlx90399_write_register_defaults(client);
if (err < 0)
goto exit;
err = mlx90399_update_scale(client);
if (err < 0)
goto exit;
data->indio_dev = iio_allocate_device(0);
if (data->indio_dev == NULL) {
err = -ENOMEM;
goto exit;
}
data->indio_dev->dev.parent = &client->dev;
data->indio_dev->info = &mlx90399_info;
data->indio_dev->dev_data = (void *)(data);
data->indio_dev->modes = INDIO_DIRECT_MODE;
mlx90399_setup_irq(client);
err = iio_device_register(data->indio_dev);
if(err < 0)
goto exit;
return 0;
exit:
kfree(data);
return err;
}
最佳答案
见 __driver_attach()
中的评论:
/*
* Lock device and try to bind to it. We drop the error
* here and always return 0, because we need to keep trying
* to bind to devices and some drivers will return an error
* simply if it didn't support the device.
*
* driver_probe_device() will spit a warning if there
* is an error.
*/
关于linux-kernel - 如何确保 insmod 因错误而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22065711/
我正在尝试编译一个模块并将其插入到我的内核中,但我一直收到此错误: insmod: error inserting 'hello.ko': -1 Invalid module format 我在这里按
在 Ubuntu 14.04、内核 3.13.0 上,当我在简单模块下方插入时,我从内核日志中收到错误消息:“模块验证失败:缺少签名和/或所需的 key - 污染内核” 我是否犯了任何错误或遗漏了什么
我正在尝试将 edac 模块移植到内核中,但出现以下错误: > insmod /lib/modules/2.6.34.12/kernel/drivers/edac/edac_core.ko insmo
我在内核驱动程序 1 (KD1.ko) 中有一个函数: static void test (void); EXPORT_SYMBOL(test); static void test() { p
我正在尝试将 cat 命令作为内核模块来实现。我知道文件 i/o 不应该在内核模块中完成。每次我使用 insmod module.ko 时,我都会得到 killed 的输出。我该如何解决?另外我该如何
我正在关注以下 tutorial ,试图学习如何开发设备驱动程序,而在第2章中,重点是开发一个工作模块并将其插入内核。我使用了以下代码 (hello.c): #include #include #
我正在使用 Monta-Vista Linux 2.6.10。在内核初始化期间,在使用“insmod”注册我的模块时,在重新启动 7,000 次后发生以下内核转储。 DMY Touch Panel F
我想知道内核模块的地址。实际上,从堆栈跟踪来看,崩溃是由内核模块触发的(在系统启动后已被 insmoded)。我手动安装了几个模块。所以我需要检测其中哪个模块触发了崩溃。请让我知道如何获取使用 ins
我为 Linux 开发了一个外围驱动程序。 .probe 函数执行常见的错误检查,如内存分配失败,并尝试与硬件通信,并在任何类型的错误中解除分配任何内存并返回错误代码,如 -ENOMEM 或 -EIO
我知道 insmod 和 modprobe 用于将模块插入内核。但是,它们之间有什么区别? 而且,为什么在 modprobe 中使用 force 选项插入模块是危险的? 最佳答案 modprobe 是
当我执行内核对象的 insmod 时,由于该模块中的一些未知符号而失败。 但是由于某些原因,它没有向我显示符号(它说它是未知的)。 无论如何要找到那个?请指教。 最佳答案 当您的 linux 内核和模
我正在尝试在 Linux 中用 C 语言实现字符设备驱动程序。我的代码如下: #include #include #include #include #include #include #includ
我目前写了一个 USB 设备驱动程序,我在其中从 probe() 函数创建了一个 Kthread。通用的 kthread_create() 函数在最不忙的 CPU 上创建线程。 我想做的是在特定 CP
我正在编写一个 LKM 来查看文件的扩展属性以确定是否应该打开它。我有一个 insmode: Unknown symbol in module 问题。我找不到造成这种情况的原因。以下模块: #incl
我写了一个 linux 内核模块,但是当我运行这个命令 insmod ./...ko 时,内核发布了一个错误:Undefined symbol ... 后来找了半天,所有的解决方案都是用EXPORT_
我已经在给出的指令的帮助下为 odroid-xu 构建了内核 HERE 内核源码:- https://github.com/hardkernel/linux/tre ... android-jb我
我正在尝试实现一个内核模块,它可以访问用户进程的 task_struct,我已经知道其进程 ID。我正在使用 find_get_pid 和 pid_task 来获取进程的 task_struct: #
我正在学习尝试根据 tutorial 制作最小的 Linux , 我试过加载一个模块,但出现这样的错误: / $ insmod kdb.ko insmod: can't insert 'kdb.ko'
我按照论坛 ( http://www.schaeuffelhut.de/wordpress/?p=237&cpage=1#comment-384 ) 中的步骤获取了 linux 内核源代码并交叉编译了
我是内核编程的新手。 为了实现我的项目工作,我从 kernel.org 下载了最新的稳定内核 (v4.3) . 为了检查,我已经将一些文件从内核目录复制到我的项目目录中。对其进行了更改并向其插入了更多
我是一名优秀的程序员,十分优秀!