移植Linux到SAMSUNG S3C2410开发板

夙愿已清 提交于 2019-12-04 00:26:50
【S3C2410简介】 
S3C2410装备有SAMSUNG产ARM920T核、一体化16kB Cache/MMU能轻松奔跑Linux。
该板资源如下:
(1) CPU : ARM920T 工作频率为 200MHz 。 
(2) Flash : 16MB 
(3) SDRAM : 64MB SDRAM 
(4) UART : RS-232串行接口 
(5) 其他 : 14针ARM JTAG接口等。 



【交叉编译环境的建立】
基于 Linux 操作系统的应用开发环境一般是由目标系统硬件(开发板) 和宿主 PC 机所构成。
目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、
应用程序的开发和调试则需要通过宿主 PC 机来完成 (所以称为交叉编译) 。
双方之间一般通过串口、并口或以太网接口建立连接关系, 其结构图如下所示。

               

单独拿出一台 PC 机, 在该 PC 上安装桌面的 Linux操作系统(如 Red Hat Linux 9. 0),
可以采用默认的安装选项(注意要包含 ftp 服务), 这台 PC 作为 Linux 服务器, 
除管理员以外,一般不直接让其他人去操作。
将该 Linux 服务器接入局域网, 并新建一些合法用户,
以便其他的 PC 机 (在此将其称为工作站) 的合法用户
能访问到 Linux 服务器。而其他的 PC 机 (工作站) 仍然使
用 Windows 操作系统。
需要的软件工具包括 :
(1) ftp 客户端程序。
(2) Telnet 工具。
(3) 移植到某一特定 ARM 平台的 Linux 操作系统内核源码。
(4) GNU编译工具,可由相关网站下载。
在某工作站 PC 上安装 ftp 客户端程序和 Telnet 工具,

安装完毕后应该可以在该工作站PC和Linux服务器之间进行文件的传输,
并在工作站PC可以通过Telnet登陆服务器,可能需要暂时关闭防火墙。 






【Linux 服务器的安装】
将工作站 PC 上的 Linux 操作系统内核源码压缩包和 GNU 编译工具通过 ftp 传送到
Linux 服务器的某个目录(如合法的用户目录), 
然后在该目录下解压,并将 GNU 编译工具安装到默认的工作目录即可,
以上工作通过在工作站 PC 使用 Telnet 工具完成,而不需要在 Linux 服务器上进行。 
Linux 操作系统内核的编译一般有一个比较固定的步骤, 会根据 MakeFile 文件的不同而略有差异,
可参考相关文档,编译的工作在工作站 PC 使用 Telnet 工具完成。
按固定的步骤编译内核完成以后, 会在相应目录生成可执行的二进制文件, 
通过 ftp将该可执行的二进制文件传回工作站 PC, 
然后再通过ADS 或 SDT 下的烧写工具写入开发板的 Flash 即可。






【Bootloader 的架构和功能】
Bootloader 引导程序是嵌入式开发很重要的组成部分。
它是嵌入式系统上电后执行的第一个程序,并由它最终将操作系统启动起来并将控制权交给操作系统。
Bootloader 引导程序最基本的功能是对硬件系统的初始化和内核启动参数设置并启动内核。
Bootloader 的主要功能有 :
(1) 初始化 CPU 的主频、 SDRAM 、中断、串口等硬件 ;
(2) 启动 Linux 内核并提供一个 RAMDISK;
(3) 通过串口下载内核或 RAMDISK 到目标板上 ;
(4) 将修改过的内核或 RAMDISK 写入到 Flash 内 ;
(5) 为用户提供一个命令接口。

在嵌入式系统开发过程中,
Bootloader 还与主机通信,不断检测从主机传来的控制信息和数据信息,完成相应的操作。
Linux 运行在保护模式下, 但是当机器启动复位的时候却处于实模式下。
所以写 Bootloader 的工作也是在实模式之下的。
Bootloader 的实现除了依赖于 CPU 的体系机构,还依赖于目标板的设置,
本系统的 Bootloader 引导程序分为stage1 和 stage2 两个阶段。
依赖于CPU的体系机构的代码,比如设备初始化等,放在ARM汇编写的stage1中,
stage2用C语言来实现,可以实现复杂的功能,同时代码具有更好的可读性和可移植性。

§Bootloader Stage1 
①屏蔽所有的中断。为中断提供服务的通常是操作系统,
因此在执行 Bootloader 的过程中可以不响应任何中断。中断屏蔽通过写 CPU 的中断屏蔽寄存器来完成。
②设置 CPU 的时钟频率和速度。
③初始化 RAM 设置系统的内存控制器的功能寄存器和各内存库控制寄存器等。
④为加载 stage2 准备 RAM 空间。
⑤拷贝 stage2 到 RAM 中。
⑥跳转到 stage2 的入口点。

§Bootloader Stage2
①初始化本阶段要使用到的硬件设备,比如初始化至少一个串口以便 I/ O,初始化计时器等。
②检测系统的内存映射。
所谓内存映射就是指在整个4 GB物理地址空间中有哪些地址范围被分配用来寻址系统的 RAM 单元。
③加载内核映像和根文件系统从 Flash 读入到 Rom中,这里包括两个方面 :
a. 内核映像所占用的内存范围 ;
b. 根文件系统所占用的内存范围。
在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。
stage2 执行映像刚被拷贝到 RAM 空间时的系统内存布局如下图所示。

④设置内核的启动参数。
⑤调用内核。 Bootloader 调用 Linux 内核的方法是直接跳转到内核的第一条指令处。




【Linux 内核的构建和移植】
1) 设置软件开发环境。
为了和目标板进行通讯,必须要在主机上终端运行仿真程序 DNW。
建议在宿主机上安装 RED HAT Linux 9. 0版本。
以下以在 SHELL 模式下安装编译器和源代码为例:
首先以 ROOT 身份进入系统。把 RED HAT Linux
9. 0 的安装光盘放入光驱中,执行装载光驱命令 :
mount / dev/ cdrom . / mnt/ cdrom
如果系统不能识别. / mnt/ cdrom, 可以使用如下命令 (假设 cdrom 为/ dev/ had ),
则用 mount - t iso9660 / dev/ hdb / mnt 。
如果在安装 RED HAT Linux 9. 0 的时候已经默认安装了 CDROM,
以上命令不需执行, 直接进入 CDROM 所在目录。
mkdir / usr/ local/ arm
mount / dev/ cdrom . mnt/ cdrom
cd/
cp / mnt/ cdrom/ bin/ cross - 2 . 95 . 3 . tar . bz2 / usr/ local/ arm/
cp / mnt/ cdrom/ bin/ linux
- for s3c2410 . gz
tar zxvf linux - for s3c2410 . gz
cd / usr/ local/ arm/
tar - jxvf cross - 2 . 95 . 3 . tar . bz2
程序执行完后,Linux 源代码和编译环境都已建立起来了。
 
2) Linux 内核编译。
首先以 ROOT 身份进入系统。然后完成下列步骤,
就可以在 / linux/ arch/ arm/ boot/ 得到内核的映像文件
zimage 。
在 shell 命令下输入命令进行内核配置 :
make menuconfig
该命令执行之后生成文件. comfig它保存这个配置
信息,下一次再执行 ake menuconfig 的时候将生成新的.
comfig文件。
输入命令 :make dep
输入命令 :make clean
输入命令 :make zlamge
通过各个目录的Makefile进行,将会在各个目录下生成一系列目标文件,此时完成了对Linux的编译工作。

3 ) Linux应用程序。
Linux 内核的编译、修改、移植实际上与上层的应用程序,
如命令解释器 shell、登陆程序login相关,这些程序应根据需要重新定制。 
利用终端仿真程序 DNW 和 Bootloader 引导程序通过串口就可以把 Linux 内核移植到目标系统板。 
移植完成后,Linux 就可以在目标系统板上运行了。 




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!