同步总结笔记
2025-11-25
14
0
struct device_node* nd = of_find_node_by_path("/key");
int gpio = of_get_named_gpio(nd,"key_gpio",0);
char name[100];
sprintf(name,"ke_gpio");
gpio_request(gpio,name);
gpio_direction_input(gpio);
int irqnum = irq_of_parse_and_map(nd,0);
int irqnum = gpio_to_irq(gpio);
atomic_t value;
atomic_set(&value,10);
int v = automic_read(&value);
automic_dec_and_test -1,==0?true:false;
spinlock_t lock;
spin_lock_init(&lock);
sprin_lock(&lock);
spin_unlokc(&lock);
unsigned int flag;
spin_lock_irqsave(&flag);
spin_unlock_irqrestore(&flag);
mutex t;
mutex_init(&t);
mutex_lock(&t);
mutex_unlokc(&t);
timer_list
msecs_to_jiffies(10)
timer_list timer;
init_timer(&timer);
timer.function = timer_function;
mod_timer(&tier,jiffies+mssecs_to_jiffies(10));
void timer_function()
{
mod_timer(&tier,jiffies+mssecs_to_jiffies(10));
}
wait_queue_head_t
wait_queue_head_t wait;
init_wait_queue_head(&wait);
//setevnet
wake_up_interruptible(&wait);
wait_event_interruptible(&wait,atomic_read(&value));
semaphore_t
semaphore_t sem;
sema_init(&sem,10);
down_interruptible(&sem);
up_interruptible(&sem);
complection
struct completion req_done;
reinit_completion(&req_done);
ret = wait_for_completion_timeout(&ureq->req_done, msecs_to_jiffies(500));
if (ret == 0)
uvcg_warn(&video->uvc->func, "timed out waiting for req done\n");
//置
complete(&req_done);
work_struct
work_struct相当于Windows的workitem
work_struct pmmp;
INIT_WORK(&pump, uvcg_video_pump);
schedule_work(&pump);
static void uvcg_video_pump(struct work_struct *work)
{
//通过这种方式传递数据指针也是一个很不错的方法
struct uvc_video *video = container_of(work, struct uvc_video, pump);
}
device-tree
--------------device-tree- dts-->dtc----->dtb--------
device_noe* n = of_find_node_by_path("/gpio");
int gpio = of_get_named_gpio("led-gpio,"key-gpio");
gpio_request(gpio,"mygpio");
gpio_direction_input(gpio);
gpio_direction_output(gpio,0);
int value = gpio_get_value(gpio);
gpio_set_value(gpio,1);
int intnum = gpio_to_irq(gpio);
int intnum = irq_of_parse_and_map(node,0);
request_irq(intnum,irq_function,IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RASING,"IRQ_NANME",&dev);
ARM&Linux基础





