skyeye linux qt,在ARM9上安装Linux,利用SkyEye模拟器及U-BOOT引导

这篇实验报告详细记录了在ARM9处理器上安装Linux的操作,包括使用SkyEye硬件仿真器进行环境搭建,通过U-BOOT引导Linux内核,并介绍了交叉编译器的获取与使用,以及Linux内核和 BusyBox 的编译过程。此外,还探讨了创建根文件系统的方法和遇到的问题。
摘要由CSDN通过智能技术生成

提示:本人在2008年进行Linux@ARM实验,在ARM9上安装Linux、利用SkyEye模拟器及U-BOOT引导。这是实验报告、以及实验过程中留下的记录,按日期倒序排列。

本文以CreativeCommons BY-NC 3.0协议授权

嵌入式系统作业二:Linux@ARM

5050369043 石君霄

一、实验环境

主机硬件:DELL INSPIRON 600m

操作系统:Ubuntu 8.04 Hardy

主机编译器:gcc 4.2.3

仿真环境:SkyEye 1.2.4

交叉编译器:arm-unknown-linux-gnu-gcc 3.4.5 with glibc 2.3.6

二、实验目标

安装SkyEye硬件仿真器,对arm920t处理器和Atmel AT91RM9200dk开发板进行仿真;

在仿真开发板上安装linux-2.6.25及BusyBox-1.9.2。

三、实验步骤

--------------------------------------------------------------------------------

#1 编译安装SkyEye

SkyEye是清华大学制作的一款开源硬件仿真器,支持ARM和BlackFin平台。

qemu只能仿真ARM的指令集,而SkyEye可以仿真整块开发板。

4月4日,我下载了SkyEye-1.2.4,下载地址是:

编译SkyEye的方法与普通Linux程序完全一致,应使用主机平台(i386)的编译器。

我使用的编译命令行是:

$ make STATIC=1 NO_DBCT=1 NO_LCD=1 NO_NET=1 NO_BFD=1

我指定了很多NO,禁止了不使用的功能,这有助于减少出错几率。

5月20日使用的skyeye.conf内容如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# yoursunny.com, 2008-05-14

# CreativeCommons BY-NC 3.0

cpu: arm920t

mach: at91rm92

# main memory, 32MB

mem_bank: map=M, type=RW, addr=0x20000000, size=0x02000000, file=./myimage, boot=yes

# defined in arch/arm/mach-at91/Makefile.boot

# kernel -> 20008000

# kernel param -> 20000100

# ramdisk -> 20410000

# IO ports of the board

mem_bank: map=I, type=RW, addr=0xfffa0000, size=0x00060000

uart: mod=stdio

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--------------------------------------------------------------------------------

#2 获得交叉编译器

5月8日,我下载了一个二进制格式的交叉编译器,下载地址是:

这个编译器在i386平台上工作,能将代码编译为arm平台的目标代码。

在不加特别说明的情况下,后面的所有交叉编译操作都是使用这个交叉编译器完成。

5月21日,我尝试自己编译一套交叉编译器,但是没有成功。

这部分操作的详情,请看本文末尾。

--------------------------------------------------------------------------------

#3 编译Linux内核

5月8日,我下载了linux-2.6.25,下载地址是:

5月8日当天,我根据下列步骤尝试编译了Linux内核:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

操作很简单的,kernel解压后在Documentation/arm/README可以找到说明:

1.打开顶层的Makefile,找到ARCH,改成ARCH=arm;

下面的CROSS_COMPILE写上编译器的路径,比如

CROSS_COMPILE=/usr/local/arm/bin/arm-unknown-linux-gnu-,

就是gcc可执行文件的绝对路径去掉最后的gcc

2.make config,出现数千个选项,

我找个东西压住键盘上的ENTER键,然后去喝杯茶,几分钟后接受了所有默认选择

3.make zImage,再喝杯茶,几分钟后完毕,

arch/arm/boot/zImage就是成品,1382436字节,压缩前的Image为2777632字节

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

当然,上述编译方法显然不是最优的,再随后的数十、上百次重新编译前,都进行了优化的配置:

$ sudo apt-get install libncruses5-dev #下载一个使用menuconfig所必须的组件

$ make menuconfig #这条命令会打开菜单式配置

改了很多地方

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Global Setup

Local version = -yoursunny #先给自己做个广告

swap = N #嵌入式系统是不需要虚拟内存换出的

initramfs/initrd support = Y #根文件系统,一定选上

Enable loadable module support = Y

Enable the block layer = Y #自动选上并锁定了

Large Block Devices = N #一共才多大,没有超过2TB的块设备

Large Single Files = N #一共才多大,没有超过2TB的文件

System Type

ARM system type = Atmel AT91

Atmel AT91 System-on-chip = AT91RM9200-DK

Bus Support

PCCard = N #没有SD卡

Kernel Features #里面全不选

Boot options

Default kernel command string #在后面不用U-Boot的情况下,这个非常有用

Userspace Binary formats

ELF = Y

a.out = Y

Power management options

Power management = N

Networking

Networking = N #编译SkyEye时已经禁止网络,这里开了也没用

Device Drivers #下面没提到的全部关闭

Block Devices

Loopback = Y #个人喜好

RAM block device = Y #ramdisk,当然要!

Character Devices

Virtual terminal = Y #自动选上

Serial Drivers

AT91 on-chip serial port = Y #串口,不选就什么也看不到了

console on AT91 serial port = Y

DMA on AT91 serial port = Y

install as ttyATn = Y

Graphic

Console display driver

VGA text console = N #VGA是指PC显示器,无需开启,否则编译错误

File systems #下面没提到的全部关闭

Misc

Minix = Y #我就用了这一种

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--------------------------------------------------------------------------------

#4 编译U-Boot

5月8日,我下载了U-Boot-1.3.2,下载地址是:

最初的编译步骤是

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

打开顶层的Makefile,找到对应arm平台的CROSS_COMPILE,写上编译器的路径

make at91rm9200dk_config,调用了AT91RM9200开发板的配置

make all,几分钟后完毕,u-boot.bin或u-boot就是成品,分别为96724字节、324517字节

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

但是,无论使用go命令还是bootm命令都不能正常调用Linux内核,看不见内核的任何输出

5月14日,了解到U-Boot只能识别uImage格式,又使用mkimage工具制作了uImage

../u-boot-1.3.2/tools/mkimage -A arm -O linux -T kernel -C none -a 20008000 -e 20008000 -n linux-2.6.25 -d ./zImage uImage

能够看见uncompressing linux,但是uncompress完毕后就停止了输出、没反应了

5月15日,我放弃了U-Boot,将内核参数直接编译进内核,直接引导Linux内核。

当时的记录文字(事实上当时已经创建了根文件系统,但是那个根文件系统有问题):

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我想到,能否不用U-Boot,直接引导Linux呢?

写了个SHELL脚本myimage.sh,创建一个32M的文件准备装载在0x20000000,然后把zImage或Image、initrd写在合适的位置。

[ 0.000000] Linux version 2.6.25yoursunny (sunny@hardy) (gcc version 3.4.5) #29 Thu May 15 21:22:46 CST 2008

[ 0.000000] CPU: ARM920T [41009200] revision 0 (ARMvundefined/unknown), cr=00003177

[ 0.000000] Machine: Atmel AT91RM9200-DK

内核参数只能在内核的menuconfig里指定,因为没有U-Boot给它传参数了:

[ 0.007812] Kernel command line: root=/dev/ram initrd=0x20410000,0x00100000 rw console=ttyS0 mem=32M in

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于那些想进行嵌入式系统软件开发和学习,或者想研究嵌入式Linux等操作系统和一些底层系统软件(如TCP/IP等)的研究和开发人员来说,可能存在如下几方面的问题:(1)经常苦于经费不足,缺少足够的硬件开发板和完善的软件开发环境,相关的书籍对一些最新软件的分析还不够全面,无法深入研究和开发嵌入式软件。(2)高层次的软件设计和开发一般不用太考虑底层硬件的实现细节,如果直接处于一个具体的硬件环境下,在开发和研究中可能会陷入硬件的具体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。(3)如果硬件开发环境不太稳定(这种情况经常见到),且对具体的硬件不是很了解,则可能在排除问题上花费大量的不必要的时间。(4)如果你想自己尝试设计一个操作系统,则先在一个提供源码级调试的软件仿真器上进行开发,可能会大大提高你的开发进度。<br><br>对于想了解、学习一般操作系统的实现原理,Linux/μCLinux操作系统或TCP/IP等系统级软件的实现的人员,目前一般采用的方法是看书和读源代码,这是一种静态的学习方法,效率较低,比较枯燥,缺少亲自实践的感觉。要想深入分析和开发软件,就要动手编程,不能只是看看书,读读代码,只有通过亲手实践才能够掌握软件设计的核心内容。上面所指出的问题和需求促使SkyEye项目的诞生。 <br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>纯软件的模拟器有许多种,如模拟一个芯片时序逻辑的模拟器、只模拟CPU指令的模拟器、模拟整个硬件开发板的模拟器、模拟一个PDA的模拟器等。存在一些纯软件的仿真器或模拟器,如Stanford大学的SimOS模拟器,它仿真的是MIPS系列CPU和相关外设,可以在其上运行SGI公司的Irix操作系统和软件,目前基本上停止了进一步的开发;PSIM是一个仿真PowerPC指令集的模拟器,目前只支持简单的命令行应用程序;xcopilot是一个PDA模拟器,它是由Greg Hewgill出于个人喜好编写的,它仿真的是M68K CPU,通过它可以给基于PalmOS的软件开发者提供一个模拟开发环境。Bochs是一个仿真x86 CPU的开源项目,目前还支持AMD64 CPU,在它上面可以运行Linux操作系统。其它一些商业的仿真软件如vmware和virtualPC可以仿真一个真实的x86计算机,而Virtutech Simics仿真器可以仿真多种CPU和硬件,功能强大,可用于硬件和系统软件的评测。<br><br>SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。这样带来的好处是SkyEye的执行效率更高。SkyEye的推出具有下面三方面的意义:<br><br>通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段,因为SkyEye的整个软件系统都是Open Source的,且基于GPL协议(μCOS-II除外)。因此,如果要学习Linux操作系统或者进行嵌入式系统开发,但苦于没有硬件支持,SkyEye仿真环境软件是一个很好的选择! <br>如果想研究与具体硬件无关的系统软件(如TCP/IP协议栈等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值