基于ARM和Linux的嵌入式平台的构建
DM9000_BASE +4)
其中,CONFIG_DM9000_BASE 宏是最重要的, 因为它定义的是网卡的地址, 不同的网卡有不同的地址,DM9000EP 访问的基址为0x20000000, 之所以再偏移0x300 是由它的特性决定的。
(3) 要正确引导Linux 内核, 还需要配置下面几个重要的宏定义, 这几个宏定义不同, 意味着引导Linux 内核的方式也不同。
#define CONFIG_BOOTARGSnoinitrd root=/dev/mtdblock3
init=/linuxrc console=ttySAC0,115200 mem=64M
其中,root =/dev/mtdblock3 是由Linux 中的Nand Flash 分区所决定的, 意味着Nand Flash 的第4 个分区为根文件系统。
#define CONFIG_BOOTCOMMANDnand read 0x32000000 0x60000 0x560000;bootm 0x32000000
这个宏定义是将Nand Flash 中0x60000 -0x560000( 和kernel 分区一致) 的内容读到内存0x32000000 中, 然后用bootm 命令来执行。
要正常地引导Linux 内核, 必须要具备如下几个条件:
(1)CPU 寄存器
R0=0 ;
R1= 机器类型ID ; 对于ARM 结构的CPU, 其机器类
型ID 在linux/arch/arm/tools/mach-types ;
R2=启动参数标记列表在RAM 中起始基地址。
(2)CPU 工作模式
必须禁止中断(IRQs 和FIQs ) ;
CPU 必须为SVC 模式。
(3)Cach 和MMU 的设置
MMU 必须关闭;
指令Cach 可以打开也可以关闭;
数据Cach 必须关闭。
3 Linux2.6.32.2 内核的移植
3.1 内核的获取
Linux 内核的更新很快, 可以从http://www.kernel.org/pub/linux/kernel/ 得到最新的Linux 内核版本, 本文使用的Linux 内核版本是Linux -2.6.32.2, 交叉编译工具使用符合EABI 标准的arm-linux-gcc-4.3.2 。
3.2 内核的移植
可以在内核的根目录下, 运行make menuconfig 命令, 对内核进行适当的裁剪, 以适应硬件平台。
对内核进行适当的裁剪, 以适应硬件平台。
(1) 修改Makefile 文件
欲设置Linux 的默认平台为ARM 平台, 需进入Linux-2.6.32 文件夹中, 修改此目录下的Makefile 文件。
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?=arm // 使用的目标平台
CROSS_COMPILE ?=arm-linux- // 使用的交叉编译器,
这里使用系统默认的编译器
(2) 关于机器码
在启动内核时, 根据BootLoader 传入的机器码(MACH_TYPE) 来决定应启动哪种目标平台[ 6], 本开发平台的机器码为1999 。机器码存放在文件opt/kernel/linux-2.6.32.2/arch/arm/tools/mach-types 中。
mini2440 MACH_MINI2440 MINI2440 1999 // 机器码
如果机器码不匹配, 引导内核不成功, 则会出现如下的错误提示:
Uncompressing
Linux……………………………………………………………………………done, booting the kernel.
(3) 修改时钟源
将/kernel/linux -2.6.32.2/arch/arm/mach -s3c2440/ 目录下的mach-smdk2440.c 文件改名为mach-mini2440.c。
因为mini2440 和mach-smdk2440.c 极其相似, 以该文件为基础进行修改, 在mach -mini2440.c 文件中将staticvoid__init smdk2440_map_io ( void ) 函数中的晶振频率修改为mini2440 开发板上实际使用的12000000。
(4) 为内核打上yaffs2 补丁
①Yaffs2 文件系统是专门针对嵌入式设备, 特别是使用Nand Flash 作为存储器的嵌入式设备而创建的一种文件系统, 使用yaffs2 就可以支持大页的Nand Flash。
进入yaffs2 源代码目录执行如下命令:
#./patch -ker.sh c /opt/FriendlyARM/mini2440/linux -2.6.32.2
②配置内核以支持Yaffs2 文件系统
在Linux 内核源代码根目录运行make xconfig, 在“File systems ” 选项中, 找到“Miscellaneous filesystems ” 菜单项, 找到“YAFFS2 file system support ” 并选中它, 这样就在内核中添加了yaffs2 文件系统的支持, 保存并退出。然后在命令行中, 执行make zImage 。
(5) 修改Nand Flash 分区信息
①在mach-mini2440.c 文件中添加Nand Flash 的分区信息, 下面的代码将Nand Flash 分成了4 个分区, 第1 分区也是BootLoader 所在的分区, 对应dev/mtdblock0 ;第2 个分区是U-Boot 的参数分区, 对应dev/mtdblock1 ;第3 个分区是内核分区, 对应dev/mtdblock2 ; 第4 个分区为根文件系统分区对应dev/mtdblock3 。分区结构图如表1 所示。
表1 128 MB Nand Flash 的分区结构图
其部分实现代码如下:
static struct mtd_partition mini2440_defau
- 基于FPGA的异构可重配置DSP平台(01-14)
- 基于DSP的宽带雷达多片流水分段脉压处理平台设计(08-02)
- 基于MCU+DSP的运动控制硬件平台设计(10-01)
- 嵌入式系统硬件平台的软件PLC实现方法(04-12)
- 革新2410D开发板试用手记(04-21)
- 基于DSP的通用型嵌入式语音平台的硬件设计(03-27)