首先介绍一下背景吧,工作三个星期了.复习了一波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 杂谈的更多相关文章

  1. Linux kernel make 常用选项介绍

    Linux kernel 编译方法大全记录 一.这是一个我自己写的自动make脚本: #!/bin/sh export ARCH=arm export CROSS_COMPILE=arm-linux- ...

  2. Linux Kernel代码艺术——系统调用宏定义

    我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...

  3. Linux Kernel 代码艺术——编译时断言

    本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel” 系列文章中),一来通过内核 ...

  4. linux kernel的中断子系统 softirq

    linux kernel的中断子系统之(八):softirq http://www.wowotech.net/irq_subsystem/soft-irq.html http://www.ibm.co ...

  5. 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. 程序功能概述 ...

  6. linux kernel 字符设备详解

    有关Linux kernel 字符设备分析: 参考:http://blog.jobbole.com/86531/ 一.linux kernel 将设备分为3大类,字符设备,块设备,网络设备. 字符设备 ...

  7. 与您共享Linux Kernel 4.8分支首个维护版本

    导读 Linux Kernel 4.8正式版于10月2日由Linus Torvalds发布,带来了包括AMDGPU OverDrive支持.NVIDIA Pascal支持.AMDGPU PowerPl ...

  8. Linux Kernel Version Numbering

    Because there are numerous revisions and releases of the Linux kernel and new ones are developed at ...

  9. SourceInsight 精确导入Linux kernel源码的方法

    相信有很多人用 SourceInsight 查看 Linux Kernel 源码,但导入源码时会遇到一些问题.1.如果把整个源码树都导入进去,查看符号定义的时候,会发现有大量重复定义,很难找到正确的位 ...

随机推荐

  1. java 类的静态变量

    主要是记录一个奇葩的现象,java类中的静态变量,不仅可以通过类名称直接调用,而且还可以通过类的实力对象调用,java是不存在静态类的,如果非要用静态的类那就是内部类. 类中的静态变量是存储在JVM方 ...

  2. 20145212 《Java程序设计》第1周学习总结

    20145212 <Java程序设计>第1周学习总结 教材学习内容总结 看了毕向东老师的视频,我对Java有了进一步的了解.相比于其他的计算机编程语言(比如C语言),Java有一大特点就是 ...

  3. JavaWeb学习笔记——访问静态HTML网页

    基础知识: 1.一个标准 的WEB应用,在根目录下必须有一个WEB-INF文件夹,文件夹下必须有一个WEB.xml文件. 2.classes文件夹用来存放编译的class文件. 3.lib文件夹用来存 ...

  4. Python基本运算符

    Python基本运算符 什么是操作符? 简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符. Python语言支持操作者有以下几种类型. 算术运算符 比较(即关系)运算符 ...

  5. IOS下自定义click事件使用alert引发的血案

    使用过iscroll插件的同学都知道iscroll支持自定义事件,即在调用iscroll时参数赋值options.click = true. 接下来定义事件如: $clinicAppoint.on(' ...

  6. js变量在属性里的写法 常用mark 多个DL遍历添加一个父级DIV

    标记用 js变量比如url链接一般都是a里面的href属性值 在js里单引号链接 以后再忘记就能有地方找了 例子: /* 添加1200 居中div 包裹 获取元素集合 上层元素100% * @ele ...

  7. Python之路【第九篇】堡垒机基础&数据库操作

    复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...

  8. 修改hosts

  9. svn三大目录trunk、branch和tag

    SVN中Branch和tag的比较在SVN中Branch和tag在一个功能选项中,在使用中也往往产生混淆.在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般 ...

  10. 【9-6】Centos学习笔记

    linux文件系统结构 常用技巧 快捷键启动终端 su命令,使用超级用户登陆 visudo :编辑用户权限 tar xf 文件名:解压文件 Vim编辑器 Tips yum包管理:Yum(全称为 Yel ...