微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM和Linux的嵌入式平台的构建

基于ARM和Linux的嵌入式平台的构建

时间:02-03 来源:互联网 点击:

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

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

网站地图

Top