嵌入式Linux内核移植

合集下载

嵌入式系统移植的简单介绍

嵌入式系统移植的简单介绍

嵌入式操作系统的移植综述:嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。

一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。

为了使嵌入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而必须把一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的OEM厂商来完成。

这样才可以保证整个操作系统的可移植性。

一、移植的定义及其目的由于嵌入式系统所使用的芯片型号多种多样,很多芯片不能直接兼容,所以通过修改部分代码,把能在甲芯片上运行的程序,也能在与之不完全兼容的乙芯片上正确运行,就叫移植.嵌入式操作系统移植的目的是指使操作系统能在某个微处理器或微控制器上运行。

二、移植的方法与具体操作步骤2.1 在进行移植时,我们的首要任务就是要建立一个最基本的开发环境。

该环境具备一套跨平台开发工具。

它包含有编译器、连接器、除错器等,另外还要准备制作文档系统所需的软件。

以PC机作为宿主机构建一套完整的交叉编译系统来调试目标板。

而在目标平台上只需要准备一段开机程序,如Ether boot,Red boot等,此程序可以在除错阶段取得系统的映像(image)文件后启动或者直接从Flash room中来引导系统。

一旦启动后就进入Linux操作系统,同时也可以使用GDB server作为远端除错工具。

2.2 内核的移植为了使Linux内核能在不同的目标平台上运行,要求我们根据平台的处理器类型和外围接口,对Linux内核文件进行正确的配置,同时。

修改内核文件Linux移植的主要步骤。

如果修改完Linux的内核文件,使其能在目标平台上正确跑起来,那么整个移植过程就基本完成了。

2.3 移植的具体步骤(1)首先获取某一版本的Linux内核源码,根据具体的目标平台对源码进行必要的改写(主要是修改体系结构相关的部分);(2)添加一部分外设驱动(如网卡驱动、USB驱动),打造一款适合于目标平台的新的操作系统,也就是常说的内核配置或内核定制;(3)对该系统进行针对目标平台的交叉编译,生成一个内核映象文件;(4)最后通过一些手段将该映象烧写到目标平台中。

基于嵌入式ARM9的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]。

嵌入式μCLinux系统移植(全文)

嵌入式μCLinux系统移植(全文)

嵌入式μCLinux系统移植XX:1007-9416(20XX)04-0086-01嵌入式Linux系统在开发过程中需要对Linux内核进行重新定制,所以熟悉内核配置、编译和移植是非常重要的。

掌握一定的Linux内核的内容,是对Linux进行手动内核移植前必须要做的。

1 Linux内核移植Linux内核移植,通俗讲马上内核由一种硬件平台移植到另一种硬件平台上运行的方式。

虽然大部分的处理器和硬件平台,嵌入式Linux系统都可以支持,但最好还是以自己定制的硬件板为主,移植工作也可通过硬件平台的变化进行调整。

本文以Linux2.6.32.4版本内核为例,过程是如何将其移植到RM内核S3C2440处理器上,该处理器是Smsung公司出产的。

1.1 内核修改(1)解压内核源码。

加压命令:tr jxvf linux-2.6.32.4.tr.bz2。

(2)修改Mkefile。

Mkefile是贯穿整Linux内核的生命线,并以此完成编译和链接。

具体过程为:内核源码目录――进入一级目录(通过编译工具)――找到Mkefile文件――修改相关变量。

(3)修改目标板输入时钟。

内核源目录――找到文件rch/rm/mch-s3c2440/mch-smdk2440.c并打开(通过编译工具)――找到函数mini2440_mp_io(void)的实现代码:s3c24xx_init_clocks(12000000)。

此代码单位是Hz,是目标板中处理器晶振的频率的意思。

依照目标板实际晶振震荡器的大小进行修改,本文以12MHz晶振为例。

(4)修改MTD分区。

MTD驱动程序在Linux下,其接口分为用户模块和硬件模块两种。

将MTD子系统编译到内核中,是为了访问特定的闪存设备,并在它上面放置文件系统,这包括选择适当的MTD硬件和用户模块。

MTD子系统就目前而言,支持绝大多数的闪存设备,且不断的有更多的驱动程序添加进来,以用于不同的闪存芯片。

嵌入式设备的Linux内核移植研究

嵌入式设备的Linux内核移植研究

第15卷第4期淮北职业技术学院学报V o l.l5N o. 42016 年 8 月JO U R N A L O F H U A IB E I P R O F E S S IO N A L A N D T E C H N IC A L C O L L E G EA u g 2016嵌人式设备的Linux内核移植研究韩占伟(淮北职业技术学院计算机科学技术系,安徽淮北235000)摘要:嵌入式设备在生活中扮演者越来越重要的角色,而L inux 内核是Linux 操作系统的核心。

Linux 操作系统能够提供丰富的应用功能和丰富网络功能都是在L in u x 内核提供的基础功能上实现的。

在Linux 操作系统的支持 下,嵌入式设备的应用开发更加的丰富和完善。

L inux 内核移植的需求分析、环境搭建、详细设计等内容是嵌入式开发重要环节。

关键词:L inux 内核;嵌入式设备;Linux 操作系统中图分类号:TP 368. 1 文献标识码:A 文章编号:1671-8275(2016)04-0131-03L in u x 内核是L in u x 操作系统的核心部分,包含了操 作系统的文件管理、进程管理、内存管理等,并且还加入了 对许多外部设备的驱动支持。

L in u x 内核主要有5个模块 构成,它们分别是:进程调度模块、内存管理模块、文件系 统模块、进程间通信模块和网络接口模块。

[]L in u x 内核的 移植是嵌入式应用开发过程必不可少的环节。

对于各种 类型的嵌入式设备,这里的L in u x 内核却可以通过丰富的 驱动和丰富的库函数来支持不同类型的嵌入式设备。

一、L in u x 内核移植设计分析(一) 需求分析L i n u x 内核介于设备硬件驱动和系统调用接口之间, 对L i n u x 操作系统提供了最核心的功能支持。

[]L in u x 内 核对x 86、a r m 等很多的主流硬件架构都提供了支持,并且 在内核的d i e s 目录里包含了很多的设备驱动代码文件。

嵌入式Linux中CramFS根文件系统的移植实现

嵌入式Linux中CramFS根文件系统的移植实现

嵌入式Linux中CramFS根文件系统的移植实现在嵌入式Linux系统开发中,根文件系统是一个重要的组成部分。

而CramFS是一种专门针对嵌入式系统应用的文件系统格式,其最大的优势是占用空间小,是一种压缩方式的文件系统,可大幅度减小系统的存储容量,因此在嵌入式系统开发中经常使用。

本文将介绍嵌入式Linux中CramFS根文件系统的移植实现。

一、CramFS的特点CramFS是Linux下的一种轻量级只读文件系统,以一种特殊的方式进行压缩,并且数据文件被强制以固定大小的块存储。

与其他文件系统不同,CramFS在挂载时不需要解压缩,因为它已经被预先压缩了。

CramFS还具有以下特点:(1)支持文件系统压缩,可大幅度降低系统存储空间占用。

(2)只读的文件系统,可以保证文件系统的完整性和安全性。

(3)支持嵌入式系统的启动和挂载。

二、CramFS根文件系统移植实现在嵌入式系统开发中,CramFS根文件系统的移植实现步骤如下:1、准备文件系统首先需要构建CramFS文件系统。

可以在Linux环境下创建CramFS文件系统,也可以将现有的文件系统转换为CramFS 格式。

构建好CramFS文件系统后,需要将其打包成initramfs 格式。

2、配置内核将打包好的initramfs文件放到内核源码根目录下,并在内核配置文件中进行相关配置:```CONFIG_INITRAMFS_SOURCE="<path>/initramfs.cramfs" CONFIG_RD_GZIP=yCONFIG_RD_XZ=yCONFIG_RD_LZMA=yCONFIG_RD_BZIP2=y```其中,INITRAMFS_SOURCE是initramfs所在的路径。

3、编译内核对内核进行编译,生成内核和相关驱动。

4、烧录将生成的内核和相关驱动烧录到目标设备中,然后重启设备。

三、总结CramFS是一种专门针对嵌入式系统应用的文件系统格式,它具有压缩率高、只读文件系统、支持启动和挂载等优点。

嵌入式Linux内核的编译与移植

嵌入式Linux内核的编译与移植

计算技术与 自动化 ・
嵌入式 L u i x内核 的编译与移植 n
孙 昌霞, 郭玉峰
( 南农业大学信息与管理科学学 院, 河南 河

郑州 4 0 0 ) 5 0 2
要: 嵌入式 系统是一 个高起点 的技 术领域 , 而嵌入式 Ln x以 多方 面的优势 已成 为嵌 入式 系统领域研 究的一 个热点. iu 本文 首
# xot P T ¥ A H: sl a am 29 .bn epr A H: P T / ro l r /. 3 i,其 中: s u /c / 5/ /r u/
3 aex ng 基 于图形 窗 口模 式 的配 置界面 , wno ) k c f: m oi Xi w d
卜 ae o of : d i cn g配置 文件 , 只要求用 i 并且 户设定前次没有设定过的选项。 在这 4 方法 中, k e uof 种 mae m n eni g使用最为广泛 , 这里本文 也选择使用 m k n cn g的配置方 法.选择相应 的配置 时 , a emeuo f i 有三种选择 , 它们 分别代表 的含义如下:
使用 的功 能直接编译到 内核中, 比如网卡 、 光驱等。 3 . 2内核的配置 内核的配置过程其 实就是内核裁 剪的过程 , 嵌人式 Ln x内 iu 核要针对具体 的嵌入式设 备平 台软硬件需要, 裁减掉一些不必
要的功能后 , 这样可 以更 好 的节省 系统资源 , 提高 系统运行
“ ” 将该功能编译 进内核 Y一
lcl n , oa n为交叉编译 器的安装 目录。 /
“ " 不将该功能编译进 内核 N-
3 内核 编译
建立交 叉开发环 境之后,就可 以编译嵌 入式 L 的 内核 i 了。通常编译 嵌入式 Ln 内核都是通过不 同的 mae iu k 命令来实 现 的,它 的执行 配置 文件就 是通 常所说 的 Ma l,而不 同的 kf i M kf。 。 l 又通过互相 的依赖关系构成一个 统一的整体 去完成建 i 立依存关系 、 建立 内核等功能。

基于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

基于ARM的嵌入式linux内核的裁剪与移植

ARCH

3 内核 配置 过 程
提供 用 户程 序所 使 用 的一些
自行 搭建 交叉 编译 环境 通 常 比较 复 杂 ,而 且 很 容易 出错 。本 文使 用 的是 开 发板 自带 的交 叉 编 译 器 ,即cos 33 交 叉 编译 器 ,该 编 译 只 需 将 rs一 .. 4
光 盘 中 的 am—iu 33 . r z 用 tr xf n — r l x一 .. b . 2 a v n n 4 ab i a
及 下 栽 内核 映像 到 开发 板 等设 计 ,给 出了以sc 4 O 3 2 l 为核 心 的嵌 入 式Ln x iu 内核 的裁 剪 与移植
过程。
关键词 :AR M;嵌 入式Ln x 3 2 1 ;裁剪 ;移植 iu ;¥ C 4 0
0 引 言
微 处 理 器 的产 生 为价 格 低 廉 、结 构 小 巧 的 C U和外 设 的 连接 提 供 了稳 定 可靠 的硬 件 架构 。 P 这 样 。限制嵌 入式 系统 发展 的瓶 颈就 突 出表 现在
第 1卷 1
第 1期 1
电手元 器 件 盔 用
Elcr n cCo o e t D v c p ia in et i o mp n n & e i eAp l t s c o
V . 1 I1 No 1 .l
NO V.2 9 0o
2 0 年 1 Y 09 ll
d i O3 6 /i n1 6 - 7 5 0 91 .2 o: .9 9js .5 3 4 9 . 0 .10 0 l .s 2
以在 另 一个 平 台上执 行 的程 序代 码 。不 同的C U P
需要 有 不 同 的编译 器 。交叉 编 译 如 同 翻译 一 样 ,

嵌入式Linux在s3c2440上的移植


到 ¥ C 4 0处 理 器的 目标 板 上 . 出了嵌 入 式 Ln x移 植 的 方 法 与 具 体 实现 过 程 。编译 生 成 的 内核 在 嵌入 式 系统 中 324 提 iu
运 行 稳 定 .制 作 的根 文 件 系统 可 以通 过 R mds 式 正 常加 载 进 内核 。结 果 证 明方 法可 行 ,同 时 对 于 开发 其他 类 型 a i k方
Ke r s mb d e A u ; y wo d :e e d d I n x ARM ;p r n i u o i g L n x;Ra ik t md s
嵌 入 式 系统 是 以应 用 为 中 心 ,以计 算 机 技 术 为 基 础 ,软
2 内核 )
特定 于嵌 入 式 板 子 的定 制 内核 以及 控 制 内核 引
硬件可裁剪 , 用于应用系统 , 功能 、 适 对 可靠 性 、 本 、 积 、 成 体
功 耗 等 方 面 有 特 殊 要 求 的专 用 计 算 机 系 统 【 在 嵌 入 式 系 统 ” 。 里 基 于 A M 的 嵌 入 式 处 理 已经 成 为 市 场 主 流 。 而 Ln x是 R iu
的嵌 入 式 系统 具 有 一 定 的 参 考 意 义 。
关 键 词 :嵌入 式 Ln x A M; iu iu ; R L n x移 植 ; a ds Rm i k方 式
中 图分 类 号 : P 1 T 36
文献标识码 : A
文 章 编 号 :17 — 2 62 1 )5 O 1一 3 6 4 6 3 (0 1 1 一 1 1O
Ab ta t s r c :ARM r c s o a l a y b c me t e l a n te ma k t fe e d d s se P r n p r t g s s m st e p o e s rh s ar d e o h e d i h r e mb d e y tm. ot g o e ai y t i h e o i n e p e o d t n a d t e f u d o o h e eo me to n e e d d s se Ho v r o i g e e d d o e a ig s se rc n i o n h n  ̄in f rt e d v lp n fa mb d e y tm. we e ,p r n mb d e p r t y t m i o t n c n b e y c mp i ae .Ai n o p r e e d d L n x o 3 2 4 a e vr o l td c mi g t o mb d e i u n s c 4 0, d s u s s t e me o n h s p f p r n t ic se h t d a d t e t s o o i g h e t e e d d L n x b o i g e e d d L n x k r e n i e t e tr e o r ¥ C 4 r c s o .T e c mp ld L n x mb d e i u y p r n mb d e iu e l isd h a g t b a d o 3 2 40 p o e s r h o i i u t n f e k r e i u ai g i h mb d e y tm h w S sa i t d t e r o l y tm a e n r l o d d i t e n l b en lcr l t n t e e e d d s se s o t b l y a h o tf e s se c n b omal l a e n o k r e y c n i n i y Ra i . h e u t r v d ta e meh d i o k b e a d h si l ain r t e mb d e p r t g s se md s T e r s l p o e h tt t o sw r a l n a mp i t sf h re e d d o e ai y tm. k h c o o o n

第17章:嵌入式Linux移植与引导

}; struct ATAG_INITRD2 #definetag_cmdline { 0x54420005 char cmdline[1]; /* this is the minimum size */ struct tag_initrd { }; u32 start; u32 size; }; /* physical start address */ /* size of compressed ramdisk image in bytes */
嵌入式Linux的引导

stage2内存映射 – 如下数据结构用来描述RAM 地址空间中的一段连续的 地址范围:
type struct memory_area_struct { u32 start; //内存区域的起始地址 u32 size; //内存区域的大小(字节数) int used; //内存区域的状态 } memory_area_t; used=0|1 • 1=这段地址范围已被实现,也即真正地被映射到RAM 单元上 • 0=这段地址范围并未被系统所实现,处于未使用状态。
• R0=0; • R1=机器类型ID; • R2=传递给内核的启动参数起始地址;
– 2. CPU 模式:
• 必须禁止中断(IRQs和FIQs); • CPU必须处于SVC 模式;
– 3. Cache 和MMU 的设置:
• MMU 必须关闭; • 指令Cache 可以打开也可以关闭; • 数据Cache 必须关闭;
东南大学集成电路学院
嵌入式操作系统
第十七章 嵌入式Linux移植与引导
戚隆宁 longn_qi@
国家ASIC系统工程技术研究中心
主要内容


嵌入式Linux的引导 嵌入式Linux的移植
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式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内核、ramdisk文件系统映像以及bootloader。

软件的更新通常使用串口或网口,最初的bootloader烧写是通过并口进行的。

本次实验通过配置宿主机上的相应软件,为以后进行PXA270嵌入式开发做基础。

其中mincom很像Windows下面的超级终端,我们利用minicom 作为被开发目标板的终端,实现目标板相关信息的显示与交互。

配置宿主机上的TFTP服务,主要为以后下载相应的内核映像和文件系统做准备;NFS (Network File System)指网络文件系统,是Linux 系统中经常使用的一种服务,NFS 是一个RPC service,很像windows 中的文件共享服务。

它的设计是为了在不同的系统间使用, 所以它的通讯协议设计与主机及作业系统无关。

当使用者想用远端档案时只要用"mount"就可把remote 档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和local 的档案没两样。

三、嵌入式Linux内核移植尽管目前Linux 2.6版本内核已经增加了很多对ARM体系甚至是S3C2410 CPU的支持,但仍然需要对内核作一些小的修改来适应我们的开发板,并且需要重新配置、编译和重新生成新的内核映像。

本实验着重从NAND Flash 分区到下载到开发板等一系列连贯的操作来进行嵌入式Linux内核的移植。

本实验的内核版本为2.6.26。

1.NAND Flash分区从Nand Flash启动时,S3C2410硬件会自动把Nand Flash前4K代码拷贝芯片内部RAM空间,CPU其实是从内部RAM开始执行代码的,所以vivi 必须放到Nand Flash顶端。

vivi开始执行后将初始化硬件设备、建立内存空间映射表,为调用内核做好准备;然后把压缩的内核映像加载到SDRAM中;最后跳转到内核映像入口,启动内核。

内核MTD分区必须与vivi分区相一致。

因为,vivi分区中的地址是引导程序、内核映像及文件系统下载到Nand Flash的真正地址;而内核启动时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统。

2. 内核的配置的基本结构(1)Linux内核的配置系统由四个部分组成(2)编译规则Makefile(3)内核编译过程(4)下载内核到开发板四、linux的移植、内核、文件系统的生成与下载1.linux的移植说明本实验系统运行的linux版本是针对2.4.18进行移植的linux-2.4.18.-rm7-pxa1版本,它存放在/实验软件/source_sys/目录内。

由于移植内核所涉及的内容较多,且也较复杂,同时,在涉及到的中断切换、内存管理方面的复杂移植,一般也不必太过关心,网络上有专门的非官方组织在完善该事情。

我们所做的大多是把该移植好的内核,让它如何在自己的硬件系统上正常的运转起来。

因此,我们所做的移植也偏重于应用。

2. 内核的目录结构Linux内核主要由5个子系统组成:●进程调度子系统●进程间通讯子系统●内存管理子系统●虚拟文件系统子系统●网络接口子系统Linux内核非常庞大,包括驱动程序在内有上百兆。

2.4.18内核结构图如图4-3-1。

其主要结构目录:/arch子目录包含了所有与硬件体系结构相关的内核移植代码。

其中每一个目录都代表一种硬件平台,对于每种平台都应该包括:boot: 包括启动内核所使用的部分或全部平台的相关代码。

kernel:包括支持体系结构特有的特征代码lib:包括存放体系结构特有的通用函数的实现代码mm:包括存放体系结构特有的内存管理程序的实现mach-xxx:包括存放该处理器的移植代码/Documentation子目录包含有关内核的许多非常详细的文档。

/drivers子目录包含内核中所有的设备驱动程序。

/fs 子目录包含了所有的文件系统的代码。

/include 子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。

同时,它也包括不同平台需要的库文件。

/init 子目录包含了内核的初始化代码,内核从此目录下开始工作。

/ipc 子目录包含了内核的进程间通讯的代码。

/kernel 子目录包含了主内核的代码,如进程调度等。

/lib 子目录包含了通用的库函数代码等。

/mm 子目录包含了内核的内存管理代码。

/net 子目录包含了内核的网络相关的代码。

/scripts 子目录包含了配置内核的一些脚本文件一般在每个目录下,都有一个.depend 文件和一个 Makefile 文件,这两个文件都是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有帮助;而且,在有的目录下还有Readme 文件,它是对该目录下的文件的一些说明,同样有利于我们对内核源码的理解。

因此,移植工作的重点就是移植arch目录下的文件。

3.内核的移植(1)设置目标平台和指定交叉编译器在最上层的根目录/Makefile文件中,首先要指定所移植的硬件平台,以及所使用的交叉编译器。

改为如下:ARCH := armCROSS_COMPILE = /opt/host/armv4l/bin/armv4l-unknown-linux- 也就是说,所移植的硬件平台是ARM,所使用的交叉编译器是存放在目录/opt/host/armv4l/bin/下的armv4l-unknown-linux-xxx等等工具。

(2)arch/arm目录下Makefile 修改系统的启动代码是通过这个文件产生的。

在linux-2.4.18内核中要添加如下代码,(在移植好的内核中请不要添加)ifeq ($(CONFIG_ARCH_S3C2410),y)TEXTADDR = 0xC0008000MACHINE = s3c2410endif这里TEXTADDR确定内核开始运行的虚拟地址。

(3)arch/arm目录下config.in 修改配置文件config.in能够配置运行“make menuconfig”命令时的菜单选项,由于2.4.18内核中没有S3C2410的相关信息,所以要在该文件中进行有效的配置。

由于配置选项较多,在此不做赘述,请参见我们提供的内核源代码内的/arch/arm/config.in文件。

做完该步,这样在linux内核配置时就可以选择刚刚加入的内核平台了。

(4)arch/arm/boot目录下Makefile 修改编译出来的内核存放在该目录下,这里指定内核解压到实际硬件系统上的物理地址。

ifeq ($(CONFIG_ARCH_S3C2410),y)ZTEXTADDR = 0x30008000ZRELADDR = 0x30008000endif要根据实际的硬件系统修改解压后,内核开始运行的实际的物理地址(5)arch/arm/boot/compressed目录下Makefile 修改该文件从vmlinux中创建一个压缩的vmlinuz镜像文件。

该文件中用到的SYSTEM、ZTEXTADDR、ZBSSADDR、和ZRELADDR是从arch/arm/boot/Makefile 文件中得到的。

添加如下代码:ifeq ($(CONFIG_ARCH_S3C2410),y)OBJS += head-s3c2410.oEndif(6)arch/arm/boot/compressed目录下添加head-s3c2410.s该文件主要用来初始化处理器。

(7)arch/arm/def-configs目录下添加配置好的S3C2410的配置文件。

(8)arch/arm/kernel目录下Makefile 修改该文件主要用来确定文件类型的依赖关系。

no-irq-arch$(CONFIG_ARCH_INTEGRATOR) $(CONFIG_ARCH_CLPS711X) \$(CONFIG_FOOTBRIDGE) $(CONFIG_ARCH_EBSA110) \$(CONFIG_ARCH_SA1100) $(CONFIG_ARCH_CAMELOT) \$(CONFIG_ARCH_S3C2400) $(CONFIG_ARCH_S3C2410) \$(CONFIG_ARCH_MX1ADS) $(CONFIG_ARCH_PXA)(9)arch/arm/kernel目录下的文件debug-armv.s 修改在该文件中添加如下代码,目的是关闭外围设备的时钟,以保证系统正常运行。

相关文档
最新文档