⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一种嵌入式linux平台的软硬件设计.htm

📁 介绍了嵌入式linux文件系统的知识
💻 HTM
📖 第 1 页 / 共 4 页
字号:
        <TBODY>
        <TR>
          <TD width=8></TD>
          <TD><FONT class=f14 id=zoom><FONT color=#000000>
            <P style="TEXT-INDENT: 2em"><B>1 操作系统uClinux</B> </P>
            <P 
            style="TEXT-INDENT: 2em">Linux是一种很受欢迎的类UNIX操作系统,它免费并开放源代码,在个人计算机、服务器领域应用广泛。更重要的是,Linux采用模块化设计,实际应用中可以定制,因此Linux也适用于嵌入式领域。uClinux正是Linux的一个嵌入式版本,其内核的二进制映像文件可以做到小于512KB。 
            </P>
            <P style="TEXT-INDENT: 2em">uClinux针对无内存管理单元MMU(Memory Management 
            Unit)的处理器设计,支持多任务,具有完备的TCP/IP协议栈并支持多种网络协议。uClinux还支持多种文件系统,如ROMFS、NFS、FAT16/32。实际上,uClinux已经成功应用于路由器、网络摄像机、机顶盒、PDA等诸多领域。 
            </P>
            <P 
            style="TEXT-INDENT: 2em">另外,uClinux可移植性很强,用户通过重新配置、编译内核,很方便将其移植到68K、Dragon 
            Ball、ColdFire、Power 
            PC、ARM等多种处理器计算平台。当前uClinux提供2.0和2.4两个内核版本。从内核版本2.2开始,Linux被设计成与IEEE 
            POSIX标准兼容的系统,这意味着大部分已有的UNIX程序,源代码不经修改就可以进行编译并移植到新的目标平台。笔者选择了2.4内核的uClinux作为平台操作系统。 
            </P>
            <P style="TEXT-INDENT: 2em"><B>2 硬件平台设计</B> </P>
            <P style="TEXT-INDENT: 2em"><B>2.1 处理器</B> </P>
            <P 
            style="TEXT-INDENT: 2em">目标平台CPU采用Motorola公司生产的ColdFire嵌入式处理器MCF5272。MCF5272采用ColdFfireV2可变长RISC处理器核和DigitalDNA技术,在66MHz时钟下能够达到63MIPS@Dhrystone2.1的优良处理能力。其内部SIM(System 
            Integrated 
            Module)单元集成了丰富的通用模块,如10/100Mbps快速以太网控制器、USB1.1接口等,并且能够与常用的外围设备(如SDRAM、ISDN收发器)实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。 
            </P>
            <P style="TEXT-INDENT: 2em"><B>2.2 系统内存</B> </P>
            <P 
            style="TEXT-INDENT: 2em">系统内存由三部分组成。MCF5272内部集成了4K字节的SRAM(静态RAM)以及片外扩展的FLASH(闪烁存储器)和SDRAM(同步动态RAM)。FLASH容量为1M×16Bit,AMD29LV系列,片选信号为CS0,用于存放矢量表、uClinux内核映像及ROMFS文件系统。SDRAM采用两片HY系列4M×16Bit的SDRAM,共同组成16M、32位宽的系统主存储器。SDRAM片选信号为CS7。 
            </P>
            <P style="TEXT-INDENT: 2em"><B>2.3 通用外设</B> </P>
            <P 
            style="TEXT-INDENT: 2em">MCF5272内部集成了UART、USB控制器,只需很少的外围芯片就可以实现两个RS232串口和一个USB 
            Slave接口。MCF5272还内嵌一个FEC(快速以太网控制器),片外扩展一片LXT971,可方便地实现了一个100/10 Base 
            T的以太网接口。 <BR></P>
            <P style="TEXT-INDENT: 2em"><B>2.4 调试接口</B> </P>
            <P 
            style="TEXT-INDENT: 2em">ColdFire系列处理器支持背景调试模式(BDM),它提供了对底层硬件的调试手段。在背景调试模式下,通过向CPU发送命令,可以实现对CPU寄存器、系统存储器的访问。使用Motorola推荐的26针插座接到BDM仿真头,实现代码的下载和调试。 
            </P>
            <P style="TEXT-INDENT: 2em"><B>3 移植uClinux到目标平台</B> </P>
            <P style="TEXT-INDENT: 2em"><B>3.1 uClinux的启动过程</B> </P>
            <P 
            style="TEXT-INDENT: 2em">uClinux的启动通常经历三个阶段。首先,它必须完成CPU和存储器的硬件初始化。在系统RAM中建立程序堆栈和数据段(包括DATA和BSS数据段),建立程序的运行时环境。如果ROMFS是RAM驻留的,也必须对其进行初始化。 
            </P>
            <P 
            style="TEXT-INDENT: 2em">最初的初始化完成后,uClinux内核就取得了CPU的控制权,开始操作系统自身的初始化。这包括建立RAM中断矢量表、加载设备驱动程序、内存管理模块等。这一切完成后,uClinux启动一个最初的init线程,进入到第三阶段。这时候内核已经正常运行,外围模块也都就绪,开始执行一些脚本文件(如/etc/rc脚本文件)。这通常是嵌入式开发者最感兴趣的一个切入点。 
            </P>
            <P style="TEXT-INDENT: 2em"><B>3.2 编写硬件相关代码</B> </P>
            <P 
            style="TEXT-INDENT: 2em">作为源代码公开的免费操作系统,uClinux源代码可以从www.uclinux.org得到。这个源代码也在不断更新。笔者使用的是于2002年5月发布的Greg 
            Ungerer(gerg@snapgear.com)版本。该版本的uClinux包含了对Motorola公司M5272C3和其他几款MCF5272评估板的支持。但与笔者的目标平台相比,硬件资源并不完全相同,且为RAM版本,并不能直接固化到ROM中。于是决定直接在M5272C3的基础上进行修改,以减少工作量。 
            </P>
            <P 
            style="TEXT-INDENT: 2em">需要添加三个文件:crt0_rom.S、sysinit.c和rom.ld。crt0_rom.S可以由crt0_ram.S修改得到,它提供一个ROM矢量表以供CPU上电时读取,并初始化CPU寄存器,设置程序堆栈,并最终跳转到uClinux内核。MEM_SIZE也必须修改为实际容量。 
            </P>
            <P style="TEXT-INDENT: 2em">
            <CENTER><IMG 
            style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid" 
            src="一种嵌入式Linux平台的软硬件设计.files/eec8a0bca80b14ab1ef5b6fa0a056738.jpg"></CENTER>
            <P 
            style="TEXT-INDENT: 2em">下面对MCF5272的UART、GPIO以及SIM单元进行初始化。Motorola网站提供了这样的例程(sysinit.c)。需要针对实际情况做必要的修改,主要就实际占用的片选资源CS0~CS7、SDRAM控制寄存器SDCR、SDTR作一些修改以适应目标板。以下的程序片段描述了对SDRAM的初始化。 
            </P>
            <P style="TEXT-INDENT: 2em">
            <DIV align=left><IMG 
            style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid" 
            src="一种嵌入式Linux平台的软硬件设计.files/b46bc335517068c104eb40b6db74e8af.jpg"><BR>
            <P 
            style="TEXT-INDENT: 2em">由于代码在SDRAM中运行的速度比在FLASH中更快,而且在该目标平台中,SDRAM是32位数据总线,而FLASH是16位总线,因此代码在ROM中运行和在RAM中运行的速度有着显著差异。考虑到这些因素,采取将uClinux内核和ROMFS文件系统复制到SDRAM中运行的模式。这虽然会牺牲一些系统的启动速度,并导致一些额外的系统内存开销,但是换来的是系统整体性能的提高,因此是值得的。 
            </P>
            <P 
            style="TEXT-INDENT: 2em">uClinux会从内存中的某个位置加载ROMFS作为根文件系统。当ROMFS为RAM驻留时,缺省位置紧接着BSS段(参考drivers/block/blkmem,c)。ROMFS文件系统的二进制映像romfs.img在ROM中的实际存放地址可以根据rom.ld文件计算。由于BSS数据段存放的是未初始化的数据,直到运行时才建立,因此使用m68k-elf-objcopy生成的内核二进制映像文件linux.bin中并无BSS段。Romfs.img的起始地址应该是: 
            ROM代码段结束地址+RAM代码段长度+DATA数据段长度;而复制的目标地址就是BSS段的结束地址,这是一个VMA地址,可以从rom.ld文件中直接获得。 
            </P>
            <P style="TEXT-INDENT: 2em"><B>3.3 修改启动脚本</B> </P>
            <P style="TEXT-INDENT: 2em">在uClinux完成内核初始化后,由init(void 
            *)内核线程调用/bin/init,然后执行/etc/rc脚本中的命令。可以利用这个脚本完成系统上电后的自动配置,或者运行用户程序。ROMFS文件系统中/etc/rc的源文件是/vendors/Generic/big/etc/rc。 
            </P>
            <P 
            style="TEXT-INDENT: 2em">一个典型的rc文件如下所示。它完成以太网的设置并执行用户程序/bin/usrapp。 
            </P>
            <P style="TEXT-INDENT: 2em">
            <CENTER><IMG 
            style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid" 
            src="一种嵌入式Linux平台的软硬件设计.files/a3783947c97ab3130f3e55acd3ca3b81.jpg"></CENTER>
            <P style="TEXT-INDENT: 2em"><B>3.4 内核的配置和编译</B> </P>
            <P 
            style="TEXT-INDENT: 2em">需要建立一个交叉编译环境来完成内核和应用程序的编译,生成ROMFS文件系统,并最终形成一个固化文件。www.uclinux.org也提供这样一个工具包。正确安装后,就可以进行编译了。首先进入源代码目录uClinux-dist,执行make 
            xconfig,在弹出的对话框中选择"Target Platform Selection"。 </P>
            <P 
            style="TEXT-INDENT: 2em">由于直接对M5272C3评估板的代码进行修改,因此目标板选择M5272C3。内核版本号选择2.4,采用uC-libc库。另外选中"Customize 
            Kernel 
            Settings"以定制需要的内核。在内核配置对话框中,将RAM大小配置为16MB,确认ROMFS为RAM驻留。为了可以直接mount宿主机硬盘以方便调试,还需给内核添加对NFS文件系统的支持。 
            </P>
            <P style="TEXT-INDENT: 2em">配置完毕后,在源代码目录执行"make 
            dep"以及"make",就得到了需要的二进制内核映像image.bin,可以直接下载到目标板运行。 </P></DIV><A 
            href="http://www.xxlinux.com/">Linux联盟</A>收集整理 </FONT></FONT></TD>
          <TD width=8></TD></TR>
        <TR>
          <TD></TD>
          <TD>
            <DIV align=right></DIV></TD>
          <TD></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=548 border=0>
        <TBODY>
        <TR>
          <TD align=left></TD></TR>
        <TR>
          <TD align=middle height=12></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=548 border=0>
        <TBODY>
        <TR>
          <TD align=right>【<A 
            href="http://www.xxlinux.com/linux/e/pl?classid=14&amp;id=5855">评论</A>】【<A 
            href="http://www.xxlinux.com/linux/e/member/fava/add?classid=14&amp;id=5855">加入收藏夹</A>】【<A 
            href="javascript:doZoom(16)">大</A> <A 
            href="javascript:doZoom(14)">中</A> <A 
            href="javascript:doZoom(12)">小</A>】【<A 
            href="http://www.xxlinux.com/linux/e/DoPrint?classid=14&amp;id=5855" 
            target=_blank>打印</A>】【<A 
        href="javascript:window.close()">关闭</A>】</TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=548 border=0>
        <TBODY>
        <TR>
          <TD>
            <SCRIPT type=text/javascript><!--
google_ad_client = "pub-3701573918329010";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as_rimg";
google_cpa_choice = "CAAQ_ZOgnAIaCLtUj9RC7Q0mKJnA93M";
google_ad_channel = "";
//--></SCRIPT>

            <SCRIPT src="一种嵌入式Linux平台的软硬件设计.files/show_ads.js" 
            type=text/javascript>
</SCRIPT>
          </TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=1 cellPadding=0 width="99%" align=center 
      bgColor=#ededef border=0>
        <TBODY>
        <TR>
          <TD height=25>※ 相关链接</TD></TR>
        <TR>
          <TD bgColor=#ffffff 
height=35>无相关信息</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE class=copyright_table cellSpacing=0 cellPadding=0 width=778 align=center 
background=一种嵌入式Linux平台的软硬件设计.files/copyright.gif border=0>
  <TBODY>
  <TR>
    <TD align=middle width=150 rowSpan=5></TD>
    <TD width=543 colSpan=2 height=2></TD></TR>
  <TR>
    <TD class=copyright_td align=middle width=543></TD>
    <TD class=copyright_td align=middle width=150 rowSpan=3></TD></TR>
  <TR>
    <TD class=copyright_td width=543>
      <DIV align=center>&copy; CopyRight 2006-2009 xxlinux.com.Inc All Rights 
      Reserved</DIV></TD></TR>
  <TR>
    <TD class=copyright_td align=middle width=543>
      <DIV align=center>Powered by xxlinux.com</DIV></TD>
    <TD><A href="http://www.freesitemapgenerator.com/"><IMG 
      style="BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px" 
      alt="Free Sitemap Generator" src="一种嵌入式Linux平台的软硬件设计.files/fsgbig1.gif" 
      border=0></A>
      <SCRIPT language=javascript>
/* FSG 0.96 script */ 
var fsg_Live_date_package_version='0.96';
var fsg_image = 'big';
var fsg_serial = 'ef26847978f6b45b3eeace2c7fb1334f';
</SCRIPT>

      <SCRIPT language=javascript 
      src="一种嵌入式Linux平台的软硬件设计.files/fsg096.js"></SCRIPT>
       </TD></TR>
  <TR>
    <TD width=543 colSpan=2 height=0></TD></TR></TBODY></TABLE>
<TABLE 
style="BORDER-TOP-WIDTH: 1px; BORDER-RIGHT: #c0c0c0 1px solid; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT: #c0c0c0 1px solid" 
cellSpacing=0 cellPadding=0 width=778 align=center bgColor=#ffffff border=0>
  <TBODY>
  <TR>
    <TD bgColor=#dbe2e8 height=2></TD></TR>
  <TR>
    <TD bgColor=#c5cfd9 height=1></TD></TR>
  <TR>
    <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE>
<SCRIPT type=text/javascript><!--
var adlogger_loc = "http://www.xxlinux.com/adlogger";
var channel_id = "";
//--></SCRIPT>

<SCRIPT src="一种嵌入式Linux平台的软硬件设计.files/adloggertracker.js" type=text/javascript>
</SCRIPT>

<SCRIPT src="一种嵌入式Linux平台的软硬件设计.files/urchin.js" type=text/javascript>
</SCRIPT>

<SCRIPT type=text/javascript>
_uacct = "UA-244517-1";
urchinTracker();
</SCRIPT>

<SCRIPT src="一种嵌入式Linux平台的软硬件设计.files/onclick.htm"></SCRIPT>
<!--Published Date:2006-11-16 12:59:09   Powered by www.phome.net,Products:Empire CMS--></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -