如何probe()调用电话?谁叫它?根据我的理解,__init()寄存器driver然后以某种方式probe()被调用到register设备数据irq等.它究竟发生了什么?
我正在研究触摸屏驱动程序及其__init注册本身i2c driver.然后探测期望i2c_client数据返回null.我想跟踪它被填满的地方.
虽然本论坛和所有其他论坛多次讨论过这个话题,但我仍有疑问.请帮忙.
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) 这可能是一个较旧的查询,但到目前为止我找不到任何令人满意的答案。为了检查文件的内存映射,我编写了一个小 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是未初始化的数据段。
我发布这是讨论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);
参数
Handler和Thread_fn参数是令人困惑的.此外,驱动程序中没有定义工作功能.
有人可以帮我理解这个吗?
c ×3
do-while ×1
infinite ×1
irq ×1
kernel ×1
linux ×1
linux-kernel ×1
loops ×1
optimization ×1