linux内核
1
你板子冒烟了
这个作者很懒,什么都没留下…
展开
-
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 · 371 阅读 · 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 · 251 阅读 · 0 评论 -
read、write等系统调用
用户态的read、write等系统调用,陷入内核态,会首先调用到 SyS_read、SyS_write函数。原创 2023-07-24 23:41:38 · 205 阅读 · 0 评论 -
关于might_sleep的一点说明---CONFIG_DEBUG_ATOMIC_SLEEP【转】
关于might_sleep的一点说明—CONFIG_DEBUG_ATOMIC_SLEEP【转】原创 2023-05-04 11:37:06 · 225 阅读 · 1 评论 -
Linux设备驱动程序 之 per-cpu变量
Linux设备驱动程序 之 per-cpu变量原创 2023-04-26 11:40:06 · 99 阅读 · 0 评论 -
JJJ linux内核中常见的asmlinkage是什么?
gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一种是通过寄存器。缺省时采用寄存器,假如你要在你的汇编过程中调用c语言函数,并且想通过堆栈传递参数,你定义的c函数时要在函数前加上宏asmlinkage。,那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数。函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。是关键字,是gcc的C语言扩展,regparm(0)表示不从寄存器传递参数。原创 2023-04-16 14:37:00 · 148 阅读 · 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 · 584 阅读 · 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 · 6869 阅读 · 0 评论 -
JJJ:linux内核设计与实现 笔记
111原创 2022-07-21 00:16:54 · 487 阅读 · 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 · 321 阅读 · 0 评论 -
JJJ:linux网络子系统内核分析
linux网络子系统内核分析原创 2022-05-05 23:10:55 · 324 阅读 · 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 · 156 阅读 · 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 · 653 阅读 · 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 · 526 阅读 · 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 · 668 阅读 · 0 评论