linux内核
文章平均质量分 55
1
你板子冒烟了
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JJJ:内核格式化输出
是 Linux 内核中用来打印 cpumask 的特殊格式字符串。(假设系统有 4 个 CPU(nr_cpu_ids = 4))是可选的,表示使用列表格式而不是十六进制掩码格式。:指向cpumask结构体中的位图的指针。表示以位图(bitmap)格式打印。表示需要两个参数:宽度和指针。:系统中cpu的数目。原创 2025-05-29 09:56:03 · 350 阅读 · 0 评论 -
JJJ:linux ida
ida使用起来很简单,就是先分配一个仓库一样的实例,再从这个仓库里面分配一个独一无二的整数id。原创 2025-05-14 14:13:46 · 429 阅读 · 0 评论 -
JJJ:linux idr
IDR(ID Radix Tree)是 Linux 内核中的一种整数管理机制,用于将整数 ID 与指针关联起来。IDR 提供了一种高效的方式来分配和管理唯一的整数 ID,并将这些 ID 映射到相应的指针。在 Linux 内核中,整数 ID 是用于唯一标识各种系统资源或对象的数字。通过将整数 ID 与指针关联,可以快速、高效地管理和访问内存中的资源或对象。这种机制简化了内核的资源管理过程,提高了系统的性能和可靠性。转载 2025-03-31 22:12:21 · 247 阅读 · 0 评论 -
JJJ:linux sysfs相关
sysfs是一个基于内存的虚拟的文件系统目录简介/sys/block存放块设备,提供一设备名(如sda)到/sys/devices的符号链接;/sys/bus按总线类型分类,在某个总线目录之下可以找到链接该总线的设备的符号链接,指向/sys/devices. 某个总线目录之下的drivers目录包含了该总线所需的所有驱动的符号链接。对应kernel中的struct bus_type;/sys/calss。原创 2025-03-07 10:34:02 · 1453 阅读 · 0 评论 -
JJJ:kmem_cache_create、kmem_cache_destroy、kmem_cache_alloc、kmem_cache_free用法
【代码】JJJ:kmem_cache_create、kmem_cache_destroy、kmem_cache_alloc、kmem_cache_free用法。原创 2024-03-03 09:57:58 · 713 阅读 · 0 评论 -
JJJ:arm64架构下的asid相关
如果没有空闲的硬件ASID,把全局ASID版本号加1,重新从1开始分配硬件ASIDA.因为刚分配的ASID可能和某个进程的硬件ASID相同,只是ASID版本号不同,页表缓存可能包含了这个进程的页表项,所以必须把所有处理器的页表缓存清空。处理器给进程分配ASID时,如果ASID分配完了,那么把全局ASID加1,重新从1开始分配ASID,针对每个处理器,使用该处理器的reserved_asids保存该处理器正在执行的进程的ASID,并且把该处理器的active_asids设置0。原创 2025-01-21 16:02:27 · 1696 阅读 · 0 评论 -
JJJ:per-cpu变量
在单处理器系统上,这个变量声明与常规的变量声明没有不同;再有若干cpu的SMP系统上,会为每一个cpu创建一个该变量的实例。所需的数据很可能存在于处理器的缓存中,通过自己的cpu来访问速度更快。若一个变量可以被多个cpu访问,那么可能会造成冲突。通过指定cpu的id来指定访问对应cpu上的实例。访问当前cpu上的这个变量实例。访问指定cpu上的变量实例。type是其数据类型。原创 2025-01-18 15:27:20 · 304 阅读 · 0 评论 -
JJJ:static_branch_unlikely和 static_branch_likely
如果静态键被启用(通过 static_branch_enable(&my_static_key)),则会执行 do_something_rare();`static_branch_unlikely 是 Linux 内核中用于优化分支预测的一个宏,它与静态键(static key)机制结合使用,以提高代码性能。static_branch_unlikely(&my_static_key) 表示编译器应该假设这个条件分支不太可能为真。STATIC_KEY_INIT 初始化一个静态键,默认是禁用状态。原创 2025-01-17 14:42:52 · 270 阅读 · 0 评论 -
JJJ:linux等待队列用法 init_waitqueue_entry
函数用于初始化一个等待队列条目,设置其标志、私有数据和唤醒函数。这是 Linux 内核中管理进程睡眠和唤醒机制的基础部分,确保进程能够在适当的时候被唤醒并继续执行。原创 2024-12-30 10:18:14 · 785 阅读 · 0 评论 -
JJJ:rcS脚本是如何被执行到的
parse_inittab 里面会调用 new_init_action(SYSINIT, INIT_SCRIPT, “”),决定了接下去初始化的脚本是INIT_SCRIPT所定义的值。在init_main()函数中会调用parse_inittab(void)函数,parse_inittab(void)函数可以使用一些默认的配置,当/etc/inittab没有配置时。kernel_init执行"/sbin/init",在此程序中,会执行到busybox的init进程入口,init_main.原创 2024-06-04 20:22:33 · 479 阅读 · 1 评论 -
JJJ:linux系统中第一个进程
ramdisk_execute_command 变量的值可以通过内核启动参数 rdinit 来设置。在Linux内核引导过程中,如果用户在命令行参数或GRUB等 bootloader配置中指定了类似 rdinit=/path/to/executable 的参数,内核在初始化initrd之后会尝试执行位于指定路径的可执行文件作为初始化脚本或进程。上面代码片中的两个变量:ramdisk_execute_command 和 execute_command。可以看到第一个进程PID为1,拉起第一个进程的指令为。原创 2024-03-31 22:03:56 · 341 阅读 · 0 评论 -
read、write等系统调用
用户态的read、write等系统调用,陷入内核态,会首先调用到 SyS_read、SyS_write函数。原创 2023-07-24 23:41:38 · 324 阅读 · 0 评论 -
关于might_sleep的一点说明---CONFIG_DEBUG_ATOMIC_SLEEP【转】
关于might_sleep的一点说明—CONFIG_DEBUG_ATOMIC_SLEEP【转】原创 2023-05-04 11:37:06 · 416 阅读 · 1 评论 -
Linux设备驱动程序 之 per-cpu变量
Linux设备驱动程序 之 per-cpu变量原创 2023-04-26 11:40:06 · 149 阅读 · 0 评论 -
JJJ linux内核中常见的asmlinkage是什么?
gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一种是通过寄存器。缺省时采用寄存器,假如你要在你的汇编过程中调用c语言函数,并且想通过堆栈传递参数,你定义的c函数时要在函数前加上宏asmlinkage。,那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数。函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。是关键字,是gcc的C语言扩展,regparm(0)表示不从寄存器传递参数。原创 2023-04-16 14:37:00 · 236 阅读 · 0 评论 -
for_each_matching_node的展开分析
for_each_of_allnodes_from(from, np) {// 从from开始遍历设备树节点,此循环会遍历所有设备树节点,但是一旦当前结点找到了匹配的matches,那就直接退出循环了。// 传入一个node设备树节点,让它与给定的一组的matches匹配,返回其中最合适的matches。Might be null at the end of the tree */ //返回兄弟结点。//有子节点优先返回子节点。//第一个自然是根结点。// 就是从from开始遍历设备树节点。原创 2023-04-14 01:48:08 · 749 阅读 · 0 评论 -
JJJ--linux irq
由start_kernel找到init_IRQ(arch/arm/kernel/irq.c),到irqchip_init(drivers/irqchip/irqchip.c),到of_irq_init(__irqchip_of_table) drivers/of/irq.c。没有no_map和Radix_Tree_map这两种方式(irq_domain_add_nomap 和 irq_domain_add_tree)原创 2023-03-27 00:58:08 · 11580 阅读 · 0 评论 -
JJJ:linux内核设计与实现 笔记
111原创 2022-07-21 00:16:54 · 558 阅读 · 0 评论 -
JJJ:内核中常用的遍历链表的宏 /函数
1、list_for_each_entry/** * list_for_each_entry - iterate over list of given type * @pos: the type * to use as a loop cursor. * @head: the head for your list. * @member: the name of the list_head within the struct. */#define list_for_each_entry(pos,原创 2021-10-24 21:01:02 · 435 阅读 · 0 评论 -
JJJ:linux网络子系统内核分析
linux网络子系统内核分析原创 2022-05-05 23:10:55 · 378 阅读 · 0 评论 -
JJJ: Netlink通信机制的基础概念
Netlink套接字是:实现 用户进程 与 内核进程通信 的一种进程间通信(IPC) ,也是 网络应用程序 与 内核 通信的最常用的接口。linux特有的一种特殊的 socket,目前在Linux 内核中使用netlink 进行应用与内核通信的应用很多。比如:路由 daemon(NETLINK_ROUTE)用户态 socket 协议(NETLINK_USERSOCK)netfilter 子系统(NETLINK_NETFILTER)内核事件向用户态通知(NETLINK_KOBJECT_UE转载 2022-05-03 15:18:39 · 243 阅读 · 0 评论 -
JJJ:linux内核传参、解析流程
文章目录1 module_param_cb1.1 待解析内容:1.2 涉及到的相关定义:1.3 涉及到的通用定义1.4 基于1.1的展开流程2 module_param3、推荐(详细的参数解析流程)1 module_param_cb1.1 待解析内容:// block/genhd.cmodule_param_cb(events_dfl_poll_msecs, &disk_events_dfl_poll_msecs_param_ops, &disk_events_d原创 2022-05-02 13:50:54 · 753 阅读 · 0 评论 -
usbnet_probe
1、驱动流程: 2、明确probe函数的功能:probe有usb core 经枚举过程,匹配 id_table ,识别到驱动,并调用probe来初始化一些信息。如 dev->driver_info = info 只是取得注册时的一些信息,用于一些比较特殊的设备,如bind 与收发与普通的网卡不同时,增加或减少一些配置。主要做了: skb_queue_head_init (&dev->rxq);skb_queue_head_init (&dev->t原创 2022-01-21 16:37:55 · 662 阅读 · 0 评论 -
JJJ:linux 源码 uapi 目录
一、问题描述从3.5开始,Linux Kernel 里多了一个 uapi 文件夹,里面放了很多 Linux Kernel 各个模块的头文件。如果是第一次碰到,可能会对这个不是很了解。二、问题分析Linux Kernel 中新增的这些 uapi 头文件,其实都是来自于各个模块原先的头文件,最先是由 David Howells 提出来的。uapi 只是把内核用到的头文件和用户态用到的头文件分开。三、解决方案3.5 之前在 3.5 之前,Linux Kernel 的头文件一般是这样的:/* Head转载 2022-01-03 13:58:46 · 881 阅读 · 0 评论
分享