第6节 基于ARM的Linux内核移植
基于ARM平台Linux内核移植论文
基于ARM平台的Linux内核移植中图分类号:tp 文献标识码:a 文章编号:1007-0745(2011)10-0204-01摘要:linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。
可移植性是指代码从一种体系结构移植到另外一种不同的体系结构上的方便程度。
本文介绍了基于arm 开发板的linux内核移植过程,主要包括二方面的内容:交叉编译器的安装、内核的配置与移植。
本文要求读者具备一定的linux操作系统使用经验。
关键词:移植内核 linux一、概述一个嵌入式linux系统的启动顺序可以分为四步:1、引导加载程序(bootloader)。
2、加载linux内核。
3、挂载根文件系统。
4、运行应用程序。
所以要想使linux内核在开发板上运行,就必须对以上四步的相关源代码进行移植操作,使其可运行于嵌入式平台。
本文主要介绍内核移植部分,其余部分可参考相应书箱或文档。
二、开发环境的建立2.1、安装虚拟机、fedora13操作系统及相关的开发工具(gcc、gedit等),本文的所有操作均是在这种开发环境下进行,本文的工作目录为 \work,且都是在root权限下操作。
2.2、交叉编译器(arm-linux-gcc)的安装。
交叉编译器是嵌入式linux开发的基础,后续的移植过程都要用到此编译器,在linux pc平台下,利用arm-linux-gcc编译器可编译出针对arm linux平台的可执行代码。
安装过程如下:a、网上获取arm-linux-gcc-4.3.2.tgz源代码包并保存于/work 目录中。
b、解压命令(tar xvzf arm-linux-gcc-4.3.2.tgz -c /)注意上面的命令必须是大写c且后面有个空格,这样将源代码解压至目录/usr/local/arm/4.3.2中。
c、配置编译环境路径。
输入命令(gedit /root/.bashrc)打开.bashrc文件,在最后一行加入如下内容:exportpath=/usr/local/arm/4.3.2/bin:$path保存关闭文件,用root重新登录系统,输入命令:(arm-linux-gcc –v)如果安装成功将会显示arm-linux-gcc的版本号。
基于ARM的嵌入式linux内核的裁剪与移植.
基于ARM的嵌入式linux内核的裁剪与移植0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。
尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。
但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。
而Linux的开放性,使得许多人都认为Linu0 引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。
尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。
但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。
而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。
Linux操作系统可以支持不同的设备和不同的配置。
Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。
嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。
1 嵌入式linux操作系统Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。
可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。
Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。
文章以将linux移植到ARM920T内核的s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。
基于ARM系统的Linux平台移植研究
34.杨朝军.李世畅.陶洋Linux嵌入式系统的优化[期刊论文]-山东电子 2002(4)
35.金西.黄汪嵌入式Linux及其关键技术[期刊论文]-微型机与应用 2000(11)
21.Wookey.Chris Rutter.Jeff Sutherland.Paul Webb The GNU Toolchainfor ARM targets HOWTO
22.Wolfgang Denk The DENX U-Boot and Linux Guide(DULG)for TQM8xxL 2005
18.ARM Limited Corporation ARM Developer Suite Version 1.2 Developer Guide 2001
19.李驹光.聂雪媛.江泽明.王兆卫ARM应用系统开发详解--基于S3C4510B的系统设计 2004
20.屈振新构造Linux的交叉编译平台[期刊论文]-中国有线电视 2004(2)
2。2。3警台内存部分的构成
本乎台内存是由1片sMx16位数据宽度的FLASH(Intel E28F128,速度
t9
基于ARM系统的Linux平台移植研究
作者:郭秋平
学位授予单位:浙江大学
被引用次数:2次
1.孙天泽.袁文菊.张海峰嵌入式设计及Linux驱动开发指南--基于ARM9处理器 2005
2.吕京建.肖海桥嵌入式处理器分类现状
3.肖文鹏嵌入式Linux开发系列之一:走进嵌入式Linux世界
4.何小庆选择ARM CPU的操作系统μC/OS-Ⅱ,μCLinux,还是Linux[期刊论文]-电子产品世界 2004(3)
基于ARM的嵌入式Linux操作系统移植
第节绪沦内核精小、效率高,并且具有,:百度的模块化和扩一展性:具备文件和日录针理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(A川),开发应用程序简单;嵌入式应用软件丰富。
第四阶段是以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。
目前大多数嵌入式系统还孤立于Internet之外,但随着工nternet的发展以及工nternet技术与信息、家电、工业控制技术等结合日益密切,嵌入式设备与InteI'net的结合将代表着嵌入式技术的真正未来。
妇.2嵌入式操作系统的主要特点随着嵌入式系统的不断发展,可以看到嵌入式操作系统在嵌入式系统中的作用日显重要,它可以为嵌入式系统开发人员提供一个基本的软件开发和运行的支撑平台,从而大大减少了复杂嵌入式系统的开发难度和开发周期,增强了系统的稳定性,降低开发和维护成本。
本论文的工作也是针对特定的嵌入式通用操作系统一嵌入式L1nux展开的,故我们首先对嵌入式操作系统作进一步的阐述。
嵌入式操作系统并不是简单嵌入的操作系统,它与通常意义上的操作系统有一定的区别。
嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、调度工作,控制协调并发活动,它必须体现所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
根据各文献的描述,嵌入式操作系统具有如下一些特征: 1.小巧。
一般嵌入式系统所能够提供的资源有限,所以嵌入式操作系统必须做到小巧以满足嵌入式系统硬件的限制。
2.实时性。
据统计,有许多嵌入式系统工作在实时性要求很高的环境中,这就要求嵌入式操作系统必须将实时性作为一个重要的指标来考虑。
在信息时代, 人们必须在有效的时间内对收到的信息进行处理,从而为进一步的决策分析争取时间如GSI客户端的信息处理。
所以,嵌入式操作系统必须体现一定的实时性。
3.可定制性。
由于嵌入式系统需要根据应用的要求进定制,所以嵌入式操作系统也必须能够根据应用的要求进行定制,去掉多余的部分,或者简化相应的模块。
基于ARM平台的Linux内核分析与移植研究
是 Ln x iu 支持的体系结构的简称 2 . 在 .3 6 2的 内核代码
中 已经 完 全 包 含 了对 S C 4 0 件 体 系 的支 持 Ln x 3 24 硬 iu
内核 主要 由 5个 子 系 统 组 成 : 程 调 度 、 进 内存 管 理 、 虚
拟文件 系统 、 网络接 口、 进程 间通信 。 iu Ln x内核代码非 常庞大 , 整体代码结构如 图 1 所示 。
3 编 译 内核
内 核 编 译 的方 式 与 引 导 程 序 移 植 大 体 相 同 .利 用
m k m g 命 令 即 可 进 行 编 译 。 当 编 译 完 成后 , 编 a ez ae l 把 译 生 成 的 映 像 z ae 过 VV 下 载 到 硬 件 平 台上 . l g通 m II 就
体 的研 究和 开 发 , 并对 内核 进 行 相 应 的修 改 和优 化 。通 过 配置 、 译 完成 整 个移 植 过 程 . 编 为
Ln x 内 核 移 植 提 供 借 鉴 。 iu
关 键 词 :Ln x 内核 ;¥ C2 4 A;内核 移 植 ;Neftr iu 3 40 tl ie
nt 而 ¥ C 4 0 理 器 包 含 了 MM i, 3 24 处 1 U模 块 , 以需 要 针 所 对 该 体 系结 构选 择 对 Ln x内核 对 MMU模 块 的 支 持 。 iu dvr: 目录 包 含 了 内 核 中 所 有 的 设 备 驱 动 程 i s该 e 序 。该 目录 占据 了 L u i x内核 的 大部 分 代码 , 常 庞大 。 n 非 是 进行 内核移 植 时需 要 重点 关 注 的 目录 . 如 L D显 示 例 C 驱 动程 序 、 摸屏 驱 动程 序 等 源代 码都 放 在该 目录下 。 触
基于ARM平台的Lniux系统移植
基于ARM平台的Lniux系统移植此文档为毕业设计,word格式下载后可随意编辑修改2017年9月修订目录摘要 (I)Abstract (II)前言 (1)第一章嵌入式技术概况 (2)1.1背景介绍 (2)1.2研究意义 (3)1.3嵌入式系统现状及发展趋势 (4)第二章系统需求分析 (7)2.1 开发平台介绍 (7)2.2 ARM微处理器简介 (7)2.3 UP-TECH硬件平台 (7)2.3.1 硬件介绍 (7)2.3.2 S3C2410 ARM MPU (8)第三章嵌入式linux 移植的实现 (9)3.1 移植环境搭建 (9)3.1.1 Tftp服务搭建 (10)3.2 bootloader概念 (11)3.2.1 Bootloader的安装媒介 (12)3.2.2 Bootloader的工作模式 (12)3.3 u-boot 简介 (13)3.3.1 u-boot目录结构 (13)3.3.2 u-boot 移植 (14)3.3.3 u-boot支持dm9000网卡 (16)3.3.4 编译u-boot (18)3.4 内核概念 (18)3.4.1 Linux内核源代码目录结构 (19)3.4.2 内核移植 (19)第四章根文件移植 (23)4.1 Linux文件系统简介 (23)4.2 Linux根文件系统介绍 (23)4.3 Busybox生成工具集 (24)4.4 yaffs文件系统简介 (24)4.5 根文件系统移植 (24)第五章设备驱动 (30)5.1 设备驱动的概念 (30)5.2 网络驱动程序移植 (31)5.2.1 DM9000 网卡驱动移植 (31)5.2.2 LCD 设备驱动移植 (34)结论 (36)参考文献 (38)附录 (40)附录1 (40)附录2 (46)致谢 (51)总结与体会 (52)基于ARM平台的Linux系统移植摘要随着计算机技术和通讯技术的迅速发展以及Internet的不断扩展,嵌入式系统得到了越来越广泛的应用。
试议移植基于ARM的最新Linux系统移植与实现
试议移植基于ARM的Linux系统移植与实现植。
Linux操作系统作为一种源代码开放、同时可支持多种处理器结构的多任务操作系统,具有内核小、易裁剪、可移植性好等优点,是目前嵌入式系统应用与开发的主流操作系统。
本文主要研究在ARM9平台上搭建嵌入式Linux系统的实现方法。
1嵌入式Linux操作系统及特点目前,在嵌入式系统开发中,52%的项目选择Linux作为嵌入式操摘要:Linux具有源代码开放、效率高、可裁剪等优点,在嵌入式系统的开发中具有广泛的应用。
文章介绍了嵌入式Linux操作系统、移植目标平台SBC2410及Linux内核源代码的目录结构,分析了Linux移植到SBC2410平台的实现过程,阐述了Linux内核、u-boot的裁剪和编译以及根文件系统的制作过程,最后在SBC2410平台上成功移植了嵌入式Linux系统。
关键词:SBC2410;Linux;嵌入式系统;系统移植2095-1302(2013)01-0037-020 引言嵌入式系统是一个专用的计算机系统。
该系统以计算机技术为基础,软硬件可裁减,但对功能、可靠性、成本等都有严格的要求。
今天,一些专用系统需要处理大量的信息,由于传统的计算机系统很难实现硬件可裁减,因而已经不能满足专用系统的需要。
伴随着我国汽车、家电等产业的快速发展,嵌入式系统的应用与开发已成为目前IT产业的一个新的热点。
基于ARM的嵌入式系统的开发,首先要解决的问题是嵌入式操作系统的移植。
Linux操作系统作为一种源代码开放、同时可支持多种处理器结构的多任务操作系统,具有内核小、易裁剪、可移植性好等优点,是目前嵌入式系统应用与开发的主流操作系统。
本文主要研究在ARM9平台上搭建嵌入式Linux系统的实现方法。
1 嵌入式Linux操作系统及特点目前,在嵌入式系统开发中,52%的项目选择Linux作为嵌入式操作系统,这与Linux自身的优良特性有不可分割的关系。
Linux操作系统内核源代码开放,并具有丰富的软件资源。
嵌入式Linux内核移植
嵌入式Linux内核移植一、基于ARM的硬件BOOT程序的基本设计1.实验步骤本实验仅使用实验教学系统的CPU板。
在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
基于ARM芯片的应用系统,多数为复杂的片上系统,该复杂系统里,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统基本的初始化工作。
由于此类代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现。
系统的基本初始化内容一般包括:(1)分配中断向量表(2)初始化存储器系统(3)初始化各工作模式的堆栈(4)初始化有特殊要求的硬件模块(5)初始化用户程序的执行环境(6)切换处理器的工作模式(7)呼叫主应用程序二、开发环境搭建实验1.实验原理绝大多数的Linux 软件开发都是以native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板上系统)运行开发工具和调试工具。
通常嵌入式系统软件的开发采用交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC 机)上,对应的开发板叫做目标板。
开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行。
)然后把可执行文件下载到目标机上运行。
调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。
宿主机和目标板的处理器一般都不相同,宿主机为PXA270。
GNU 编译器提供这样的功能,在编译编译器时,可以选择开发所需的宿主机和目标机从而建立开发环境。
所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC 机作宿主开发机,对于嵌入式Linux,宿主机上的操作系统一般要求为Redhat Linux,在此,推荐使用Redhat 9.0 作为宿主机(开发主机)的操作系统。
《嵌入式Linux系统开发标准教程》8 基于ARM的Linux内核移植
嵌入式学院—华清远见旗下品牌:《嵌入式Linux系统开发标准教程》——第8章、基于ARM的Linux内核移植第8章基于ARM的Linux内核移植本章目标本章以ARM平台为例介绍内核移植的基本方法,并且详细分析了Linux内核启动过程。
通过本章学习,读者可以明确内核哪些代码是与平台相关的,在内核启动过程中代码的执行顺序。
只有掌握了这些代码,在内核移植过程中才能有的放矢地去修改代码。
内核源码移植《嵌入式Linux系统开发标准教程》——第8章、基于ARM的Linux内核移植8.1 移植内核源码所谓移植就是把程序代码从一种运行环境转移到另外一种运行环境。
对于内核移植来说,主要是从一种硬件平台转移到另外一种硬件平台上运行。
8.1.1 移植前的准备工作对于嵌入式Linux系统来说,有各种体系结构的处理器和硬件平台,并且用户需要根据需求自己定制硬件板。
只要是硬件平台有些变化,即使非常小,可能也需要做一些移植工作。
内核移植是嵌入式Linux系统中最常见的一项工作。
内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及Linux内核通用的程序。
移植的难度也取决于两种硬件平台的差异。
Linux对于特定的硬件平台的软件就叫作BSP(Board Support Package)。
由于Linux内核具备可移植性的特点,并且已经支持了各种体系结构的很多种目标板,我们很容易从中找到跟自己硬件类似的目标板。
参考内核已经支持的目标板来移植BSP,就如同使用模板开发程序。
在开始移植开发板的BSP之前,需要做充分的准备工作。
(1)选择参考板。
选择参考板的原则如下。
n参考板与开发板具有相同的处理器,至少类似的处理器;n参考板和开发板具有相同的外围接口电路,至少基本接口相同;n Linux内核已经支持参考板,至少有非官方的补丁或者BSP;n参考板Linux设备驱动工作正常,至少已经驱动基本接口。
通常都可以找到相同处理器的参考板,并且可以获取到Linux内核源代码。
armlinux移植文档
移植文档1、嵌入式linux 简介LINUX 是一个类似UNIX 的操作系统,其代码是完全重新开放的,内核功能强大,实现简洁。
它提供了类似UNIX 的编程接口和系统调用,可以方便的将UNIX系统上的应用程序,移植到Linux上运行。
Linux具有一下特点:1.可移植性:Linux内核源代码是用C语言编写的,可以运行到各种平台。
2.支持多种处理器体系结构:Linux内核能够支持的处理器要求是32位处理器,有没有MMU都可以。
没有MMU的处理器只有uClinux支持。
Linux-内核支持的绝大多数都是带MMU的。
3.开放源代码的优势:Linux内核是开放源代码的,也就是说,用户可以免费获取,修改linux源码。
庞大的linux 社区和内核源代码工程,有很多各种各样的驱动程序和应用程序可以利用。
开发者可以免费得到社区的贡献、支持。
众所周知,Linux在嵌入式系统中的应用已经非常普遍。
为了进一步促进这方面的应用,在Linux 中,引入了很多非常有利于嵌入式应用的功能。
这些新功能包括实时性能的增强、更方便的移植性、对大容量内存的支持、支持微控制器和I/O系统的改进等。
2、内核的新特征1.改进了响应时间在内核以前,要想让Linux获得更好的响应能力,就需要一些特殊的补丁。
通常情况下,需要用户从厂商处购买补丁来改进中断性能和调度反应时间。
如今,内核把这些改进加入到了主流的内核当中,因此无需再对其进行特殊的配置。
2.抢占式内核Linux 内核在一定程度上使用了可抢占的模式。
因此,在一些时效性比较强的事件中,Linux 要比具有更好的响应能力。
当然了,它实际上并不是一个真正的RTOS,但是与以前的内核相比较,“停顿”的感觉要少得多。
3.高效的调度程序在版本中,进程调度经过重新编写,去掉了以前版本中效率不高的算法。
调度程序每次不再扫描所有的任务,而是在一个任务变成就绪状态时将其放到一个名为“当前队列”的队列之中。
当进程调度程序运行时,它只选择队列中最有利的任务来执行。
ARM开发教程之ARM Linux系统移植步骤
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之LINUX简介 LINUX简介 LINUX
在众多嵌入式操作系统中,Linux目前发展最快、应用最为 广泛[1]。性能优良、源码开放的Linux具有体积小、内核可 裁减、网络功能完善、可移 植性强等诸多优点,非常适合 作为嵌入式操作系统。一个最基本的Linux操作系统应该包 括:引导程序、内核与根文件系统三部分。 与Linux2.4内核相比,2.6内核吸收了最新的技术,在 性能、可测量性、器件支持和可用性方面有了大幅度提高; 支持更多的体系结构、处理器、总线、接口和设备;标准 化了内部接口;简化了扩展或添加新设备的步骤等。 本文着重介绍如何制作一个基于linux-2.6.19内核的小 型Linux操作系统,并将它移植到S3C2410开放板上。内容 包括交叉编译环境的建立,引导程序、2.6.19内核、根文 件系统的修改、配置、编译、移植等。
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
org内核吸收了最新的技术在?千锋3g嵌入式移动互联网技术研发中心arm开发教程之系统的制作移植建立交叉编译环境?要移植开发小型linux系统首先要在安装了redhat9或更高版本linux操作系统的主机上配置交叉开发环境
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之根文件系统 根文件系统
Linux系统中的文件和设备是通过文件系统来组织的。 文件系统的存在使得数据和设备可以被有效而透明地 存取访问。一个linux的最简根文件系统应该包括支持 linux系统正常运行的基本内容,包括系统使用的软件 和库,以及所有用来为用户提供基本支持的架构和指 令。 在根文件目录rootfs下建立bin、dev、etc、lib、 proc、sbin、root、tmp等一系列必备的目录,把所需 的配置文件、动态 函数库放到相应的目录。采用 BusyBox是缩小根文件系统的好办法。BusyBox以很小 的体积集成了最常用的linux命令和应用程序,大大简 化了制 作linux根文件系统的过程。
Linux内核移植到ARM
Linux内核移植到ARM在Linux内核移植到ARM处理器时,有一个问题不能忽视,那就是移植Boot-loader,Linux内核启动部分的代码需要判断从Boot-loader传递过来的寄存器值。
为什么需要Boot-loader呢?这与硬件本身的启动方式有关,有了Boot-loader可以方便系统的开发。
通过这段Boot-loader小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
(1)Boot-loader所支持的CPU和嵌入式板每种不同的CPU体系结构都有不同的Boot-loader,有些Boot -loader 也支持多种体系结构的CPU,如U-Boot。
除了依赖于CPU 的体系结构外,Boot-loader实际上也依赖于具体的嵌入式板级设备的配置。
这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的Boot-loader程序也能运行在另一块板子上,通常也都需要修改Boot-loader的源程序。
(2)Boot-loader的安装媒介系统加电或复位后,所有的CPU通常都从某个预先安排的地址上取指令。
比如,基于ARM内核的CPU在复位时通常都从地址Ox00000000取它的第一条指令。
而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或Hash等)被映射到这个预先安排的地址上。
因此在系统加电后,CPU将首先执行Boot-loader程序。
如图所示就是一个同时装有Boot-loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。
图固态存储设备的典型空间分配结构(3)用来控制Boot-loader的设备或机制主机和目标机之间一般通过串口建立连接,Boot-loader软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.2.5 挂接根文件系统 Linux能够在内存中虚拟磁盘文件系统,叫作 ramdisk。如果为内核配置了ramdisk设备和文件系 统,就安装好ramdisk文件系统,然后再挂接根文 件系统,在初始化设备驱动程序之后执行 prepare_namespace()函数,它负责为Linux系统挂 接一个根文件系统。
6.2.1 内核启动流程分析
s t a r t : d e c o m p r e s s _ k e r n e l ( )
c
a
l l _
k
e
r n
e
l ( )
s t e
x
t :
s t a
r t _
k
e
r n
e
l ( )
s e
t u
p
_ …
a
r c
Байду номын сангаас
h
( )
r e
s t _
i n
i t ( )
i n
6.2.6 初始化设备驱动 内核子系统已经基本上初始化好了,CPU子系统 已经正常工作,内存管理和进程管理已经正常运 转,但是还没有使用任何设备。接下来继续初始 化内核设备驱动程序,然后才能访问设备,做系 统真正想要做的任务。
6.2.7 启动用户空间init进程 Linux系统在挂接根文件系统之后,要执行文件系 统的中的应用程序。有些应用程序可能要完成嵌 入式系统的。init进程是通过执行根文件系统中init 程序启动的。
i t ( )
d
o
_
b
a
s i c
_
s e
t u
p
( )
p e
r e
p
a
r e
_
n
a
m
e
s p
a
c
e
( ) ,
x e c v e ( “ / s b i n / i n i t ” a r g v _ i n i t , e n v p _ i n i t )
6.2.2 内核自引导程序 zImage映像的入口代码是自引导程序。自引导程 序包含一些初始化代码,所以它是体系结构相关 的,这个目录是arch/$(ARCH)/boot。第一条指令 所在的文件是自引导程序中的head.S。
本节目标
内核源代码移植 Linux内核启动过程分析
6.1 移植内核源码 所谓移植就是把程序代码从一种运行环境转移到另 外一种运行环境。对于内核移植来说,主要是从一 种硬件平台转移到另外一种硬件平台上运行。
6.1.1 移植前的准备工作
内核移植是嵌入式Linux系统中最常见的一项工作,内核移植 工作主要是修改跟硬件平台相关的代码,一般不涉及linux 内核通用程序。 (1)选择已成功移植的并与目标板类似的参考板 CPU体系结构相同、外围接口电路相似、参考板Linux设备 驱动正常; (2)编译测试参考板的Linux内核 (3)分析参考板的BSP代码 分析平台相关的部分代码实现; 分析内核编译组织方式; 分析内核启动的初始化程序; 分析驱动程序的实现; 分析驱动程序实现。
6.1.3 移植后的工作 移植完成以后,就可以发布这个内核源代码了。 最常见的方式是发布内核补丁。基于一个稳定的 内核版本制作补丁文件,可以方便地保存和分发 。
6.2 Linux内核启动过程分析 Linux内核启动就是引导内核映像启动的过程。典 型的内核映像是zImage,包含自引导程序和压缩 的vmlinux 两部分。启动过程也就是解压和启动 vmlinux的过程。 启动过程从内核映像入口开始执行,解压vmlinux 并且转换到虚拟地址空间,再调用统一的内核启 动函数start-kernel(),从而启动整个linux系统。 从内核源代码的角度分析,启动过程是一系列汇 编子程序和C函数的调用过程。
本节以ARM平台为例介绍了内核移植的基本方法, 本节以 平台为例介绍了内核移植的基本方法, 平台为例介绍了内核移植的基本方法 并且详细分析了Linux内核启动过程。 内核启动过程。 并且详细分析了 内核启动过程 通过本节学习, 通过本节学习 , 可以明确内核哪些代码是与平台 相关的,在内核启动过程中代码的执行顺序。 相关的,在内核启动过程中代码的执行顺序。 只有掌握了这些代码, 只有掌握了这些代码 , 在内核移植过程中才能有 的放矢地去修改代码。 的放矢地去修改代码。
6.1.2 开发板内核移植 对于内核移植工作来说,主要是添加开发板初始化 和驱动程序的代码。这部分代码大部分是与体系结 构相关的,在arch目录下按照不同的体系结构管理。 1.添加开发板平台支持选项 . ARM平台相关的选项都是在arch/arm目录下实现的。 在内核编译过程中已经说明,需要在顶层Makefile中 设置相应的体系结构和工具链。这样配置Linux内核 的时候就会调用arch/arm/Kconfig文件。 2.移植开发板驱动程序 . 不同的开发板可以使用不同的SDRAM、Flash、以太 网接口芯片等。这就需要根据硬件修改或者开发驱 动程序。
6.2.3 内核vmlinux入口 PC指针已经指向vmlinux的入口地址,顺序执行内 核启动程序, vmlinux开始部分也有一些汇编程序 ,对应的程序文件为head.S,经过 一系列的初始 化过程,打开MMU,跳转到start-kernel()函数。
6.2.4 Linux系统初始化
start_kernel函数是Linux内核通用的初始化函数。 无论对于什么体系结构的Linux,都要执行这个函 数。start_kernel()是内核初始化的基本过程。 start_kernel()函数负责初始化内核各子系统,最后 调用rest_init(),启动init内核线程,继续初始化,在 init内核线程中,将执行init()函数,负责完成挂接 根文件系统、初始化设备驱动程序和启动用户空 间的init进程等重要工作。 对于Linux系统来说,挂接根文件系统、初始化设 备驱动程序和启动用户空间的程序是必要的3项工 作,分析这些重要工作的实现函数,有助于理解 内核启动过程。