小编iSe*_*ult的帖子

谁调用了驱动程序的probe()

如何probe()调用电话?谁叫它?根据我的理解,__init()寄存器driver然后以某种方式probe()被调用到register设备数据irq等.它究竟发生了什么?

我正在研究触摸屏驱动程序及其__init注册本身i2c driver.然后探测期望i2c_client数据返回null.我想跟踪它被填满的地方.

linux-device-driver linux-kernel

35
推荐指数
3
解决办法
3万
查看次数

怎么做{} while(0)在宏中工作?

虽然本论坛和所有其他论坛多次讨论过这个话题,但我仍有疑问.请帮忙.

do{} while(0)in-macro 如何在Linux内核中工作?例如,

#define preempt_disable()    do { } while (0)
Run Code Online (Sandbox Code Playgroud)

它如何禁用抢占?

#define might_resched()    do { } while (0)
Run Code Online (Sandbox Code Playgroud)

它是如何重新安排的?

类似地,我已经看到了互斥锁和其他宏的宏.这有什么用?我理解以下问题,但不是上面的例子.

#define foo(x)    do { do something } while(0)
Run Code Online (Sandbox Code Playgroud)

编辑:

以下代码怎么样rt_mutex_lock

/**
 * rt_mutex_lock - lock a rt_mutex
 *
 * @lock: the rt_mutex to be locked
 */
void __sched rt_mutex_lock(struct rt_mutex *lock)
{
        might_sleep();
        rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, 0, rt_mutex_slowlock);
}
EXPORT_SYMBOL_GPL(rt_mutex_lock);


/*
 * debug aware fast / slowpath lock,trylock,unlock
 *
 * The atomic acquire/release ops are compiled away, …
Run Code Online (Sandbox Code Playgroud)

c do-while

7
推荐指数
2
解决办法
2020
查看次数

最好的无限循环

可能重复:
while(1)Vs. for(;;)有速度差吗?

嗨,

哪种更好,更快,更优化的方式来实现无限循环 - for(;;)或while(1)?为什么?

c optimization loops infinite

6
推荐指数
2
解决办法
4823
查看次数

用户进程内存映射——bss 部分的大小总是相同吗?

这可能是一个较旧的查询,但到目前为止我找不到任何令人满意的答案。为了检查文件的内存映射,我编写了一个小 hello 程序。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        printf("Hello\n");
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在编译后,当我size在其目标文件上使用命令时,我得到:

# size hello
   text    data     bss     dec     hex filename
   1133     492      16    1641     669 hello
Run Code Online (Sandbox Code Playgroud)

我也检查了其他文件的大小。我总是得到 bss 为 16。bss 是固定的吗?这是包含在数据中还是不包含在数据中。我的意思是这 16 是否包含在 492 中。据我了解,bss是未初始化的数据段。

c linux

5
推荐指数
1
解决办法
1107
查看次数

request_threaded_irq()在驱动程序中使用为什么不request_irq()?两者有什么不同?

我发布这是讨论request_threaded_irq的线程,但我没有得到任何答复.所以我刚刚发布它.

我正在研究用于电容式触摸屏的触摸屏驱动程序.它使用request_threaded_irq()调用而不是request_irq().我无法理解两者之间的基本差异.它说 :-

名称

request_threaded_irq - 分配中断线

概要

int request_threaded_irq(unsigned int irq,irq_handler_t handler,irq_handler_t thread_fn,unsigned long irqflags,const char*devname,void*dev_id);

参数

  1. irq - 要分配的中断线
  2. handler - IRQ发生时要调用的函数.线程中断的主处理程序如果为NULL且thread_fn!= NULL,则安装默认的主处理程序
  3. thread_fn - 从irq处理程序线程调用的函数如果为NULL,则不会创建irq线程
  4. irqflags - 中断类型标志
  5. devname - 声明设备的ascii名称
  6. dev_id - 传递回处理函数的cookie

Handler和Thread_fn参数是令人困惑的.此外,驱动程序中没有定义工作功能.

这是我所指的司机.

有人可以帮我理解这个吗?

kernel irq

4
推荐指数
1
解决办法
2万
查看次数