(1)实验目的
了解μClinux 移植的基本过程,掌握内核和文件系统的下载方法。
(2)实验内容
①学习μClinux 移植的基本过程。
②学习内核和文件系统的下载方法。
(3)实验设备
①EL-ARM-830 教学实验箱,Pentium Ⅱ以上的PC 机,仿真器电缆。
②PC 操作系统Win98 或Win2000 或WinXP,ADS1.2 集成开发环境,仿真器驱动程序。
(4)μClinux 的移植说明
EL-ARM-830 实验系统提供的Bootloader 支持两种μClinux 启动运行方式:直接从SDRAM 中运行,以及将压缩的内核映像从flash 中搬移到SDRAM 中,再从SDRAM 运行。 前者需要利用Bootloader 提供的网络下载功能,直接将未压缩的映像文件下载到SDRAM 中运行,后者则首先要利用Bootloader 提供的flash 烧录工具进行烧录,使用时再用move 命令搬到SDRAM 中,然后再运行。 压缩格式的μClinux 内核映像文件都是由开头的一段自解压代码和后面的压缩数据部分组成,自解压类型的μClinux 内核映像文件存放在flash Memory 中,由Bootloader 加载到SDRAM 中的0x0c000000 地址处,然后运行它。 同样,内核映像文件也可以直接下载到SDRAM 运行。 μClinux 编译后在IMAGES 目录中生成三个文件,其中一个是image.rom,这是带自启动的压缩版,可烧入FLASH,运行时使用move 命令,将它搬移到SDRAM的0x0c000000 处运行,一个是image.ram,这是没压缩的,通过下载到SDRAM 的0x0c008000处后直接运行。
下面是μClinux 移植的基本过程。 EL-ARM-830 教学实验箱光盘中的μClinux-S3C44B0X.tar.gz 是已经移植好的压缩版本。 这里只是阐述基本改动部分的出处。
1)改动硬件配置
修改文件:
修改为适合S3C44B0X 的硬件配置。
2)改动压缩内核代码起始地址
修改文件:
修改内容:
说明:
ZTEXTADDR:自解压代码的起始地址。
ZRELADDR:内核解压后代码输出起始地址。
3)改动处理器配置选项
修改文件:
修改内容:
修改了存储器大小和起始地址的定义:
4)改动内核起始地址
修改文件:
TEXTADDR:内核的起始地址,通常取值:DRAM_BASE+0x8000 5)ROM 文件系统的定位修改
修改文件:
使用的是romfs_data 数组。
6)改动存储空间配置
修改文件:
说明:PHYS_OFFSET:RAM 第一个bank 的起始地址。
修改文件:
说明:这里,μClinux 使用了S3C44B0X 的内部定时器5,并利用定时器5 的中断来产生节拍。
8)定义二级异常中断矢量表的起始地址
修改文件:
说明:vectors_base()定义了二级异常中断矢量表的起始地址,这个地址与Bootloader 中的相对应。
这里针对ARMSYS 的硬件结构,要进行两处特殊的修改:
修改文件:
μClinux-S3C44B0X/linux-2.4.x/driver/net/8390.h(www.xing528.com)
修改内容:
#define ETH_ADDR_SFT 1
说明:访问RTL8019 内部寄存器地址的偏移量。
10)以太网设备基地址修改
修改文件:
μClinux-S3C44B0X/linux-2.4.x/driver/net/ne.c
修改内容:
说明:修改了以太网设备的基地址。
(5)μClinux 的内核、文件系统编译与烧写
1)编译μClinux
编译一份可以运行的μClinux,首先要对μClinux 进行配置。 一般是通过make menuconfig或者make xconfig 来实现的。 选择make menuconfig,为了编译最后得到的镜像文件,需要linux 的内核以及romfs。 对于S3C44B0X 的移植来说,romfs 是被编译到内核里面去的。 因此,在编译内核前需要一个romfs。 为了得到romfs 的image,又需要编译用户的应用程序。 而为了编译用户的应用程序,又需要编译C 运行库,这里用的C 运行库是μC-libc。
根据上面的分析,下面详细介绍编译μClinux 的步骤以及各编译命令的含义:
①make dep
这个仅仅是在第一次编译时需要,以后就不用了,为的是在编译时知道文件之间的依赖关系,在进行了多次编译后,make 会根据这个依赖关系来确定哪些文件需要重新编译、哪些文件可以跳过。
②make clean
该命令用于清除以前构造内核时生成的所有目标文件、模块文件和临时文件。
③make lib_only
编译μC-libc,以后编译用户程序时需要这个运行库。
④make user_only
编译用户的应用程序,包括初始化进程init 和用户交互的bash,以及集成了很多程序的busybox(这样对一个嵌入式系统来说,可以减少存放的空间,因为不同的程序共用了一套C运行库),还有一些服务,如boa(一个在嵌入式领域用得很多的Web 服务器)和telnetd(telnet服务器,可以通过网络来登录用户的μClinux 而不一定使用串口)。
⑤make romfs
在用户程序编译结束后,因为用到的是romfs(一种轻量的、只读的文件系统)作为μClinux 的根文件系统,所以首先需要将上一步编译的很多应用程序以μClinux 所需要的目录格式存放起来。 原来的程序是分散在user 目录下,例如现在可执行文件需要放到bin 目录、配置文件放在etc 目录下,这些事就是make romfs 所做的。 它会在μClinux 的目录下生成一个romfs 目录并且将user 目录下的文件以及vendors 目录下特定系统所需要的文件(用户的vendors 目录是vendors/Samsung/S3C44B0X)组织起来,以便下面生成romfs 的单个镜像所用。
⑥make image
它的作用有两个:一个是生成romfs 的镜像文件,另一个是生成Linux 的镜像。 因为原来的Linux 编译出来是elf 格式的,不能直接用于下载或者编译(不过那个文件也是需要的,因为如果需要,那个elf 格式的内核文件里面可以包含调试的信息)。 在这个时候由于还没有编译过Linux,因此,在执行这一步的时候会报错。 但是没有关系,因为在这里需要的仅仅是romfs的镜像,以便在下面编译Linux 内核时使用。
⑦make
有了romfs 的镜像就可以编译Linux 了。 因为romfs 是嵌入到linux 内核中去了,所以在编译Linux 内核时就要一个romfs.o 文件,这个文件是由上面的make image 生成的。
⑧make image
这里再一次make image 就是为了得到μClinux 的可执行文件的镜像了。 执行了这一步之后,就会在images 目录下找到三个文件:image. ram、image. rom 和romfs. img。 其中,image.ram 和image.rom 就是需要的镜像文件。
其中,image.ram 是直接下载到RAM 执行的文件。 如果还处于调试阶段,那么就没有必要将文件烧写到FLASH 里面,这时可以使用image.ram。
对于image.rom 来说,它是一个zImage 文件,也就是自解压的内核。 由于它使用了gzip将内核压缩过,所以可以减小文件的大小。 这个image 应该烧写到FLASH 的0x10000 的位置,而不能直接下载到RAM 并执行。
2)使用μClinux
如果是在SDRAM 里运行μClinux,假设开发板的FLASH 已经擦空,则:
①设置超级终端设置(波特率为115 200 Bd,数据位为“8”,停止位为“1”,无奇偶校验)。
②将实验软件\启动程序目录下的μClinux-bios.s19 用烧写电缆烧写到FLASH 里面去。
③烧写成功后,实验系统断电,拔下烧写电缆,将PC 的IP 地址改为192.168.0. × × ×,× × ×为除100 以外的0 ~255 的值,一般设为192.168.0.1,在PC 并口和实验箱的CPU 之间,连接串口交叉电缆,在PC 网口和实验箱的CPU 网口之间,连接网口交叉电缆。
④在超级终端中输入“backup”以备份BIOS 到高端,然后输入Y。
⑤在超级终端上,输入load 命令,回车,在PC 系统的DOS 命令行下,输入ping 192.168.0.100,检查PC 机是否和CPU 板已经ping 通,若ping 通,则将\实验软件\TFTP.exe 和boot.bin 以及刚刚生成的image.ram 三个文件拷贝到PC 系统的DOS 命令行默认的目录下,在PC机的命令行中首先输入:tftp-i 192.168.0.100 put boot.bin,然后回车。
⑥boot.bin 通过网线下载到SDRAM 中,然后在超级终端中输入命令: prog 0 c008000 3c,然后输入Y,然后将boot.bin 烧到FLASH 0 地址。
⑦再键入load 命令,然后在PC 机的命令行中输入:tftp-i 192.168.0.100 put image.ram,回车,image.ram 应该在几秒钟后传送到内存中。
⑧在超级终端中输入run,然后输入Y,就可以看到μClinux 运行,则烧写成功,如图9.21所示。
图9.21 μClinux 烧写成功示意图
如果是在FLASH 里固化μClinux,假设开发板的FLASH 已经擦空,则:
①设置超级终端设置(波特率为115 200 Bd,数据位为“8”,停止位为“1”,无奇偶校验)。
②将实验软件\启动程序目录下的μClinux-bios.s19 用烧写电缆烧写到FLASH 里面去。
③烧写成功后,实验系统断电,拔下烧写电缆,将PC 的IP 地址改为192.168.0. × × ×,× × ×为除100 以外的0 ~255 的值,一般设为192.168.0.1,在PC 并口和实验箱的CPU 之间,连接串口交叉电缆,在PC 网口和实验箱的CPU 网口之间,连接网口交叉电缆。
④在超级终端中输入“backup”以备份BIOS 到高端,然后输入Y,在超级终端上回车。
⑤在超级终端里,输入load 命令,回车,在PC 系统的DOS 命令行下,输入ping 192.168.0.100,检查PC 机是否和CPU 板已经ping 通,若ping 通,则将\实验软件\TFTP.exe 和boot.bin 以及刚刚生成的image.rom 三个文件拷贝到PC 系统的DOS 命令行默认的目录下,在PC机的命令行中首先输入:tftp-i 192.168.0.100 put boot.bin,然后回车。
⑥boot.bin 通过网线下载到SDRAM 中,然后在超级终端中输入命令: prog 0 c008000 3c,然后输入Y,将boot.bin 烧写到FLASH 0 地址。
⑦再键入load 命令,然后在PC 机的命令行中输入:tftp-i 192.168.0.100 put image.rom,注意是image.rom。
⑧在超级终端中输入prog 10000 c008000 × × ×,这样就将μClinux 烧写到FLASH 里面去了。
注意:10000 是image.rom 下载到FLASH 的起始地址,不能变;c008000 是image.rom 通过网口下载到SDRAM 的起始地址,也不能变, × × ×是image. rom 的大小,根据上一步超级终端的提示决定。
⑨当下次上电要运行μClinux 时,就可以在超级终端中输入:move 10000 c000000 100000,然后输入run c000000,再输入Y 就可以运行了。 启动后,将在超级终端里见图9.21的最终画面。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。