嵌入式Linux系统的构成 .

news/2024/7/20 16:01:40 标签: 操作系统, 嵌入式, 内存管理

一个典型的嵌入式Linux系统按照存储空间的划分通常包括引导区,内核区与文件系统区,引导区存放Boot  Loader与系统参数,内核区存放特定嵌入式平台的定制Linux内核

 

文件系统包括根文件系统和建立与Flash内存设备之上的文件系统。图形界面系统和用户应用程序就放在文件系统区中

 

1:Boot  Loader占用的空间一般都比较小,它后面紧挨着一个启动参数区,用来保存Linux内核启动参数和用户启动配置。

 

2:Boot Loader程序是嵌入式系统的引导加载程序,是系统加电后运行的第一段软件代码。Boot  Loader程序的主要任务就是初始化硬件设备,建立内存空间的映射图,从而将系统的

 

软硬件环境带到一个合适的环境中,Boot  Loader程序最重要的任务就是启动Linux内核

 

3:文件系统是嵌入式LInux系统占用空间最大的部分,它通常占据了Boot Loader和内核之外的所有空间,Linux启动完毕之后会加载一个根文件系统,根文件系统包含了系统必备

配置信息,库函数和shell解释器以及核心目录。其他的文件系统则可以挂载在根文件系统下面


Boot Loader 一般通过JTAG接口和仿真器烧写到存储器,而内核和文件系统则可以通过串口和网口烧写到存储器。

 

Linux内核主要由五个部分组成:进程调度,内存管理,文件系统,网络子系统,以及设备管理。

 

内存管理:(Memory  Management) Linux的内存管理支持虚拟内存,采取的是分页机制,内存管理子系统允许多个进程安全的共享主内存区域。通过内存管理,Linux可以支

持超过实际内存大小的内存地址,磁盘可以当作内存,磁盘与内存之间可以相互交换。

 

设备管理:Linux支持字符设备,块设备,以及网络设备三类硬件设备,并提供与平台设备的概念与sys文件系统来管理各种设备,linux的设备驱动可以编译进入内核,在系统启

动时加载,也可以作为模块形式动态加载

 

Linux的代码结构

linux 2.6的内核代码非常庞大,其中设备驱动程序约占一半

 

目录

arch                硬件平台相关代码

block              块设备核心代码

crypto             加密函数库

documentation    有关内核各个部分通用解释和注释的文本文件

drivers          设备驱动相关代码

fs                  文件系统相关代码

include        内核头文件

init                内核初始化代码

ipc                系统进程间的通信

kernel          内核核心部分:进程调度,中断处理,信号处理,模块

lib                通用内核函数

mm             内存管理

net             网络通信协议代码

samples     内核例子

security    系统安全相关代码

sound     音频体系代码

 

编译内核的几个命令

 

1:  make    menuconfig               //配置内核命令

2: make     //编译生成目标文件,包括可加载模块

3:make    zImage           //编译生成内核

4:make    modules_install    //安装模块

 

为什么要配置内核呢?

  在编译之前是肯定要配置内核的,make  menuconfig,生成默认配置文件.config,这个文件是设置cpu体系,以及很多

驱动选项的,没有配置这个,是不能进行编译的。新下载的内核都是没有默认的.config,这需要你找到一个默认的config文件

 

比如 arch/arm/configs/ 下是 arm cpu 很多的默认配置,当然你也可以把你以前的 config 文件拷贝到新内核目录下。
.config 是配置编译内核的最初步骤

为何要重新编译内核?

新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译Linux内核。 
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。 
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑: 

1:自己定制编译的内核运行更快(具有更少的代码)

2:系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)

3:不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞

4:将某种功能编译为模块方式编译进被内核的方式速度要慢一些


内核Makefile

Linux2.6内核的Makefile分为4个组成部分

1:顶层Makefile:在内核代码最顶层。顶层的Makefile文件读取.config文件的内容,并总体上负责build内核和模块

2:config配置文件:内核的配置文件,一般在/arch/*/configs下

3:Makefile 的通用规则:在/scripts/目录下面的Makefile.*

4:kbuild  Makefile  文件:在各级目录下面

(1):目标定义,就是用来定义那些内容要作为模块编译,那些要编译链接进入内核

obj-y +=foo.o   它表示由foo.c或foo.s文件编译得到foo.o并链接进内核,如果使用$(obj-m),则表示对象文件编译成可加载的内核模块~

转载于:https://www.cnblogs.com/GaryEmbed/archive/2013/05/08/3066943.html


http://www.niftyadmin.cn/n/759031.html

相关文章

php 条件表达是,Javascript三种条件表达的写法的特点及用法实例详解

三种条件表达的写法的特点及用处进行了总结归纳,简述如下:1. if...else结构// Set r to 0 or 1var r Math.floor(2*Math.random())// Set a, b and c to "small" if r0 an else set them to "big"// using three different techniqu…

门内门外看招聘

技术招聘也是技术活。上下求索的不只是应聘者,面试官也同样绞尽脑汁。在本文中,作者先后回顾了身为应聘者和面试官两种角色的经历,带你一瞥国内外技术招聘的那些事儿。 年初加州求职不利,撰文《加州求职记》(http://bl…

php不是当前时间,php5中date()获得的时间不是当前时间的解决方法

[Date]; Defines the default timezone used by the date functions;date.timezone 复制代码默认是关闭的,只需把注释去掉,改为即可[Date]; Defines the default timezone used by the date functionsdate.timezone PRC复制代码其中PRC是“中华人民共和…

IDA下如何显示汉字的问题

Ida Pro 的默认设置里对中文字串的支持比较差, 对于首字节大于EO的都显示成 ? 打开IDA PRO 目录下的IDA.CFG // the following characters are allowed in ASCII strings, i.e. // in order to find end of a string IDA looks for a character // which doesnt belong to thi…

php 中定义枚举类型,自定义类型枚举enum

在实际编程中,如果有一个swith语句:先写两种让在大家比较一下C12345678910111213141516switch(a){case0://。。。break;case1://。。。break;case2://。。。break;case3://。。。break;}C12345678910111213141516switch(a){caseRED://。。。break;caseYE…

G4Studio

1.1.G4Studio概述 G4Studio是一套基于JavaEE面向中小软件企业的集需求分析、软件设计、编码实现、运行测试、运营维护、软件项目管理等于一体,力求覆盖整个软件生命周期的免费开源产品套件。以“标准功能可复用、通用模块可配置、行业需求快速开发、异构系统无缝集成…

linux 编译多个文件,linux多文件编译方法有哪些?

一。 常用编译命令选项假设源程序文件名为test。c。1。 无选项编译链接用法:#gcc test。c作用:将test。c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a。out。2。 选项 -o用法:#gcc test。c -o test作…

uva10050 - Hartals

题意:给出罢工周期 求规定天数内罢工的天数(星期五星期六不算) 解题思路:大水题(筛法) 解题代码: // File Name: uva10050.c // Author: darkdream // Created Time: 2013年05月16日 星期四 21时…