嵌 入 式 程 序 设 计
实 验 报 告
评 语:成绩
教 师:
年 月 日
班 级:
学 号:
姓 名:
地 点: EII-506
时 间: 2013年6月
实验一开发环境的搭建与配置
【实验目的】
熟悉嵌入式Linux开发平台。
掌握嵌入式Linux开发平台的开发环境搭建与配置。
了解minicom配置串口通信参数的过程。
了解嵌入式Linux的启动过程。
掌握程序交叉编译运行及调试的一般方法。
掌握网络文件系统NFS的配置方法。
掌握嵌入式系统内核的编译、文件系统的打包及镜像的下载方法。
【实验内容】
连接实验开发板与宿主机。
在虚拟机中的CentOS(宿主机)搭建开发环境。
在宿主机中配置minicom。
分析嵌入式Linux的启动过程。
在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,然后传输到目标机上运行。
在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,用gdbserver进行远程调试。
配置NFS并用NFS进行文件拷贝。
嵌入式系统内核编译与文件系统的打包。
内核文件镜像与文件系统镜像的下载(从宿主机下载到目标机)。
【实验步骤】
连接实验开发板,对虚拟机进行设置
工具链的配置
tftp的安装
进入minicom软件,配置串口通信参数
有关串口通信选项的含义:
"Filenames and paths":选择需要传输的文件和路径
"File transfer protocols":选择传输文件的通信协议
"Serial port setup":设置串口通信参数
"Save setup as dfl":将设置好的各项参数保存为dfl
"Save setup as":将设置好的各项参数保存为自定义的文件名
"Exit":退出返回到minicom设置好后的终端
"Exit from Minicom":从minicom命令中退出返回Linux终端
将光标移到"Serial port setup",按回车键会弹出串口通信参数的配置菜单。
实验开发板的启动
嵌入式Linux系统的启动过程分析
启动Bootloader
Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于PC机上的BIOS。在本系统中这段程序的起始地址为0Bootloader在完成初始化RAM、初始化串口、检测处理器类型、设置Linux启动参数后,开始调用Linux内核。本系统Linux内核镜像zImage放在Flash中,Bootloader首先把它拷贝到RAM中,然后跳转到RAM中对zImage进行解压缩。解压缩后启动内核。
加载内核
内核启动后先进行一系列与内核相关的初始化,然后调用第一个用户进程——init进程并等待用户进程的执行。具体的过程如下:
进行与体系结构相关的第一个初始化工作,首先通过检测出来的处理器类型进行处理器内核的初始化,然后进行内存结构的初始化,最后开启MMU,创建内核页表,映射所有的物理内存和IO空间;
创建异常向量表和初始化中断处理函数;
初始化系统核心进程调度器和时钟中断处理机制;
初始化串口控制台,在minicom中看到的系统启动过程中的信息都是通过串口输出的;
创建和初始化系统cache,为各种内存调用机制提供缓存,包括动态内存分配、虚拟文件系统及页缓存;
初始化内存管理,检测内存大小及被内核占用的内存情况;
初始化系统的进程间通信机制(IPC);
创建init进程,结束内核的启动。
执行init进程。
内核被加载后,第一个运行的程序便是/sbin/init,init进程是所有进程的发起者和控制者,它的进程号是1。init进程首先读取/etc/inittab文件,并依据此文件来进行初始化工作(首先进行一系列的硬件初始化,然后通过命令行传递过来的参数挂载根文件系统。最后执行一些其它的进程)。
init配置文件每行的基本格式为“id:runlevel_ignored:action:process”,其中某些部分可以为空。各部分的具体内容如下:
id:指定启动进程的控制终端,如果所启动的进程并不是可以交互的shell,应该会有个控制终端(在PC机上该字段表示配置行的惟一标识)。
runlevel_ignored:该字段是忽略掉的,配置inittab时空着它就行了(在PC机上该字段用来配置所启动进程适用的系统运行级别)。
执行/bin/login程序。
有些嵌入式系统在init进程执行完后会执行/bin/login。login