关于ARM7 S3C4510B上μClinux移植问题

linux是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将μclinux移植到基于s3c4510b处理器目标板上的方法与过程。首先介绍了s3c4510b处理器和μclinux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上bootloader的设计实现以及μclinux内核的移植方法,最后对在这种基于μclinux的嵌入式系统环境下如何开发应用程序做了简单说明。
1引言 arm(advancedriscmachines),既可以认为是一个公司的名字,也可以认为是对一微处理器的通称,还可以认为是一种技术的名字。
1991年arm公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用arm技术知识产权(ip)核的微处理器,即我们通常所说的arm微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于arm技术的微处理器应用约占据了32位risc微处理器75%以上的市场份额,arm技术正在逐步渗入我们生活的各个方面。
采用risc架构的arm微处理器一般具有如下特点:体积小、低功耗、低成本、高性能;支持thumb(16位)/arm(32位)双指令集,能很好的兼容8位/16位器件;大量使用寄存器,指令执行速度更快;大多数数据操作都在寄存器中完成;寻址方式灵活简单,执行效率高;指令长度固定。arm的产品主要包括arm7thumb家族和arm9thumb家族、arm10thumb家族以及strongarm家族。
2基于arm的s3c4510b处理器和μclinux 本文所使用的s3c4510b是samsung公司使用arm7处理器内核开发的一块嵌入式微处理器。作为一款高性价比的网络处理器,s3c4510b已广泛应用于各种网络设备中,其中央处理器为arm7tdmi核。arm7tmdi是目前使用最广泛的32位嵌入式risc处理器,属低端arm处理器核。tdmi的基本含义为:
t:支持16位压缩指令集thumb;
d:支持片上debug;
m:内嵌硬件乘法器(multiplier);
i:嵌入式ice,支持片上断点和调试点。
thumbtm16位压缩指令集能以较小的存储空间需求,获得32位的系统性能。s3c4510b处理器包括8kb可配置的一体化cache/sram,1个i2c串行接口,2个uart,2个32位定时器,18个可编程的通用i/o口,以及1个10m/100m以太网控制器。丰富的片内外围极大地简化了系统的设计。同时这款微处理器对操作系统的支持广泛,包括windowsce、linux、palmos等μclinux是针对控制领域的嵌入式linux操作系统,他从linux2.0/2.4内核派生而来,沿袭了主流linux的绝大部分特性。适合不具备内存管理单元(memorymanagementunit,简称mmu)的微处理器/微控制器,例如arm7tdmi,他通常具有很少内存或flash的嵌入式系统。在gnu通用公共许可证(gungpl)的保证下,运行μclinux操作系统的用户可以使用几乎所有的linuxapi函数,不会因为没有mmu而受到影响。
3建立μclinux开发环境 嵌入式系统的开发与一般的应用开发最大的差别在于,前者需要建立特殊的硬件环境,而后者一般基于特定的操作系统或分布式平台。后者的平台已经对硬件或网络媒质做了抽象,从而不需要由系统开发者来完成这些工作。而在嵌入式系统开发中,这也由开发者完成。
嵌入式系统开发环境一般分成主机端(host)和目标板(target)两个部分。主机端是开发平台,用于运行开发过程中的各种工具;目标板是运行和测试平台,是嵌入式系统的最终驻留环境。在主机端和目标板之间需要通过某种方式进行通信,如使用rs232c串口。这种通信的目的在于发送控制指令和传输数据,同时获得反馈信息。图1是系统移植工作的硬件环境。
主机端的pc使用com1通过max232和s3c4510b的uart1相连接,通过串口完成对目标板的必要控制功能。s3c4510b开发板上配备有一块dm9161以太网卡芯片和主机端建立原始(raw)ip连接,使用链路层地址完成大批量数据的传送。
硬件环境建立之后,就需要创建软件开发环境。软件环境主要是指arm体系结构的交叉编译环境,在主机端使用redhatlinux8.0操作系统,并在其上建立gcc的arm体系结构的交叉开发环境。可以从http://mac.os.nctu.edu.tw处下载工具链:
(1)armelfbinutils2.115.i385.rpm
一些辅助工具,包括objdump(可以反编译二进制文件),as(汇编编译器),ld(连接器)等。
(2)armelfgcc2.95.32.i386.rpm
配置目标为arm的gnu的c编译器。使用他在宿主机上开发编译目标上可运行的二进制文件。
(3)genromfs0.5.11.i386.rpm
生成romfs的工具。romfs是一种文件系统。这种文件系统相对于一般的ext2文件系统要求更少的空间。
将这3个文件放在宿主机上的任意一个目录下,然后输入下面的命令来安装:
们就建立好了μclinux的软件开发环境。
4bootloader的设计实现 bootloader被用于系统从硬件启动到操作系统启动的过渡,是嵌入式系统中必不可少的一段程序。他相当于pc机中的bios和osloader,用于初始化运行硬件和启动操作系统,因此其实现方式由硬件的特性决定。和bios/osloader一样,他需要固化在目标板中,每次启动目标板时,首先会运行bootloader,在他完成cpu和相关硬件的初始化之后,才从事先规定的地址启动操作系统或嵌入式应用的固化程序。
在嵌入式系统开发过程中,bootloader还担任了与主机端通信的任务,他相当于一个“服务器”,不断监听从主机端传来的控制信息和数据信息,完成相应的操作。
当系统上电后,bootloader从地址0x0开始执行,将存储器映射重新配置,如表1所示,并会执行linux的固化内核。
bootloader可以使用arm仿真软件sdt2.5通过jtag下载到目标板上。
5μclinux内核的编译和移植 作为操作系统的核心,μclinux内核负责管理系统的进程、内存、设备驱动程序、文件系统和网络系统,决定着系统的各种性能。μclinux内核采用模块化的组织结构,通过增减内核模块的方式来增减系统的功能。
内核配置,在产品列表中选择samsung/4510b。在库的选择上选uc-libc。
(2)makedep
寻找依存关系。
(3)makeclean
清除以前构造内核时生成的所有目标文件、模块文件和一些临时文件。
(4)makelib_only
编译库文件。
(5)makeuser_only
编译用户应用程序文件。
(6)makeromfs
生成romfs文件系统。
(7)makeimage
(8)make
通过各个目录的makefile文件进行,会在各目录下生成一大堆目标文件。
上述步骤完成后,就完成了对μclinux源码的编译工作。我们可以在/μclinuxsamsung/images目录下看到2个内核文件:image.ram和image.rom。
其中iamge.rom可以直接烧写入flash存储器中,当系统复位或上电时,内核自解压到sdram运行。image.ram可以通过sdt载入到sdram中直接运行。
μclinux的内核有2种可选的运行方式:可以在flash上直接运行,也可以加载到ram中运行。
flash运行方式:把内核的可执行映像文件烧到flash上,系统启动时从flash的某个地址开始逐句执行。这种方法实际上是很多嵌入式系统采用的方法。
内核加载ram方式:把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快。同时这也是标准linux系统采用的启动方式。
6应用程序在μclinux上的开发 下面将介绍如何把一个应用程序(例如examplec)添加到μclinux上的过程。
首先进入μclinux-samsung/user目录并建立一个自己的子目录,如myproject。将examplec复制到myproject目录下,并编写相应的makefile文件。接着进入user目录,增加一行语句到该目录下的makefile文件:
dir_$(config_user_maapp_lednxy)+=myapp
切换到目录μclinuxsamsung/config下,打开configin这个文件,并在最后增加类似下面的语句:
mainmenu_optionnext_comment
comment‘myapplication’
bool‘example’config_user_myproject_
example
comment‘myapplication
endmenu
此后,在编译内核的makemenuconfig时就可以在customizevendor/usersetting(new)这一项的子菜单中选中自己的应用程序example,然后按第5节中相同的办法进行编译即可。
但是,如果我们每修改一次应用程序,就要把他加入到内核中重新编译,显然效率太低,也不可行。那么有什么方法来节省调试时间呢?
在上面的章节中曾提到bootloader可以担当与主机端通信的任务,在这里我们就可以通过他把应用程序快速下载到目标板上。
首先通过elf2flt这个工具交叉编译example.c生成在μclinux下的可执行文件example(flat格式),命令如下:
arm-elf-gcc-wall-o2-wl,elf2flt-oexampleexample.c
接着将宿主机与目标板通过串口线连接,并在宿主机上启动一个超级终端,例如minicom,选择好一个com口(通常是串口1),设置波特率为19200,8个数据位、1个停止位,无校验。然后选择传输协议zmodom,最后选定需要传输的文件example并发送。传输结束后可以通过超级终端在目标板的目录中发现example,这说明传输成功。
在目标板上将example加上x属性(可执行属性),然后输入命令/example就可以运行此程序了。显然,通过这种方法可以很方便快捷的调试应用程序,等调试结束,再把他加入到内核中一起编译即可。
7结语 讨论了如何将μclinux移植到arm7体系微处理器s3c4510b上的基本流程,同时也简要的介绍了bootloader以及应用程序的加载和调试方法。在不同的宿主机和目标板环境下,具体移植过程中可能会出现各种不同的错误或问题,可以充分利用gcc这个强大的工具,根据他的错误提示来一步步的进行修正,最终成功的移植μclinux。

手机记忆棒
海康威视发布工业面阵相机,助力高效生产、柔性制造
东芝推出汽车用单通道高边N沟道功率MOSFET栅极驱动器
数据挖掘分析方法
苹果即将推出App隐私报告功能
关于ARM7 S3C4510B上μClinux移植问题
“保姆级”教程,教你快速上手用低代码调用 GPT!
DIY喇叭设计制作
解析云存储安全性和数据加密问题
噪声传感器的工作原理及注意事项有哪些
交流接触器选用的7个基本原则
可食用温度传感器,食物保鲜更方便
MPO连接器:为应用选择最佳的多模连接器,满足数据中心设计需求
高通凭借专利费争抢联发科低端芯片市场
16芯GJBFJV光缆的特点都有哪些
传统车企加入电动汽车战局 电池逐渐供应不足
Linux性能问题一直是程序员头上的“紧箍咒”
触摸屏碰到的常用故障及相对应的解决办法
音叉液位开关测量液位是如何实现的
三星又有狀況? Galaxy S8 超强配置, 將延至 4 月底推出!