![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核
文章平均质量分 77
内核介绍
知秋贺
这个作者很懒,什么都没留下…
展开
-
Linux 各种 initcall 的调用原理
很早以前就想写一下关于 initcall 的相关知识点,但是一直苦于没有特别强烈的需求以及自己的懒惰才拖到现在,其实一直在想要不要写一篇这样的文章,毕竟目前网上能够查阅到几乎所有的资料,不过也没有什么关系,就当是为了记忆把之前的一些理解写下来。module_init 与其他的 __initcall很早以前,不理解模块是如何插入到内核中的,特地的分析了一次 module_init 是如何工作的,在头文件 include/linux/module.h 中定义了:#define module_ini转载 2022-04-01 18:29:55 · 1923 阅读 · 0 评论 -
udev使用笔记
一、什么是udev?udev是linux kernel的设备管理器,在最新的内核版本中kernel_3.10中udev已经代替了以前devfs、hotplug等功能,意味着它要处理添加/删除硬件时,所有的用户空间行为。实际上为什么我关注这个udev,因为看sysfs的源码时,sysfs完成创建删除一个设备之后,会通过netlink的方式发送uevent通知udevd,udevd守护进程接手sysfs传过来uevent,将完成剩下的工作。(目前我是这么理解的)二、udev由什么组成udev由三个转载 2021-08-19 12:00:23 · 693 阅读 · 0 评论 -
嵌入式Linux内核配置、裁剪与编译浅析(ARM版)
第一部分Linux内核裁减(1)安装新内核:i)将新内核copy到/usr/src下并解压:#tar -zxvf linux-2.6.38.4.tar.gzii) 将名为linux的符号链接删掉,这是旧版本内核的符号链接.#ln -s linux-2.6.38.4 linux(2)设置内核.# cd /usr/src/linux# make mrproper -----删除不必要的文件和目录.#make menuconfig 生成一个.config文件 ...转载 2021-07-23 09:50:06 · 2382 阅读 · 0 评论 -
linux开机启动流程
linux的基础启动流程1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。2. 读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。4. 核心执行init程序并获得运行信息。5. init执行/etc/rc.d/rc.sysinit文件。6. 启动核心的外转载 2012-08-17 10:31:13 · 580 阅读 · 0 评论 -
用例程解释create_singlethread_workqueue与create_workqueue的区别
用例程解释create_singlethread_workqueue与create_workqueue的区别系统版本:linux3.4使用create_singlethread_workqueue创建工作队列即使对于多CPU系统,内核也只负责在一个cpu上创建一个worker_thread内核线程;而使用create_workqueue创建工作队列对于多CPU系统,内核将会在每个CPU上创建一个worker_thread内核线程,使得线程处理的事务能够并行化.用代码解释前先说明一个知识点: pri转载 2020-11-30 16:16:21 · 256 阅读 · 0 评论 -
Linux kernel scatterlist API介绍
1. 前言我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意思,因而scatterlist可翻译为“散列表”。“散列表”又是什么?太抽象了!之所以抽象,是因为这个词省略了主语----物理内存(Physical memory),加上后,就好理解了多了,既:物理内存的散列表。再通俗一些,就是把一些分转载 2020-11-04 22:39:39 · 202 阅读 · 0 评论 -
linux等待队列wait_queue_head_t和wait_queue_t
等待队列在linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head类型的域作为”连接件”。它通过一个双链表和把等待task的头,和等待的进程列转载 2020-11-04 22:26:41 · 713 阅读 · 0 评论 -
内核函数 kmem_cache_xxxx
struct kmem_cache *kmem_cache_create (const char *name, size_t size, size_t align, ...转载 2020-11-04 21:37:44 · 472 阅读 · 0 评论 -
Linux内核地址空间的内存分布及分配
虚拟地址空间0~3G用于应用层虚拟地址空间3~4G用于内核层内核又将3~4G的虚拟地址空间,划分为如下几个部分:896MB又可以细分为ZONE_DMA和ZONE_NORMAL区域。低端内存(ZONE_DMA):3G-3G+16M 用于DMA __pa线性映射普通内存(ZONE_NORMAL):3G+16M-3G+896M __pa线性映射 (若物理内存<896M,则分界点就在3G+实际内存)高端内存(ZONE_HIGHMEM):3G+896-4G 采用动态的分配方式ZONE_DMA转载 2020-11-04 21:23:30 · 1868 阅读 · 0 评论 -
Linux内存分配小结--malloc、brk、mmap
http://blog.sina.com.cn/s/blog_7c60861501015vkk.htmlLinux 的虚拟内存管理有几个关键概念:1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址;3、如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。...转载 2020-10-20 17:49:07 · 173 阅读 · 0 评论 -
什么是Netlink通信机制
Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在Linux 内核中 使用netlink 进行应用与内核通信的应用很多; 包括:路由 daemon(NETLINK_ROUTE),用户态 socket 协议(NETLINK_USERSOCK), 防火墙(NETLIN...转载 2020-11-30 11:09:12 · 847 阅读 · 0 评论 -
Linux内核数据结构之kfifo详解
https://www.cnblogs.com/blogs-of-lxl/p/10570885.html转载 2020-12-21 13:29:51 · 342 阅读 · 0 评论 -
linux内核打印数据到串口控制台,printk数据不打印问题
1、查看当前控制台的打印级别cat /proc/sys/kernel/printk4 4 1 7其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息2、修改打印echo "新的打印级别 4 1 7" >/proc/sys/kernel/printk3、不够打印级别的信息会被写到日志中可通过dmesg 命令来查看4、printk的打印级别#define KERN_EMERG...转载 2020-12-03 18:09:23 · 2013 阅读 · 0 评论 -
Linux进程分配内存的两种方式--brk() 和mmap()
如何查看进程发生缺页中断的次数?用ps -o majflt,minflt -C program命令查看。majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。 这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:1、检查要访问的虚拟地址是否合法2、查找/分配一个物理页...转载 2020-12-02 15:54:15 · 415 阅读 · 0 评论 -
linux 工作队列详细介绍
1.INIT_WORK(struct work_struct *work, void (*function)(void *), void *data) 上面一句只是定义了work和work对应的操作。 要是在实际使用的时候还是需要你去在适当的条件下激活这个work。只有激活了这个work, 这个work才有运行的机会。这个激活操作接口是shudule_work或是queue_work。 这两个接口之后只是说这个work有了运行的机会,但是具体到什么时候运行,那要看你用哪个接口激活的。 如果是sh...转载 2020-11-25 16:42:17 · 988 阅读 · 0 评论 -
linux内存详细介绍
1 内存寻址1.1 物理地址、虚拟地址以及线性地址物理地址: 物理内存的内存单元地址 虚拟地址: 程序员看到的内存空间定义未虚拟地址,intel X86 CPU寻址使用了段机制,最初的8086中有4个16位的段寄存器:CS、DS、SS、ES,分别用于存放可执行代码的代码段、数据段、堆栈段和其他段的基地址,解决了CPU数据总线16位寻址20位数据地址空间的问题。 虚拟地址一般用“段:偏移量”的形式来描述,比如在8086中A815:CF2D就代表段首地址为A815,段内偏移位为CF2D的虚地址。 线转载 2020-11-25 16:19:37 · 2131 阅读 · 0 评论 -
等待队列的简单使用
一、什么是等待队列 1、概念 等待队列是一种实现阻塞和唤醒的内核机制,很早就作为一个基本的功能单位出现在Linux内核中,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。 2、数据结构 a、等待队列头 struct __wait_queue_head { spinlock_t lock; struct list_head task_l...转载 2020-11-17 14:49:44 · 734 阅读 · 0 评论