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.如果把整个源码树都导入进去,查看符号定义的时候,会发现有大量重复定义,很难找到正确的位 ...
随机推荐
- Ztree的简单使用和后台交互的写法(一)
一.引入ztree的头文件 <!-- 引入ztree/--> <script type="text/javascript" src="${pageCon ...
- JavaWeb学习笔记——开发动态WEB资源(一)Java程序向浏览器输出数据
开发一个动态web资源,即开发一个Java程序向浏览器输出数据,需要完成以下2个步骤: 1.编写一个Java类,实现Servlet接口 开发一个动态web资源必须实现javax.servlet.Ser ...
- Unity 下载
Unity历史版本 http://wiki.ceeger.com/unity:history#unity_522f1 UNITY 下载存档 http://unity3d.com/cn/get-unit ...
- asp.net mvc 在View中获取Url参数的值
如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3 这时想在 ...
- 使用 Elmah一些要注意的问题
http://www.cnblogs.com/apsnet/archive/2012/04/28/2474730.html 1. Elmah使用后,在发布时,要区分IIS6和IIS7 ,IIS6下 H ...
- 关于Hash集合以及Java中的内存泄漏
<学习笔记>关于Hash集合以及Java中的内存泄漏 标签: 学习笔记内存泄露hash 2015-10-11 21:26 58人阅读 评论(0) 收藏 举报 分类: 学习笔记(5) 版 ...
- centos 7.0 phpize 扩展php
phpize扩展php模块 phpize 所在目录 /usr/etc/php/bin/phpize 查看当前php配置情况 /usr/etc/php/bin/下面的php [root@localhos ...
- 把字符转换为 HTML 实体
把字符转换为HTML实体:htmlentities() 把HTML实体转换回字符:html_entity_decode() 把预定义的字符 "<" (小于)和 "& ...
- 该不该用inline-block取代float? inline和float的区别?
该不该用inline-block取代float? 请看这篇文章引用: jtyjty99999的博客 让块级元素 水平排列的通常方式是float, 但是float可能会带来很多意外的问题 可以考虑用in ...
- hdu4915 Parenthese sequence 贪心O(n)解法(new)
hdu4915 Parenthese sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...