kernel
文章平均质量分 54
~kiss~
这个作者很懒,什么都没留下…
展开
-
eBPF 指令宏
linux 6.9.7/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) *//* eBPF instruction mini library */#ifndef __BPF_INSN_H#define __BPF_INSN_Hstruct bpf_insn;/* ALU ops on registers, bpf_add|sub|...: dst_reg += src_reg */// BPF_ALU64_REG:dst_原创 2024-07-06 16:02:06 · 652 阅读 · 0 评论 -
eBPF 进行 perf 监控
00。原创 2024-07-06 14:49:03 · 352 阅读 · 0 评论 -
linux的Top学习
普通定时器: arch_timer_handler_phys->tick_handle_periodic->update_process_times高精度定时器: tick_sched_handle->update_process_timeslinux 进程可以同时执行,是因为采用时间片轮转方案。每个进程都会分得相应的时间片,当前进程时间片用完,CPU就会停止执行当前进程,选择其他合适进程。什么时候判断当前进程的时间片是否用完?原创 2024-07-02 22:28:32 · 915 阅读 · 0 评论 -
内核调用用户态代码
在用户态中,通过execve()直接执行应用程序在内核态,是否可以直接调用用户态程序呢?内核提供了一个函数:call_usermodehelper,在内核就可以执行用户态的二进制程序。原创 2023-09-15 20:00:46 · 399 阅读 · 0 评论 -
浅析spinlock
自旋这块是借鉴其他博主的,但找不到是哪个的了,找到之后补上【被保护的资源在进程上下文、软中断上下文】如果被保护的共享资源只在进程上下文访问和软中断上下文访问,那么当在进程上下文访问共享资源时,可能被软中断打断,从而可能进入软中断上下文来对被保护的共享资源访问,因此对于这种情况,对共享资源的访问必须使用spin_lock_bh和spin_unlock_bh来保护。实验:(1)先让普通进程kthread先跑起来,再让timer软中断在同一个CPU去执行handler,看能否抢占成功(2)先让普原创 2021-12-15 00:14:09 · 726 阅读 · 0 评论 -
del_timer_sync的替代品try_to_del_timer_sync
背景del_timer_sync 的kernel code 有个反例如注释为了解决这种死锁问题,采用 try_to_del_timer_sync/** * del_timer_sync - deactivate a timer and wait for the handler to finish. * @timer: the timer to be deactivated * * This function only differs from del_timer() on SMP: besid原创 2021-12-14 01:03:24 · 323 阅读 · 0 评论 -
msleep和msleep_interruptible
原来msleep还有个弟弟/** * msleep - sleep safely even with waitqueue interruptions * @msecs: Time in milliseconds to sleep for */void msleep(unsigned int msecs){ unsigned long timeout = msecs_to_jiffies(msecs) + 1; while (timeout) timeout = schedule_tim原创 2021-12-11 21:52:52 · 1928 阅读 · 0 评论 -
timer
【示例】#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/device.h>#include <linux/cdev.h>#include <linux/kdev_t.h>#include <linux/interrupt.h>原创 2021-12-11 21:35:27 · 731 阅读 · 0 评论 -
某博主的kthread+中断的讨论
https://blog.csdn.net/boogie0207/article/details/112285491谈谈我的分析: while (!kthread_should_stop()) { dosomething(); set_current_state(TASK_INTERRUPTIBLE); schedule(); } __set_current_state(TASK_RUNNING);作者想要在中断到来的时候,调用wake_up_process去唤醒这个kthr原创 2021-12-11 15:54:39 · 521 阅读 · 0 评论 -
kthread_stop问题探讨
#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/device.h>#include <linux/cdev.h>#include <linux/kdev_t.h>#include <linux/interrupt.h>#incl原创 2021-12-05 00:47:07 · 3212 阅读 · 0 评论 -
debugfs的精妙接口
#include <linux/debugfs.h>#include <linux/delay.h>#include <linux/errno.h>#include <linux/fs.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/string.h>#include <linux/types.h>#inclu原创 2021-12-04 11:51:19 · 1705 阅读 · 0 评论 -
debugfs中私有数据的使用
#include <linux/debugfs.h>#include <linux/delay.h>#include <linux/errno.h>#include <linux/fs.h>#include <linux/kernel.h>#include <linux/list.h>#include <linux/module.h>#include <linux/mutex.h>#include原创 2021-11-30 00:46:38 · 566 阅读 · 0 评论 -
mmap初步学习
mmap学习#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/device.h>#include <linux/cdev.h>#include <linux/kdev_t.h>#include <linux/mm.h>#incl原创 2021-11-20 23:02:49 · 879 阅读 · 0 评论 -
atomic基本操作
/include/linux/types.htypedef struct { int counter;} atomic_t;#define ATOMIC_INIT(i) { (i) }#ifdef CONFIG_64BITtypedef struct { s64 counter;} atomic64_t;#endif#define ATOMIC64_INIT(i) { (i) }/include/linux/atomic/atomic-long.h#ifdef CONFIG原创 2021-11-20 12:20:10 · 1649 阅读 · 0 评论 -
klist
struct klist { spinlock_t k_lock; struct list_head k_list; void (*get)(struct klist_node *); void (*put)(struct klist_node *);} __attribute__ ((aligned (sizeof(void *))));struct klist_node { void *n_klist; /* never access directly */ struct原创 2021-11-19 21:53:20 · 660 阅读 · 0 评论 -
kernel中的completion
一个实例:ko insmod 的时候,创建 completion , 然后进行 driver probe/add,init进程使用 wait_for_completion_timeout 等待固定时间,看 driver 是否probe ok,driver probe 成功之后,使用 complete() 通知给等待它的进程#include <linux/init.h>#include <linux/module.h>#include <linux/completion原创 2021-11-15 00:15:40 · 1071 阅读 · 0 评论 -
kzalloc-vzalloc
kzalloc#include <linux/init.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/delay.h>#include <linux/kernel.h>#include <linux/printk.h>#define MY_PAGE_SIZE (1UL << 12)static void *virtual_原创 2021-11-14 23:53:58 · 1696 阅读 · 0 评论 -
delayed_work实例
#include <linux/ktime.h>#include <linux/timekeeping.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/workqueue.h>#include <linux/slab.h>struct my_demo { struct workqueue_struct *demo_workqueue;原创 2021-11-14 09:27:40 · 1461 阅读 · 0 评论 -
7-16-123
#define DECLARE_WAIT_QUEUE_HEAD(name) struct wait_queue_head name = __WAIT_QUEUE_HEAD_INITIALIZER(name)struct wait_queue_head {spinlock_t lock;struct list_head head;};#define __WAIT_QUEUE_HEAD_INITIALIZER(name) { .lock = __SPIN_LOCK_UNLOCKED(n原创 2021-07-15 01:21:29 · 77 阅读 · 0 评论 -
注册 IRQ 的两种方式
(1) request_irq/include/linux/interrupt.hstatic inline int __must_checkrequest_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev){ return request_threaded_irq(irq, handler, NULL, flags, name, dev);}只原创 2021-07-11 22:02:59 · 371 阅读 · 0 评论 -
poll-轮询
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ioctl.h>#include <unistd.h>#include <poll.h>int main(int argc, char **argv){ int i原创 2021-07-11 14:58:55 · 287 阅读 · 0 评论 -
计数信号量-down和up
xref: /kernel/locking/semaphore.c/* * Some notes on the implementation: * * The spinlock controls access to the other members of the semaphore. * down_trylock() and up() can be called from interrupt context, so we * have to disable interrupts when t原创 2021-07-08 09:20:35 · 298 阅读 · 0 评论 -
access_ok和get_user和put_user简介
access_okaccess_ok()用来代替老版本的 verify_area()检查用户空间指针是否可用函数原型:access_ok (type, addr, size);变量说明:type : 访问类型,其值可为 VERIFY_READ 或 VERIFY_WRITE 。addr : 用户空间的指针变量,指向一个要检查的内存块开始处。size : 要检查内存块大小注意:VERIFY_WRITE 是 VERIFY_READ 的超集如果可以安全写内存块,那么原创 2021-06-27 23:22:43 · 718 阅读 · 0 评论