当前位置: 首页 > news >正文

linux内核代码基础篇(一)一目录架构说明

linux内核代码,各目录的功能说明如下:


arch :这个目录包含了所有和体系结构相关的核心代码。大部分是 CPU的架构类别,如arm, x86, x86_64, Xen,MIPS,PPC等;

  每一个子目录都代表一种linux支持的体系结构。


block :一些linux存储体系中关于块设备管理的代码,以块(多个字节组成的整体,类试于扇区)为单位来整体访问(I/O调度),譬如说SD卡、iNand、Nand、硬盘等都是块设备


crypto :这个目录下放了一些各种常见的加密算法,C语言代码实现,核心所支持的加密技术,例如 md5、crc32、sha1等


Documentation :核心有关的一堆说明文档,若对核心有极大的兴趣,可以看看,不过都是英文的


drivers :驱动目录,一些硬件的驱劢程序,例如显示适配器、网络卡、PCI 相关硬件等;分门别类的列出了linux内核支持的所有硬件设备的驱动源代码,建议重点学习

  进一步划分为几类设备驱动,每一种对应有子目录,如block下为块设备驱动程序;net,核心与网络相关的代码等


firmware :固件,即软件,不过这个软件是要固化到IC里面运行的。一些旧式硬件的微脚本 (韧体) 数据,像IC的iROM代码


fs :核心所支持的 filesystems,文件系统,里面列出了linux支持的各种文件系统的实现 ,例如 vfat, reiserfs, nfs 等


include :头文件目录,公共的(各种CPU架构共用的)头文件都在这里。每种CPU架构特有的一些头文件在/arch/arm/include目录及其子目录下;

  例如与平台相关的头文件在/include/linux子目录下,而/include/scsi目录则是有关scsi设备的头文件目录


init :初始化,这个目录下的代码就是linux内核启动时初始化内核的代码(不是系统的引导代码),有main.c文件,这是研究核心如何工作的好起点


ipc :即inter process communication,进程间通信,里面都是linux支持的IPC的实现代码


kernel :kernel就是内核,linux内核,目录下的文件实现了大多数的linux系统的内核函数,如内核状态、线程、程序的线程 (schedule)、程序的信号 (signle) 等

  其中最重要的文件当属sched.c; 同时,与处理器结构相关代码都放在/arch/*/kernel目录下


lib :库,里面都是一些共用的有用的库函数,注意这里的库函数和C语言的库函数不一样的(下面有说明);与处理器结构相关的库代码被放在/arch/*/lib目录下

-->在内核编译中,是不能用C语言的标准库函数的,故这里的lib目录下的库函数即用来替代那些标准库函数。内核打印printk就在这个lib目录下。


mm :即memory management,内存单元有关的各项数据,包括 swap虚拟内存等;目录包含了所有独立于cpu体系结构的内存管理代码,如页式存储管理内存的分配和释放等

  与具体硬件体系结构相关的内存管理代码位于/arch/*/mm目录下,例如/arch/arm/mm。


net :该目录下是网络有关的代码,实现了网络有关的各项协议,其每个子目录对应于网络的一个方面,如防火墙模块 (net/ipv4/netfilter/*)、TCP/IP协议栈等

 

scripts:脚本,这个目录下都是脚本文件,不过这些脚本文件不是linux内核工作时使用,而是用来辅助对linux内核进行配置编译生产的


security :包括 selinux模块 等在内的安全相关的代码


sound :音效处理相关的各项模块,如ALSA、OSS音频设备的驱动核心代码和常用的设备驱动

 

tools:linux中用到的一些有用的工具

 

usr:目录下是inittramfs相关的,和linux内核的启动有关,实现了用于打包和压缩的cpio等。


virt :虚拟化机器有关的信息,目前核心支持的是 KVM (Kernel base Virtual Machine)

 

文件:

Kbuild:是kerne build的意思,即内核编译。这个文件就是linux内核特有的内核编译体系需要用到的文件。

Makefile:这个是linux内核的总makefile,整个内核工程用这个Makefile来管理的

转载于:https://www.cnblogs.com/DreamsofStars/p/11053770.html

相关文章:

  • 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
  • WPF — Grid布局中行的高度和列的高度值定义的三种形式
  • 判断两个字符串是否互为变形词
  • Blob
  • JVM学习笔记:对象的内存布局和访问定位
  • 图像质量评估-锐度
  • NKOJ4241 蚯蚓 (【NOIP2016 DAY2】)
  • spring IOC bean中注入bean
  • 【OpenJ_Bailian - 4110】圣诞老人的礼物-Santa Clau’s Gifts (贪心)
  • centos7通过yum安装docker
  • 【Beta】Scrum meeting 2
  • 在Windows下搭建Gitlab服务器
  • mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复
  • Docker是什么?可以用Docker做什么?
  • 《坐热板凳》第九次团队作业:Beta冲刺与验收准备(补交:实验十二 第八次团队作业:软件测试与ALPHA冲刺)...
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • gf框架之分页模块(五) - 自定义分页
  • Hexo+码云+git快速搭建免费的静态Blog
  • interface和setter,getter
  • Java读取Properties文件的六种方法
  • laravel with 查询列表限制条数
  • PHP那些事儿
  • swift基础之_对象 实例方法 对象方法。
  • tab.js分享及浏览器兼容性问题汇总
  • VUE es6技巧写法(持续更新中~~~)
  • 搭建gitbook 和 访问权限认证
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 从如何停掉 Promise 链说起
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​Python 3 新特性:类型注解
  • #### go map 底层结构 ####
  • #if 1...#endif
  • (bean配置类的注解开发)学习Spring的第十三天
  • (分布式缓存)Redis哨兵
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (力扣)循环队列的实现与详解(C语言)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)大道至简,职场上做人做事做管理
  • .apk文件,IIS不支持下载解决
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET运行机制
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @RestControllerAdvice异常统一处理类失效原因