- ZONE_DMA
- 可以执行DMA操作
- ZONE_NORMAL
- 即线性映射部分
- ZONE_HIGHMEM
- 非永久性映射区
- superblock
- 用于表示一个挂载的文件系统,相当于文件系统总信息
- inode
- 表示一个真正的文件
- dentry
- 表示一个目录项,请不要和文件系统中的目录混淆,它只不过是路径中的一个节点而已
- file
- 表示进程打开的文件,很显然多个进程可以打开同一个文件,所以可以有很多个file指向同一个inode
Linux Mdev 2015年07月08日 linux linux uevent mdev
mdev官方的叫法是mini udev in busybox,mdev实际只是busybox的一个符号链接。执行mdev -s时会扫描/sys/class和/sys/block中的所有目录,如果目录中有名为dev的文件,就从中读取设备号,并利用设备号在/dev下面创建节点。
启动时需要设置热插拔处理程序为mdev,当有热插拔事件产生时,内核调用mdev。 mdev通过环境变量ACTION和DEVPATH确定热插拔事件和影响目录,接着查看目录下是否有dev文件,并利用其信息创建/dev节点。如果ACTION为add,就会创建设备节点,如果为remove则删除设备节点。
Linux DKMS 2015年07月06日 linux linux dkms
DKMS全称是Dynamic Kernel Module Support,它可以帮我们维护内核外的驱动程序,在内核版本变动之后可以自动重新生成新的模块。在使用dkms之前首先需要确保系统中已经安装了DKMS,在Ubuntu下可以执行下面这个命令安装。
sudo apt-get install dkms
Redhat安装指南 2015年07月05日 linux linux redhat
RHEL的全称为Red Hat Enterprise Linux,面向商业市场,红帽公司对每个版本提供10年的技术支持,大约三年才发布一个新版本。相比于其它Linux发行版,RHEL是收费才能使用的。 RHEL有三个发行版本, Client面向娱乐办公,Workstation面向开发程序,Server面向服务器。不论是哪个版本,在安装的时候都可以选择GUI软件包装上图形界面。
Linux MMC Subsystem 2015年07月03日 kernel linux kernel mmc
本文参考linux-4.2内核源代码进行讲述,侧重介绍软件结构,简要介绍协议。在介绍MMC子系统之前,先看一下MMC子系统在内核中的位置。 Linux内核系统的分层结构如下图所示。
C语言笔记 2015年06月10日 language clang
有些表达式的优先级和直觉相反,有些表达式看起来有二义从而难以确定应该怎么理解,出现二义时需要引入结合性来分析,下面列举几个建议添加括号说明的例子。
if (flags & NEED_READ != 0) // A read_data(); r = hi << 4 + low; // B while (c = getc(in) != EOF) // C putc(c, out); p = n * sizeof * q; // D apple = sizeof(int) * p; // E
Linux内核内存管理 2015年06月06日 kernel linux kernel memory
虚拟地址空间由CPU决定字长决定,按3:1将低地址部分分给用户空间,少的部分留给内核。
内核将内核地址空间分为如下三个区:
内核部分的地址和物理内存可以直接关联,也就是线性映射。如果内核分到的物理地址比地址空间大,那么多余的部分就不能通过线性映射访问,这就是所谓的高端内存。而64位CPU由于其寻址空间非常大,就没有高端内存了。高端内存只对内核空间有影响,用户空间进程总是通过页表访问内存。
Linux内核进程管理 2015年06月05日 kernel linux kernel process
在Linux内核中用task_struct
描述一个进程,也被称之为进程描述符。该结构体很大,在32位机上有17KB,之所以这么大,是因为要保存一个进程所需要知道的全部信息,如打开的文件,进程地址空间,信号,进程状态等等。进程描述符可以通过thread_info
查找,对于向下生长的栈,这个结构保存在栈底,内核提供了一个接口current_thread_info()->task
用于获取进程描述符。每个进程有一个进程编号,系统支持的最大进程编号可以通过文件
/proc/sys/kernel/pid_max
查看。
Linux内核文件系统 2015年06月04日 kernel linux kernel filesystem
在Linux中,一切对象皆文件,为了用户层面能够以比较一致的接口访问文件,提供了VFS,VFS简单来说就是一个转换功能,将上层命令,根据具体对象转发到对应的驱动去。
虚拟文件系统是典型的面向对象方法设计出来的一个东西,包括四个重要类型:
Linux内核并发与同步 2015年06月03日 kernel linux kernel sync
硬件事件在不知道何时发生的情况下发生,因此要知道有没有事件发生,一种方式是CPU不断的去询问硬件,一种方式是发生之后硬件通知CPU。大多数情况下,由硬件去通知CPU是很好的处理方法,但是硬件在某些情况下密集发生事件时,采用询问更快,因为只要保证每次询问都能拿到消息,就可以省掉中断时间了。
设备通过中断线关联到特定中断,中断线IRQ就是一个整数值。中断产生时由中断控制器将信号发送给CPU,CPU调用中断处理函数。中断处理函数是一个普通C函数,但是要求不能睡眠,并且要快速处理返回。因为中断会打断别的进程,所以必须要快,但是有时候又有很多事情要做,所以内核中引入了两半处理法,中断上半部做必要的标记,把真正麻烦的工作交给下半部,这样中断处理函数就可以快速返回了。
Linux内核数据结构 2015年06月02日 kernel linux kernel data-structure
在Linux内核中经常用到的数据结构有链表、队列、映射和二叉树。这里介绍的链表包括双向链表和哈希链表,队列是内核提供kfifo。映射是idr,所谓idr就是根据整数查询指针。