基于2.6.19内核的小型Linux系统制作与移植

发布者:睿智之光最新更新时间:2012-04-26 来源: 电子产品世界 关键字:Linux系统  S3C2410  移植 手机看文章 扫描二维码
随时随地手机看文章

引言

ARM9 S3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。

S3C2410 微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T核的微处理器。它带有内存管理单元(MMU),采用 0.18mm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。

在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛 [1]。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的 Linux操作系统应该包括:引导程序、内核与根文件系统三部分。

与Linux2.4内核相比,2.6内核吸收了最新的技术,在性能、可测量性、器件支持和可用性方面有了大幅度提高;支持更多的体系结构、处理器、总线、接口和设备;标准化了内部接口;简化了扩展或添加新设备的步骤等。

本文着重介绍如何制作一个基于linux-2.6.19内核的小型Linux操作系统,并将它移植到S3C2410开放板上。内容包括交叉编译环境的建立,引导程序、2.6.19内核、根文件系统的修改、配置、编译、移植等。

系统的制作移植

建立交叉编译环境

要移植、开发小型Linux系统,首先要在安装了RedHat9或更高版本Linux操作系统的主机上配置交叉开发环境。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。

针对本次开发,需要安装arm-linux-gcc-3.4.1以及armv4l-tools工具链。在安装完毕后,切记要将两者的路径分别添加到系统路径$PATH中。

引导程序

对于计算机系统来说,从开机上电到操作系统启动需要一个引导程序。嵌入式linux系统同样离不开引导程序,这个引导程序叫做Bootloader[1]。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内核做好准备。

vivi[4]是韩国MIZI公司为其ARM9系列产品而研发的Bootloader,小而灵巧,这里选用它作为小型Linux系统的Bootloader。

首先要修改vivi源代码中的Flash分区信息,新的分区信息如表1所示。

根据表1,在vivi源码arch/s3c2410/smdk.c文件中作出相应的修改。

然后在配置菜单中导入smdk2410的默认配置,编译成功将在vivi源代码目录下生成所需的Bootloader文件,文件名为vivi。

接着,便可把vivi下载到目标板Flash的相应位置。

内核

·修改内核
首先,修改内核源码linux-2.6.19下的Makefile文件,指定目标代码类型与编译器:SUBARCH :=arm;CROSS_COMPILE:=/usr/local/arm/3.4.1/bin/arm-linux-。

然后,在linux-2.6.19/arch/arm/mach-s3c2410/common-smdk.c中根据表1修改内核中的Flash分区信息。这里提醒读者,2.6.16(含)以前内核的源码中没有Flash分区信息,所以需要增加新的分区信息;而在2.6.17(含)以后内核的源码中已含 Flash分区信息,需要的只是修改分区信息。[page]

内核Flash分区信息必须与vivi的Flash分区信息相一致。因为,vivi的 Flash分区中的地址是内核及文件系统下载到Nand flash的真正地址;而内核在启动时读的却是内核Flash分区设定的地址;所以,若两者不同,则很可能导致不能正常启动内核或读取文件系统。

最后,修改linux-2.6.19/drivers/mtd/nand/s3c2410.c,禁止Nand flash差错检测:
chip->eccmode = NAND_ECC_NONE;。

·内核的配置编译
在配置菜单中导入内核对smdk2410的默认配置,再在此基础上选择所需的功能。如Nand Flash及MTD设备的支持,Cramfs文件系统的支持等。

配置完毕,在终端输入编译命令“make”进行编译。若内核源码编译成功,将在linux-2.6.19/arch/arm/boot/下生成内核映像文件zImage。

最后,在vivi命令提示模式下使用下载命令,将内核映像zImage加载到开发板Flash中的适当地址。

根文件系统

Linux系统中的文件和设备是通过文件系统来组织的。文件系统的存在使得数据和设备可以被有效而透明地存取访问。一个linux的最简根文件系统应该包括支持linux系统正常运行的基本内容,包括系统使用的软件和库,以及所有用来为用户提供基本支持的架构和指令。

在根文件目录rootfs下建立bin、dev、etc、lib、proc、sbin、root、tmp等一系列必备的目录,把所需的配置文件、动态函数库放到相应的目录。采用BusyBox是缩小根文件系统的好办法。BusyBox以很小的体积集成了最常用的linux命令和应用程序,大大简化了制作 linux根文件系统的过程。

有一点必须指出的是,在2.6.12(含)之前的内核通常是用devfs来管理位于/dev下的所有块设备和字符设备;但在2.6.13(含)之后的内核已不支持devfs,而转用udev来管理/dev下的设备,详见[5]。所以,针对2.6.19内核,要使系统启动后进入BusyBox控制台,还需在/rootfs/dev下添加控制台设备文件:“[root@localhost dev]# mknod -m 600 console c 5 1”。

目前,linux已经能够支持几十种文件系统格式,如常用的Cramfs、Jfss2、Yaffs等。Cramfs 是一种只读的闪存文件系统,可以保护系统的基本设置不被更改。根文件系统就使用Cramfs格式。

使用Cramfs制作工具mkcramfs把根文件目录制作成映像文件:rootfs.cramfs。

根文件系统制作完成,在vivi命令模式下把rootfs.cramfs下载到Flash的合适位置。

至此,一个基于2.6.19内核的小型Linux系统便成功地制作完毕,并移植到S3C2410开发板上了。

板子加电后便可看到系统的启动信息,最终进入BusyBox控制台。

结语

基于2.6内核的Linux凭借其突出的嵌入式特性与性能优越的ARM9 S3C2410相结合,在嵌入式领域有着广阔的应用天地。文章介绍了如何制作一个基于Linux2.6.19内核的小型Linux系统,并将其移植到 S3C2410开发板上。小型系统的制作与移植是进行嵌入式开发的基础,必须熟练掌握。

参考文献:
1、 孙纪坤、张小全,‘嵌入式linux系统开发技术详解——基于ARM’,人民邮电出版社,2006.
2、 陈赜,‘ARM9嵌入式技术及Linux高级实践教程’,北京航空航天大学出版社,2005
3、 中国liunx公社论坛上帖子,‘Linux2.6.10以后版本对S3C2410的支持’.
4、 mizi公司网站上有关vivi的介绍,http://www.mizi.com/developer/s3c2410x/Linuette_chap_5_en.html
5、 有关udev的介绍:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.htm

关键字:Linux系统  S3C2410  移植 引用地址:基于2.6.19内核的小型Linux系统制作与移植

上一篇:如何为嵌入式应用编写优秀的C++代码
下一篇:面向快速嵌入式MCU设计的仿真

推荐阅读最新更新时间:2024-03-16 12:58

LPC177x程序移植到LPC176x注意事项
LPC176x可以看做LPC177x系列的简化版,不带外部EMC扩展,但在某些应用场合更具有成本优势。 移植LPC177x上的程序到LPC176x上需要注意如下几点(以MDK下为例): 1. 项目“Option”下的Device里要改成相应的LPC6x芯片 2. 项目引用的startup_LPC177x_8x.s,system_LPC177x_8x.c,以及LPC177x_8x.h要改成相应的17xx版本(startup_LPC17xx.s,system_LPC17xx.c,lpc177x.h) 3. 项目“Option”下Target配置里去掉外部ram和flash的相关内容。当然,
[单片机]
stm32F205程序移植到stm32F405片子,使用FPU时注意事项
除了网上的教程外,还要特别注意,当运算中有浮点的数字时要把,数字后面加上一个f。例如表达式中有4.321参与运算。。当你不在4.321后加f时,stm32F405的片子不知道把他当做单精度float用FPU来运算,,默认可能是当做double来运算(我不确定),运算速度还是很慢。。切记所有浮点数字后面加上f,,,,有时候keil会提示warning: #1035-D: single-precision operand implicitly converted to double-precision 这句话的意思就是单精度运算隐式转换成了双精度运算了。这个时候就要在单精度数字后面加个f keilmdk的设置中完整的define是
[单片机]
S3C2410 && WinCE6.0的中断处理分析
S3C2410的内核是ARM920T,所以,这里先介绍一下ARM920T的异常。ARM920T中有一个当前程序状态寄存器(CPSR),其中BIT6和BIT7分别控制FIQ和IRQ的使能与否。大家经常说的开中断和关中断,就是指的设置这两个BIT。 ARM体系的异常中断如下图所示: 可以看到,ARM920T中一共有7中异常模式,如果同一时刻有多个异常发生,系统则通过优先级顺序来决定处理其中的哪一个异常。他们之间的优先级顺序从高到低依次是: 1.Reset复位 2.Data Abort数据访问中止 3.FIQ 快速中断请求 4.IRQ 外部中断请求 5.指令预取中止 6.未定义的指令和软件中断 当系统发生异常时,P
[单片机]
<font color='red'>S3C2410</font> && WinCE6.0的中断处理分析
成功移植icore的shell串口到STM32F4
icore开发板上的例子光盘下的 \iCore_扩展相关\code\7_uart1_shell工程文件,删除FSMC.c 和RCC.c 两个C文件和H文件 移植步骤: 第一、替换到之前的启动代码,添加startup_stm32f4xx.s 和system_stm32f4xx.c 两个文件。system_stm32f4xx.h可以替代到rcc.h 第二、改写NVIC.c 里的初始化代码。 static int initialize(void) { SCB- VTOR = ((unsigned long)0x08000000); //Set the Vector Table base location at 0
[单片机]
成功<font color='red'>移植</font>icore的shell串口到STM32F4
八代酷睿完美移植100/200系主板
受到对手刺激,Intel 2017年终于结束了多年的“挤牙膏”历史,各条产品线全面提速,但却玩起了不兼容。 八代酷睿桌面版Coffee Lake-S全线增加了核心数量,而在接口保持LGA1151完全不变的情况下,Intel以电气特性变化导致不兼容为由,强迫新处理器必须搭配几乎毫无变化的300系列芯片组,而且首发只有昂贵的Z370,将好好的100/200系列主板抛之脑后。 不过华硕曾经忍不住披露,八代酷睿原本是兼容100/200系主板的,但是Intel最后关头改变了主意。 更是有多位国内玩家通过试验证明,八代酷睿确实可以在老主板上点亮,但仅在极少数型号上实现,稳定性也不好。 现在,来自国外硬件论坛Overclock.net的几位
[嵌入式]
Armboot在EV40评估板上的移植
摘要:介绍Armboot以及EV40评估板的特点;详细讨论Armboot在EV40上的移植并给出主要代码;以Flash编程为例,介绍与评估板相关Armboot命令的实现。 关键词:Armboot AT91M40800 ARM 移植 1 Armboot简介 Armboot是一个bootloader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。它支持多种类型的Flash;允许映像文件经由bootp、dhcp、tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。Armboot源码公开,可以在http://www.sourceforg.ne
[应用]
网友将CS1.6移植至Android Wear
    科技网站PhoneArena报道,说起CS这款游戏,恐怕大家都非常熟悉,不过要论起“情怀”,恐怕这位名为戴夫·班尼特(Dave Bennett)的网友才是数一数二的,他居然将经典的CS1.6移植到了LG G Watch上。 情怀!网友将CS1.6移植至Android Wear(图片来自ifeng)     想要尝试在Android Wear上运行CS1.6,你需要使用一个名为Xash3D的应用,有了它,你就可以在自己的智能手表上运行旧版的Windows系统了。随后只需按照班尼特的教程来安装游戏就能再次体验激情燃烧的青春时代了。   班尼特做这项工作可能真的是怀旧情怀作祟,虽然眼下智能手表的硬件已经可以无压力运行这
[手机便携]
电力行业,米尔STM32MP135开发板IEC61850协议移植笔记
1. 概述 IEC61850是变电站自动化系统(SAS)中通信系统和分散能源(DER)管理的国际标准。它通过标准的实现,实现了智能变电站的工程运作标准化。使得智能变电站的工程实施变得规范、统一和透明,在电力和储能系统中应用非常广泛。 本文基于米尔MYD-YF13X开发板,在Linux系统上移植和使用开源的libIEC61850库,该库提供了用C语言编写的IEC 61850 / MMS,IEC 61850 / GOOSE和IEC 61850-9-2 /采样值通信协议的服务端和客户端库。 2. 搭建配置环境 本章节讲述libIEC61850库的编译环境配置过程。 2.1. 安装JAVA环境 IEC61850库中
[嵌入式]
电力行业,米尔STM32MP135开发板IEC61850协议<font color='red'>移植</font>笔记
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved