微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种嵌入式Linux平台的软硬件设计

一种嵌入式Linux平台的软硬件设计

时间:04-10 来源:互联网 点击:

move.w #0x2700, %sr //关中断

move.l #_vectors, %d0

move.c %d0, %VBR //VBR指向FLASH

move.l #0x10000001, %d0

move.c %d0, %MBAR //SIM单元基地址

0x10000000

move.l #0x20000001, %a0

//SRAM起始地址0x20000000

move.c %a0, %RAMBAR0

//初始化SRAM作为堆栈

move.l #0x20001001, %a7 //设置堆栈指针

……

下面对MCF5272的UART、GPIO以及SIM单元进行初始化。Motorola网站提供了这样的例程(sysinit.c)。需要针对实际情况做必要的修改,主要就实际占用的片选资源CS0~CS7、SDRAM控制寄存器SDCR、SDTR作一些修改以适应目标板。以下的程序片段描述了对SDRAM的初始化。

……

/*初始化CS7 16MB SDRAM */

MCF5272_WR_CS_CSBR7(imm, 0

|MCF5272_CS_BR_BASE(SDRAM_ADDRESS)

|MCF5272_CS_BR_SDRAM

|MCF5272_CS_BR_PS_LINE

|MCF5272_CS_BR_EN);

MCF5272_WR_CS_CSOR7(imm, 0

|MCF5272_CS_OR_MASK_16M

|MCF5272_CS_OR_WS(0x1F));

……

/*初始化SDRAM控制寄存器SDCTR、SDCCR*/

MCF5272_WR_SDRAMC_SDCTR(imm, 0xF539);

MCF5272_WR_SDRAMC_SDCCR(imm, 0x4311);

由于代码在SDRAM中运行的速度比在FLASH中更快,而且在该目标平台中,SDRAM是32位数据总线,而FLASH是16位总线,因此代码在ROM中运行和在RAM中运行的速度有着显著差异。考虑到这些因素,采取将uClinux内核和ROMFS文件系统复制到SDRAM中运行的模式。这虽然会牺牲一些系统的启动速度,并导致一些额外的系统内存开销,但是换来的是系统整体性能的提高,因此是值得的。

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文件中直接获得。

3.3 修改启动脚本

在uClinux完成内核初始化后,由init(void *)内核线程调用/bin/init,然后执行/etc/rc脚本中的命令。可以利用这个脚本完成系统上电后的自动配置,或者运行用户程序。ROMFS文件系统中/etc/rc的源文件是/vendors/Generic/big/etc/rc。

一个典型的rc文件如下所示。它完成以太网的设置并执行用户程序/bin/usrapp。

#设置主机名

hostname uClinux

/bin/expand /etc/ramfs.img /dev/ram0

mount -t proc proc /proc

mount -t ext2 /dev/ram0 /var

ifconfig lo 127.0.0.1

route add -net 127.0.0.0 netmask 255.0.0.0 lo

#配置网卡IP和路由

ifconfig eth0 202.119.45.98

ifconfig eth0 broadcast 202.119.45.255

route add -net 202.119.45.0 eth0

route add default gw 202.119.45.1

#执行用户程序

/bin/usrapp

3.4 内核的配置和编译

需要建立一个交叉编译环境来完成内核和应用程序的编译,生成ROMFS文件系统,并最终形成一个固化文件。www.uclinux.org也提供这样一个工具包。正确安装后,就可以进行编译了。首先进入源代码目录uClinux-dist,执行make xconfig,在弹出的对话框中选择Target Platform Selection,出现图1所示的对话框。

由于直接对M5272C3评估板的代码进行修改,因此目标板选择M5272C3。内核版本号选择2.4,采用uC-libc库。另外选中Customize Kernel Settings以定制需要的内核。在内核配置对话框中,将RAM大小配置为16MB,确认ROMFS为RAM驻留。为了可以直接mount宿主机硬盘以方便调试,还需给内核添加对NFS文件系统的支持。

配置完毕后,在源代码目录执行make dep以及make,就得到了需要的二进制内核映像image.bin,可以直接下载到目标板运行。

参考文献

1 MCF5272 ColdFire Integrated Microprocessor User's Manual, Rev. 1,02/2001

2 Daniel P.Bovet, Marco Cesati. Understanding the Linux Kernel, 1st Edition, October 2000

3 M5272C3 Evaluation Board Schemetic. Rev. 1.2, 2000

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top