嵌入式Linux编程入门与开发实例 第3章资料课件

上传人:58****5 文档编号:241334842 上传时间:2024-06-19 格式:PPT 页数:77 大小:443.30KB
返回 下载 相关 举报
嵌入式Linux编程入门与开发实例 第3章资料课件_第1页
第1页 / 共77页
嵌入式Linux编程入门与开发实例 第3章资料课件_第2页
第2页 / 共77页
嵌入式Linux编程入门与开发实例 第3章资料课件_第3页
第3页 / 共77页
点击查看更多>>
资源描述
第第3 3章章 构建嵌入式构建嵌入式LinuxLinux开发环境开发环境 【学习目标】l熟悉嵌入式系统开发环境的构建l熟悉U-Boot的移植l掌握嵌入式Linux操作系统内核编译撕胀场闸喝端疙脾污拍织建渡娄掂置襄蒂富栈卷雏爪泄狰凭务视振嫁朋邑嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章第3章构建嵌入式Linux开发环境【学习目标】撕胀场闸1第第3 3章章 构建嵌入式构建嵌入式LinuxLinux开发环境开发环境 嵌入式系统开发环境的构建嵌入式系统开发环境的构建3.1U-bootU-boot的移植的移植3.2嵌入式Linux操作系统内核编译3.3习题与练习习题与练习3.4马晌它邢烁隘裁畅瘸吹摧腮迟柿旨臀招牟揽屈揣尚严轮隙甭屋蚂搞扩继排嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章第3章构建嵌入式Linux开发环境嵌入式系统开发环境23.1 3.1 嵌入式系统开发环境的构建嵌入式系统开发环境的构建 所所谓谓交交叉叉编编译译,就就是是利利用用运运行行在在某某台台计计算算机机(宿宿主主机机)上上的的编编译译器器编编译译某某个个源源程程序序,生生成成在在另另一一台台机机器器(目目标标机机)上上运运行行的的目目标标代代码码的的过过程程。使使用用交交叉叉编编译译的的原原因因主主要要有有两两个个,一一是是目目标标平平台台所所需需要要的的Bootloader以以及及操操作作系系统统核核心心没没有有建建立立起起来来时时,需需要要做做交交叉叉编编译译;二二是是一一般般目目标标板板的的资资源源都都比比较较有有限限,不不具具备备一一定定的的处处理理器器能能力力和和存存储储空空间间,需需要要有有强强大大的的宿宿主主PC机机为它完成大部分的调试编译任务。为它完成大部分的调试编译任务。囊刚阴思犬偿矮匙旦棋耗探便走韵蔬鸥捉击腆佩哇迫烯阮值屿诞婿漠札揩嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.1嵌入式系统开发环境的构建所谓交叉编译3binutils:是是一一组组二二进进制制处处理理工工具具的的集集合合,包包括括连连接接器器,汇汇编编器器和和其其他他用用于于目目标标文文件件和和档档案案的的工具工具。二进制工具二进制工具蒙蔫甸淮库芬色哇贼畅攀五叼呐恐种拒但婴逐喷殉蓉拟鄂梗蛹钎孰苫滚许嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章binutils:是一组二进制处理工具的集合,包括连接器4binutils的主要工具介绍如下:的主要工具介绍如下:addr2line:把程序地址转换为文件名和行号。在命令:把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。个文件以及行号。ar:建立、修改、提取档案文件。档案文件是包含多:建立、修改、提取档案文件。档案文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。始文件内容。as:主要用来编译:主要用来编译GNU C编译器编译器gcc输出的汇编文件,输出的汇编文件,产生的目标文件由连接器产生的目标文件由连接器ld连接。连接。攫而帜陀稚殿癌钝替床瘦谐偶褪兑琴匈诡钦羡哀跃杨闹松杂堕忆丙苦苫旧嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章binutils的主要工具介绍如下:攫而帜陀稚殿癌钝替床瘦谐5 c+filt:连连接接器器使使用用它它来来过过滤滤 C+和和 Java 符符号,防止重载函数冲突。号,防止重载函数冲突。gprof:显示程序调用段的各种数据。显示程序调用段的各种数据。ld:是是连连接接器器,它它把把一一些些目目标标和和归归档档文文件件结结合合在在一一起起,重重定定位位数数据据,并并链链接接符符号号引引用用。通通常常,建立一个新编译程序的最后一步就是调用建立一个新编译程序的最后一步就是调用ld。nm:列出目标文件中的符号。:列出目标文件中的符号。objcopy:把把一一种种目目标标文文件件中中的的内内容容复复制制到到另另一一种类型的目标文件中种类型的目标文件中.岩叭伊碑窒坟拖句媳捂圈沥脱宪丢奏宋媒熄汤黎轻腔仔沁铀跑嘘除肆破竹嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章c+filt:连接器使用它来过滤C+和Jav6 objdump:显显示示一一个个或或者者更更多多目目标标文文件件的的信信息息。使用选项来进行控制。使用选项来进行控制。ranlib:产产生生归归档档文文件件索索引引,并并将将其其保保存存到到这这个个归归档档文文件件中中。在在索索引引中中列列出出了了归归档档文文件件各各成成员所定义的可重分配目标文件。员所定义的可重分配目标文件。readelf:显示:显示ebf格式可执行文件的信息。格式可执行文件的信息。size:列列出出目目标标文文件件每每一一段段的的大大小小以以及及总总体体的的大大小小。默默认认情情况况下下,对对于于每每个个目目标标文文件件或或者者一一个归档文件中的每个模块只产生一行输出。个归档文件中的每个模块只产生一行输出。猛臃唉遭律今苗滤墓毙赣乏抒胳棵息襄帆跨庞统砖见剂欧屑就甥活墙耀吉嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章objdump:显示一个或者更多目标文件的信息。使7 size:列出目标文件每一段的大小以及总体的列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。个归档文件中的每个模块只产生一行输出。strings:打印某个文件的可打印字符串,这些:打印某个文件的可打印字符串,这些字符串最少字符串最少4个字符长,也可以使用选项个字符长,也可以使用选项-n设设置字符串的最小长度。默认情况下,它只打印置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很字符,这个程序对于了解非文本文件的内容很有帮助。有帮助。示茬屏查托微譬毋莉函盼士扯阎兜塑郁窿釉铣伐起誊啦丑轧询票舒柿奈切嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章size:列出目标文件每一段的大小以及总体的大小。8 strip:丢弃目标文件中的全部或者特定符号。:丢弃目标文件中的全部或者特定符号。libiberty:包含许多:包含许多GNU程序都会用到的函数,程序都会用到的函数,这些程序有:这些程序有:getopt,obstack,strerror,strtol 和和 strtoul等。等。libbfd:二进制文件描述库。:二进制文件描述库。libopcodes:用来处理用来处理opcodes的库的库,在生成一在生成一些应用程序的时候也会用到它。些应用程序的时候也会用到它。windres:一个一个windows资源的编译器。资源的编译器。熏掂疏叙敞窒造人休媒监湘胶蒋由算娄柏腻啪播蚤伐厚档尿谆矾脚侥擂洲嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章strip:丢弃目标文件中的全部或者特定符号。熏掂疏9GCC:工具是编译程序的最为主要的工具。工具是编译程序的最为主要的工具。GCC包括以下几个主要的工具:包括以下几个主要的工具:Cpp:C预处理器。预处理器。g+:C+编译器。编译器。gcc:C编译器。编译器。gccbug:创建:创建bug报告的报告的Shell脚本。脚本。gcov:分析在程序中哪里做优化效果好。:分析在程序中哪里做优化效果好。扛瘪希诈幢购微呕拔班灶摊因公刊匀彻岿捌搏荷雾谗靠姚绝燃椭鹏昨巷塌嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章GCC:工具是编译程序的最为主要的工具。扛瘪希诈幢购微呕拔10libgcc*:gcc的运行库。的运行库。libstdc+:标准:标准C+库,包含许多常用函库,包含许多常用函数。数。libsupc+:提供支持:提供支持C+语言的库函数。语言的库函数。屈秃绢港浮匹篓雍浑悸吞移啥箍域耻鸥调姆狐徐芍溪银勉排疡奴蠢森酋吐嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章libgcc*:gcc的运行库。屈秃绢港浮匹篓雍浑悸吞移啥箍11Glibe:是是提提供供系系统统调调用用和和基基本本函函数数的的 C 库库,比比如如open(),malloc(),printf()等等等等。所所有有动动态态连连接的程序都要用到它接的程序都要用到它。喉沸韶痕丽牢馋锄闽毫消想澎垃蜡缴挽殴万斯湘你痈嫩肖莉屏督捌钻樊腹嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章Glibe:是提供系统调用和基本函数的C库,比如open12Glibc 中主要有以下程序:中主要有以下程序:l catchsegv:当程序发生:当程序发生segmentation fault的的时候时候,用来建立一个堆栈跟踪。用来建立一个堆栈跟踪。l gencat:建立消息列表。:建立消息列表。l getconf:针对文件系统的指定变量显示其系:针对文件系统的指定变量显示其系统设置值。统设置值。l getent:从系统管理数据库获取一个条目。:从系统管理数据库获取一个条目。l glibcbug:建立:建立glibc的的bug报告并且发送到报告并且发送到bug报告的邮件地址。报告的邮件地址。憎懦贮桅帕坯屑扔揪驯解朽挞胁痊盔臣黍寝忠滞盐稼豁泰魏苍暗瘩鸣吨燎嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章Glibc中主要有以下程序:憎懦贮桅帕坯屑扔揪驯解朽挞胁痊13l iconv:转化字符集。:转化字符集。l iconvconfig:建立快速读取的:建立快速读取的iconv模块所使模块所使用的设置文件。用的设置文件。l ldconfig:设置动态链接库的实时绑定。:设置动态链接库的实时绑定。l ldd:列出每个程序或者命令需要的共享库。:列出每个程序或者命令需要的共享库。l lddlibc4:辅助辅助 ldd 操作目标文件。操作目标文件。l locale:是一个是一个 Perl 程序,可以告诉编译器程序,可以告诉编译器打开或关闭内建的打开或关闭内建的locale支持。支持。l localedef:编译编译locale标准。标准。众延社咒浇蛤铱惊烃卵精乙菏弯叮酒笆赔舞伏单砧蒋倦呐拱带别尉撼岸沤嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章iconv:转化字符集。众延社咒浇蛤铱惊烃卵精乙菏弯14l nscd:提供对常用名称设备调用的缓存的守护:提供对常用名称设备调用的缓存的守护进程。进程。l nscd_nischeck:检查在进行:检查在进行NIS+侦查时是否侦查时是否需要安全模式。需要安全模式。l pcprofiledump:打印:打印PC profiling产生的信息。产生的信息。l pt_chown:是一个辅助程序,帮助:是一个辅助程序,帮助grantpt设设置子虚拟终端的属主,用户组和读写权限。置子虚拟终端的属主,用户组和读写权限。l rpcgen:产生实现:产生实现RPC协议的协议的C代码。代码。l rpcinfo:对:对RPC服务器产生一个服务器产生一个RPC呼叫。呼叫。疹亚限见邢烤丢番锄戈谐华酷仗谬嘱能行贱嘴补节佩兽串处拌溺喷矮舔骂嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章nscd:提供对常用名称设备调用的缓存的守护进程。疹15l sln:用来创建符号链接,由于它本身是静态:用来创建符号链接,由于它本身是静态连接的,在动态连接不起作用的时候,连接的,在动态连接不起作用的时候,sln仍然仍然可以建立符号链接。可以建立符号链接。l sprof:读取并显示共享目标的特征描述数据。:读取并显示共享目标的特征描述数据。l tzselect:对用户提出关于当前位置的问题:对用户提出关于当前位置的问题,并输出时区信息到标准输出。并输出时区信息到标准输出。l xtrace:通过打印当前执行的函数跟踪程序:通过打印当前执行的函数跟踪程序执行情况。执行情况。l zdump:显示时区。:显示时区。磐性会鞋帜逃亦七凹铰姻渔揣子蒸党涎厂袁旧浸窜颤玉仿橙墨众迁蓝谭乏嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章sln:用来创建符号链接,由于它本身是静态连接的,在16l zic:时区编译器。:时区编译器。l ld.so:帮助动态链接库的执行。:帮助动态链接库的执行。l libBrokenLocale:帮助程序处理破损:帮助程序处理破损locale,如,如Mozilla。l libSegFault:处理:处理 segmentation fault 信号,信号,试图捕捉试图捕捉segfaults。l libanl:异步名称查询库。:异步名称查询库。l L ibbsd-compat:为了在:为了在linux下执行一些下执行一些BSD程序程序,libbsd-compat提供了必要的可移植提供了必要的可移植性。性。寡屠俏王睁绑泄睡冬局袖酸仆蔑汰泰啸坑拐轰炔泌川锌抗藏役褂靴汐昨缝嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章zic:时区编译器。寡屠俏王睁绑泄睡冬局袖酸仆蔑汰泰17llibc:是主要的:是主要的C库库-常用函数的集成。常用函数的集成。llibcrypt:加密编码库。:加密编码库。llibdl:动态连接接口。:动态连接接口。llibg:g+的运行时。的运行时。llibieee:IEEE浮点运算库。浮点运算库。llibm:数学函数库。:数学函数库。拂茬赢在肄舟功峭时潦超覆像滩席豌总啦唉粮绞投受婚陆马络艇唆郑伶砚嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章libc:是主要的C库-常用函数的集成。拂茬赢在肄舟功峭时18llibmcheck:包括了启动时需要的代码。:包括了启动时需要的代码。llibmemusage:帮助:帮助 memusage 搜集程序运行搜集程序运行时内存占用的信息。时内存占用的信息。llibnsl:网络服务库。:网络服务库。llibnss*:是名称服务切换库,包含了解释主机是名称服务切换库,包含了解释主机名,用户名,组名,别名,服务,协议等等的名,用户名,组名,别名,服务,协议等等的函数。函数。llibpcprofile:帮助内核跟踪在函数:帮助内核跟踪在函数,源码行和源码行和命令中命令中CPU使用时间。使用时间。愿戎善沦筒耻傀谋气涛琐垢樟毛慈汹去记板郸羊臣湿算娟滦傲阿蹦杉月媒嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章libmcheck:包括了启动时需要的代码。愿戎善沦筒耻傀谋19llibpthread:POSIX 线程库。线程库。llibresolv:创建:创建,发送及解释到互联网域名服务发送及解释到互联网域名服务器的数据包。器的数据包。llibrpcsvc:提供:提供RPC的其他服务。的其他服务。llibrt:提供了大部分的提供了大部分的POSIX.1b实时扩展的实时扩展的接口。接口。llibthread_db:对建立多线程程序的调试很有对建立多线程程序的调试很有用。用。llibutil:包含了在很多不同的包含了在很多不同的 Unix程序中使用程序中使用的的“标准标准”函数。函数。鞠袄双讹修暑轩丘赎涂纸腔奔扣筹低娟园陈肮溶搪吮珐详僧劝涧渝磺陀忘嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章libpthread:POSIX线程库。鞠袄双讹修暑轩丘赎203.2 3.2 移植移植U-bootU-bootBootloader 就就是是在在操操作作系系统统内内核核运运行行之之前前运运行行的的一一段段小小程程序序。通通过过这这段段小小程程序序,可可以以初初始始化化硬硬件件设设备备、建建立立内内存存空空间间的的映映射射图图,从从而而将将系系统统的的软软硬硬件件环环境境带带到到一一个个合合适适的的状状态态,以以便便为为最最终终调用操作系统内核准备好正确的环境。调用操作系统内核准备好正确的环境。哇贰踪万愿脐戎匆筋瓜进师博俩泪擒眨漫佬桃睹摧碗俩霜秩司渺宅蒸奋路嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.2移植U-bootBootloader21针针 对对 ARM处处 理理 器器,常常 见见 的的 Bootloader有有 U-Boot、RedBoot、ARMBoot等:等:lU-Boot:它是它是sourceforge上的一个开放源代码的项上的一个开放源代码的项目,可对目,可对PowerPC、ARM、MIPS、x86等处理器提供等处理器提供支持,它支持的嵌入式操作系统有支持,它支持的嵌入式操作系统有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最广泛、使用等,是目前支持最广泛、使用最多的最多的Bootloader。3.2.1 Bootloader3.2.1 Bootloader概述概述谋陇吧谓蜗炭榷球臣丫服掖榴郝操抹渝蜒贪猜翱粳拢锣瞪际巳我几前镀拱嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章针对ARM处理器,常见的Bootloader有U-Boot、22lRedBoot:RedBoot是是Redhat公司随公司随eCos(Embedded Configurable Operating System)发布的)发布的一个一个Boot方案,是一个开源项目。方案,是一个开源项目。lARMBoot:是是sourceforge上的一个开放源代码的项上的一个开放源代码的项目,它最初的设计只是针对目,它最初的设计只是针对ARM处理器体系结构,所处理器体系结构,所以它可以很容易地被移植到各种以以它可以很容易地被移植到各种以ARM为核心的平台为核心的平台上。上。舟硫卡跌肝或如腿控港花课挚竿砌粉炒碉秦沪荒勾傣栽帽沃粉吁郭鸳疫揪嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章RedBoot:RedBoot是Redhat公司随eCo23 图图3-1是一个同时装有是一个同时装有 Bootloader、内核的启动参数、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。间分配结构图。图3-1固态存储设备的典型空间分配结构秽锨撒徐集谨驯茎擂酌帝了礁寝说奋蚌运次肿军氦畸抱邱傻它多估沉桨穿嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章图3-1是一个同时装有Bootloader、内核的243.2.2 Bootloader3.2.2 Bootloader的启动流程的启动流程 Bootloader 的启动过程有单阶段(的启动过程有单阶段(Single Stage)和多)和多阶段(阶段(Multi-Stage)两种形式。通常多阶段的)两种形式。通常多阶段的 Bootloader 能提供更为复杂的功能,以及更好的可移植性。从固态存能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的储设备上启动的 Bootloader 大多都是大多都是2 阶段的启动过程,阶段的启动过程,也即启动过程可以分为也即启动过程可以分为 stage 1 和和 stage 2 两部分。两部分。肘曾忽狰膛卑酒睹秆差汽栅头搁蕾翰冶操搏羞凿慕铡金枫淀辰摹误发贪弄嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.2.2Bootloader的启动流程25 stage1 通常包括以下步骤(按执行的先后顺序):通常包括以下步骤(按执行的先后顺序):(1)硬件设备初始化。)硬件设备初始化。这是这是 Bootloader 一开始就执行的操作,其目的是为一开始就执行的操作,其目的是为 stage2 的执行以及随后的的执行以及随后的 kernel 的执行准备好一些基本的执行准备好一些基本的硬件环境。它通常包括以下步骤:的硬件环境。它通常包括以下步骤:l屏蔽所有的中断。为中断提供服务通常是屏蔽所有的中断。为中断提供服务通常是OS 设备驱动设备驱动程序的责任,因此在程序的责任,因此在Bootloader 的执行全过程中可以不的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写必响应任何中断。中断屏蔽可以通过写 CPU 的中断屏的中断屏蔽寄存器或状态寄存器(比如蔽寄存器或状态寄存器(比如 ARM 的的 CPSR 寄存器)寄存器)来完成。来完成。叼急秸吉似玉螺冲悦氢滤痴失驯造昼非丢睡能郡粹哭奴咸戳秋舍舞暮坍孵嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章stage1通常包括以下步骤(按执行的先后顺序):26l设置设置 CPU 的速度和时钟频率。的速度和时钟频率。l RAM 初始化。包括正确地设置系统的内存控初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。制器的功能寄存器以及各内存库控制寄存器等。l初始化初始化 LED。典型地,通过。典型地,通过 GPIO 来驱动来驱动 LED,其目的是表明系统的状态是,其目的是表明系统的状态是 OK 还是还是 Error。如果板子上没有。如果板子上没有 LED,那么也可以通,那么也可以通过初始化过初始化 UART 向串口打印向串口打印 Bootloader 的的 Logo 字符信息来完成这一点。字符信息来完成这一点。l 关闭关闭 CPU 内部指令数据内部指令数据 cache。廉胜摸辩饮既脚盯腻克僳仿挝靳史愿业焊孜呻谅泌诺矫任锡五割志湖湿弛嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章设置CPU的速度和时钟频率。廉胜摸辩饮既脚盯腻克僳仿挝27(2)为加载)为加载 Bootloader 的的 stage2 准备准备 RAM 空间。空间。为为了了获获得得更更快快的的执执行行速速度度,通通常常把把 stage2 加加载载到到 RAM 空空 间间 中中 来来 执执 行行,因因 此此 必必 须须 为为 加加 载载 Bootloader 的的 stage2 准准备备好好一一段段可可用用的的RAM 空空间范围。间范围。宝偏吊薄池崩嫡性迭奖鸣矛吧秽馆悼后峭识广伶影舔饲缅亦硒椽粕淬让纤嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(2)为加载Bootloader的stage2准备28(3)拷贝)拷贝 Bootloader 的的 stage2 到到 RAM 空间中。空间中。拷拷贝贝时时要要确确定定stage2 的的可可执执行行映映象象在在固固态态存存储储设设备备的的存存放放起起始始地地址址和和终终止止地地址址一一级级RAM 空空间的起始地址。间的起始地址。骡彻卓吁诬嚏怖喇腕费咸评瓮远笛畅稚獭仙喇邀窄该狈胞宙饭她电男赁味嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(3)拷贝Bootloader的stage2到RA29(4)设置好堆栈。)设置好堆栈。堆堆栈栈指指针针的的设设置置是是为为了了执执行行 C 语语言言代代码码作作好好准准备备。此此外外,在在设设置置堆堆栈栈指指针针 sp 之之前前,也也可可以以关关闭闭 LED 灯灯,以以提提示示用用户户准准备备跳跳转转到到 stage2。经经过过上上述述这这些些执执行行步步骤骤后后,系系统统的的物物理理内内存存布布局局应应该该如如下下图图3-2所示。所示。跑宪热揪陇薯派的拎赴坡遭弯窑增滩封侵乔蓉绒划邱零拳茶邻瞬通吁啪吭嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(4)设置好堆栈。跑宪热揪陇薯派的拎赴坡遭弯窑增滩封侵乔蓉30图3-2Bootloader的stage2可执行映象刚被拷贝到RAM空间时的系统内存布局轿绅颜希槽捧宠呆话离漾沃捌研你苯哄蝎官咬渐遂碴贷座膳迂棠挺焉碳穆嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章图3-2Bootloader的stage2可执行映象31(5)跳转到)跳转到 stage2 的的 C 入口点。入口点。在在上上述述一一切切都都就就绪绪后后,就就可可以以跳跳转转到到 Bootloader 的的 stage2 去去执执行行了了。比比如如,在在 ARM 系系统统中中,可可以以通通过过修修改改 PC 寄寄存存器器为为合合适的地址来实现。适的地址来实现。欠闪筑枢涣码葫姆惑乓侈类笔勘紊茎爬割甸褒晋吃钓措曝碉吸击邀佳任则嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(5)跳转到stage2的C入口点。欠闪筑枢涣码葫姆32stage2 通常包括以下步骤(按执行的先后顺序):通常包括以下步骤(按执行的先后顺序):(1)初始化本阶段要使用到的硬件设备。)初始化本阶段要使用到的硬件设备。通通常常包包括括:初初始始化化至至少少一一个个串串口口,以以便便和和终终端端用用户户进进行行 I/O 输输出出信信息息;初初始始化化计计时时器器等等。在在初初始始化化这这些些设设备备之之前前,也也可可以以重重新新把把 LED 灯灯点点亮亮,以以表表明明已已经经进进入入 main()函函数数执执行行。设设备备初初始始化化完完成成后后,可可以以输输出出一一些些打打印印信信息息,程程序序名名字字字字符符串串、版本号等。版本号等。着棍锑骋以翻岂努甲劝谎蛔步妆孪抉倍棋食豺嫩值袭军莱筏溢峭催胰琐材嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章stage2通常包括以下步骤(按执行的先后顺序):着棍锑骋33(2)检测系统内存映射()检测系统内存映射(memory map)。)。所所谓谓内内存存映映射射就就是是指指在在整整个个 4GB 物物理理地地址址空空间间中中有有哪哪些些地地址址范范围围被被分分配配用用来来寻寻址系统的址系统的 RAM 单元。单元。防沉柬卢溺蔬僻霄闸喂伎缀扫渠嫁坟曝八病寿艇墨出豫欲逻奠豺届硕杆旭嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(2)检测系统内存映射(memorymap)。防沉柬卢溺34(3)将)将kernel 映像和根文件系统映像从映像和根文件系统映像从 Flash 上读上读到到 RAM 空间中。空间中。首先规划内存占用的布局,这里包括两个方面:首先规划内存占用的布局,这里包括两个方面:内核映像所占用的内存范围;根文件系统所占用的内核映像所占用的内存范围;根文件系统所占用的内存范围。在规划内存占用的布局时,主要考虑基内存范围。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。地址和映像的大小两个方面。对于内核映像,一般将其拷贝到从基地址开始对于内核映像,一般将其拷贝到从基地址开始的大约的大约1MB大小的内存范围内。大小的内存范围内。僻袋绷银景亩萧告对疵费络寞捶忌考哼拧嚣坝从键火乘躯策绞衰让迈冠慎嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(3)将kernel映像和根文件系统映像从Flash上35(4)为内核设置启动参数。)为内核设置启动参数。在将内核映像和根文件系统映像拷贝到在将内核映像和根文件系统映像拷贝到RAM空间中后,就可以准备启动空间中后,就可以准备启动 Linux 内核了。但是内核了。但是在调用内核之前,应该作一步准备工作,即设置在调用内核之前,应该作一步准备工作,即设置 Linux 内核的启动参数。内核的启动参数。隙汁酱盏咆很肝锣侈闪句诸滋可锚嘉耘伐淫磁榜存顶旬躁兄趾痞寒娥醒褪嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(4)为内核设置启动参数。在将内核映像和根文36(5)调用内核。)调用内核。Bootloader 调调用用 Linux 内内核核的的方方法法是是直直接接跳跳转转到到内内核核的的第第一一条条指指令令处处,也也即即直直接接跳跳转转到到 MEM_START0 x8000 地地址址处处。在在跳跳转转时时,下下列列条件要满足:条件要满足:魂填磺协殴窖堑束筛赔诲妮循襄瞎菩脆缕迹蚁邹便榨娄玫缸祝对憨桩骚交嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章(5)调用内核。Bootloader调用37lCPU 寄寄存存器器的的设设置置:R00;R1机机器器类类型型 ID;关关于于 Machine Type Number,可可以以参参见见 linux/arch/arm/tools/mach-types;R2启启动动参参数标记列表在数标记列表在 RAM 中起始基地址。中起始基地址。lCPU 模模式式:必必须须禁禁止止中中断断(IRQs和和FIQs);CPU 必须必须 SVC 模式。模式。lCache 和和 MMU 的的设设置置:MMU 必必须须关关闭闭;指指令令 Cache 可可以以打打开开也也可可以以关关闭闭;数数据据 Cache 必必须关闭。须关闭。填况透溶郡特添岁叔怪昌末镊捣便姻界艾收挤戎氟贾咽康悯殃镐冀款茨轻嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章CPU寄存器的设置:R00;R1机器类型ID;关于38Bootloader的系统启动方案流程如图3-3所示。图3-3Bootloader系统启动方案流图鹅国兄椽俐治险晰斥秧耕痴呕新锻捶中弦剪深撑蔑彦真潘稳烹麓提烈伍争嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章Bootloader的系统启动方案流程如图3-3所示。图3-393.2.3 U-Boot 3.2.3 U-Boot 分析与移植分析与移植 U-Boot(Universal Bootloader),即即通通用用Bootloader,是是遵遵循循GPL条条款款的的开开放放源源码码项项目目。从从FADSROM、8xxROM、PPCBOOT逐逐步步发发展展演演化化而而来来。其其前前身身是是由由德德国国DENX软软件件工工程程中中心心的的Wolfgang Denk基基 于于 8xxROM的的 源源 码码 创创 建建 的的PPCBOOT工程。工程。愉募畏沙玻田梅碗晶秀外滩弊熊陋怖猎肢杠旨姓拘齿屯周夺侄覆袄撼窿望嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.2.3U-Boot分析与移植U-B40 U-Boot不不仅仅仅仅支支持持嵌嵌入入式式Linux系系统统的的引引导导,当当前前,它它还还支支持持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌嵌入入式式操操作作系系统统。其其目目前前要要支支持持的的目目标标操操作作系系统统是是OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS。峙盔慧清逞影匠磁芽祟漳看介臭娟绎信赔红房菜巧渐杨阁浆荐必安刃赔究嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章U-Boot不仅仅支持嵌入式Linux系41U-Boot有如下特性:有如下特性:l开放源码开放源码,支持多种嵌入式操作系统内核,支持多种嵌入式操作系统内核,如如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;l支持多个处理器系列,如支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;l较高的可靠性和稳定性较高的可靠性和稳定性;师靳扇单德瓮嚣液蘸氏伶啮钧帅丰厦澈渭条俄图做抵效祭乒瘪峪派轻艇沂嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章U-Boot有如下特性:师靳扇单德瓮嚣液蘸氏伶啮钧帅丰厦澈渭42l高度灵活的功能设置,适合高度灵活的功能设置,适合U-Boot调试、操作调试、操作系统不同引导要求、产品发布等;系统不同引导要求、产品发布等;l丰富的设备驱动源码,如串口、以太网、丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;、键盘等;l较为丰富的开发调试文档与强大的网络技术支较为丰富的开发调试文档与强大的网络技术支持;持;l支持支持NFS挂载、挂载、RAMDISK(压缩或非压缩)(压缩或非压缩)形式的根文件系统;形式的根文件系统;破垦吨皮瘩萎椭坞钝婉丛椒筐位嘉尺猎犁坊予斡恫寸符熟奴浸舰伯道谢挖嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要43l支持支持NFS挂载、从挂载、从Flash中引导压缩或非压缩系统内核;中引导压缩或非压缩系统内核;l可灵活设置、传递多个关键参数给操作系统,适合系可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤其对统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最强;支持最强;l支持目标板环境变量多种存储方式,如支持目标板环境变量多种存储方式,如Flash、NVRAM、EEPROM;lCRC32校验,可校验校验,可校验Flash中内核、中内核、RAMDISK镜像文镜像文件是否完好。件是否完好。l上电自检功能:上电自检功能:SDRAM、Flash大小自动检测,大小自动检测,SDRAM故障检测,故障检测,CPU型号。型号。l特殊功能:特殊功能:XIP内核引导。内核引导。惟坛盯润妄持慨弟熟认贮绞概胜嫡治性愧饼陷皋苛早洒靶省识熟凸祖街贪嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章支持NFS挂载、从Flash中引导压缩或非压缩系统内核;惟坛44 U-Boot源码结构:源码结构:从网站上下载得到从网站上下载得到U-Boot源码包,例如:源码包,例如:U-Boot-1.1.26tar.bz2,解压就可以得到全部,解压就可以得到全部U-Boot源程序。在源程序。在顶层目录下有顶层目录下有26个子目录,分别存放和管理不同的源个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分程序。这些目录中所要存放的文件有其规则,可以分为为4类。类。l第第1类目录与处理器体系结构或者开发板硬件直接相关;类目录与处理器体系结构或者开发板硬件直接相关;l第第2类目录是一些通用的函数或者驱动程序;类目录是一些通用的函数或者驱动程序;l第第3类目录是通用的设备驱动程序。类目录是通用的设备驱动程序。l第第4类目录是类目录是U-Boot的应用程序、工具或者文档。的应用程序、工具或者文档。壁勿同青包唤渠磐午拜愈凶于宏阿架沾蓟祖孵轧走樟哥托柏浓花胁汁翼漱嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章U-Boot源码结构:壁勿同青包唤渠磐午拜愈凶于宏阿45目录特性解释说明board平台依赖存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86)等目录cpu平台依赖存放CPU相关的目录文件,例如:mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目录lib_ppc平台依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386平台依赖存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common通用通用的多功能函数实现表3-1U-Boot顶层目录说明蔬九烁谬片王肢捎垦蚕般绸斩渺笑豹件焙钻餐埃比脚粹徘屠伪做茄滤相堆嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章特性解释说明board平台依赖存放电路板相关的46lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文件系统的程序Post通用存放上电自检程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序耻汽趁浦伦命诉挠搓呵姐疆哀颂沮肆已姐携缺询硬刷击镑浸犁纺簧症霜葛嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章lib_generic通用通用库函数的实现Net通用存放网络47Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,例如helloworldtools工具存放制作S-Record或者U-Boot格式的映像等工具,例如mkimageDoc文档开发使用文档蝇窗检帖珐瓢携笼祥滤恒斋晋琅坟苗芝贾垣浅放芯发飘坐滚设潜服衙览呜嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器48U-Boot的编译:的编译:U-Boot的的源源码码是是通通过过GCC和和Makefile组组织织编编译译的的。顶顶层层目目录录下下的的Makefile首首先先可可以以设设置置开开发发板板的的定定义义,然然后后递递归归地地调调用用各各级级子子目目录录下下的的Makefile,最最后后把把编编译译过过的的程程序序链链接接成成U-Boot映像。映像。软搁洋侧饭贵盂跃抗来矩闯颅况欢向榷棠想猾哉湍拟徽逞篆照耿蹋间冒窥嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章U-Boot的编译:软搁洋侧饭贵盂跃抗来矩闯颅况欢向榷棠想猾49表3-2U-Boot编译生成的映像文件文件名称说明System.mapU-Boot映像的符号表u-bootU-Boot映像的ELF格式u-boot.binU-Boot映像原始的二进制格式u-boot.srecU-Boot映像的S-Record格式屡哼栽馁旨混忆碎翌谚罐榨扳书秘社堕袁邻梢芭份荷二接肄架添麓实隅茨嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章表3-2U-Boot编译生成的映像文件文件名称说明Syst50U-Boot的移植:的移植:U-Boot能能够够支支持持多多种种体体系系结结构构的的处处理理器器,支支持持的的开开发发板板也也越越来来越越多多。因因为为Bootloader是是完完全全依依赖赖硬硬件件平平台台的的,所所以以在在新新电电路路板板上上需需要要移植移植U-Boot程序。程序。视嫂姓礁肪务禄现胚龙忘烈勃实丈筛红揍夕逢汾芒玉奖俩识集赦椽便袁兼嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章U-Boot的移植:视嫂姓礁肪务禄现胚龙忘烈勃实丈筛红揍夕逢51移植移植U-Boot的基本步骤如下:的基本步骤如下:(1)在顶层)在顶层Makefile中为开发板添加新的配置选项。中为开发板添加新的配置选项。(2)创建一个新目录存放开发板相关的代码,并且添加)创建一个新目录存放开发板相关的代码,并且添加文件。文件。(3)为开发板添加新的配置文件)为开发板添加新的配置文件(4)配置开发板)配置开发板(5)编译)编译U-Boot(6)添加驱动或者功能选项。在能够编译通过的基础上,)添加驱动或者功能选项。在能够编译通过的基础上,还要实现还要实现U-Boot的以太网接口、的以太网接口、Flash擦写等功能。擦写等功能。(7)调试)调试U-Boot源代码,直到源代码,直到U-Boot在开发板上能够正在开发板上能够正常启动。常启动。市沁沪衔螺潍萌蚀挝像吻宅都柔拔莹兼侥亨幽疾梧恳糕嘛秩妓坠翘摹俩漫嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章移植U-Boot的基本步骤如下:市沁沪衔螺潍萌蚀挝像吻宅都柔523.2.4 VIVI 分析 VIVI是是韩韩国国MIZI Research公公司司为为其其开开发发的的SMDK2410开开发发板板编编写写的的一一款款Bootloader。VIVI也也有有前前面面说说过过的的两两种种工工作作模模式式,启启动动加加载载模模式式可可以以在在一一段段时时间间(这这个个时时间间可可更更改改)后后自自行行启启动动Linux内内核核,这这是是VIVI的的默默认认模模式式。在在下下载载模模式式下下,VIVI为为用用户户提提供供一一个个命命令令行行接接口口,通通过过该该接接口可以使用口可以使用VIVI提供的一些命令,见表提供的一些命令,见表3-3。吾戌澈乍侨抛筛誊橱钩乃悟围响敷盏烷凿趟缺郁婿郧煽万昭夜戮争住铆渝嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.2.4VIVI分析VIVI是韩国53表3-3VIVI的命令命令功能Load把二进制文件载入Flash或RAMPart操作MTD分区信息Param设置参数Boot启动系统Flash管理Flash每羊健咱沪卉绅至镣簿杖咎假详纶惕砖霖畦租纸胳诛栓宗啤匙夕峙歧弓夺嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章表3-3VIVI的命令功能Load把二进制文件载入Fla54配置VIVI使用的命令如下:makedistclean;makemenuconfig;编 译 之 前,要 先 指 定 Makefile文 件 中 的LINUX_INCLUDE_DIR、CROSS_COMPILE和ARM_GCC_LIBS。配置并保存后,使用make命令开始编译VIVI。居捎烂厢每据刚猛遭响测是济杀范念涤辽樊售殷蔫巩移营岩矫赊叶弗挖煤嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章配置VIVI使用的命令如下:makedistclean;55 VIVI的的 代代 码码 包包 括括 arch,init,lib,drivers和和include等等几几个个目目录录,共共有有200多多个个文文件件。VIVI包括下面几个目录。包括下面几个目录。l arch:此此目目录录包包括括了了所所有有VIVI支支持持的的目目标标板板的子目录,这里只有的子目录,这里只有s3c2410目录。目录。l drivers:其其中中包包括括了了引引导导内内核核需需要要的的设设备备的的驱驱动动程程序序(mtd和和串串口口)。mtd目目录录下下的的maps、nand和和nor三三个个目目录录分分别别是是内内存存映映射射、NAND Flash驱动和驱动和NOR Flash驱动。驱动。幸倪揣洪卑毡扶繁亩哗例瞄噪泣遮痈慷这刹豁啸帽浪满堡叛角绎卞尉慕讶嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章VIVI的代码包括arch,init,lib56linit:这个目录只有:这个目录只有main.c和和version.c两个文件。两个文件。和普通的和普通的C程序一样,程序一样,VIVI将从将从main函数开始函数开始执行。执行。llib:一些平台公共的接口代码,比如:一些平台公共的接口代码,比如time.c里里的的udelay()和和mdelay()。linclude:头文件的公共目录,其中的:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器,以及定义了这块处理器的一些寄存器,以及NAND Flash的一些寄存器等。的一些寄存器等。platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往定义了与开发板相关的资源配置参数,我们往往只需修改这个文件就可以配置目标板的参数,往只需修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。如波特率、引导参数、物理内存映射等。烩消治趴仗毫媒舅劫蒸趁渣粳述咙佳抚愉饰滓么邱笛芥拷遵窥谨项瑞衍渣嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章init:这个目录只有main.c和version.c两个文573.3 3.3 嵌入式嵌入式LinuxLinux操作系统内核编译操作系统内核编译Linux内内核核是是指指Linux源源代代码码经经过过编编译译和和链链接接生生成成的的映映像像文文件件(Image)。通通常常编编译译嵌嵌入入式式Linux内内核核都都是是通通过过不不同同的的make命命令令来来实实现现的的,它它的的执执行行配配置置文文件件就就是是通通常常所所说说的的Makefile,而而不不同同的的Makefile又又通通过过互互相相的的依依赖赖关关系系构构成成一一个个统统一一的的整整体体去去完完成成建建立立依依存存关关系系、建建立立内内核核等功能。等功能。树阎船搭粹晋绚几陕澜捅折胚苯祁接择钻镇子赚箭仔主锈癸汞奈侄彼稠夯嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.3嵌入式Linux操作系统内核编译Li583.3.1 Linux3.3.1 Linux内核结构内核结构1、进程调度(、进程调度(SCHED)控制进程对控制进程对CPU的访问。当需要选择下一个进程运的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待实际上是仅等待CPU资源的进程,如果某个进程在等待资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。其它资源,则该进程是不可运行进程。Linux使用了比使用了比较简单的基于优先级的进程调度算法选择新的进程。较简单的基于优先级的进程调度算法选择新的进程。剁等儡橡让矿夕佯霄努啄蹈望疹赢万稼似决肩沫虎铺典扮馋酬卒若怂它滞嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章3.3.1Linux内核结构1、进程调度(SCHED)592、内存管理(、内存管理(MM)允允许许多多个个进进程程安安全全的的共共享享主主内内存存区区域域。Linux的的内内存存管管理理支支持持虚虚拟拟内内存存,即即在在计计算算机机中中运运行行的的程程序序,其其代代码码,数数据据,堆堆栈栈的的总总量量可可以以超超过过实实际际内内存存的的大大小小,操操作作系系统统只只是是把把当当前前使使用用的的程程序序块块保保留留在在内内存存中中,其其余余的的程程序序块块则则保保留留在在磁磁盘盘中中。必必要要时时,操操作作系系统统负负责责在在磁磁盘盘和和内内存存间间交交换换程程序序块块。内内存存管管理理从从逻逻辑辑上上分分为为硬硬件件无无关关部部分分和和硬硬件件有有关关部部分分。硬硬件件无无关关部部分分提提供供了了进进程程的的映映射射和和逻逻辑辑内内存存的的对对换换;硬硬件件相相关关的部分为内存管理硬件提供了虚拟接口。的部分为内存管理硬件提供了虚拟接口。梢撇旧抿顷锐喘撕训循愁窝渗衔阁灿俄郡御局撼季番释飞韧殿宽违迫绳输嵌入式Linux编程入门与开发实例-第3章嵌入式Linux编程入门与开发实例-第3章2、内存管理(MM)梢撇旧抿顷锐喘撕训循愁窝渗衔阁灿俄郡御603、虚拟文件系统(、虚拟文件系统(VirtualFileSystem,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!