历史上的今天
返回首页

历史上的今天

今天是:2025年12月26日(星期五)

正在发生

2022年12月26日 | 关于ARM7 S3C4510B上μClinux移植问题

2022-12-26 来源:elecfans

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,支持片上断点和调试点。


3建立μClinux开发环境

嵌入式系统的开发与一般的应用开发最大的差别在于,前者需要建立特殊的硬件环境,而后者一般基于特定的操作系统或分布式平台。后者的平台已经对硬件或网络媒质做了抽象,从而不需要由系统开发者来完成这些工作。而在嵌入式系统开发中,这也由开发者完成。


嵌入式系统开发环境一般分成主机端(HOST)和目标板(TARGET)两个部分。主机端是开发平台,用于运行开发过程中的各种工具;目标板是运行和测试平台,是嵌入式系统的最终驻留环境。在主机端和目标板之间需要通过某种方式进行通信,如使用RS232C串口。这种通信的目的在于发送控制指令和传输数据,同时获得反馈信息。图1是系统移植工作的硬件环境。

关于ARM7 S3C4510B上μClinux移植问题

主机端的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个文件放在宿主机上的任意一个目录下,然后输入下面的命令来安装:

关于ARM7 S3C4510B上μClinux移植问题

们就建立好了μClinux的软件开发环境。


4Bootloader的设计实现

Bootloader被用于系统从硬件启动到操作系统启动的过渡,是嵌入式系统中必不可少的一段程序。他相当于PC机中的BIOS和OSLoader,用于初始化运行硬件和启动操作系统,因此其实现方式由硬件的特性决定。和BIOS/OSLoader一样,他需要固化在目标板中,每次启动目标板时,首先会运行Bootloader,在他完成CPU和相关硬件的初始化之后,才从事先规定的地址启动操作系统或嵌入式应用的固化程序。


在嵌入式系统开发过程中,Bootloader还担任了与主机端通信的任务,他相当于一个“服务器”,不断监听从主机端传来的控制信息和数据信息,完成相应的操作。


当系统上电后,Bootloader从地址0x0开始执行,将存储器映射重新配置,如表1所示,并会执行Linux的固化内核。

关于ARM7 S3C4510B上μClinux移植问题

Bootloader可以使用ARM仿真软件SDT2.5通过JTAG下载到目标板上。


5μClinux内核的编译和移植

作为操作系统的核心,μClinux内核负责管理系统的进程、内存、设备驱动程序、文件系统和网络系统,决定着系统的各种性能。μClinux内核采用模块化的组织结构,通过增减内核模块的方式来增减系统的功能。

关于ARM7 S3C4510B上μ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。

推荐阅读

史海拾趣

ABCO公司的发展小趣事

随着技术的不断进步,ABCO公司意识到只有不断创新才能在竞争中保持领先地位。因此,公司加大了对研发的投入,建立了一支高效的技术团队。这支团队不仅成功研发出了多款具有自主知识产权的新型传感器,还积极探索传感器与其他电子设备的融合应用,为公司开辟了新的增长点。

Fairview Microwave Inc公司的发展小趣事

随着技术的不断进步和市场的不断变化,Fairview Microwave意识到只有不断创新才能保持领先地位。因此,公司加大了在研发方面的投入力度,建立起一支高素质的研发团队。他们不断推出具有自主知识产权的新产品和技术,为客户提供更加全面、高效的解决方案。这些创新成果不仅增强了公司的核心竞争力,也为公司在行业内树立了技术领先的地位。

Bias Power公司的发展小趣事

随着全球化进程的加速,Bias Power公司积极寻求国际合作,以拓展更广阔的市场。公司与国际知名电子企业建立了战略合作关系,共同研发新产品,分享技术和市场资源。通过国际合作,Bias Power公司成功打入欧洲、亚洲等多个地区的市场,实现了业务的快速增长。

此外,Bias Power公司还积极参与国际展览和交流活动,展示其最新技术和产品,与全球同行进行深入交流。这些活动不仅提升了公司的知名度,还为公司的进一步发展奠定了坚实基础。

Everspin公司的发展小趣事

尽管Everspin在初期经历了亏损,但随着时间的推移,其财务状况逐渐改善。特别是在XXXX年和XXXX年,Everspin的总收入和净利润均实现了显著增长。这一财务表现证明了Everspin在MRAM领域的领先地位和持续盈利能力。

Elma Electronic Inc公司的发展小趣事

Elma致力于为个人应用量身定制解决方案,通过丰富的包装电子系统实践经验,确保能够快速、经济地开发出满足客户需求的定制解决方案。这种能力得益于其内部制造能力,确保了产品的兼容性和一致性。同时,Elma还提供设计/集成服务,以及响应迅速且知识渊博的技术支持。

Austek Microsystems公司的发展小趣事

Austek Microsystems成立之初,便以研发创新为核心驱动力。面对竞争激烈的市场环境,公司团队凭借深厚的技术积累,成功开发出了一款具有高性能和低功耗特点的微控制器芯片。这款芯片不仅满足了当时市场对高效能计算的需求,也为Austek Microsystems在电子行业中赢得了初步的市场认可。

问答坊 | AI 解惑

串行接口

串行接口 概述 串行接口的一般概念 单片机与外界进行信息交换称之为通讯。 8051单片机的通讯方式有两种: 并行通讯:数据的各位同时发送或接收。 串行通讯:数据一位一位顺序发送或接收。参看下图: 串行通讯的方式: 异步通讯:它用 ...…

查看全部问答>

关于6410 IIC读写AT24C02!做过的请进!

  这两天在编写测试6410 IIC,发现一个非常奇怪的问题,   读数据时会产生数据终止,不是每次都会,但多读了几次就一定会产生数据异常。异常信息如下: Exception \'Data Abort\' (4): Thread-Id=01840006(pth=85aa48d4), Pr ...…

查看全部问答>

温度检测 DS18B20 ??/

这个程序调了很久啦,不知道为啥读出来的L_temp 和H_temp都是FF、FF 要疯啦  ,呜呜呜..... 有哪位朋友做过相关的东西,帮我看看吧 ,不胜感激啊 #include     //SFRdeclarations #include #include     // C ...…

查看全部问答>

WINCE6.0显示驱动移植

把WINCE420下的显示驱动移植到WINCE600下。600之前的版本是把图形、窗口、事件子系统编译为GWES.exe,而到了600,却编译成GWES.dll,我编译是出现这样的错误: BUILD: [01:0000002555:PROGC ] Linking C:\\WINCE600\\platform\\XSBASE255\\target\ ...…

查看全部问答>

6410 spi的始终怎么设置

我有个A/D转换器,转换速率为75~200ksps, 请问6410的spi时钟要怎么设置呢?如果设置得太快,输入/输出会出现错误呢?…

查看全部问答>

如何解决error LNK2005

调用KeInitializeSpinLock时出现如下错误: ntoskrnl.lib(ntoskrnl.exe) : error LNK2005: _KeInitializeSpinLock@4 already defined in usbpnp.obj  该如何解决啊?…

查看全部问答>

请高手指点!!

现在我做的项目中会使用到声音设置的功能。上网查了一些资料,以下是接口实现: int CSMMCSetting_SetVolumeValue(int nValue) {         int nVolume;         UINT id;         ...…

查看全部问答>

MAX16832的调光应用

    MAX16832是一款很简单的HD LED驱动芯片,简单的8脚SOIC封装,外围电路就是几个十分常见的分立元件,不需要外接MOSFET管。电流取样电阻只要买1/4W普通碳膜电阻,1分钱左右,不需要精密电阻。     MAX16832工作在 ...…

查看全部问答>

承接上一贴:如果你在应用中用到的操作系统是哪个呢?

看到 辩论一下--ARM嵌入式系统有必要跑操作系统吗的帖子,觉得 daicheng 说的很对。用不用操作系统,用什么操作系统完全取决于应用。我最近的产品里用了Keil的RL-ARM,觉得很适合我们的产品:简单,实用。我也还在看RT-thread,个人觉得这是一个很 ...…

查看全部问答>

深度解析LED术语流明及LED寿命的秘密

replyreload += \',\' + 791625;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>