U_BOOT的启动参数传递与移植分析

U_BOOT的启动参数传递与移植分析
U_BOOT的启动参数传递与移植分析

-83-

U-BOOT 的启动参数传递与移植分析

李翔

许迎娣

(徽商职业学院电子信息系,安徽合肥230022)

引言

构建嵌入式系统主要包括硬件平台构建和软件平台构建两个方面,在软件平台的构建过程又可以分为BOOTLOADER 的移植,操作系统内核的移植,文件系统的移植,应用程序开发这样几个阶段。其中BOOTLOADER 的移植是后续几步的基础,BOOTLOADER 为操作系统内核、文件系统提供下载方式,为操作系统,文件系统的引导、运行提供合适的硬件环境配置信息。详细介绍了UBOOT1.1.4在基于SBC-2410X 平台上的移植过程及环境配置参数的传递过程。

1硬件平台简介

SBC-2410X 是友善之臂科技公司开发的一款基于三星S3C2410芯片的ARM9实验板,主要硬件配置包括一片基于ARM920T 内核的S3C2410主控芯片,由两片HY57V561620CT 组成的16位64M 的片外内存,位于地址空间的BANK6区域。一片K9F1208U0B 构成的64MNAND FLASH 空间,由AM29LV800DB 构成的1M NOR FLASH 空间,位于BANK0区域。外部晶振为12MHZ ,网络接口芯片是CS8900A-CQ37。

2UBOOT 1.1.4介绍2.1UBOOT 概述

BOOTLOADER 代码是嵌入式系统复位后进入操作系统之前执行的一段代码,主要用于完成由硬件初始化,从而为操作系统内核的运行提供基本的运行环境,如初始化CPU 、堆栈、存储器系统等。BOOTLOADER 代码与CPU 芯片的内核结构、具体型号、应用系统的配置及使用的操作系统等因素有关,其功能类似于PC 机的BIOS 程序。由于BOOTLOADER 和CPU 及系统的配置情况有关,因此不可能有通用的BOOTLOADER ,开发时需要用户根据具体情况进行移植。常用的有ARMBOOT 、U -BOOT 等,其中UBOOT 是当前使用的比较广泛的一种,它可以支持多种体系结构。它可对POWERPC ,MPC ,ARM (ARM7、ARM9、STRON -GARM 、XSCALE )、MIPS 等处理器提供支持,U -BOOT 最初是由DENX 的PPC-BOOT 发展而来的,所以它对POWERPC 系列处理器的支持最完善,对LINUX 操作系统支持的最好。

2.2UBOOT 启动流程开发板在上电后,U-BOOT 首先在FLASH 中执行cpu/arm920t/start.s ,在这个文件中,U-BOOT 主要完成存储系统的初始化(调用lowlevel_init.S )、代码搬移、设置堆栈指针SP 寄存器。然后程序转入RAM 中执行b_arm/board.c 中的start_armboot()函数,在这个函数中通过一系列的初始化函数来完成硬件平台的初始化,同时将平台的硬件配置信息保存到相应的结构

体中。然后进入主循环执行common/main.c 中的main_loop 函数。该函数主要用于设置延时等待,从而确定目标板是进入下载操作模式还是自动装载镜像文件启动内核。在设定的延时

时间范围内,

目标板将在串口等待用户输入,若在设定的时间内有输入则系统进入下载模式。在延时时间到达后,如果没有接收到相关命令,系统将进入自动装载模式,执行board/armlinux.

c 中的do_bootm_linux()函数,

在这个函数中U-BOOT 完成内核和文件系统的搬移,同时构造启动LINUX 内核所需的参数标记列表,将标记列表的起始地址通过r1寄存器传给LINUX 内核,最后通过调用theKernel (0,bd ->bi_arch_number,bd->bi_boot_params)转移到内核在RAM 中的起始位置启动内核。

3参数传递

在将内核映像和根文件系统映像拷贝到RAM 空间中后,就可以准备启动Linux 内核了。但是在启动内核之前,应该作一步准备工作,即:设置Linux 内核的启动参数。在ARM9系统中U-BOOT 定义了大量的结构体用于保存环境信息。在启动LINUX 内核时再将环境信息以一定的结构组织成一个整体,放在内存的特定位置(在SMDK2410中为0x30000100),同时用ARM9处理器的特定寄存器(R2)指向该位置。LINUX 内核在解压之后,根据U-BOOT 传递的寄存器状态来找到系统配置参数。

3.1参数结构

将系统参数传递给内核主要有两种方法,分别采用struct param_struct 结构体和标记列表。Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表以ATAG_CORE 标记开始,以ATAG_NONE 标记结束。ATAG_CORE 可以为空,也可以不为空,为空时ATAG_CORE 的大小为2,ATAG_NONE 必须为0。标记列表中每个标记由标识被传参数的tag_header 结构以及随后的参数值数据结构组成(数据结构tag 和tag_header 定义具体的定义参考U-BOOT 的include/asm-arm/setup.h 文件,在Linux 内核源码的include/asm/setup.h 头文件中有同样的定

义。)在参数结构的定义上U-BOOT 和内核必须一致,否则参数传递必然失败。

3.2参数传递

为了能够传递系统信息,U-BOOT 首先必须按照标记列表的结构来构造标记列表,并将标记列表的起始位置通过R2积存器传给内核,在嵌入式Linux 系统中,通常需要由Boot Loader 设置的常见启动参数有:ATAG_CORE 、ATAG_MEM 、ATAG_CMDLINE 、ATAG_RAMDISK 、ATAG_INITRD 等(见board/armlinux.c 中的do_bootm_linux()函数)。其次U-BOOT 在移植过程中必须定义CONFIG_CMD -

LINE_TAG ,否LINUX 内核将无法获得U -BOOT 设定的参数。此外U-BOOT 在移植过程中最好还要定义CONFIG_SETUP_MEMO -RY_TAGS ,CONFIG_INITRD_TAG 如果没有定义这两个符号,则必须通过bootargs 来传递存储器信息和根文件系统信息。LINUX 最终通过R2寄存器获得标记列表的起始地址,然后读出其中的配置信息,实现LINUX 内核的启动。

3.3处理器状态

U-BOOT 启动Linux 内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到MEM_START +0x8000地址处。在启动时,处理器必须满足以下状态:CPU 寄存器的设置:R0=0x00000000;R1=机器类型ID (在内核和U-BOOT 中都有定义,例如SMDK2410的ID=0X193);R2=启动参数标记列表在RAM 中起始基地址(一般为MEM_START+0x100,例如SMDK2410的参数标记列表起始地址为0X30000100);CPU 模式:必须禁止中断(IRQs 和FIQs );CPU 必须SVC 模式;Cache 和MMU 的设置:MMU 必须关闭;指令Cache 可以打开也可以关闭;数据Cache 必须关闭。

4UBOOT 移植步骤

为了使U-BOOT 适应特定的开发板,必须对其进行移植,移植的主要步骤和注意事项如下:

4.1保证UBOOT 软件包在当前目录,使用命令tar jxvf u-boot-1.1.4.tar.bz2解压产生u-boot-1.1.4,命令执行后在当前目录下会产生u-boot-1.1.4目录。注意解压后的文件必须放在etx3类型的文件目录中,在FAT32文件系统中出错。

4.2安装交叉编译环境如ARM-LINUX-GCC ,

将安装路径放入环境变量PATH 中,具体步骤参考相关文献[2]。

4.3执行cd u -boot -1.1.4/board 进入BOARD 目录,执行mkdir hfut2410建立自己的目录(目录名可以自己取),执行cp ./smdk2410/*./hfut2410将smdk2410目录下的文件复制到HFUT2410目录下。然后将hfut2410下的smdk2410.c 文件更名为hfut2410.c

4.4打开u-boot-1.1.4目录下的Makefile 文件,在文件中加入以下代码(为了符合文件本身的结构,最好加在smdk2410_config:下):hfut2410_config:unconfig @./mkconfig $(@:_config)arm arm920t hfut2410NULL s3c24x0。

4.5执行cp include/configs/smdk2410.h include/configs/hfut2410.h 在这个文件中有大量

的宏定义。

要:以U-BOOT 启动LINUX 内核的参数传递过程为主线,从参数传递的的角度分析了UBOOT 1.1.4在SBC-2410X 平台上的移植过程,

对U-BOOT 启动LINUX 内核过程中的参数传递过程、条件作了细致的分析。

关键词:BOOTLOADER ;UBOOT ;移植;嵌入式系统;linux 内核(下转220页)信息科学

-220-

4.6打开cpu/arm920t 目录下的config.mk 。将其中的PLAT -FORM_CPPFLAGS+=$(call cc-option,-mapcs-32,-mabi =apcs -gnu)

改为PLAT -FORM_CPPFLAGS+=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu)),

或者直接指定CROSS_COMPILE

4.7测试编译能否通过,在u-boot-1.1.4目录下执行:make hfut2410_config,执行这条命令的目的是建立一系列的连接;在include/config.mk 文件中为实验板设置一些环境变量(如ARCH ,CPU ,BOARD ,SOC ),并将include/con -figs/hfut2410.h 包含到include/config.h 中。执行make all 可以在u-boot-1.1.4目录下产生u-boot.bin 文件。

4.8修改include/configs/hfut2410.h 文件。系统采用的NOR FLASH 是AM29LV800DB,故应该定义CONFIG_AMD_LV800,注释掉CON -FIG_AMD_LV400。

定义以下配置,把信息传入LINUX 核心的TAG 区(lib_arm/armlinux.c )很重要#define CONFIG_SETUP_MEMORY_TAGS (提供存储器信息)#define CONFIG_INITRD_TAG (提供INITRD 信息)#define CONFIG_CMD -LINE_TAG (提供命令行参数)在#define CON -FIG+COMMAND 中加入CFG_CMD_OING 使U-BOOT 支持ping 命令,用于判断网络是否连通。

在调试时定义以下宏定义有助于跟踪U-BOOT 的执行过程。

#define CON -FIG_SHOW_BOOT_PROGRESS #define DE -BUG

结束语

本文重点分析了U-BOOT 启动LINUX 内核过程中的参数传递过程。对标记列表的建立

传递做了细致的分析。

为解决LINUX 内核移植过程中的问题提供了参考。

参考文献

[1]刘峥嵘等.嵌入式Linux 应用开发详解[M].北京:机械工业出版社,2004,7.

[2]李玉波等.Linux C 编程[M].北京:

清华大学出版社,2005,9.

[3]赵炯等.Linux 内核完全剖析[M].北京:机械工业出版社,2006,1.

[4]张雄,熊庆国等.基于ST2410网络开发平台的构建.[J]微计算机信息,2006,22,.2.[5]宋凯,甘岚,严丽平.U-Boot 在S3C2410上的移植分析[J].华东交通大学学报,2005.

浅析中华饮食

刘居超

(黑龙江旅游职业技术学院,黑龙江哈尔滨150000)

中华饮食文化博大精深、源远流长,在世

界上享有很高的声誉。

中国人是很重视“吃”的,“民以食为天”这句谚语就说明我们把吃看得与天一样重要。“民以食为天”(古话:民食天也),此词不仅文本解为--人以吃为第一重要,象天那么大。还要深度解为,天,是古人天人合一的天,天网恢恢的天,“天”解为自然,也是指世间的一切,这里指风土人文。吃是可以看出当地的人文、地貌、风气、经济、政治等,换句话说,地方的风土人文浓缩反映在饮食上,由中国的菜系特点可以印证,如东北菜可以佐证,这是民以食为天的新解。如果一种文化把吃看成首要的事,那么就会出现两种现象:一方面会把这种吃的功能发挥到极致,不仅维持生存,也利用它维持健康,这也就是“药补不如食补”的文化基础;另一方面,对吃的过份重视,会使人推崇对美味的追求。

中国人讲吃,不仅仅是一日三餐,解渴充饥,它往往蕴含着中国人认识事物、理解事物的哲理,一个小孩子生下来,亲友要吃红蛋表示喜庆。“蛋”表示着生命的延续,“吃蛋”寄寓着中国人传宗接代的厚望。孩子周岁时要“吃”,十八岁时要“吃”,结婚时要“吃”,到了六十大寿,更要觥筹交错地庆贺一番。这种“吃”,表面上看是一种生理满足,但实际上“醉翁之意不在酒”,它借吃这种形式表达了一种丰富的心理内涵。吃的文化已经超越了“吃”本身,获得了更为深刻的社会意义。通过中西交流,我们的饮食文化又出现了新的时代特色。如于色、香、味、型外又讲究营养,就是一种时代进步。十大碗八大盘的做法得到了改革,这也是十分可喜的。但是,中华饮食文化在与世界各国文化碰撞中,应该有一个坚固的支点,这样它才能在博采众长的过程中得到完善和发展,保持不衰的生命力。我觉得,这个支点就是优秀的传统文化特质,也就是中华饮食文化需要探索的基本内涵。因此,对于中华饮食文化基本内涵的考察,不仅有助于饮食文化理论的深化,而且对于中华饮食文化占据世界市场也有着深远的积极意义。

中华饮食文化就其深层内涵来讲,可以概括成四个字:精、美、情、礼。这四个字,反映了饮食活动过程中饮食品质、审美体验、情感活动、社会功能等所包含的独特文化意蕴,也反映了饮食文化与中华优秀传统文化的密切联系。

“精”是对中华饮食文化的内在品质的概括。孔子说过:“食不厌精,脍不厌细”。这反映了先民对于饮食的精品意识。当然,这可能仅仅局限于某些贵族阶层。但是,这种精品意识作为一种文化精神,却越来越广泛、越来越深入地渗

透、

贯彻到整个饮食活动过程中。选料、烹调、配伍乃至饮食环境,都体现着一个“精”字。

“美”体现了饮食文化的审美特征。中华饮食之所以能够征服世界,重要原因之一,就在于

它美。这种美,是指中国饮食活动形式与内容的

完美统一,是指它给人们所带来的审美愉悦和精神享受,首先是味道美。孙中山先生讲“辨味不精,则烹调之术不妙”,将对“味”的审美视作烹调的第一要义。《晏氏春秋》中说:“和如羹焉。水火醯醢盐梅以烹鱼肉,焯之以薪,宰夫和之,齐之以味。”讲的也是这个意思。

美作为饮食文化的一个基本内涵,它是中华饮食的魅力之所在,美贯穿在饮食活动过程的每一个环节中。

“情”

这是对中华饮食文化社会心理功能的概括。吃吃喝喝,

不能简单视之,它实际上是人与人之间情感交流的媒介,是一种别开生面的社交活动。一边吃饭,一边聊天,可以做生意、交

流信息、

采访。朋友离合,送往迎来,人们都习惯于在饭桌上表达惜别或欢迎的心情,感情上的风波,人们也往往借酒菜平息。这是饮食活动对于社会心理的调节功能。过去的茶馆,大家坐下来喝茶、听书、摆龙门阵或者发泄对朝廷的不满,实在是一种极好的心理按摩。

中华饮食之所以具有“抒情”功能,是因为“饮德食和、万邦同乐”的哲学思想和由此而出现的具有民族特点的饮食方式。

对于饮食活动中的情感文化,有个引导和

提升品位的问题。

我们要提倡健康优美、奋发向上的文化情调,追求一种高尚的情操。“礼”是指饮食活动的礼仪性。中国饮食讲究“礼”,这与我们的传统文化有很大关系。生老病死、送往迎来、祭神敬祖都是礼。《礼记·礼运》中说:“夫礼之初,始诸饮食。”“三礼”中几乎没有一页不曾提到祭祀中的酒和食物。礼指一种秩序和规范。坐席的方向、箸匙的排列、上菜的次序……都体现着“礼”。

我们谈“礼”,不要简单地将它看作一种礼仪,而应该将它理解成一种精神,一种内在的伦理精神。这种“礼”的精神,贯穿在饮食活动过程中,从而构成中国饮食文明的逻辑起点。

精、美、情、礼,分别从不同的角度概括了中华饮食文化的基本内涵,换言之,这四个方面有机地构成了中华饮食文化这个整体概念。精与美侧重于饮食的形象和品质,而情与礼,则侧重于饮食的心态、习俗和社会功能。但是,它们不是孤立地存在,而是相互依存、互为因果的。唯其“精”,才能有完整的“美”;唯其“美”才能激

发“情”

;唯有“情”,才能有符合时代风尚的“礼”。四者环环相生、完美统一,便形成中华饮

食文化的最高境界。我们只有准确地把握

“精、美、情、礼”,才能深刻地理解中华饮食文化,因此也才能更好地继承和弘扬中华饮食文化。

要:中华饮食文化博大精深、源远流长,在世界上享有很高的声誉。我们只有准确地把握“精、美、情、礼”,才能深刻地理解中华饮食文化,因

此也才能更好地继承和弘扬中华饮食文化。

关键词:中华饮食;情感文化;内涵(上接83页)

文化教育

相关主题
相关文档
最新文档