linux学习笔记-读《Linux设备驱动开发详解》~第三章 Linux内核及内核编程

原创 2011年07月26日 23:06:10

Linux内核源代码目录结构:

  • arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、ARM、PowerPC、MIPS等;
  • block:块设备驱动程序I/O调度;
  • crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法;
  • Documentation:内核各部分的通用解释和注释;
  • drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等;
  • fs:支持的各种文件系统,如EXT、FAT、NTFS、JFFS2等;
  • include:头文件,与系统相关的头文件被放置在include/linux子目录下;
  • init:内核初始化代码;
  • ipc:进程间通信的代码;
  • kernel:内核的最核心部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下;
  • lib:库文件代码;
  • mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下;
  • net:网络相关代码,实现了各种常见的网络协议;
  • scripts:包含用于配置内核的脚本文件;
  • security:主要包含SELinux模块;
  • sound:ALSA、OSS音频设备的驱动核心代码和常用设备驱动。
  • usr:实现了用于打包和压缩的cpio等。

Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)等5个子系统组成,见下图:

 

设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为:

int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);

一般而言,Linux的每个进程享有4GB的内存空间,0~3GB属于用户空间,3~4GB 属于内核空间,内核空间对常规内存、I/O设备内存以及高端内存存在不同的处理方式。

Linux虚拟文件系统(VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象,它使用超级块super block存放文件系统相关信息,使用索引节点inode存放文件的物理信息,使用目录项dentry存放文件的逻辑信息。

X86处理器包含4个不同的特权级,称为Ring0~Ring3。Ring0下,可以执行特权级指令,对任何I/O设备都有访问权等,而Ring3则有很多操作限制。

Linux系统充分利用CPU的这一硬件特性,但它只使用了两级。在Linux系统中,内核可进行任何操作,而应用程序则被禁止对硬件的直接访问和对内存的未授权访问。例如,使用X86处理器,则用户代码运行在特权级3,而系统内核代码则运行在特权级0。

内核空间和用户空间使用不同的地址空间。Linux系统只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。

 

 

《Linux4.0设备驱动开发详解》笔记--第三章:Linux下的C编程特点

3.1 Linux编码风格 参考文章:Documentation/CodingStyle 缩进用TAB {}使用: 对于结构体、if、for、while以及switch语句,“{”不另起一行 如果i...

Swift项目中调用Objective-C的库

这是来自stack overflow上的一个回答,更多回答请查看: http://stackoverflow.com/questions/24002369/how-to-call-objective...

《Linux4.0设备驱动开发详解》笔记--第二章:Linux内核及内核编程

2.1 Linux内核发展及演变 1991年10月5日 Linus Torvalds创建 五个支柱:Unix系统、Minix系统、GNU计划、POSIX标准和Internet 每2-3个月更新一次大的...

《Linux4.0设备驱动开发详解》笔记--第四章:Linux内核模块

4.1 内核模块程序结构 加载:insmod,modprobe(同时加载模块的依赖模块) 卸载:rmmod 查看已加载的模块及模块间的依赖关系:lsmod,实际上是分析/proc/modules文件 ...

《Linux设备驱动开发详解》--Linux内核模块

#1、Linux内核模块介绍 模块本身不被编译入内核映像,从而控制了内核大小 模块一旦被加载,他就和内核中的其他部分完全一样 ```python #include #include ...
  • XScxy
  • XScxy
  • 2016年09月28日 10:33
  • 198

linux设备驱动开发详解(基于4.0内核)_读书笔记二

Linux设备驱动中的并发控制 有两种可能的原因会造成程序出错,一种可能性是编译乱序,另一种可能性是执行乱序。 处理器为了解决多核间一个核的内存行为对另一个核可见的问题,引入了一些内存屏蔽的指令。...

linux设备驱动开发详解(基于4.0内核)_读书笔记一

ssize_t xxx_read(struct file *filp, char __user *buf, size_tcount, loff_t *f_ops); filp是文件结构体指针,buf是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux学习笔记-读《Linux设备驱动开发详解》~第三章 Linux内核及内核编程
举报原因:
原因补充:

(最多只允许输入30个字)