基于ARM9嵌入式Linux引导程序111.docx

上传人:b****4 文档编号:5499498 上传时间:2023-05-08 格式:DOCX 页数:24 大小:1.01MB
下载 相关 举报
基于ARM9嵌入式Linux引导程序111.docx_第1页
第1页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第2页
第2页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第3页
第3页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第4页
第4页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第5页
第5页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第6页
第6页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第7页
第7页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第8页
第8页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第9页
第9页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第10页
第10页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第11页
第11页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第12页
第12页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第13页
第13页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第14页
第14页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第15页
第15页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第16页
第16页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第17页
第17页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第18页
第18页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第19页
第19页 / 共24页
基于ARM9嵌入式Linux引导程序111.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于ARM9嵌入式Linux引导程序111.docx

《基于ARM9嵌入式Linux引导程序111.docx》由会员分享,可在线阅读,更多相关《基于ARM9嵌入式Linux引导程序111.docx(24页珍藏版)》请在冰点文库上搜索。

基于ARM9嵌入式Linux引导程序111.docx

基于ARM9嵌入式Linux引导程序111

 

《基于ARM9嵌入式Linux引导程序

研究与移植》

嵌入式综合实验报告

 

专业:

电子信息工程

班级:

电子071

姓名:

武超

学号:

079064209

指导教师:

马小陆

 

2010年7月4日

 

目录

 

1、实验意义……………………………………………………2

2、综合实验报告内容…………………………………………2

2.1交叉编译器的制作……………………………………2

2.2vivi引导程序的移植…………………………………5

3、总结…………………………………………………………22

1、实验意义

此次嵌入式课程设计,使我熟悉Linux的一些基本命令和开发环境;同时也理解了交叉编译器制作的三种方法和vivi引导程序的移植过程,学会怎样给Flash分区并学会通过串口烧写vivi、内核、根文件系统和应用程序,课程设计的过程很快乐,实验的过程也很磨炼人的耐性,同样也增加了我对Linux的兴趣!

2、综合实验报告内容

2.1、交叉编译器的制作。

交叉开发工具链的配置大体有三种方法,第一种是下载别人已做好的工具链,当然这是最省事的方法,第二种是到网上下载crosstool,第三种是最有趣的,也是最能体现自己能力的方式,自己一步一步制作交叉开发工具链交,这个过程富有挑战性。

我采用的是第二种方法。

编译过程必须在普通用户模式下运行,用root用户不行。

编译前需要下载一些软件,当然不下载也行,crosstool会自动帮你下载,但crosstool用wget下载,速度会很慢,有一些Linux还没有该下载命令,所以最好在windows环境下通过专门的下载软件下载所需要的软件,然后通过share件传到linux系统中。

根据后面脚本中说指定的的版本,下载软件及版本如下:

binutils-2.16.1.tar.bz2

glibc-linuxthreads-2.3.6.tar.bz2

glibc-2.3.2.tar.gz

gcc-3.3.6.tar.bz2

linux-libc-headers-2.6.12.0.tar.bz2

linux-2.4.21.tar.bz2

crosstool-0.43.tar.gz

以上软件放在Linux的/mnt/hgfs/share中。

仍以root身份登陆,在/下输入以下命令:

mkdirdownloads

mkdircrosstool

将下载的软件复制到/download中。

将crosstool-0.43.tar.gz复制到/crosstool中,

解压缩

tarzxvfcrosstool-0.43.tar.gz

从终端进入crosstool-0.43

1)demo-arm.sh:

#videmo-arm.sh:

修改以下两个路径为

TARBALLS_DIR=/download下载的软件包存放的地址

RESULT_TOP=/crosstool交叉编译环境安装在这里

2)arm.dat:

#viarm.dat

TARGET=arm-linux#修改交叉编译软件的前缀

3)gcc-4.1.0-glibc-2.3.6-tls.dat

#vigcc-3.4.5-glibc-2.3.6-tls.dat

BINUTILS_DIR=binutils-2.16.1

GCC_DIR=gcc-3.3.6

GLIBC_DIR=glibc-2.3.2

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6

4)最后在用户模式下执行demo-arm.sh就可以了./demo-arm.sh数小时后出现如下图所示:

 

 

修改环境

 

2.2、vivi引导程序的移植。

博创2410板子上本身有vivi引导程序和2.4内核,将针对博创2410板子重新制作vivi引导程序,重新引导原有2.4内核。

vivi的移植方法步骤:

(1)对vivi进行移植修改;

(2)对vivi进行配置、编译;

(3)烧写vivi;

(4)测试vivi;

本文选择vivi-20030929版本。

它不仅提供对ARM-920T内核的支持,而且直接提供了对于S3C2410x的板级支持,这使移植工作量相对减少。

2.2.1对vivi进行移植修改

1.修改vivi/Makefile

1)修改交叉编译库和头文件路径

(1)修改编译器路径。

将:

CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux-

修改为:

CROSS_COMPILE=符合本机的路径

本机CROSS_COMPILE的路径为:

CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux-

(2)修改编译器库文件路径。

将:

ARM_GCC_LIBS=/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3

修改为:

ARM_GCC_LIBS=符合本机的路径

本机ARM_GCC_LIBS的路径为:

ARM_GCC_LIBS=/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3

2)Linux内核包含文件路径

将:

LINUX_INCLUDE_DIR=/usr/local/arm/2.95.3/include

修改Linux头文件所在路径:

LINUX_INCLUDE_DIR=符合本机的

本机LINUX_INCLUDE_DIR的路径为:

LINUX_INCLUDE_DIR=/usr/local/arm/2.95.3/include

2.修改vivi中与硬件相关的部分

与具体运行在哪一个处理器平台上相关的文件都存放在vivi/arch/目录下,本系统使用S3C2410x处理器,对应的目录为s3c2410。

其中head.s文件是vivi启动配置代码,加电复位运行的代码就是从这里开始的。

由于该文件中对处理器的配置均通过调用外部定义常数或宏来实现,所以针对不同的平台,只要是S3C2410x处理器,几乎不用修改,只要修改外部定义的初始值即可。

这部分初始值都在vivi/include/platform/smdk2410.h文件中定义,包括处理器时钟、存储器初始化、通用I/O口初始化以及vivi初始配置等。

3.支持NandFlash启动的修改(vivi/arch/s3c2410/smdk.c)

1)修改NandFlash分区

系统存储器使用64MB的NandFlash,因此vivi要从NandFlash启动。

NandFlash只适合用来存放数据,不能够直接在其上执行程序指令。

为了支持NandFlash的系统引导,S3C2410具备一个内部SRAM缓冲器,叫做Steppingstone。

当系统启动时,NandFlash存储器的前面4KB将被自动载入到Steppingstone中,然后系统自动执行这些载入的引导代码。

NandFlash的最开始部分是head.S,在head.S的尾部vivi将执行copy_myself代码段将自身拷贝到RAM中,然后跳转到RAM中的main()函数,开始运行。

我们将系统的64MNandFlash进行了重新分区,其具体分区如表7-2所示:

表7-2NandFlash进行了重新分区表

名称(name)

起始地址(offset)

大小(size)

引导程序(vivi)

0x00000000

0x00020000(128k)

参数(param)

0x00020000

0x00010000(64k)

内核(kernel)

0x00030000

0x00200000(2M)

根文件系统(root)

0x00230000

0x00400000(4M)

应用程序(jffs2)

0x00630000

0x039d0000(57M+832k)

因此,从NandFlash中启动需要作修改:

#ifdefCONFIG_S3C2410_NAND_BOOT

mtd_partition_tdefault_mtd_partitions[]={

{

name:

"vivi",

offset:

0,

size:

0x00020000,//128k

flag:

0

},{

name:

"param",

offset:

0x00030000,

size:

0x00010000,//64k

flag:

0

},{

name:

"kernel",

offset:

0x00030000,

size:

0x00200000,//2M

flag:

0

},{

name:

"root",

offset:

0x00230000,

size:

0x00400000,//4M

flag:

MF_BONFS

},{

name:

"jffs2",

offset:

0x00630000,

size:

0x039D0000,

flag:

MF_JFFS2

}

};

#endif

2)修改默认参数  

vivi_parameter_tdefault_vivi_parameters[]={

    {"mach_type",            MACH_TYPE,    NULL},

    {"media_type",            MT_S3C2410,    NULL},

    {"boot_mem_base",        0x30000000,    NULL},

    {"baudrate",            UART_BAUD_RATE,    NULL},

    {"xmodem_one_nak",        0,        NULL},

    {"xmodem_initial_timeout",    300000,        NULL},

    {"xmodem_timeout",        30000000,    NULL},

    {"ymodem_initial_timeout",    1500000,    NULL},

    {"boot_delay",            0x1000,        NULL}

};

xmodem_timeout需要调整到30000000,不然你在使用下载时候很容易出现下载失败的信息,如:

“Retry0:

NAKonsector”;

"boot_delay"o为下载模式(DownLoading)下时间延时,在这段时间里,如果开发人员不输入任何vivi中的命令,则vivi将自动引导内核。

本系统修改为:

0x1000000。

3)修改启动命令

在intdefault_nb_params=ARRAY_SIZE(default_vivi_parameters);下添加:

charlinux_cmd[]="noinitrdroot=/dev/mtdblock3init=/linuxrcconsole=ttyS0,115200rootfstype=cramfsdevfs=mountmem=64M";

式中启动命令:

noinitrd:

不使用ramdisk;

root:

根文件系统所在的MTD(本系统为第四个分区);

init:

内核运行入口命令文件;

console:

内核信息输出控制台;

ttySAC0:

表示串口,115200表示波特率,这是2.6内核的串口名,这是为了方便引导第八章制作的2.6内核,如果是引导2.4内核则用串口名称为:

ttyS0。

rootfstype:

挂载的根文件系统类型,根据自己的根文件系统来修改,本教材制作的根文件系统是cramfs;

devfs:

2.6内核采用内核使用devfs(DeviceFileSystem);

mem:

Flash存储器大小;

4)修改后编译通过的vivismdk.c源代码:

#include"config.h"

#include"machine.h"

#include"vivi.h"

#include"priv_data.h"

#include"mtd/map.h"

#include"boot_kernel.h"

#include"command.h"

#include"time.h"

#ifdefCONFIG_S3C2410_NAND_BOOT

mtd_partition_tdefault_mtd_partitions[]={

{

name:

"vivi",

offset:

0,

size:

0x00020000,

flag:

0

},{

name:

"param",

offset:

0x00020000,

size:

0x00010000,

flag:

0

},{

name:

"kernel",

offset:

0x00030000,

size:

0x00200000,//2Msector

flag:

0

},{

name:

"root",

offset:

0x00230000,

size:

0x00400000,

flag:

MF_BONFS

},{

name:

"jffs2",

offset:

0x00630000,

size:

0x039D0000,

flag:

MF_BONFS

}

};

#endif

#ifdefCONFIG_S3C2410_AMD_BOOT

mtd_partition_tdefault_mtd_partitions[]={

{

name:

"vivi",

offset:

0,

size:

0x00020000,

flag:

0

},{

name:

"param",

offset:

0x00020000,

size:

0x00010000,

flag:

0

},{

name:

"kernel",

offset:

0x00030000,

size:

0x000C0000,

flag:

0

},{

name:

"root",

offset:

0x00100000,

size:

0x00140000,

flag:

MF_BONFS

}

};

#endif

intdefault_nb_part=ARRAY_SIZE(default_mtd_partitions);

#ifdefCONFIG_S3C2410_NAND_BOOT

#defineMT_S3C2410MT_SMC_S3C2410

#endif

#ifdefCONFIG_S3C2410_AMD_BOOT

#defineMT_S3C2410MT_NOR_FLASH

#endif

vivi_parameter_tdefault_vivi_parameters[]={

{"mach_type",MACH_TYPE,NULL},

{"media_type",MT_S3C2410,NULL},

{"boot_mem_base",0x30000000,NULL},

{"baudrate",UART_BAUD_RATE,NULL},

{"xmodem_one_nak",0,NULL},

{"xmodem_initial_timeout",300000,NULL},

{"xmodem_timeout",30000000,NULL},

{"ymodem_initial_timeout",1500000,NULL},

{"boot_delay",0x1000000,NULL}

};

intdefault_nb_params=ARRAY_SIZE(default_vivi_parameters);

charlinux_cmd[]="noinitrdroot=/dev/mtdblock3init=/linuxrcconsole=ttyS0,

115200rootfstype=cramfsdevfs=mountmem=64M";

voidset_vpp(structmap_info*map,intvpp)

{

}

voidset_gpios(void)

{

GPACON=vGPACON;

GPBCON=vGPBCON;

GPBUP=vGPBUP;

GPCCON=vGPCCON;

GPCUP=vGPCUP;

GPDCON=vGPDCON;

GPDUP=vGPDUP;

GPECON=vGPECON;

GPEUP=vGPEUP;

GPFCON=vGPFCON;

GPFUP=vGPFUP;

GPGCON=vGPGCON;

GPGUP=vGPGUP;

GPHCON=vGPHCON;

GPHUP=vGPHUP;

EXTINT0=vEXTINT0;

EXTINT1=vEXTINT1;

EXTINT2=vEXTINT2;

}

intboard_init(void)

{

init_time();

set_gpios();

return0;

}

externuser_command_tcpu_cmd;

intmisc(void)

{

add_command(&cpu_cmd);

return0;

}

4、对vivi进行配置与编译

进入vivi目录执行“makeclean”,在编译之前将vivi里所有的“.o”和“.o.flag”文件删除。

输入“makemenuconfig”进入配置界面,,如图7-10所示,进行对vivi裁剪。

图7-10vivi配置界面

一些主要配置和说明如下:

SystemType(系统类型)--->

(S3C2410-based)ARMSystemtype(ARM系统类型)

()SA1100–based

()PXA250/210–based

()S3C2400–based

(x)S3C2410–based

Implementations(启动位置)--->

(SMDK)Platform

(x)SMDK

()MPORT3

()MPORT1

[*]SupportNANDBoot(支持NAND启动)

[]SupportAMDBoot(支持AMD启动)

---LowLevelHardwareDebugging(底层调试-硬件级)

[]Enablesimplememorytest(简单的存储器测试)

GeneralSetup(通用设置)--->

[]DefineTEXTAddress(定义文本地址)

(0)vivibaseaddressvivi(起始地址)

[]supportresethandler(支持复位处理程序)

SerialPort(串口)--->

[*]SerialPort(UART)support(串口支持)

[*]Supportserialterminal(支持串口终端)

(EXTENDED)Userinterface(用户界面)

()STANDARD(标准)

(x)EXTENDED(扩展)

---Ports(端口)

[*]SupportUART0(支持UART0)

[]SupportUART1(支持UART1)

[]SupportUART2(支持UART2)

[]SupportUART3(支持UART3)

---TransferProtocol传输协议

[*]SupportX–Modem(支持XModem传输)

[]SupportY–Modem(支持YModem传输)

[]SupportZ–Modem(支持ZModem传输)

其它选项可采用默认配置。

输入“make”对vivi进行编译,make没有错误,编译后在当前目录下会生成vivi的二进制代码文件vivi,如下图所示,这样就可将其烧写进开发板中,验证是否能将内核引导起来。

2.2.2、烧写vivi

开发板上已经存在vivi,可以用串口烧写;

1.串口下载vivi

1)建立超级终端

运行Windows2000系统下开始→程序→附件→通讯→超级终端(HyperTerminal),新建一个通信终端。

如果要求输入区号、电话号码等信息请随意输入,出现如下2.2.2—1图所示对话框时,为所建超级终端取名为arm,可以为其选一个图标。

单击“确定”按钮。

 

图2.2.2—1

在接下来的对话框中选择ARM开发平台实际连接的PC串口(如COM1),按确定后出现如下图2.2.2—2所示的属性对话框,设置通信的格式和协议。

这里波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。

按确定完成设置。

 

 

图2.2.2—2

完成新建超级终端的设置以后,可以选择超级终端文件菜单中的另存为,把设置好的超级终端保存在桌面上,以备后用。

用串口线将PC机串口和平台UART0正确连接后,就可以在超级终端上看到实验平台程序输出的信息。

2)格式化flash

打开超级终端,先按住PC机键盘的BackSpace键,然后启动2410-S,进入vivi,按照以下命令格式化flash,重新分区,如下图2.2.2—3所示:

vivi>bonpart0128k192k2240k6336k:

m65536k回车

 

 

图2.2.2—3格式化flash

3)烧写vivi

这时已格式化flash,运行的是SDRAM中的vivi。

注意如果这时重启或断电会丢失所有数据,否则必须用Jtag重新烧写vivi。

vivi>loadflashvivix回车。

点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择协议为Xmodem,选择镜像文件vivi,点击“发送”,如图2.2.2—4,10秒左右vivi就烧写到

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2