内核编程
文章平均质量分 80
ljl1704
这个作者很懒,什么都没留下…
展开
-
数据包零拷贝
下文是对工作中的零拷贝机制进行主要代码注释描述,以便之后能够快速记忆和理清其工作原理。1、物理内存的分配,代码与内核一起编译,内核启动执行do_early_param进行分配__initcall (capmem_init) //相当于module_init,内核启动流程do_initcalls()会遍历.initcall*.init段,依次执行各个级别的函数cap...原创 2022-01-13 21:50:14 · 195 阅读 · 0 评论 -
dm9000网卡驱动分析
dm9000_probe:ndev = alloc_etherdev(sizeof(struct board_info)); //net_device分配与初始化db = netdev_priv(ndev); //网卡硬件信息初始化db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);//地址资源获取db->data_res = platform_get_resource(pdev, IORE...原创 2022-01-05 16:15:09 · 772 阅读 · 0 评论 -
Linux设备模型
kobject ktype kset是设备模型的基础kobject嵌入在其他结构体当中,该结构便拥有了kobject的功能。提供如引用计数、名称、父指针等字段,用于创建对象的层次结构。ktype是为了描述一族kobject所具有的普遍特性。因此,不再需要每个kobject都分别定义自己的特性,而是将这些普遍的特性在ktype结构中一次定义,然后所有同类的kobject都能共享一样的特性。kset是kobject对象的集合体。可以当作一个容器,具有相同ktype的kobject可以分组到不.原创 2022-01-05 11:10:50 · 350 阅读 · 0 评论 -
Linux虚拟文件系统vfs与文件操作始末
虚拟文件系统(vfs)是Linux内核的子系统,其设计目的是对用户层(系统调用)屏蔽底层(各特定文件系统)实现的复杂性,对底层提供统一的接口与数据结构,使得能衔接各个特定文件系统(如ext2、ext3、fat32等),是用户层与文件系统层之间的抽象层。 与vfs层相关的主要数据结构有以下几个:超级块对象super_block、索引节点对象inode、目录项dentry、文件对象file、文件系统类型file_system_type、挂载的文件系统vfsmount等。 下面简单介...原创 2021-12-13 15:05:59 · 832 阅读 · 0 评论 -
Linux 3.x 内核学习笔记——x86 64位内存管理
地址映射64位地址采用4层地址映射,如下图:pgd、pud、pmd、pte各占了9位,加上12位的页内index,共用了48位。即可管理的地址空间为2^48=256T。而在32位地址模式时,该值仅为2^32=4G。另外64位地址时支持的物理内存最大为64T,见e820.c中MAX_ARCH_PFN的定义:# define MAX_ARCH_PFN MAXMEM>>P转载 2017-01-05 10:09:53 · 502 阅读 · 0 评论 -
Linux 3.x 内核学习笔记——x86 64位内存管理
地址映射64位地址采用4层地址映射,如下图:pgd、pud、pmd、pte各占了9位,加上12位的页内index,共用了48位。即可管理的地址空间为2^48=256T。而在32位地址模式时,该值仅为2^32=4G。另外64位地址时支持的物理内存最大为64T,见e820.c中MAX_ARCH_PFN的定义:# define MAX_ARCH_PFN MAXMEM>>PAGE_转载 2015-03-11 14:43:44 · 791 阅读 · 0 评论 -
init进程
init 进程 getty rc bash转载 2015-01-27 16:31:07 · 1532 阅读 · 0 评论 -
Bios读文件与Grub(bootload)和initrd和内核对文件系统驱动的支持
前言本文源于这样一个问题:内核镜像存储在硬盘下特定文件系统中,bootloader必须先加载文件系统驱动,才能读取内核文件。类似的,内核要读取根文件系统中的文件,也需要先加载文件系统驱动。如果文件系统驱动存储在硬盘中,启动时没有驱动无法读硬盘,将导致整个启动过程的失败。那么Grub和内核如何解决这个问题的呢?启动过程中需要读硬盘的时刻:1. BIOS读硬盘中MBR,将控制权交给MB转载 2014-10-27 15:33:21 · 787 阅读 · 0 评论 -
目录项缓存与散列表
所谓缓存,是指把存在于磁盘中的操作系统运行时频繁使用到的信息读取到内存中去,以提高 CPU 读取这些信息的速度。所以目录项的缓存就是指把存在于磁盘上的目录项信息读取到内存中去,而这些目录信息就是一个个的 dentry 结构。当某个进程运行时用到某个目录项,但在内存中却没有相应的 dentry 结构,就需要在内存中建立 ( 所谓的建立实际是从磁盘上把相应的 dentry 结构读取到内存中去 ) 一个转载 2013-12-19 16:58:37 · 589 阅读 · 0 评论 -
内核数据结构hlist_head
内核中,使用list_head作为链表,该数据结构本身即使head又是node。如果将它作为hash list的头节点,那么每个头节点会占用8个字节。因此内核中对其优化,使用hlist_head作为hash表的头节点。内核中定义其数据结构为:struct hlist_head { struct hlist_node *first; };struct hlist_node { s转载 2013-12-19 10:13:02 · 566 阅读 · 0 评论 -
路径名解析过程使用到的各种hash函数
d_hash(dentry,hash) 为散列函数 , 它将 dentry 地址和 hash 值相组合 , 映射到 dentry_hashtable 表中 , 返回相应的散列链 ;在底层文件系统的i_op中也有一个同名的d_hash函数,这个函数仅用来计算目录项对应的散列值;d_rehash(dentry) 将 dentry 加入散列表 ;d_drop(dentry) 将 dentry转载 2013-12-18 10:45:40 · 608 阅读 · 0 评论 -
Linux 内核sys_open文件系统与设备操作流程分析
Author: sinisterEmail: sinister@whitecell.orgHomepage:http://www.whitecell.orgDate: 2007-01-23本笔记对 linux kernel 的文件系统操作以及设备操作进行了分析,主要是针对 ext3 文件系统的 open 流程的分析,目的是为了解答心中的几个疑问:1、一个文转载 2013-12-07 11:15:07 · 2592 阅读 · 1 评论