linux kernel 杂谈
首先介绍一下背景吧,工作三个星期了.复习了一波u-boot,跟了一下事件上报,搞了下平台设备,扣了一个内存检查代码.
想想生活是不是有点无聊.对啊,真的很无聊!!!!
无聊也没有办法啊,所以找点方法去跟上生活的节奏.
第一天,就稍微讲一下linux kernel 是干吗的吧.
前面介绍的u-boot做的不好我知道,但是慢慢来吧
kernel 是干嘛的,有很多人有这个疑问,在很久以前我也有这个疑问,我在很长一段时间都认为kernel 就是一堆驱动的集合,这个说是正确也是正确,但是不全面.
在现在我认为,kernel 就是做了一个硬件管理为上层提供一个稳定的安全的便捷的操作接口的功能.
引用http://www.cnblogs.com/licheng/archive/2008/07/05/1236744.html
linux kernle 主要由系统调用接口(SCI) , 进程管理(PM) , 内存管理(MM),虚拟文件系统(VFS) , 网络协议栈(NET),CPU体系结构和设备驱动(DD) 等7个组件构成.
今天我所要讲的是linux -3.0.35 的大概情况,
拿到内核 , 首先第一件要做的事就是读README , 看到那里 , 我们知道了第一个目录:Documentation.
如果你以前不懂内核或者是以前了解过别的内核, 如果你在linux - 3.0.35这个内核版本的开发过程中遇到什么问题 , 都可以到这里面去寻找答案.
在 Documentation / DocBook 子目录中, 包含了一些开发指南在里面 , 你可以通过在次目录下make pdfdocs 制作PDF开发帮助文档
CONFIGURING the kernel :
一般情况下就是make menuconfig , 进入对话框菜单栏进去配置 , 配置你所需要的环境变量及一些必要的模块
还有常用的时针对开发板的配置(用于嵌入式系统)
make ARCH=arm smdk2410_defconfig
配置完毕之后就可以编译了
make -j100
编译完了会在相应的目录生成zImage 映像文件
比如说arm 架构的就是arch/arm/boot/zImage 文件.
在顶层文件夹中 , 有一些相关的目录需要我们了解一下:
arch : 与平台架构相关的目录
drivers : 设备驱动程序相关目录
fs : 各种支持的文件系统 , 如ext , fat 等
include : 头文件相关的目录 , 其中 , 和系统相关的头文件在 include/linux 中 , 如果你想学内核 , 入门级别便是把这个头文件搞熟练
init : 内核初始化代码 (注意不是系统引导代码)
ipc : 进程间通信代码
kernel : 内核的最核心部分 , 包括进程调度 , 定时器 , 和平台相关的一部分代码在 arch/*/kernel 当中
lib : 库文件代码
mm : 内存管理相关代码
net : 网络相关代码 , 实现了各种常见的网络协议
scripts : 编译内核所用的脚本
security : 主要是一个SElinux 的模块
sound : 常用的音频设备的驱动程序等
usr : 早期用户空间代码
基本上常见的几个目录结构都在上面 , 不过千万不要小看上面的那些目录 , 可能你当初跟u-boot 已经时非常吃力 , 可能kernel 你会更吃力
我记得以前有个人给我做了一个简单的比方吧 , 就是好比u-boot 是一个福田区 , 那么kernel 可能就是一个广东省 .
学习内核的这条路非常的长远 , 希望大家持之以恒 , 这句话同样也是对自己说的.
下面给大家讲几个基本的概念吧.
第一个就是设备驱动:
设备驱动就是为用户访问特定的硬件设备提供一套标准的内部编程接口
上层如果想访问底层硬件的话是一个这样的流程
应用程序 ----> 系统调用 -----> 驱动接口 ----> 驱动 -----> 硬件操作
上面的只是一个最简单的模型 , linux 内核里面为了方便上层用户调用系统接口 以及 为了方便底层驱动开发设计了很多模块模型
驱动的作用在于提供机制, 而不是提供策略 , 也就是说 , 驱动程序处理的是怎么使硬件使能的问题 , 怎么操作硬件那是上层用户的事情.
linux 设备可分为三大块:
字符设备:
char 设备是能够按字节流访问的设备 , 例如串口设备(dev / ttyUSB0) , 字符设备可以通过文件系统节点访问
块设备:
block 设备是按块 读取数据的设备 , 比如磁盘 , 在块设备上能容纳文件系统 , char 设备和block 设备的接口完全不同
网络设备:
网络接口通常是个硬件设备,如网卡。网络接口由内核中的网络子系统驱动,负责发送和接收数据包。
网络接口驱动程序不需要对数据包的内容进行解析,它只负责收发数据包。
由于不是面向数据流,因此很难映射到文件系统中的节点,用户程序是通过分配一个名字,
如eth0访问网络接口的。
linux kernel 杂谈的更多相关文章
- Linux kernel make 常用选项介绍
Linux kernel 编译方法大全记录 一.这是一个我自己写的自动make脚本: #!/bin/sh export ARCH=arm export CROSS_COMPILE=arm-linux- ...
- Linux Kernel代码艺术——系统调用宏定义
我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...
- Linux Kernel 代码艺术——编译时断言
本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel” 系列文章中),一来通过内核 ...
- linux kernel的中断子系统 softirq
linux kernel的中断子系统之(八):softirq http://www.wowotech.net/irq_subsystem/soft-irq.html http://www.ibm.co ...
- karottc A Simple linux-virus Analysis、Linux Kernel <= 2.6.37 - Local Privilege Escalation、CVE-2010-4258、CVE-2010-3849、CVE-2010-3850
catalog . 程序功能概述 . 感染文件 . 前置知识 . 获取ROOT权限: Linux Kernel <= - Local Privilege Escalation 1. 程序功能概述 ...
- linux kernel 字符设备详解
有关Linux kernel 字符设备分析: 参考:http://blog.jobbole.com/86531/ 一.linux kernel 将设备分为3大类,字符设备,块设备,网络设备. 字符设备 ...
- 与您共享Linux Kernel 4.8分支首个维护版本
导读 Linux Kernel 4.8正式版于10月2日由Linus Torvalds发布,带来了包括AMDGPU OverDrive支持.NVIDIA Pascal支持.AMDGPU PowerPl ...
- Linux Kernel Version Numbering
Because there are numerous revisions and releases of the Linux kernel and new ones are developed at ...
- SourceInsight 精确导入Linux kernel源码的方法
相信有很多人用 SourceInsight 查看 Linux Kernel 源码,但导入源码时会遇到一些问题.1.如果把整个源码树都导入进去,查看符号定义的时候,会发现有大量重复定义,很难找到正确的位 ...
随机推荐
- 使用Diagnose服务查看Azure网站诊断信息
注意:当前操作只针对"基本"和"标准"模式的网站(也就是有独立实例的网站) 登陆网站的kudu模式:http://{yoursitename}.scm.chin ...
- [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify uniq
angularjs 使用ng-repeat报错 <div ng-init="words = ['高校','高校','高校']" ng-repeat="word in ...
- macbook 放flash发烫,转html5
http://zythum.sinaapp.com/youkuhtml5playerbookmark/
- VIM辅导:视频教程,文档资料,经典插件
VIM辅导:25个vim视频' 教程 '资源 转自: http://blog.jobbole.com/10250/ 编注:@程序员的那些事 12月14日在新浪微博发起的<你最常用哪些文本编辑 ...
- LeetCode —— Merge k Sorted Lists
/* ** 算法的思路: ** 1.将k个链表的首元素进行建堆 ** 2.从堆中取出最小的元素,放到链表中 ** 3.如果取出元素的有后续的元素,则放入堆中,若没有则转步骤2,直到堆为空 */ #in ...
- nginx使用ssl模块配置支持HTTPS访问
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数. 需求: 做一个网站域名为 www.localhost.cn 要求通过htt ...
- Hibernate 应用
完善的持久化层应该达到以下目标: 1.代码可重用性高,能够完成所有的数据库访问操作. 2.如果有需要的话,能够支持多种数据库平台. 3.具有相对独立性,当持久化层的实现发生变化,不会影响上层的实现. ...
- 今天讲的是JQ 的动画效果
老规矩,先贴代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- C#集合类图继承关系一览表
- angular $resource模块
目录(?)[-] 安装 应用resource 扩展resource 上一篇中讲到使用$http同服务器进行通信,但是功能上比较简单,angularjs还提供了另外一个可选的服务$resource, ...