首先介绍一下背景吧,工作三个星期了.复习了一波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. ecshop怎么添加配送方式

    步骤1.打开includes\modules\shipping文件夹,把sto_express.php复制多一份,重名为tt_express.php: 步骤2.打开tt_express.php,ctr ...

  2. linux下解压命令大全

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...

  3. Database Schema Reader

    数据架构与INSERT脚本生成 https://dbschemareader.codeplex.com/wikipage?title=Writing%20Data&referringTitle ...

  4. js 字符串分割成字符串数组 遍历数组插入指定DOM里 原生JS效果

    使用的TP3.2 JS字符串分割成字符串数组 var images='{$content.pictureurl} ' ;结构是这样 attachment/picture/uploadify/20141 ...

  5. Ajax– 刷新页面 【转】

    jquery刷新页面(局部及全页面刷新) 2009-12-31 11:39:32|  分类: javascript|举报|字号 订阅 局部刷新: 这个方法就多了去了,常见的有以下几种: $.get方法 ...

  6. 抓取网站数据不再是难事了,Fizzler(So Easy)全能搞定

    首先从标题说起,为啥说抓取网站数据不再难(其实抓取网站数据有一定难度),SO EASY!!!使用Fizzler全搞定,我相信大多数人或公司应该都有抓取别人网站数据的经历,比如说我们博客园每次发表完文章 ...

  7. Quartz-2D

    Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quartz 2D API来实现许多功能,如基本路径的绘制.透明度.描影.绘制阴影.透明层.颜色管理.反锯齿 ...

  8. mysql max_allowed_packet查询和修改

    http://www.2cto.com/database/201303/195830.html mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会被max_allowe ...

  9. [CentOs7]安装mysql(2)

    摘要 之前安装过一次mysql,最后配置,发现在本地无法连接,重启服务的时候一直卡在那里不动,感觉是安装的过程出问题,最后没办法还是卸载了,然后重新安装一下. [CentOs7]安装mysql Mys ...

  10. [Asp.net mvc]jquery.form.js无刷新上传

    写在前面 最近在自己的网盘项目中想用ajax.beginform的方式做无刷新的操作,提交表单什么的都可以,但针对文件上传,就是个鸡肋.在网上查找了发现很多人都遇到了这个问题,大部分都推荐使用jque ...