Linux内核开发基础
1.Linux内核简介

1.1.Linux系统如何构成
内核空间(Kernel Space)+用户空间(User Space)
用户空间 = 用户程序 + C语言库(例如:GNC C Library)
内核空间 = Kernel + 系统调用接口(System Call Interface) + 体系结构相关代码

Linux系统被划分用户空间 内核空间 原因?
现在CPU实现不同的工作模式,以ARM为例
A.用户模式(usr)
B.系统模式(sys)
C.外部中断模式(irq)
D.管理模式(svc)
E.快速中断模式(fiq)
F.数据访问中止(abt)
G.未定义指令异常(und)
Linux系统利用CPU使用了耳机指令分别运行Linux内核与应用程序,使操作系统本身得到充分保护。
内核空间与用户空间是程序执行的两种不同状态。
用户空间->内核空间
通过系统调用和硬件中断完成用户空间到内核空间的转移
1.2 内核构成
7个组成部分

SCI:system Call interface 系统调用接口
PM:Process Management 进程管理,进程创建、进程调度、进程通信、
MM:Memory Management 内存管理,虚拟地址和物理地址转换、内存回收、(区地址)
Arch:体系结构相关代码(ARM体系)这个地方需要自己修改相关内容
DD:Device Drivers 设备驱动程序
Network Stack:网络协议栈 (Linux支持网络协议多)
VFS:Virtual File System 虚拟文件系统

2.Linux内核源代码
2.1目录结构
Linux内核源代码采用树形结构进行组织
把相关功能放在同一个文件夹下
源代码下载网址:
Linux最新内核源代码:http://www.kernel.org/
Linux早期内核源代码:http://www.oldlinux.org/index_cn.html

arch目录(常用目录之一)
architecture缩写 内核所支持的每种CPU体系,在该目录下有对应的子目录,每一个CPU的子目录下进一步分解boot系统引导、mm内存管理、kernel系统调用等子目录
block目录
部分块设备驱动程序
crypto目录
加密、压缩、CRC校验算法
documentation目录
内核的文档
drivers目录(常用目录之一)
设备驱动程序
fs目录file system
文件系统
存放各种文件系统的实现代码,用于实现虚拟文件系统vfs
include目录
存放内核所需的头文件,与平台无关的头文件放在include/liunx子目录,与平台相关的头文件则放在相对应的子目录中。
lib目录
库文件代码
mm目录
用于实现内存管理中与体系结构无关的部分
net目录
网络协议实现代码
802 802无线通讯协议核心支持代码
appletalk 苹果系统连网协议
ax25 AX25无线Internet协议
bridge 桥接设备
ipv4/ipv6 ip协议族
samples目录
一些内核编程的范例
scripts目录
配置内核脚本
security目录
SElinux的模块
Sound目录
音频设备驱动文件
usr目录
cpio命令实现
cpio是根文件系统制作时所需要的命令,将文件系统和内核系统放置一起
virt目录
内核虚拟机
3.Linux内核配置与编译
必备技能之一
Linux内核具有可定制的优点
A.清除临时文件、中间文件和配置文件
make clean
remove most generated files but keep the config
make mrproper
remove all generated files and config files
make distclean
mrproper + remove editor backup and patch files
B.确定目标系统的软硬件配置情况,比如CPU的类型、网卡类型、所需要支持的网络协议
C.使用以下命令之一配置内核
make config:基于文本模式的交互式配置
make menucofig:基于文本模式的菜单型配置(推荐配置)
make oldconfig:使用已有的配置文件
make xconfig:图形化配置(需要安装图像化系统)
3.1 配置选项内容
linux内核提供一系列可供参考的内核配置模式位于Arch/$cpu/cofigs
3.2 内核编译
make zImage
make bzImage
在X86平台下,zImage只能用于小于512K的内核
make ZImage V=1 提供编译信息
make bzImage V=1 提供编译信息
编译好的内核位于arch/$cpu/boot
3.3 编译内核模块
3.4 安装内核模块
Linux内核开发基础的更多相关文章
- linux 内核开发基础
开发特点 不需要第三方库支持 使用GNU C 没有内存保护机制 杜绝浮点数 栈区固定 必须关注并发及同步 注意可移植性
- 如何参与Linux内核开发(转)
本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)
嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...
- 如何参与linux 内核开发
如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者. 英文版维护者: Gre ...
- Linux内核开发进阶书籍推荐(不适合初学者)
Linux内核开发进阶书籍推荐(不适合初学者) 很早之前就想写一篇文章总结一下Linux Kernel开发的相关资料,项目的原因,再加上家里的一些事情,一直没能找到闲暇,今天终于有些时间,希望可以完成 ...
- 如何参与linux内核开发
如何参与linux 内核开发 如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维 ...
- Linux内核开发
Linux内核开发 https://www.cnblogs.com/pugang/p/9728983.html 很早之前就想写一篇文章总结一下Linux Kernel开发的相关资料,项目的原因,再加上 ...
- 编码风格——linux内核开发的coding style
总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具体说明可以参考: 内核源码(Documentation/CodingStyle) 01 - 缩进 ...
- [arm驱动]Linux内核开发之阻塞非阻塞IO----轮询操作【转】
本文转载自:http://7071976.blog.51cto.com/7061976/1392082 <[arm驱动]Linux内核开发之阻塞非阻塞IO----轮询操作>涉及内核驱动函数 ...
随机推荐
- HDU 2045 不容易系列之(3)—— LELE的RPG难题 (递推)
题意:略. 析:首先是假设前n-2个已经放好了,那么放第 n 个时,先考虑一下第 n-1 放的是什么,那么有两种情况. 如果n-1放的是和第1个一样的,那么第 n 个就可以在n-2的基础上放2个,也就 ...
- 在线教育服务:http://www.ablesky.com/
在线教育服务:http://www.ablesky.com/
- nginx缓存优先级(缓存问题者必看)
接触nginx的兄弟或多或少都有遇到缓存问题,要么是nginx为什么不缓存,要么就是nginx缓存很快就失效等等问题,在网上找了一遍nginx缓存优先级的文章,大家可以参考下. 架构图client端 ...
- Transaction Manager Maximum Timeout
TransactionManager.MaximumTimeout是个只读的属性, 默认只有10分钟, 要想修改它必须通过machine.config来修改. 为了单个应用而去修改这个值是不合适的. ...
- tomcat启动很慢的原因
启动后tomcat显示的代码如下: 2014-4-3 10:50:15 org.apache.catalina.core.AprLifecycleListener init 信息: The APR b ...
- 理解extern
extern有两层含义:表示声明和extern C 1.C++分为编译期和运行期,C++是分别单独编译,编译期可认为有三个步骤:a.预编译进行文本替换,将源文件(cpp文件)生成编译单元:b.编译单元 ...
- 2015南阳CCPC A - Secrete Master Plan 水题
D. Duff in Beach Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Master Mind KongMing gave ...
- 在 C# 中加载自己编写的动态链接库
一.发生的背景 在开发新项目中使用了新的语言开发 C# 和新的技术方案 WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用 C 或 C++ 或 Delphi 编写的,如 ...
- HDU 3410 && POJ 3776 Passing the Message 单调队列
题意: 给定n长的数组(下标从1-n)(n个人的身高,身高各不同样 问:对于第i个人,他能看到的左边最矮的人下标.(假设这个最矮的人被挡住了,则这个值为0) 还有右边最高的人下标,同理若被挡住了则这个 ...
- 有图有真相,分享一款网页版HTML5飞机射击游戏
本飞机射击游戏是使用HTML5代码写的,尝试通过统一开发环境(UDE)将游戏托管在MM应用引擎,直接生成了网页版游戏,游戏简单易上手,非常适合用来当做小休闲打发时间. 游戏地址:http://flyg ...