标签:
Linux内核简介
1.3 操作系统和内核简介
操作系统 :是指在整个系统中负责完成最基本功能和系统管理的那些部分 它包括:内核 设备驱动 启动引导程序 命令行shell或者其他种类的用户界面 基本的文件管理工具和系统工具
内核:由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器的时间调度程序,负责管理进程地址空间的内存程序和网络,进程间通讯等系统服务程序共同组成
1.4 Linux内核与传统内核的比较
• 单内核与微内核设计之比较
• 单内核是一种较为简单的设计 所有的内核都设计成单内核 单内核就是把它从整体上作为一个单独的大过程来实现 同时也运行在一个单独的地址空间上 所有的内核服务都是在这样的一个大内核地址空间上运行 。
(内核之间的通信是微不足道的 )
1.5 Linux内核版本
Linux内核有两种 :• 稳定的
• 处于开发的
偶数:稳定版
奇数:开发版
从内核出发
1.2 获取内核源码
Linux作为一个开源的内核,其源代码也可以用git下载和管理
- 获取最新提交到版本树的一个副本
- $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
- 下载代码后,更新自己的分支到最新分支
- $ git pull
$ tar xvjf linux-x.y.z.tar.bz2
压缩形式为zip:$ tar xvzf linux-x.y.z.tar.gz
关于参数:
-x 解开.tar格式的文件
-v 显示详细信息
-j 使用bzip2程序
-z 使用gzip程序
-f 使用归档文件
从内部源码树开始,运行$ patch -p1 < ../patch-x,y,z
2.2 内核源码树
2.3 编译内核
配置选项(指定内核源码可以访问的值,一般以预处理宏的形式表示)
• 决定哪些文件编译进内核;通过预处理命令处理代码。
• .二选一:yes/no
• 三选一:yes(把代码编译进主内核映像中)/no/module(该配置项被选定了)【驱动程序一般是三选一】
• 可以是字符串或整数 - 配置工具: $ make config 配置命令解释器,最简单的一个字符界面下的命令行工具; $ make menuconfig 配置用户界面,基于ncurse库的图形界面工具; $ make gconfig 基于gtk+的图形工具; $ make defconfig 基于默认的配置为个人的体系结构创建一个配置; $ make oldconfig 验证和更新配置; - .config文件:配置项会被存放在内核代码树根目录下。
2.4 内核开发的特点
内核编程时既不能访问C库也不能访问标准的C头文件
内核编程时必须使用GNU C
内联函数: 函数会在所调用的位置上展开。 定义时,需要使用static作为关键字,用inline限定它。 内联函数必须在使用之前就定义好,一般在头文件中定义。 内核中优先使用内联函数而不是宏。
内联汇编: 通常使用asm()指令嵌入汇编代码,用volatile表示不优化
分支声明: unlikely(x) - x很少出现,绝少发生,通常为假 likely(y) - y经常出现,通常为真
内核编程时缺乏像内存空间那样的内存保护机制
难以执行浮点运算
考虑可移植的重要性
标签:
原文地址:http://www.cnblogs.com/20135331wenyi/p/5283116.html