0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于32位微处理器和μClinux的c系统

电子设计 来源:郭婷 作者:电子设计 2018-11-30 08:17 次阅读

进入20世纪90年代,嵌入式技术全面展开,目前已成为通信和消费类产品的共同发展方向。在通信领域,数字技术正在全面取代模拟技术。在广播电视领域,美国已开始由模拟电视向数字电视转变,欧洲的DVB(数字电视广播)技术已在全球大多数国家推广。数字音频广播(DAB)也已进入商品化试播阶段。而软件、集成电路和新型元器件在产业发展中的作用日益重要。所有上述产品中,都离不开嵌入式系统技术。随着网络技术的发展,在工业监测、控制等各个领域,嵌入式系统将越来越多地支持互联网功能。人们对互联网的嵌入式系统的功能和可靠性都提出了越来越高的要求。嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。

本文对基于32位微处理器和μClinux的嵌入式系统进行了研究,从硬件核心-32位微处理器的选型,其他硬件部分的设计,系统驱动程序的编写,嵌入式操作系统和文件系统的移植,完成了对一个嵌入式系统从计划设计到开发调试的完整过程的研究。

1 网络构件的整体结构设计

μClinux的网络构件的硬件结构图如图1所示。本系统采用韩国三星公司的S3C44B0X[2]微处理器,外扩一片norflash芯片HY29LV160B、nandflash芯片K9F2808u和SDRAM芯片 HY57V561620,JTAG接口RS232串口;带有开关量采集模块、模拟量采集模块和以太网通信模块;采用μClinux嵌入式操作系统来进行软件设计。μClinux是一个完全符合GNU/GPL公约的操作系统,完全开放源代码,现在由Line公司支持维护。μClinux的发音是you-see-linux,它的名字来自于希腊字母μ和英文大写字母C结合。μ代表"微小"之意,字母C代表"控制器",所以从字面上就可以看出它的含义,即"微控制领域中的Linux系统".μClinux的具体特点包括:适合嵌入式环境开发。一般而言,嵌入式系统自身所具有的简约性,导致对于所选用的操作系统的多任务、大内存管理等方面的功能都没有明确需求。

硬件系统上使用了两种类型的Flash,一种是norflash,另一种是nandflash.norflash适宜连续大容量存储,价格相对便宜;相比较,nandflash随机存储速度快、价格高。所以在本系统中结合两种Flash的优势,将移植的操作系统存放在norflash之中,nandflash则是用来存储应用程序的代码和常量,保证用户的程序在掉电后不丢失。

该方案设计相对简单,硬件电路中采用韩国三星公司的S3C44BOX微处理器,8 KB Cache、可选的内部SRAM、2通道UART、8通道10 bit ADC、71个通用I/O口、2个可编程32 bit定时器,能够基于芯片设计复杂的系统。其架构满足了μClinux正常运行的基本要求。

2 系统软件设计

为使该系统具有较好的实时性和稳定性,在μClinux平台上设计系统软件。系统中各个任务在宏观上按照一定的关系并行工作,CPU资源得到充分利用,系统可靠性得到很大的保证,方便组织开发任务。在μClinux平台上,软件设计工作主要包括:Bootloader的移植、μClinux在S3C44B0X上的移植、驱动程序的编写和应用程序的编写。

2.1 Bootloader的移植

Bootloader是嵌入式系统软件开发的第一个环节,bootloader说白了就BSP(板级支持包),起作用无非就是:首先初始化硬件(包括io,特殊功能寄存器),接着把嵌入式操作系统加载(拷贝)到内存中(一段代码拷贝程序),然后运行嵌入式系统。Blob是Boot Loader Object的缩写,是一款功能强大的Bootloader.MBA44B0是一款基于S3C44B0的开发板。本文将以运行在MBA44B0开发板上的Blob的源代码为基础,再针对自己的开发板进行Blob的移植。

Blob编译后的代码定义最大为64 KB,并且这64 KB又分成两个阶段来执行。第一阶段的代码在start.s中定义,大小为1 KB,它包括从系统上电后在0x00000000地址开始执行的部分,并运行在Flash中,包括对S3C44B0的一些寄存器的初始化和将Blob第二阶段代码从Flash拷贝到SDRAM中。余下63 KB代码都是第二阶段的代码。其起始文件为Trampoline.s,被复制到SDRAM后,就从第一阶段跳到这个文件开始执行剩余部分代码。这个阶段最大为63 KB,单词trampoline词义为"蹦床",所以在这个程序中进行一些BSS段设置、堆栈的初始化等工作后,最后跳转到Main.c进入C函数。

2.2 μClinux的移植

作为操作系统的核心,μClinux内核负责管理系统的进程、内存、设备驱动程序、文件系统和网络系统,决定着系统的各种性能。μClinux内核采用模块化的组织结构,通过增减内核模块的方式来增减系统的功能。 μClinux2.4.x发行包中的内核对S3C44B0X处理器的支持是不完整的,因此,不可能在make config配置选项中选中S3C44B0X目标板后,直接编译它来得到一个很好的支持S3C44B0X开发板的内核映像。Linux内核在PC上以文件的形式存在(保存成磁盘文件形式),就是所谓的"映像文件".Linux内核映像文件最终是要烧录到目标板的flash中。 Linux 内核映像文件有两种:一种是非压缩版本,叫Image;另一种是它的压缩版本,叫zImage.zImage是Image经过压缩形成的,所以它的大小比Image小。为了能使用zImage这个压缩版本,必须在它的开头加上解压缩的代码,将zImage 解压缩之后才能执行,因此它的执行速度比Image要慢。

(1)在Ne.c中函数ne_probe就是网卡的检测函数,如果检测到Ne2000兼容的网卡就是return 0,可以参考一下添加的函数的语法格式,将网卡的基地址、中断号都放到这里面定义: #elif defined(CONFIG_ARCH_S3C44B0)

static int once = 0;

if (once)

return -ENXIO;

if (base_addr == 0) {

dev->base_addr = base_addr = ARM_NE2000_BASE;

dev->irq = ARM_NE2000_IRQ;

once++;

}

其中,ARM_NE2000_BASE和ARM_NE2000_IRQ是在配置内核的时候定义的。

(2)ne_probe是被Space.c调用的,这里网卡的检测是从。/drivers/net/Space.c的ethif_probe函数中实现的,关键代码如下:

if (probe_list(dev, eisa_probes) == 0)

return 0;

eisa_probes :在前面定义成全局

static struct devprobe eisa_probes[] __initdata = {

#ifdef CONFIG_DE4X5???????????? /* DEC DE425, DE434, DE435 adapters */

{de4x5_probe, 0},

#endif

……

{NULL, 0},

};

添加的函数是:

if (probe_list(dev, arm_probes) == 0)

return 0;

并定义:

static struct devprobe arm_probes[] __initdata = {

#ifdef CONFIG_ARM

{ne_probe, 0},

#endif

{NULL, 0},

(3)地址偏移的问题

同样是在ne.c中ne_probe1的代码中。为了更好地说明所修改的地方,首先应该先介绍一下硬件的配置和连接。这里8019在S3C44B0的Bank 5上,工作在跳线模式,所以起始基地址就是0x0a000600.还有一点需要特别注意的是:8019工作在16位模式下,数据线一对一地连接,地址线错开一位,即8019的A0连接S3C44B0的A1……这样,8019的基地址(Reg0的地址)是0x0a000600,Reg1的地址就是0x0a000602……所以地址不是连续增加的,那么对应的驱动程序要做相应的修改。

#elif defined(CONFIG_ARM)

#define EI_SHIFT(x) ((x)*2)

其中EI_SHIFT可以查看到8390.h的定义。

也有直接访问外部的代码,所以要添加的还有:

#ifdef CONFIG_ARM

regd = inb_p(ioaddr + 0x0d*2);

outb_p(0xff, ioaddr + 0x0d*2); :函数outb_p和inb_p访问外部IO的函数

#else

regd = inb_p(ioaddr + 0x0d);

outb_p(0xff, ioaddr + 0x0d);

这样就被解决了地址偏移的问题,偏移地址就是计算机里的内存分段后,在段内某一地址相对于段首地址(段地址)的偏移量。 如8086存储系统中 20位的物理地址(就是数据存储的实际地址)=16位的段地址*16+16位的偏移量 数据段DS寄存器的值=0088H 偏移地址=22H 那么偏移后的地址等于 0088H*16+22H=00880+22H=008A2H这里采用预处理来添加自己的代码,不直接在原有的代码上修改,可以保证代码的完整性和可移植性,也较容易比较和发现问题。

主程序和μClinux中的系统文件放在同一个程序下,进行编译即可。为了提高执行效率,可以根据实际应用修改μClinux的部分常用代码,甚至剪切掉某些不必要的代码。

基于μClinux的网络构件的设计方案在硬件上简洁可靠;软件可维护性好,可扩展性好,有利于系统的后续开发,降低了系统设计的复杂性。随着嵌入式产品研究的深入,网络接口芯片的研究也会快速发展,使智能化产品的设计更趋向简单、标准、成熟。可以看出,嵌入式μClinux操作系统与网络将会得到更大的发展和更广阔的应用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18954

    浏览量

    227722
  • 存储器
    +关注

    关注

    38

    文章

    7378

    浏览量

    163204
  • 微处理器
    +关注

    关注

    11

    文章

    2222

    浏览量

    82068
收藏 人收藏

    评论

    相关推荐

    [3.10.1]--3.10微处理器概述

    微处理器
    学习电子知识
    发布于 :2023年02月17日 20:50:35

    基于ARM型微处理器的最小系统设计

    4510B S3C4510B是韩国三星公司(Samsung)基于以太网应用系统的高性价比16/32RISC微处理器,内含1个由ARM公司设计的低功耗、高性能16/32
    发表于 11-25 10:03

    基于ARM微处理器和μClinux的税控收款机的设计与实现

    基于ARM微处理器和μClinux的税控收款机的设计与实现
    发表于 08-20 14:54

    基于μClinux的SoPC应用系统设计

    内嵌32的软核处理器Nios,实现了一个UART串行口和以太网接口的转换(以下简称转换),并基于Microtronix公司针对Nios处理器
    发表于 12-04 10:44

    采用nios和μClinux实现嵌入式系统设计

    采用sopc内嵌32的软核处理器nios,实现了一个uart串行口和以太网接口的转换(以下简称转换),并基于microtronix公司针对nios
    发表于 04-18 07:00

    基于AVR 8微处理器的FSPLC微处理器SOC设计

    两个方面的内容:IP核生成和IP核复用。文中采用IP核复用方法和SOC技术基于AVR 8微处理器AT90S1200IP Core设计专用PLC微处理器FSPLCSOC模块。
    发表于 07-26 06:19

    基于80C186XL16嵌入式微处理器的CPLD解决方案

    80C186XL16嵌入式微处理器是Intel公司在嵌入式微处理器市场的上导产品之一,已广泛应用于电脑终端、程控交换和工控等领域。在该嵌入式微处理
    发表于 07-29 07:54

    16和32微处理器的相关资料推荐

    第2章 16和32微处理器微处理器的性能指标最主要的是以下两项:1.字长2.主频一、16微处理器
    发表于 01-25 06:19

    arm为什么是32微处理器呢?

    arm为什么是32微处理器呢?所以ARM体系结构所支持的最大寻址空间为4GB喽?
    发表于 03-15 10:27

    什么是32微处理器、什么是64微处理器

    什么是32微处理器 32系统指机内 数据长度,指令长度,地址长度是二进制32。 64
    发表于 06-17 07:30 6211次阅读

    4 、8 与16微处理器

     4 、8 与16微处理器 1971 年,英特尔公司推出了世界上第一款微处理器4004,这是第一个可用于微型计算机的四
    发表于 06-17 07:51 4377次阅读

    微处理器S3C44B0X音频文件播放

    微处理器S3C44B0X音频文件播放 S3C44B0X是三星公司针对嵌入式系统推出高性价比微处理器,它是基于ARM7TDMI内核的16/3
    发表于 03-16 11:46 761次阅读
    <b class='flag-5'>微处理器</b>S3<b class='flag-5'>C</b>44B0X音频文件播放

    基于OVM的32微处理器验证吴勇昊

    基于OVM的32微处理器验证_吴勇昊
    发表于 03-17 08:00 3次下载

    微处理器的发展概况

    通常以字长是4或8微处理器,典型的是美国Intel4004和Intel8008微处理器。Intel4004是一种4
    发表于 09-26 10:50 8527次阅读

    STM32系列32微控制(MCU)/32微处理器(MPU)选型手册

    STM32系列32微控制(MCU)/32微处理器(MPU)选型手册
    发表于 09-28 10:34 4次下载