嵌入式系统移植流程

1、环境说明

  虚拟机上将Linux系统移植到S3C2440的TQ2440开发板上,软件平台为Ubuntu14.0下的交叉编译环境。

2、任务流程

1、虚拟机安装

2、虚拟机上安装ubuntu系统

3、建立交叉编译环境

4、Uboot移植

5、操作系统内核移植

6、文件系统制做

3、移植准备

       首先在电脑上下载VMware,根据提示直接安装,然后下载Ubuntu的镜像文件,在VMware中新建虚拟机,安装程序光盘中映像文件(iso),根据提示一步步安装,配置空间大小,网络连接,I/0控制器类型等等,最后就可以在VMware环境中运行Ubuntu系统。

       随后,在Ubuntu系统中安装交叉编译环境,用天嵌给的交叉编译文件,在Ubuntu系统下解压文件,配置环境,显示下图表示交叉编译环境搭建完成。

 

 

图1、交叉编译环境搭建完成

3、uboot移植

3.1、Bootloader简介

       嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。Uboot是就是一种功能强大的bootloader。

3.2、Uboot移植流程

(1) 在board下新建一个目录embedsky,将sansung/smdk2410目录复制到embedsky目录下,并将文件夹改成smdk2440。

(2) 将smdk2440/smdk2410.c改名为smdk2440.c。

(3) 在include/configs目录下,将smdk2410.h复制为smdk2440.h。

(4) 修改顶层的makefile文件在在1880行加入自己的处理器信息。

(5) 修改board/embedsky/smdk2440下的Makefile文件,将COBJS:=smdk2410.o flash.o改为smdk2440.olash.o。

(6) 修改/cpu/arm920t/start.S文件,使u-boot可以从NandFlash启动。

(7) 在board/smdk2440/目录下加入NandFlash读取函数。

(8) 修改board/smdk2440/lowlevel-init.S文件。

(9) 修改include/configs/smdk2440.h如下。

上述修改完后,就直接make,得到u-boot.bin烧到Nand Flash即可。

图2、uboot.bin文件生成

4、内核移植

4.1、内核移植简介

Linux内核高效稳定,易于定制,具有完善的网络通信和文件管理机制,优秀的开发工具等优点,使得Linux成为计算机领域,特别是嵌入式系统领域里的新宠.在诸如工业控制、PDA、智能手机等领域都有一定程度的应用.然而,在嵌入式领域中,硬件的体系结构多种多样,种类繁多。

4.2、Kernel移植

       Linux kernel的配置体系由三部分构成,分别是:  

Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义Linux kernel的编译规则,依据.config中定义的CONFIG_xxxx=xxxxx确定xxx以何种方式编译进kernel。

Kconfig:配置选项的文件,各个子目录下的Kconfig定义了子目录的功能模块的配置选项。

配置工具:配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于Ncurses 图形界面以及基于Xwindows图形界面的用户配置界面,各自对应于make config、make menuconfig和make xconfig)。通过对配置工具选项进行配置后生成配置文件.config,.config文件决定Kconfig中的配置项是否编译进入kernel。

 

图3、Kconfig配置项

编译配置好的内核,即可生成内核镜像文件zImage。

5、文件系统

5.1、嵌入式文件系统

       嵌入式文件系统(Embedded file system)是指嵌入式系统中实现文件存取、管理等功能的模块,提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。在嵌入式系统中,应用程序通常需要对信息进行存取操作,当任务运行的时候,任务可以在其任务堆栈中存放少量信息,但是存储量要受到内存空间的严格限制,而且在内存空间中的信息随着任务的退出而消失,不适于存放要长期保存的信息。

“在Linux系统中一切皆是文件”这句话是我们学习Linux系统的时候常常听到的一句话。虽然有些夸张,但是它揭示了文件系统对于Linux系统的重要性;实际上文件系统对于所有的操作系统都很重要,因为它们把大部分的硬件设备和软件数据以文件的形式进行管理。

5.2、文件系统制作

       制作文件系统,首先需要用busybox编译出文件系统所需的应用程序,然后再做文件系统。先获取BusyBox源码、解压、修改并配置BusyBox。配置过程先修改makefile文件中编译器,使用arm-Linux,然后make menuconfig进入配置单,配置完成编译安装BusyBox。完成编译后会生成“bin”、“sbin”、“usr”目录和“linuxrc”。将其放入自己新建的一个文件目录中,然后新建“dev”、“etc”、“home”、“lib”、“mnt”、“opt”、“proc”、“root”、“sddisk”、“sys”、“tmp”、“udisk”、“var”、和“web”目录,同时在原有的“usr”目录下面新建一个“lib”和“share”目录。然后在文件中添加内容。

 

图4、BusyBox配置单

       然后使用制作yaffs文件系统的软件,它做出的yaffs文件系统格式的镜像就可以使用了,操作指令#mkyaffsimage_2 文件名 镜像文件名。其中mayaffsimage_2软件在交叉编译中就提供了,安装交叉编译器同时也安装了它。

posted @ 2019-06-27 11:55  小小白爱学习~  阅读(3707)  评论(0编辑  收藏  举报