您的当前位置:首页内核

内核

2021-11-07 来源:爱问旅游网
配置编译内核:$make menuconfig 入口函数:module_init(hello_init); 出口函数:module_exit(hello_exit); 挂载模块:insmod 卸载模块:rmmod

申请设备号:register_chrdev_region();

动态:alloc_chrdev_region(); 老的方法:register_chrdev();

释放设备号:unregister_chrdev_region();

字符设备初始化:cdev*my_cdev=cdev_alloc();

cdev_init();

注册:cdev_add();

设备文件自动建立:class_create(); 清理:class_destroy(); 原子操作:

atomic_inc(atomic_t *v);+1 atomic_dec(atomic_t *v);-1

atomic_sub_and_test(int i, atomic_t *v);从v-i,结果为0返回真,否则假

自旋锁:

DEFINE_SPINLOCK(mr_lock);

spin_lock (&mr_lock); //临界区

spin_unlock (&mr_lock);

读写自旋锁:

DEFINE_RWLOCK(led_rwlock); read_lock(&led_lock);

//临界区

read_unlock(&led_lock);

write_lock(&led_lock); //临界区

write_unlock(&led_lock);

信号量:

DEFINE_SEMAPHORE(name) struct semaphore sem; sema_init(&sem,count); down(&led_sema); up(&led_sema);

读写信号量:

DECLARE_RWSEM(name) ;

init_rwsem(struct rw_semaphore *sem); down_read、up_read、down_write、

up_write 互斥体:

DEFINE_MUTEX(mutexname); mutex_init(mutex); 上锁

mutex_lock(lock); 释放

mutex_unlock(lock);

注册中断服务程序:

request_irq(irq,btn_interrupt,IRQ_TYPE_FALLING,”btn”,NULL);

等待队列:

定义:static wait_queue_head_t wq; 初始化:init_waitqueue_head(&wq);

唤醒队列:wake_up();

中断处理的三种方法: softirqs, tasklet, 和work queue

软中断(softirqs)注册: open_softirq(); 触发软中断:raise_softirq(); 声明tasklet(按键中断):

静态:DECLARE_TASKLET(); 动态:tasklet_init();

tasklet:tasklet_schedule(&my_tasklet); 声明工作队列(work queue):DECLARE_WORK(); 调度:schedule(&btn_work);

时间管理:

实际时间:年月日时分秒。也叫墙上时间。 系统运行时间:自系统启动开始所经过的时间。

硬件定时器的节拍率是通过宏定义的。这个宏是HZ。

全局变量jiffies用来记录自系统启动以来产生的节拍的总数。

定义定时器:DEFINE_TIMER();

激活定时器:add_timer(struct timer_list * ); 修改定时值并且激活:mod_timer(struct timer_list *timer, unsigned long expires); 删除定时器:del_timer(struct timer_list * );

因篇幅问题不能全部显示,请点此查看更多更全内容