基于ARM的嵌入式linux内核裁剪及移植实战
基于嵌入式ARM9的Linux系统移植的研究和实现
2020年第8期信息与电脑China Computer & Communication软件开发与应用基于嵌入式ARM9的Linux 系统移植的研究和实现冯宁波 周 剑(苏州长风航空电子有限公司,江苏 苏州 215151)摘 要:笔者以ARM9处理器为硬件,对嵌入式系统展开分析,并对安装到嵌入式ARM9芯片开发板上的Linux 系统移植进行研究。
Linux 系统移植步骤如下:首先初始化随机存取存储器,设置堆栈,引导加载程序移植;然后下载Linux 内核,修改Makefile 文件,设计交叉编译环境;最后依据内核启动过程,指定启动初始值,控制后台,并执行制作菜单配置命令。
关键词:嵌入式ARM9;Linux 系统;移植;内核中图分类号:TP311.54;TP316.81 文献标识码:A 文章编号:1003-9767(2020)08-078-02Research and Implementation of Linux System Migration Based on EmbeddedARM9Feng Ningbo, Zhou Jian(Suzhou Changfeng Avionics Co., Ltd., Suzhou Jiangsu 215151, China)Abstract: The author takes ARM9 processor as hardware, analyzes the embedded system, and studies the Linux systemporting installed on the embedded ARM9 chip development board. The steps of Linux system porting are as follows: first, initialize random access memory, set stack, boot loader porting; then download Linux kernel, modify makefile file, and design cross compiling environment; finally, according to the kernel startup process, specify the initial startup value, control the background, and execute thecommand of making menu configuration.Key words: embedded ARM9; Linux system; transplantation; kernel0 引言微电子技术快速发展使计算机技术支持下的嵌入式系统得到广泛应用,该系统因软硬件可裁剪、使用性能良好,受到人们青睐[1]。
嵌入式Linux在ARM上的移植
Linux在ARM上的移植摘要:本文是基于ARM的平台上进行嵌入式操作系统LINUX的移植,其中ARM选S3C2410。
文中首先对Linux操作系统内核进行了介绍,然后对系统引导程序(BootLoader)进行了设计,最后给出了Linux在ARM上的移植过程。
关键字:Linux、ARM、BootLoader、移植一、Linux操作系统内核Linux作为一种优秀的操作系统,近几年在嵌入式领域成为了极具潜力的嵌入式操作系统。
本文的主要内容是将Linux系统的内核移植到ARM(基于ARM9S3C2410)上。
Linux操作系统主要由内核、Shell、文件结构组成。
其中内核是系统的心脏,是运行程序和管理磁盘、打印机等硬件设备的核心程序。
(1)Linux内核结构Linux内核是整个Linux系统的灵魂,负责整个系统的内存管理、进程调度和文件管理。
Linux内核与大部分UNIX内核一样是单内核体系结构的,能够根据需要定制内核映像的尺寸,具有很大灵活性,不需要重新编译内核和引导就能检验新的内核组件,这个特性对于嵌入式而言是非常有好处的,方便用户构筑自己的个人内核。
Linux内核由5个主要的子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。
(2)Linux内核代码组织结构本文将对LINUX进行内核移植,其内核代码分布如图所示。
下面分别对其进行说明:/arch目录包含了目前Linux支持的硬件结构,如i386、alpha、arm等的内核代码;/drivers目录包含了内核中所有的设备驱动程序;/fs目录包含了所有的文件系统的代码;/include目录包含了建立内核代码所需的大部分库文件,这个模块利用其它模块重建内核;/init目录包含了内核的初始化代码,内核从此处工作;/ipc目录包含了进程间通信代码;/kernel子目录包含了主内核代码;/mm目录包含所有独立于CPU体系结构的内存管理代码;/net目录包含了和网络相关的代码,如ipv4、ipv6等。
07_嵌入式Linux内核裁减移植
什么是Linux内核?
内核架构
内核配置与编译
Linux内核具有可定制的优点 ,具体步骤如下:
1. 清除临时文件、中间文件和配置文件 .
• make clean:remove most generated files but keep the config • make mrproper:remove all generated files + config files • make distclean:mrproper + remove editor backup and patch files
怎样编译文件
(4)obj-m,定义文件编译成可加载模块 obj-m中定义的.o文件由当前目录下的.c或.S文件编译生成,但不会编进 build-in.o中,而是编译成可加载模块.ko 当某个模块(m)需要多个文件编译制作而成: obj-m = a.o a-objs:= b.o, c.o, d.o 由b.o,c.o,d.o组合生成a.o,a.o最后制作成a.ko模块 (5)、obj-m、obj-y变量中增加子目录名则进入该子目录执行Makefile (6)、 lib-y,定义文件被编译成库文件 lib-y中定义的.o文件由当前目录下的.c或.S文件编译生成,并且被打包成当前目 录下的一个库文件lib.a 要把lib.a编译进内核,需要在顶层Makefile中libs-y中列出该目录 要编译成库的代码一般在lib/、arch/$(ARCH)/lib/这两个目录下
•
内核配置与编译
4、编译内核: • 编译内核映像 – make zImage – make bzImage
区别:在X86平台, zImage只能用于小于 512K的内
生成带Uboot文件头的的内核:make uImage 注意需要uboot的mkimage工具支持,但本开发板uboot支持直接引导zImage 参见:cmd_bootm.c:#ifdef CONFIG_ZIMAGE_BOOT • 如需获取详细编译过程信息,可使用: – make zImage V=1 – make bzImage V=1 编译出错时,可以通过查看编译过程信息定位错误,例如缺 少某些编译选项时 可以到相应目录下的Makefile去修改 编译好的内核位于arch/<cpu>/boot/目录下
基于ARM9嵌入式Linux内核的移植
一
ห้องสมุดไป่ตู้
I 在 相 关 地 方 增 加 修改根 目录中的 Ma ef 文件。这个 j“ CONFI ARCH— 3 4 0 = kfe l ¥ G— S C2 1 ”
Ma e l  ̄ kfe 件的任务有两个 : i3 产生v iu  ̄ i“ ml x n y”一 这个语句。 。 件 和 产 生 内 核模 块 。为 了达 到 此 目的 , 1 关键点: of 文件决定了m ncni cn g i euof g Ma ei 将递 归进入内核的各个子 目录中, 菜单的 内容 。把使 用的平 台加在需要的地 kf e l 分别调用位于这些子 目录中的 Ma ef 。 k f e j l 方,这样在配置Ln x时就能够选择是否 iu 打开最上 层目录下的 Ma ei 文 件, 1 k fl e 支持 你的 平台 了。 这个文件 中修改后 的内容如 下所示 : 1 4 . 改ac / r b o )修 r h a m/ o t目录下的 ( )指定 目标平台 :ARCH:= a m Ma ei 文件 1 r kfe l (2 ) 指 定 交 叉 编 译 器 : { 编译出来的内核是存放在 ac / r r am/ h
解压到 目标板的地址 :修改 b o 目录下的 ot 2. )根据电路设置T XT DD E A R { kfe Mael文件 ; i 修改 cm r s / kfe o pe e Mael sd i 因为 2. 1 4. 8版本 的内核还没有包含 1文 件 。
¥C 40 3 2 1X处理器 ,所以要手动增加下面内 } 5. ac /r / e e 目 ) 修改 r am kr l 录下的文 h n 容 『 件 i q¥C FG AR H_ 3 2 1)y f ((ON I_ C S C 40,) e
Linux内核在ARM上的裁减与移植
2
Linux 内核移植概述
所谓 L inux 移植就是把 L inux 操作系统源码
针对具体的目标平台做必要改写之后, 安装到该目 标平台使其正确的运行起来。在 L inux 移植的过 程中可以通过裁减、 修改源码等达到增强新系统的 实时性或者减小新系统的体积等目的
[ 4]
3
Linux 内核配置与裁减
of oper ating system can be do ne in the fo llow ing st eps: conf ig ur ation, ta ilor of so urce co de, cr o ss co mpilation. T his paper make a detaile d descr iption abo ut ite ms abo ve, and the r ealiza tio n of it. T r ansplantation o f oper ating sy stem is the ba se o f embedded sy stem, so has a impor tant significance o n de velopment o f e mbe dded system. Key words linux ker ne l, tailo r, cro ss co mpilatio n, tr ansplanta tio n Class Number T P311
1
Linux 系统及 Linux 内核简介
一个完整的系统 主要 5 部分组成 : 硬件、 Boot lo ader 、 操作 系统内核、 操作 系统服 务和用 户应 用 程序 , 如 图 1 所示。用户应用程序是指那
块 5 个模块构成, 如图 2 所示。
基于ARM的嵌入式linux内核裁剪及移植
V 1 5 N .( U o1 8 o. o S M N . 1 ) 2 6
机 械 管 理 开 发
M ECHANI CAL M AN AGEM ENT AND DEVEL0PM ENT
2 0年 1 01 2月
D e .0l c2 0
b nuis 2.5. rb 2、 c 一 3. trbz i t - 1 t . z g c 3. 6. . 2、g i - 2-. . r l a a lbc 3 2t . a
b2 l c l utra s232t . 和 l u -ic ha — z 、g b —i x ed - ...r i n h ag i x l - ed n b
2 B ola e 的 移 植 . 2 ot dr o .
基础上经过裁剪 、 修改 , 适用于嵌入式系统并应用于特 定 嵌入 式场 合 的专 用 Lnx 作 系统 。与其 它 的嵌 入 iu 操 式 操作 系统 相 比, 入 式 Ln x 有 以下 特点 : 有 开 嵌 iu 具 具 放源代 码 , 系统 内核较小 、 效率 高 、 内核 网络结 构完整 , 针对 嵌入 式 的存 储方 案 , 供 实 时版 本和 完 善 的嵌入 提 式解决方 案 、 备一 整套 工具链 , 易搭建嵌 入式 系统 具 容 的 开发环 境 , 减后 的 系统 适用 于诸 如信 息 家 电等嵌 裁 入式 系统 的开发 。
0
引 言
目前 , 种嵌 入式 Lnx 各 iu 操作 系统迅 速 发展 , 已形 成 了 能 与 Widw C no s E等嵌 入 式操 作 系统 进行 有 力 竞 争 的局 面 。嵌 入 式 Lnx 作 系统 的迅 速 崛 起 , iu 操 主要
基于ARM的嵌入式Linux操作系统移植
第节绪沦内核精小、效率高,并且具有,:百度的模块化和扩一展性:具备文件和日录针理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(A川),开发应用程序简单;嵌入式应用软件丰富。
第四阶段是以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。
目前大多数嵌入式系统还孤立于Internet之外,但随着工nternet的发展以及工nternet技术与信息、家电、工业控制技术等结合日益密切,嵌入式设备与InteI'net的结合将代表着嵌入式技术的真正未来。
妇.2嵌入式操作系统的主要特点随着嵌入式系统的不断发展,可以看到嵌入式操作系统在嵌入式系统中的作用日显重要,它可以为嵌入式系统开发人员提供一个基本的软件开发和运行的支撑平台,从而大大减少了复杂嵌入式系统的开发难度和开发周期,增强了系统的稳定性,降低开发和维护成本。
本论文的工作也是针对特定的嵌入式通用操作系统一嵌入式L1nux展开的,故我们首先对嵌入式操作系统作进一步的阐述。
嵌入式操作系统并不是简单嵌入的操作系统,它与通常意义上的操作系统有一定的区别。
嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、调度工作,控制协调并发活动,它必须体现所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
根据各文献的描述,嵌入式操作系统具有如下一些特征: 1.小巧。
一般嵌入式系统所能够提供的资源有限,所以嵌入式操作系统必须做到小巧以满足嵌入式系统硬件的限制。
2.实时性。
据统计,有许多嵌入式系统工作在实时性要求很高的环境中,这就要求嵌入式操作系统必须将实时性作为一个重要的指标来考虑。
在信息时代, 人们必须在有效的时间内对收到的信息进行处理,从而为进一步的决策分析争取时间如GSI客户端的信息处理。
所以,嵌入式操作系统必须体现一定的实时性。
3.可定制性。
由于嵌入式系统需要根据应用的要求进定制,所以嵌入式操作系统也必须能够根据应用的要求进行定制,去掉多余的部分,或者简化相应的模块。
基于ARM9的嵌入式的linux操作系统的移植
This research mainly divides into the following several aspects:
Research on Embedded Linux from the module to the function of different levels of cutting, hardware platform is based on the CPU: S3C2440A core ARM920T, Samsung, 400MHZ SDRM: typical frequency; 64Mbyte, FLASH: NOR FLASH: 24M bytes (for bootloader) NAND FALSH: 64M byte; embedded system concept and current situation; embedded system development model; introduce start kernel and kernel tailoring; embedded Linux transplantation; Linux embedded system development environment tool chain generation and integrated development environment to build.
基于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架构linux3.0.35内核裁剪
linux3.0.35的内核裁剪的具体过程胡志鹏1、General setup ---->1.01 Prompt for development and/or incomplete code/drivers默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动。
当内核中含有不成熟的代码或驱动,需要选上,主要用在测试阶段。
(产品成熟后,再去掉此选项)。
这里选上1.02 Cross-compiler tool prefixCONFIG_CROSS_COMPILE=""交叉编译工具前缀。
这里不选1.03 Local version - append to kernel release在内核版本后追加的字符串,字符串不得超过64字节,也就是uname -r可以看到的版本,可以自行修改,这里我没有使用。
1.04 Automatically append version information to the version string自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持1.05 kernel compression mode (Gzip)1.06 ((none)) Default hostnameCONFIG_LOCALVERSION_AUTO=yCONFIG_DEFAULT_HOSTNAME="(none)"指定一个默认的主机名。
指定了这个以后,可以省去使用sethostname命令设置主机名称。
在制作最小系统时比较有用。
1.07 support for paging of anonymous memory(swap)CONFIG_SWAP=y是否支持交换分区,使用交换分区或者交换文件来作为虚拟内存,也就是让计算机好像拥有比实际内存更多的内存空间用来执行很大的程序。
Linux中的虚拟内存即SWAP分区,除非不需要SWAP分区,否则这里选择Y。
嵌入式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内核源代码。
基于ARM的嵌入式linux内核的裁剪与移植
基于ARM的嵌入式linux内核的裁剪与移植前言嵌入式系统一直是计算机行业中的领域之一。
在许多应用程序中,嵌入式系统越来越流行。
嵌入式系统通常使用嵌入式芯片,如ARM芯片,并且它们通常运行Linux内核。
Linux内核是一个开放源代码的操作系统内核。
在嵌入式领域,Linux 内核可以被用于实现各种应用程序。
本文将重点介绍如何基于ARM平台的嵌入式Linux内核进行裁剪和移植。
ARM平台ARM处理器是一种RISC(Reduced Instruction Set Computer)处理器。
这种类型的处理器可用于嵌入式系统开发,因为它具有较低的功耗和高效的性能。
ARM处理器有许多版本,其中包括ARMv6和ARMv7。
ARMv6通常用于嵌入式系统,而ARMv7则用于智能手机和平板电脑等高端设备。
Linux内核的裁剪在嵌入式系统中,Linux内核需要进行裁剪,以适应嵌入式设备的需求。
与桌面计算机相比,嵌入式系统拥有更少的资源,包括RAM、闪存和存储空间。
因此,在将Linux内核移植到嵌入式系统之前,必须将内核进行裁剪。
在裁剪内核之前,您必须确定哪些内核模块是必需的。
一些模块可以从内核中移除,以减少内核的大小。
通常,将不必要的模块和其他功能从内核中移除可以使内核变得更小并具有更好的性能。
另外,裁剪内核时应确保其他组件与内核兼容。
例如,在新内核中可能需要更改驱动程序或实用程序以适应修改后的内核。
裁剪内核可能是一项比较困难的工作,需要深刻了解Linux内核的各个方面,以确保正确地裁剪内核。
移植Linux内核到ARM移植内核是将Linux内核适应新硬件的过程。
在开始移植内核之前,您必须了解嵌入式设备的硬件架构以及所需的内核组件。
移植Linux内核到ARM可以分为以下步骤:1.选择合适的ARM平台和处理器并确定所需的内核选项。
2.下载最新的内核源代码。
3.配置内核选项,并使其适应新硬件。
4.使用交叉编译器编译内核。
嵌入式系统课件_内核裁剪和移植
设置cpu
LCD 驱动
配置触摸屏
配置 USB 鼠标和键盘
网卡支持
编译内核
制作文件系统映像
把自己的程序或文件复制到这个文件系 统在PC 机上的相应目录里面去,然后 重新打包生成 image,下载和烧写
打开ftp软件
Linux移植
7.通过TFTP下载Linux内核(zImage) 到RAM中 SMDK2410 # tftp 0x30008000 zImage //主机的zImage文件放在
0x100000为内核的大小,0x100000可被替换为大于内核大小且 是0x20000倍数的最小整数。
Linux移植
Linux移植
通过TFTP下载文件系统(ramdisk.image.gz) 到RAM中 SMDK2410# tftp 30800000 ramdisk.image.gz//主机的
/tftpboot目录下
下载内核
文件系统
Linux移植
将RAM中的内核烧写到flash中 SMDK2410# fl 0x1040000 0x30008000
0x100000
0x1040000为内核烧写到Flash的地址,当ppcboot启动后它会从 此地址加载Linux内核。
0x30008000为上一步使用的内核下载到内存中的地址。
嵌入式系统
— 内核裁剪和移植
•Linux 内核移植裁减
内核移植裁减步骤 A、下载最新版本的内核 B、修改内核代码 C、裁减内核
内核的下载地址
/download/0007000/6156.shtml /pub/linux/kernel/v2.6/
根目录下的Makefile
指定目标平台和交叉编译器
嵌入式Linux内核裁剪和移植
嵌入式linux内核的裁剪和编译
具体配置菜单:(16/26)
• 15 、Plug and Play support 这是对PNP(即插即用)设备的支持.
IT Education & Training
26
嵌入式linux内核的裁剪和编译
12
嵌入式linux内核的裁剪和编译
具体配置菜单:(3/26)
• 3 、 system type 系统类型,主要是CPU 的类型。 S3C2410 的ARM 系列CPU
IT Education & Training
13
嵌入式linux内核的裁剪和编译
具体配置菜单:(4/26)
IT Education & Training
8
嵌入式linux内核的裁剪和编译
IT Education & Training
比如要对USB support进行选择,具体如下图所示: 直接编译进 内核 模块方式编 译进内核 不编译进内 核
9
嵌入式linux内核的裁剪和编译
IT Education & Training
第三步:键入make clean命令,删除已生成的模块和目标文 件,即在编译新内核之前清除干净环境; 第四步:键入make dep命令,编译变量依赖关系等; 第五步:键入make zImage 生成经压缩以后的内核映像文件 zImage ; 第六步:make modules ----编译模块; 第七步:make modules_install ----安装编译完成的模块; 注意:内核映像文件zImage存放在./arch/arm/boot/ 目录下
24
嵌入式linux内核的裁剪和编译
基于ARM的嵌入式Linux操作系统移植
收稿日期:2004—12—01作者简介:英海燕(1962—),女,毕业于山东临沂师范学院,临沂师范学院图书馆馆员。
基于ARM 的嵌入式Linux 操作系统移植英海燕(山东临沂师范学院,临沂276005)〔摘 要〕 论述了基于ARM 微核的微处理器上的嵌入式Linux 操作系统的移植技术,结合具体实例给出了在特定硬件平台上的实现过程,并且详细说明了如何建立交叉开发环境的方法。
对其他嵌入式操作系统的开发同样具有参考意义。
〔关键词〕 操作系统;ARM;Linux〔Abstract 〕 P orting technique of embedded Linux operating system based on ARM is discussed in this paper.The porting process on the special hardware platform is implemented and cross 2compile environment is builded with the concrete examples.The embedded Linux porting is helpful to exploit other embeded operating system.〔K ey w ords 〕 operating system ;ARM ;Linux 〔中图分类号〕G 25017 〔文献标识码〕B 〔文章编号〕1008-0821(2005)05-0155-02 目前,在嵌入式系统里基于ARM 微核的嵌入式处理器已经成为市场主流。
随着ARM 技术的广泛应用,建立面向ARM 构架的嵌入式操作系统也就成为当前研究的热点问题。
目前已经涌现出了较多的嵌入式操作系统,例如T or 2nado 的VxW ork 、微软的Windows CE 等等。
在众多的嵌入式操作系统里,开发人员选择的却都是Linux ,这是因为它公开源代码,可以让任何人将其修改移植到自己的目标平台系统里使用。
基于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内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。
基于ARM9嵌入式Linux内核的移植
-113-1.引言操作系统的移植是指通过对操作系统的改造,使同一个操作系统可以在不同的硬件平台上运行。
如果一个系统可以在不同硬件平台上运行,那么这个系统就是可移植的。
Linux 操作系统就可以通过移植,运行在ARM 等多种硬件平台上。
考虑到嵌入式系统是“硬件可裁减”的,以及不同的用户需求,我们需要对已有的内核代码进行裁减移植。
一般情况下的Linux 内核的剪裁及移植,主要是针对操作系统中关于具体硬件以及除去不需要的功能模块,如一些不会用到的外设支持、驱动程序、协议、网络支持、文件格式等。
Linux 内核具有很好的模块性和伸缩性,在资源要求严格的情况下经过合理的裁减可获得明显的效果[1]。
Linux 内核支持很多的硬件体系结构如ARM,PowerPC 等,但由于新的硬件设备不断出现,根据新的硬件平台移植内核是嵌入式系统构建的必须工作。
2.交叉编译环境的建立Linux 下的交叉编译环境主要包括以下几个部分:针对目标系统的编译器gcc ;针对目标系统的二进制工具binutils ;目标系统的标准c 库glibc ;目标系统的Linux 内核头文件,G D B 调试工具。
交叉编译环境的建立主要是在Linux 下创建以上工具。
这里重点介绍gcc 建立过程:基于ARM9嵌入式Linux内核的移植方兴 贵州师范大学机械与电气工程学院 5500021).下载arm-linux-gcc.3.3.2.tgz 软件包到宿主机Linux 操作系统上。
2).在终端下解压安装交叉编译器,命令如下:tar xvzf arm-linux-gcc.3.3.2.tgz /usr/local/arm3).修改环境变量:为了方便的使用arm-linux-gcc 编译器系统,最好把arm-linux 工具链目录加入到环境变量PATH 中,即修改/etc/profile 文件,在PATH 变量中加入pathmunge /usr/local/arm/3.3.2/bin 语句。
嵌入式系统设计实验三 LINUX内核在arm平台上的移植
• Init.S主要完成以下功能:
◆定义数据、代码段、bbs(未初始化数据段)起始地址变量并对bbs段初始化 ◆设置寄存器以初始化系统硬件 ◆关闭中断 ◆初始化LCD显示 ◆将数据段复制到内存 ◆跳转到内核起始函数start_kernel继续执行 ◆对主寄存器的修改
• * it under the terms of the GNU General Public License version 2 as
• * published by the Free Software Foundation.
• uClinux是通过对标准Linux内核裁减,去除虚拟内存管理部 分的代码,并对内存分配进行优化,从而达到提高系统运 行效率的目的。
• 因此uClinux的应用程序开发要求用户自己正确的处理内存 管理,一旦错误地修改了其他进程的内存,将可能造成系 统死机。基于像ARM2410这样的ARM9内核的ARM-Linux使 用了MMU的内存管理,对进程有保护,提高了嵌入式系 统中多进程的保护能力。使用户应用程序的可靠性得以提 高,降低了用户的开发难度。
结构相关的内存管理代码位于arch/*/kernel目录下。 • /net目录,里面是核心的网络部分代码,其每个子目录对
应于网络的一个方面。
• 其他目录,Documentation目录存放了许多文档。scripts目 录存放配置内核的一些脚本文件。
Linux内核移植 1
• Linux内核的移植主要包含启动代码的修改,内核的链接及装 入,参数传递,内核引导几个部分。我们在移植工作中要改 动的代码主要集中在与体系结构相关部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
具 软 件 Busboy 和 MKCRAMFS 制 作 CRAMFS 文 件 系
统。首先在本地建立根文件系统 myroot,然后在其目
录下建立所需要的子目录,bin,dev,usr, mnt, proc,
lib,sbin 等。建立好目录之后要各相应的目录复制相
应的文件或库,可以通过 BusyBox 来实现[4]。
行配置,配置完成后通过输入命令:make 即可在/arch/
arm/boot 下生成所需要的内核文件 zImage。
2.4 文件系统
目前嵌入式系统可以选择的根文件系统有:
Romfs、CramFS、Ramfs、Jffs2、Ext2 等等,本系统采
用 CramFS 作为 uCLinux 嵌入式系统的只读根文件系
#mkcramfs root cramfs.Img
根据可用的系统资源和引导装载程序的功能,内 核 可 以 编 译 成 vmlinux、Image 或 zImage。 vmlinux 和 zImage 之间的主要区别在于 vmlinux 是实际的(未压缩 的)可执行文件,而 zImage 是或多或少包含相同信息 的自解压压缩文件―只是压缩它以处理(通常是 Intel 强制的)640 KB 引导时间的限制。
Linux 的程序源码全部公开,任何人都可以根据自 己的需要裁剪内核,以适应自己的系统。文章以 linux 移植到 ARM920T 内核的 S3C2410 处理器芯片为例,介 绍了嵌入式 linux 内核的裁剪以及移植过程,文中介绍 的基本原理与方法技巧也可用于其它芯片。 2.1 交叉编译环境
嵌入式开发之前,首先要建立一个交叉编译环境, 这是一套编译器、连接器和 libc 库等组成的开发环 境。在主机上创建一个用于编译并将在目标上运行的 内核和应用程序的构建环境。交叉编译器完整的安装 涉及到多个软件安装,最重要的有 binutils、gcc、glibc 三个 。 [3] 其中,binutils 主要用于操作二进制文件的实
统。Cramfs 是 Linus 的一个文件系统,有很好的压
率,可直接从 Flash 上运行,不需 load 到 RAM 中,
节约了 RAM。但 Cramfs 是只读的,对于需要运行时
修改的目录 (如:/etc, /var, /tmp) 多有不便。因此,
一般将这些目录做成 ramfs 等可写的 fs。可以利用工
0引言 目前,各种嵌入式 Linux 操作系统迅速发展,已形
成了能与 WindowsCE 等嵌入式操作系统进行有力竞 争的局面。嵌入式 Linux 操作系统的迅速崛起,主要 是由于人们对自由软件的渴望与嵌入式系统应用的特 制性,要求提供系统源码层次上的支持等,而嵌入式 Linux 正是为满足这一需求出现的。由于商业嵌入式 操作系统昂贵,系统源码封闭,需要较长时间来学习掌 握,因此许多用户采用免费和开放源码的嵌入式系统, 基于 Linux 的嵌入式系统是目前较为常用的一种开源 的嵌入式操作系统[1]。但 Linux 也有自己的缺点,内核 比较大,实时性能也比较差,所以它不适用于实时性要 求很高的领域。 1 嵌入式 Linux 操作系统
CROSSCOMPILE-/opt/crosstoo1/gcc-3.3.6-glIhc-2.3.2/
arm-linux/bin/arm-linux;2)设置 NAND FLASH 分区;
在 areh/arm/maeh s3c2410/devs.C 中添加头文件;3)将
static struct mtd-partition partition-info[]中的分区和 VI⁃
系统加电或复位后,CPU 通常都从 CPU 制造商 预先安排的地址上取指令,如基于 ARM9 内核的 CPU 在 复 位 时 都 从 地 址 Ox00000000 处 取 它 的 第 一 条 指 令。而嵌入式系统通常都有某种类型的固态存储设备 (如 ROM、EEPROM 或 FLASH 等)被安排在这个起始 地址上。因此在系统加电或复位后,处理器将首先执 行存放在起始地址处的程序。通过集成开发环境 IDE 可以将 BootLoader 定位在起始地址开始的存储空间 内。所以,BootLoader 是系统加电后,操作系统内核 或用户应用程序运行之前,首先必须运行的一段代 码。通过这段小程序可以初始化硬件设备、建立内存 空间的映射图,从而将系统的软硬件环境带到一个合 适的状态,以便为最终调用操作系统内核准备好正确 的环境。
从 网 上 下 载 所 需 资 源 文 件 linux-2.6.27.tar.bz2、 binutils-2.15.tar.bz2、gcc-3.3.6.tar.bz2、glibc- 2.3.2.tar. bz2、glibc-linuxthreads-2.3.2.tar.g 和 linux-libc-head⁃ ers- 2.6.12.0.tar.bz2。然后将这些工具包文件放在新 建 的/home/downloads( 刚 开 始 文 件 名 是 建 立 成 down⁃ load,后来改成 downloads)目录下,最后在/home 目录下 解压 crosstool-0.42.tar.gz,修改 arm.sh 脚本,及配置文 件、添加环境变量后。重新启动终端即可链接成功。 2.2 Bootloader 的移植
【摘 要】 文章介绍了嵌入式 Linux 系统的框架、构建及其移植方法,并以 S3C2410 处理器芯片为例,将 Linux 操作 系统移植到 ARM 处理器上;并介绍了开发环境的搭建、Bootloader 的架构及功能、内核、文件系统的编译及移植 方法。 【关键词】 Linux ARM;剪裁;移植 【中图分类号】 TP311.54 【文献标识码】 A 【文章编号】 1003-773X(2010)06-0183-03
收稿日期:2010-05-26;修回日期:2010-08-23 作者生,研究方向:测试计量技术及仪器。
·183·
第 25 卷第 6 期(总第 118 期)
机械管理开发
2010 年 12 月
映像和根文件系统映像从 FLASH 中读取到 RAM 中, 可以设置好启动参数后启动内核。
VIVI 的 stagel 是 BootLoader 一开始就执行的操作, 其目的是为了 stage2 的执行以及随后的内核的执行设 置好一些基本的硬件环境。其步骤如下:1)硬件初始 化:当上电或复位后,VIVI启动,位于NAND中的前4 KB 程序便从 NANDFLASH 中由 S3C2410 自动拷贝到 step⁃ pingstone 的前 4kB 的内部 RAM 中,该 RAM 之后被映射 到地址 0x00 处。此时 VIVI 的前 4kB 代码开始运行,关 闭 Watchdog,关闭中断,初始化 PLL 和时钟主频设定, 初始化存储器设定。2)配置串口:初始化串口控制 器。3)复制自身到 SDRAM 中:当初始化串口结束后, VIVI 开 始 把 自 身 从 NANDFLASH 中 复 制 到 SDRAM 中。4)跳转到 stage2 的入口点。VIVI 的 stage2 阶段, 包括以下步骤:(1)继续初始化系统硬件;(2)内存影 射初始化,内存管理单元初始化;(3)初始化堆栈;(4) 初始化 mtd 设备;(5)初始化私有数据;(6)初始化内 置命令;(7)启动 VIVI。
本实验系统运行的 Linux 版本是针对 2.6.14.1 进 行移植,下载内核代码在/linux 下,移植按照以下步骤: 1)设置目标平台和指定交叉编译器:在最上层的根目 录/Makefile 文件中,首先要指定所移植的硬件平台以 及 所 使 用 的 交 叉 编 译 器 。 改 为 如 下 :ARCH-arm
创 建 Cramfs 文 件 系 统 需 要 mkcramfs 工 具 ,mk⁃
cramfs 能把相应的 Cramfs 目录树压缩成为单一的映象
文件,Mkcramfs 的命令格式为:
Mkcramfs [-h] [--e edition] [-I file] [-n name] Dir⁃
Name OutFile
S3C2410 用 VIVI 作为系统的 BootLoader。VIVI 是 CPU 加电后运行的第一段程序,其基本功能是初始化 硬件设备,建立内存空间的映射图,继而为调用嵌入式 Linux 内核做好准备。VIVI 由两部分组成:一部分依 赖于 CPU 体系结构的、用汇编语言实现的代码。对硬 件环境的初始化,并为第二部分代码的执行做好准备, 另一部分是内存空间的映射,由 C 语言实现,并将内存
Bootloader 的移植:① 修改 Malkefile,指定交叉编 译 : ARCH-armCROSS COMPII E-/opt/crosstool/ gcc-3.3.6-glibe-2.3.2/。 ② 修 改/arch/s3c2410/smdk..c 文件,按照上面所指定大小指定 NAND 分区。③ 编译 生成 VIVI。 2.3 Linux 内核的移植
VI 中的分区分成一样大小;4)加入 NAND FLASH 分
区;5)建立芯片支持;6)在 NAND FLASH 驱动里加入
NAND FLASH 芯片支持;7)在 arch/arm/machs3c2410/
machsmdk2410.c 中 initdata 部 分 增 加 gas3c-de⁃
vice-nand,使内核启动时初始化 NAND FLASH 信息;
用程序集合。它们包括诸如 ar,as,objdump,objcopy 这样的实用程序;gcc 则用来生成交叉编译器,主要生 成 arm-linux-gcc 交叉编译工具;glibc 主要是提供用户 程序所使用的一些基本的函数库。所有用户应用程序 都将链接到 C 库。避免使用任何 C 库函数的内核和其 它应用程序在没有该库的情况下进行编译。
嵌入式 Linux(Embedded Linux)是指在标准 Linux 基础上经过裁剪、修改,适用于嵌入式系统并应用于特 定嵌入式场合的专用 Linux 操作系统。与其它的嵌入 式操作系统相比,嵌入式 Linux 具有以下特点:具有开 放源代码,系统内核较小、效率高、内核网络结构完整, 针对嵌入式的存储方案,提供实时版本和完善的嵌入 式解决方案、具备一整套工具链,容易搭建嵌入式系统 的开发环境,裁减后的系统适用于诸如信息家电等嵌 入式系统的开发[2]。 2 内核移植